- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用GNURadio的gr_modtool工具来编写C模块
利用GNU Radio 的gr_modtool 工具来编写C++模块
GNU Radio 是一款免费的软件无线电信号模块和系统开发工具,支持python 和C++两种语言
编程。在GNU Radio 中虽然提供了近百种常用的功能模块(blocks) ,但是在我们自己的系统设计
中,需要不同的模块完成特定的功能。所以,有些实现特定功能的模块就需要我们自己来编写,
这样既可以很好地完成系统所需的功能又可以更深入了解GNU Radio 的工作原理。本文主要介绍
如何使用GNU Radio 中的gr_modtool 工具来编写一个C++源代码的模块,利用gr_modtool 是GNU
Radio 自带的一个工具,来它新建模块可以免去繁重的编程任务而只需专注于信号处理部分的代
码。
1,首先按快捷键(Ctrl+Alt+T )打开命令终端,然后在里面输入命令:gr_modtool newmod howto,
意思是在当前工作目录下新建一个工程,工程名字是howto。之后,打开home 目录可以看到新
建的工程名:gr-howto 。(另外,关于gr_modtool 的更多命令可以在终端中键入:gr_modtool 查
看,里面有对各种命令的详细介绍。)
2,打开刚建好的工程。输入:cd gr-howto 。
3,给你的模块取个名字。需要注意的是新建模块名最后能体现该模块所要实现的功能,这样可
以养成一个好的习惯便于项目的扩展。 例如需要新建一个所有采样点都加上一个常数的模块,
那么这个模块你可像这样命名 (add_const_f )。让人一看便明白这是一个输入数据加上一个浮点
型常数的模块。因此,这步应输入命令:gr_modtool add add_const_f .
4 ,选择端口类型: sink 是只有输入没有输出的(比如示波器,扬声器等);source 只有输
出没有输入(比如信号发生器,usrp 信源等);sync 有输入也有输出,输入输出采样关系是1:1
(至于具体的输入输出个数是在程序中确定的);decimator 有输入也有输出,输入输出采样关
系是10:1 (至于具体的输入输出个数是在程序中确定的);interpolator 输入也有输出,输入输
出关系是10:1的内插(至于具体的输入输出个数是在程序中确定的)。上面的例子很显然要选择
sync 类型的端口类型。
5,编写工程的语言选择:cpp 。
6,输入有效的元素清单,或默认的参数,这里上面的例子应该输入: float c 。
7,Add python QA code ? [Y/N] 选择:Y ;因为 我们要直接用它的模块。
Add C++ QA code ? [Y/N] 选择:N 。因为我们要自己来编写这部分的代码。
8 ,到这里一些基本准备工作已经完了,在gr-howto 文件夹下已经生成了一些待修改的文件。离
开命令终端,打开gr-howto 工程下的lib 文件夹,找到里面前两个文档(如下图所示)进行编写。
下面介绍下如何修改lib 下的C++源文件.cc 和头文件.h。首先,打开add_const_f_impl.h 文档,
在这个类的私有成员下面加上一条定义变量语句:float d_c (如下图所示),这样这个例子中的
头文件间便修改好了其它不用管,最后保存关闭。
然后,打开 add_const_f_impl.cc 文档, 需要对两部分进行修改。第一部分,定义输入端口数
和端口的数据类型,下图中的红圈代码表示:输入输出的端口数最大最小都为1,数据类型为浮
点型,d_c (c )表示把接收的数据保存下来。第二部分,也是最核心的部分,为信号处理代码。
如下图所示,从图中可以看到work 函数中有3个形参,其中noutput_items 表示模块最大能处理
的采样点数,后面两个表示两组数组。下面两行代码表示用const 指针定义了两个变量并赋给其
首地址,尾部中括号中的数字表示模块的端口数。信号处理部分的代码很简单但是整个代码的核
心,其表示:每一个输出的采样点数等于相应的输入点数加上一个常数。到这里文档修改完毕,
最后保存关闭文档。
9 ,完成上述步骤后,回到命令终端,新建一个
文档评论(0)