利用GNU Radio的gr_modtool工具来编写C++模块

个人学习,参考网址https://wenku.baidu.com/view/a1824c3830126edb6f1aff00bed5b9f3f90f72c5.html

学习使用GNU Radio和USRP的过程中,除了使用GNU Radio中自带的block之外,用到了github上的自定义的block,对于这些block的源码的编程逻辑不是很明白,于是开始自学GNU Radio中一些简单的自定义模块编写,以便更好的理解。

Step1  新建工程

按快捷键(Ctrl+Alt+T)打开命令终端,输入命令:gr_modtool newmod howto。意思是在当前工作目录下新建一个名为howto的工程,之后打开home目录就可以看到新建的工程:howto。(关于gr_modtool的更多命令可以在终端键入gr_modtool来查看,里边有对各种命令的详细介绍)

利用GNU Radio的gr_modtool工具来编写C++模块_第1张图片

Step2  编写代码

  1. 在终端输入 cd gr-howto,打开刚建好的工程。

  2. 给自定义的模块取个名字,命名时要注意命名规范,要能够体现出该模块要实现的功能。这步输入gr_modtool add add_const_f

  3. 选择端口类型。sink:只有输入没有输出(比如示波器,扬声器等);source:只有输出没有输入(比如信号发生器,usrp信源等);sync:有输入也有输出,输入输出采样关系是1:1,具体的可以在程序中定义;decimator:有输入也有输出,输入输出采样比10:1(具体程序中定义);interpolator:有输入也有输出,输入输出是10:1的内插,具体程序中定义。上面的例子选择sync类型的端口类型。

  4. 编写工程的语言选择:cpp

  5. 输入有效的元素清单,或者默认的参数,这里的例子应该是float c

  6. Add python QA code ?[Y/N] 选择Y。我们要直接用它的模块

  7. Add C++ QA code ?[Y/N] 选择N。我们要自己编写这部分的代码

利用GNU Radio的gr_modtool工具来编写C++模块_第2张图片

     8. 基本工作完成,在gr-howto文件夹下已经生成了一些待修改的文件,现在离开命令终端,打开gr-howto下的lib文件夹,找到里边的前两个文档add_const_f_impl.ccadd_const_f_impl.h

利用GNU Radio的gr_modtool工具来编写C++模块_第3张图片

    下面介绍如何修改lib下的c++源文件和头文件.h

    9. 头文件.h文件的修改。打开.h文件,在这个类里的私有成员下边家一条定义变量的语句: float d_c。添加成功后保存关闭。

   

利用GNU Radio的gr_modtool工具来编写C++模块_第4张图片

    10.修改c++文件。第一部分,定义输入端口数和端口的数据类型,输入输出端口数最大最小都是1,数据类型为浮点型,d_c(c)表示把接收到的数据保存下来。第二部分,也是最核心的部分,为信号呢处理代码。如下图所示。work函数有两个形参,其中noutputs_items表示模块最大能处理的采样点数,后边两个表示两组数组。下面两行代码表示用const指针定义了两个变量并赋给其首地址,尾部的括号中的数字表示模块的端口数。信号处理部分的代码表示:每一个输出的采样点数等于相应的采样输入加上一个常数。修改完毕,保存关闭。

利用GNU Radio的gr_modtool工具来编写C++模块_第5张图片

    11.完成上述步骤后,回到命令终端,新建一个grc中的视图模块:gr_modtool makexml add_const_f

    12. 是否重新写入到已存在的文件中, overwrite existing GRC file? [Y/N] Y

    13. 对这个新建的工程进行安装,步骤如下

  • mkdir build

  • cd build

  • cmake ../

  • sudo make install

  • sudo ldconfig

Step3  测试并使用

在终端输入gnuradio-companion打开gnuradio使用界面,就可以看到我们新建的模块了

利用GNU Radio的gr_modtool工具来编写C++模块_第6张图片

使用新建的模块,这里还用到信号发生器(signal source),限速器(throttle),示波器(WX GUI scope sink)

利用GNU Radio的gr_modtool工具来编写C++模块_第7张图片

这里需要注意的是,左上角的options,右键选择properties,Generate Options选择WX GUI,点击add_const_f模块,右键选择属性,C设置为1然后就可以运行啦。

利用GNU Radio的gr_modtool工具来编写C++模块_第8张图片

 

你可能感兴趣的:(利用GNU Radio的gr_modtool工具来编写C++模块)