(三)GNURadio3.7 自定义模块——C++
一、创建一个自定义树二、使用C++写模块square_ff1、使用gr_modtool添加一个新模块2、编写测试代码3、编写lib\文件三、使用CMake1、CMake构建2、CMake测试四、GRC绑定五、安装模块六、在GNURadio中使用新模块七、参考文献本文是使用官方教程中的模块自定义方法进行自定义,使用的GNURadio版本为3.7,3.9版本一样可以使用,但要注意文件结构:3.7以下版本使用的是xml,3.8以上的版本使用的是yml
在本文中将gr_modtool newmod命令创建的文件夹称为树,紧接着在树里面创建的叫模块。这与官方文档的解释是不同的。
本文定义的模块功能为实现平方
一、创建一个自定义树
使用gr_modtool命令创建howto树
创建成功之后,可以在主目录中找到gr-howto文件夹:
通过ls命令可以看到howto树的结构
二、使用C++写模块square_ff
1、使用gr_modtool添加一个新模块
生成了5个文件:square_ff_impl.h、、square_ff.h、qa_square_ff.py、howto_square_ff.xml。
2、编写测试代码
打开python/qa_square_ff.py,写入以下内容:修改python/CMakeLists.txt,使得以上修改的测试生效
注1:这里的变换基本上是最后一行调用测试qa文件的变化,若编写了新的qa文件,一般会在最后一行显示,若没有,则需要自行添加,添加的代码格式与最后一行一致。
注2:在3.9版本中,还需要去掉swig一行。
3、编写lib\文件
gr-modtool创建模块时已经创建的文件中,只需要把<++>改为指定内容即可。
编写输入输出结构定义
编写输入与输出的对应关系
编写square_ff要实现的功能
三、使用CMake
1、CMake构建
cmake …/写入build目录下make进行下一步构建
2、CMake测试
在构建完成后,可以在安装前先通过测试,看看之前的编写是否成功,若有报错还可以进行错误的更正。
注:如若这里报错,可以通过ctest -V命令进行测试(如:ctest -V -R square)。
四、GRC绑定
编写xml文件
五、安装模块
使用CMake安装已经编写完成的模块
这里命令行较长,只放出最主要的。
最后再使用sudo ldconfig命令来重新加载库,到这里便完成了一个新模块的创建。
六、在GNURadio中使用新模块
打开GNURadio,新建如下流图:
输入0,1,2,3,4,5的向量组,将他们平方后输出。运行后结果如下:
可以看到输出端得到的是0,1,4,9,16,25。新模块实现了平方的功能。
七、参考文献
GNURadio:Tutorials
GNURadio:OutOfTreeModules
GNURadio:XML GRC
GNURadio:YAML GRC
关于Python的自定义模块法可参考:GNURadio:Embedded Python Block
知乎:GNURadio开发入门(作者楚友马)