GNU Radio创建Zadoff-Chu序列C++ OOT块


前言

本文实现在 GNU Radio 中创建 Zadoff-Chu 序列 C++ OOT 块,仅做代码调试记录。


一、ZC序列是什么?

参考我之前的博客:ZC序列理论学习及仿真

二、创建自定义的 C++ OOT 块

参考官方教程 Creating C++ OOT with gr-modtool 创建自定义的 OOT块

1、创建 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

在这里插入图片描述

2、创建 OOT 块

①、在 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...

相关配置如下图:
在这里插入图片描述

3、修改 C++ 文件

修改 gr-myModule/lib/ 目录下的 ZadoffChu_impl.ccZadoffChu_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

详细代码及配置文件文末自取

4、编译及安装 OOT 块

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 序列模块
在这里插入图片描述

1、grc 图

在这里插入图片描述

2、运行结果

①、时域图

请添加图片描述

②、时域幅值模图

请添加图片描述

③、IQ 曲线

请添加图片描述

四、其他

删除 OOT 块的命令为 gr_modtool rm 模块名
在这里插入图片描述

五、资源自取

文件内容如下:GNU Radio创建Zadoff-Chu序列C++ OOT块
在这里插入图片描述


我的qq:2442391036,欢迎交流!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

须尽欢~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值