前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GNU Radio创建Zadoff-Chu序列C++ OOT块

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

作者头像
Gnep@97
发布2024-04-15 08:41:12
1810
发布2024-04-15 08:41:12
举报
文章被收录于专栏:Gnep's_Technology_Blog

前言

本文实现在 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 模块:

代码语言:javascript
复制
gr_modtool newmod myModule 

创建目录 gr-customModule,其中包含 OOT 模块的所有骨架代码,但它还没有任何块。进入 gr-myModule 目录:

代码语言:javascript
复制
cd gr-myModule 

列出 OOT 模块中的所有文件和目录:

代码语言:javascript
复制
ls

2、创建 OOT 块

①、在 gr-myModule 目录下添加一个名为 Zadoff-Chu 的新块:

代码语言:javascript
复制
gr_modtool add ZadoffChu

将显示块的类型:

代码语言:javascript
复制
GNU Radio module name identified: myModule
('sink', 'source', 'sync', 'decimator', 'interpolator', 'general', 'tagged_stream', 'hier', 'noblock')

②、ZC 序列作为信号源输入模块,因此这里将模块类型设置为 source

代码语言:javascript
复制
Enter block type: source

③、使用 C++ 代码实现

代码语言:javascript
复制
Language (python/cpp): cpp
Language: C++
Block/code identifier: ZadoffChu

④、输入版权所有者的名称或组织:

代码语言:javascript
复制
Please specify the copyright holder: gnep

⑤、输入两个参数,分别是 ZC 序列的长度和根索引。 为了保证 ZC 序列的优良特性,应保证 ZC 序列的长度和根索引互质

代码语言:javascript
复制
Enter valid argument list, including default arguments: 
int zc_len=300, int root_index=11

⑥、选择是否需要 QA 代码:

代码语言:javascript
复制
Add Python QA code? [Y/n] n
Add C++ QA code? [Y/n] n

⑦、然后将创建或修改多个文件:

代码语言:javascript
复制
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 核心部分程序:

代码语言:javascript
复制
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 部分核心配置:

代码语言:javascript
复制
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 目录中:

代码语言:javascript
复制
cd gr-myModule

2、如果 build/ 目录已存在,请将其删除:

代码语言:javascript
复制
rm -rf build/

3、创建 build/ 目录

代码语言:javascript
复制
mkdir build

4、进入 build 目录

代码语言:javascript
复制
cd build/ 

5、运行 cmake 来构建 makefile

代码语言:javascript
复制
cmake ..

6、编译模块

代码语言:javascript
复制
make

7、安装模块

代码语言:javascript
复制
sudo make install

8、更新 myModule 库的链接

代码语言:javascript
复制
sudo ldconfig 

三、测试

打开 gnuradio-companion

代码语言:javascript
复制
gnuradio-companion

可以看到安装成功的 ZadoffChu 序列模块

1、grc 图

2、运行结果

①、时域图
②、时域幅值模图
③、IQ 曲线

四、其他

删除 OOT 块的命令为 gr_modtool rm 模块名

五、资源自取

文件内容如下:GNU Radio创建Zadoff-Chu序列C++ OOT块

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、ZC序列是什么?
  • 二、创建自定义的 C++ OOT 块
    • 1、创建 OOT 模块
      • 2、创建 OOT 块
        • 3、修改 C++ 文件
          • 4、编译及安装 OOT 块
          • 三、测试
            • 1、grc 图
              • 2、运行结果
                • ①、时域图
                • ②、时域幅值模图
                • ③、IQ 曲线
            • 四、其他
            • 五、资源自取
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档