本文实现在 GNU Radio 中创建 Zadoff-Chu 序列 C++ OOT 块,仅做代码调试记录。
参考我之前的博客:ZC序列理论学习及仿真
参考官方教程 Creating C++ OOT with gr-modtool 创建自定义的 OOT块
GNU Radio 附带 gr_modtool,这是一个用于创建树外 (OOT) 模块的软件工具。 OOT 模块可以被视为自定义 GNU Radio 块的集合。使用 gr_modtool 创建一个名为 myModule 的 OOT 模块:
gr_modtool newmod myModule
创建目录 gr-customModule,其中包含 OOT 模块的所有骨架代码,但它还没有任何块。进入 gr-myModule 目录:
cd gr-myModule
列出 OOT 模块中的所有文件和目录:
ls
①、在 gr-myModule 目录下添加一个名为 Zadoff-Chu 的新块:
gr_modtool add ZadoffChu
将显示块的类型:
GNU Radio module name identified: myModule
('sink', 'source', 'sync', 'decimator', 'interpolator', 'general', 'tagged_stream', 'hier', 'noblock')
②、ZC 序列作为信号源输入模块,因此这里将模块类型设置为 source
Enter block type: source
③、使用 C++ 代码实现
Language (python/cpp): cpp
Language: C++
Block/code identifier: ZadoffChu
④、输入版权所有者的名称或组织:
Please specify the copyright holder: gnep
⑤、输入两个参数,分别是 ZC 序列的长度和根索引。
为了保证 ZC 序列的优良特性,应保证 ZC 序列的长度和根索引互质
Enter valid argument list, including default arguments:
int zc_len=300, int root_index=11
⑥、选择是否需要 QA 代码:
Add Python QA code? [Y/n] n
Add C++ QA code? [Y/n] n
⑦、然后将创建或修改多个文件:
Adding file 'lib/ZadoffChu_impl.h'...
Adding file 'lib/ZadoffChu_impl.cc'...
Adding file 'include/myModule/ZadoffChu.h'...
Editing swig/myModule_swig.i...
Adding file 'grc/myModule_ZadoffChu.block.yml'...
Editing grc/CMakeLists.txt...
相关配置如下图:
修改 gr-myModule/lib/ 目录下的 ZadoffChu_impl.cc
和 ZadoffChu_impl.h
文件和 grc/myModule_ZadoffChu.block.yml
目录下的配置文件
ZadoffChu_impl.cc
核心部分程序:
float arg;
if (_zc_len % 2 == 0) { // N is odd
arg = -1 * pi * _root_index * n * n / _zc_len;
} else { // N is even
arg = -1 * pi * _root_index * n * (n + 1) / _zc_len;
}
grc/myModule_ZadoffChu.block.yml
部分核心配置:
parameters:
- id: zc_len
label: zc length
dtype: int
default: 300
- id: root_index
label: root index
dtype: int
default: 11
详细代码及配置文件文末自取
1、该块需要编译和安装,确保目前位于 gr-myModule 目录中:
cd gr-myModule
2、如果 build/ 目录已存在,请将其删除:
rm -rf build/
3、创建 build/ 目录
mkdir build
4、进入 build 目录
cd build/
5、运行 cmake 来构建 makefile
cmake ..
6、编译模块
make
7、安装模块
sudo make install
8、更新 myModule 库的链接
sudo ldconfig
打开 gnuradio-companion
gnuradio-companion
可以看到安装成功的 ZadoffChu 序列模块
删除 OOT 块的命令为 gr_modtool rm 模块名