手把手教你如何编写gnuradio信号处理模块

合集下载

GNU Radio python入门

GNU Radio python入门

GNU Radio入门目录信号源 (5)1.正弦信源和常量信源 (5)2.噪声源 (5)3.空信源 (5)4.矢量信源 (5)5.文件信源 (6)6.音频信源 (6)RP信源 (6)信宿 (6)1.空信宿 (6)2.矢量信宿 (6)3.文件信宿 (7)4.音频信宿 (7)RP信宿 (7)简单运算 (7)添加常量 (7)加法器 (7)减法器 (7)数乘 (8)乘法器 (8)除法器 (8)log函数 (8)复数型的转换 (8)浮点类型的转换 (8)滤波器 (9)1.FIR设计器 (9)2.低通滤波器 (9)3.高通滤波器 (9)4.带通滤波器 (9)5.带阻滤波器 (9)6.希尔伯特滤波器 (9)7.升余弦滤波器 (9)8.高斯滤波器 (10)9.FIFIR抽取滤波器 (10)10. FIR插值滤波器 (10)11.带有FIR抽取滤波器的DDC(数字下变频器) (11)12. 希尔伯特变换滤波器 (11)13 .延时组合滤波器 (11)14.IIR滤波器 (11)15.单极IIR滤波器 (12)FFT (12)FM调制与解调 (12)数控振荡器 (12)数字传输block (13)如何编写C++ blocks (13)利用模板 (13)命名规则 (13)导入所需模块定义初始化函数定义输入输出接口gr.io_signature(min, max, size):min 最小的连接端口数,max 最大的连接端口数,一般模块都是min,max都是一样的,但也可以设计不一样的,这时候就是模块有些端口可以连接,也可以不连接先是定义输入接口,然后是定义输出接口,如果模块不存在输入接口,如source模块,就可以将输入端口的签名写成gr.io_signature(0, 0, 0),同理对于不存在输出的sink 模块也可以将输出端口的签名写成gr.io_signature(0, 0, 0)连接内部模块第一行几乎都是#!/usr/bin/env python 如果将这一行放在脚本的开始处并且给此文件一个可执行模式,就可以直接执行Python脚本。

基于GNURADIO的AM和FM信号解调软件开发

基于GNURADIO的AM和FM信号解调软件开发
本课题的目标是根据GnuRadio的规范,编写一个AM和FM信号解调模块,能够用MFC程序调用这个模块执行指定频点信号的解调。
课题涉及的技术:
1)GnuRadio框架;2)MFC编程;3)Python编程;







1.了解如何编写MFC程序;
2.理解如何编写GnuRadio信号处理模块;
3.了解如何编写Python程序;
4.开发一个基于GnuRadio的AM和FM信号解调模块,并能够使用MFC程序调用这个模块。
5.查找相关文献
6.论文写作
以上内容由指导教师填写
学院
审核
年月日
本科毕业论文(设计)任务书
题目
基于GNURADIO的AM和FM信号解调软件开发
题目
来源
□科研项目□生产实践
■自选题目□其他
题目
类型
□理论研究□科学ห้องสมุดไป่ตู้验
■设计开发□其他







开源软件无线电GNU Radio是免费的软件开发工具套件。它提供信号运行和处理模块,用它可以在易制作的低成本的射频(RF)硬件和通用微处理器上实现软件定义无线电。这个套件广泛用于业余爱好者,学术机构和商业机构用来研究和构建无线通信系统。

基于GNURADIO的无线电信号监测模块开发

基于GNURADIO的无线电信号监测模块开发







1.了解如何使用Libboost C++库编写跨平台C++程序;
2.理解如何编写GnuRadio信号处理模块;
3.了解如何编写Python程序;
4.开发一个GnuRadio无线电信号检测模块,能够使用Python语言调用这个模块。
5.查找相关文献
6.论文写作
以上内容由指导教师填写
学院
审核
年月日
本科毕业论文(设计)任务书
题目
基于GNURADIO的无线电信号监测模块开发
题目Leabharlann 来源□科研项目□生产实践■自选题目□其他
题目
类型
□理论研究□科学实验
■设计开发□其他







开源软件无线电GNU Radio是免费的软件开发工具套件。它提供信号运行和处理模块,用它可以在易制作的低成本的射频(RF)硬件和通用微处理器上实现软件定义无线电。这个套件广泛用于业余爱好者,学术机构和商业机构用来研究和构建无线通信系统。
本课题的目标是根据GnuRadio的规范,编写一个C++信号能量检测模块,插入到GnuRadio系统中,能够使用Python语言调用这个模块执行无线电信号参数检测功能。信号参数包括:频点、带宽、电平等。
课题涉及的技术:
1)GnuRadio框架;2)Libboost C++编程接口;3)Python编程;

GNU radio 和USRP 学习手册

GNU radio 和USRP 学习手册
GNU Radio 是硬件独立的。也就是说除了我们熟悉的 USRP 以外, 还有其他一些硬件可以用 GNU Radio:比如说一种 cable modem tuner (型号 mc4020,用来接收 FM 广播);另外还有一些业余无线电设备 也用 GNU Radio。
USRP(Universal Software Radio Peripheral)——通用软件无 线电外设,由 Ettus 等人设计,网站:/ 。完 整的 USRP 一般有母板与用户所需功能相对应的子板组成,如图 1.2 的 USRP N210 母板和子板 SBX。其工作原理如图 1.3 所示,如下
关于如何使用 PYTHON 对信号流程(flow graph)进行灵活控制: 暂停,自动启动等,可以在 /redmine/projects/gnuradio/wiki/Tutorial sWritePythonApplications 找到相关的指导说明。
1.3 Gnu radio 的硬件架构
型设备(prototype)。比如做一个支持多种制式的家庭网关,因 为所有
的东西都是“软”的,所以开发起来非常快,出现问题的时候也
容易修改。 用来做高校里的教学用实验平台。比如做通信原理实验,现在大
部分实验都是用Matlab 仿真来做的,当有了GNU Radio,你就可 以看到真正的信号星座图,频率漂移等现象。而且它可以是一个 远程的平台,供很多学生同时使用。 业余无线电爱好者,他们用GNU Radio 来搭建自己的电台。我猜 想,它可以让你同时在多个频道上呼叫。不过我不知道这是否违 反无线电使用规定。 黑客!这是用户中很大的一个群体。特别是OpenBTS,也就是 GNURadio 上的GSM 基站开发出来之后,加上GSM 加密的破解算法, 这吸引了很多对GSM 网络感兴趣的人。当然,相反的,反黑客的 人,我们的无线电监控部门,军方的实验室,也对此很有兴趣。

benchmark例程详解(不断更新中)GNURadio入门

benchmark例程详解(不断更新中)GNURadio入门

benchmark例程详解(不断更新中)GNURadio⼊门 Benchmar例程详解错误更正:错误更正⼀ 3)原⽂:Benchmark_tx 和 benchmark_rx 可以分别在两台电脑加两台USRP运⾏,也可以⽤⼀台电脑开两个终端同时运⾏,此时需要处理能⼒较强的电脑,建议可以配置较低的bit速率和较⼩的SAMPLES_PER_SYMBOL值,从⽽能够减⼩计算机的运算量。

改正:经过实际测试,发现⽬前的benchmark版本还⽆法实现⼀台电脑加⼀套usrp板⼦的收发程序。

然⽽当我⾃⼰写了简单的测试程序,采⽤⼀台电脑开和⼀套USRP设备,可以成功的发送和接收正弦波形,所以我估计只要适当修改程序,应该还是可以实现benchmark_rx 和benchmark_tx 单机实现的。

更新说明4⽉6⽇增加内容⼆.2 2) receive_path.py 3)usrp_options.py 4)self.packet_receiver4⽉7⽇增加内容继续完成⼆.2 4)self.packet_receiver4⽉10⽇增加内容⼆.2 5)demodulators4⽉20⽇增加内容三、benchmark_tx详解 1、模块连接关系图 2、代码详解1)benchmark_tx.py 程序 2)send_pkt 3) gr.message_source还在出差中,时间⽐较紧张,上⽹也不⽅便,所以更新的慢了些。

5⽉1⽇增加内容三 1、4)transmit_path.py从论坛⾥⾯⼤家关⼼的问题来看,benchmark的关注度⼀直⽐较⾼,然⽽确实也缺乏系统的介绍,从今天开始,我准备逐渐的将benchmark 例程序给出详细的注释,以便初学者能够迅速理解。

⼏点说明1)版本问题。

⼤家所安装的gnuradio版本都不尽相同,另外由于我的⼀些应⽤都是基于gnuradio3.2.1开发的,所以⼀直没有安装新的gnuradio版本,我也简单的看了⼀下新版本的benchmark相关例程,除了封装模块有些变化,核⼼模块没有本质区别,所以我准备介绍gnuradio3.2.1中gnuradio-examples/python/digital中的例程,不同的地⽅我也会给出适当的解释,为了明确所解读的源码,我将3.2.1的digtial ⽂件上传上来,便于⼤家⽐较分析 digital.zip(67 K) 下载次数:1272)阐述⽅法,如果要每⼀条程序都解释,⾸先时间花费很⼤,⽽且也不利于⼤家理清思路,所以我⾸先给出模块的连接关系,然后以模块为牵引,⼀步⼀步的介绍python源⽂件,有些细节地⽅,如果我漏掉了⼤家有需要,⼤家可以提出来,不能保证每⼀点我都能解释,但是尽量去查阅资料。

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

利用GNU Radio的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的内插(至于具体的输入输出个数是在程序中确定的)。

编译、编写自己的信号处理模块

编译、编写自己的信号处理模块

编译、编写自己的信号处理模块珠海:叶少聪我们在编写USRP模块的时候,一般都是使用GNU RADIO模板,把模板修改一个名字,然后在函数中编写自己的程序,这样就可以独立运行了,但是目前的GNU RADIO模板是3.3.0版本,这个版本增加了CppUnit测试代码,目录结构也跟以往不太一样,刚开始的时候,修改还真有困难,今天做了一个小实验,记录了这次使用模板的全过程:解压3.3版本的代码到目录中,并将目录改成自己需要的名称linux-3a23:/home/shaocong_ye/project # gzip -c gr-howto-write-a-block-3.3.0.tar.gzlinux-3a23:/home/shaocong_ye/project # tar -vxf gr-howto-write-a-block-3.3.0.tarlinux-3a23:/home/shaocong_ye/project # mv gr-howto-write-a-block-3.3.0 mathbaselinux-3a23:/home/shaocong_ye/project # cd mathbase然后删除多余的文件linux-3a23:/home/shaocong_ye/project/mathbase # rm lib/howto_square2_ff.hlinux-3a23:/home/shaocong_ye/project/mathbase # rm lib/howto_square2_linux-3a23:/home/shaocong_ye/project/mathbase # rm swig/howto_square2_ff.i再把文件名改成自己需要的linux-3a23:/home/shaocong_ye/project/mathbase # mv lib/qa_howto.h lib/qa_mathbase.h linux-3a23:/home/shaocong_ye/project/mathbase # mv lib/qa_howto_square_ff.h lib/qa_mathbase_sqrt_ff.hlinux-3a23:/home/shaocong_ye/project/mathbase # mv lib/qa_howto_square_lib/qa_mathbase_sqrt_linux-3a23:/home/shaocong_ye/project/mathbase # mv lib/qa_ lib/qa_ linux-3a23:/home/shaocong_ye/project/mathbase # mv lib/howto_square_ff.h lib/mathbase_sqrt_ff.hlinux-3a23:/home/shaocong_ye/project/mathbase # mv lib/howto_square_ lib/mathbase_sqrt_linux-3a23:/home/shaocong_ye/project/mathbase # mv grc/howto_square_ff.xml grc/mathbase_sqrt_ff.xmllinux-3a23:/home/shaocong_ye/project/mathbase # mv apps/howto_square.grc apps/mathbase_sqrt.grclinux-3a23:/home/shaocong_ye/project/mathbase # mv apps/howto_square.py apps/mathbase_sqrt.pylinux-3a23:/home/shaocong_ye/project/mathbase # mv swig/howto.i swig/mathbase.ilinux-3a23:/home/shaocong_ye/project/mathbase # mv swig/howto_square_ff.i swig/mathbase_sqrt_ff.ilinux-3a23:/home/shaocong_ye/project/mathbase # mv python/qa_howto.py python/qa_mathbase.py查找到有square2字符串的文件,删除这些行(因为这个与我们的目标代码无关,如果有关,就需要留下)find . -print | xargs grep "square2"根据上面操作,查找到的文件,删除与square2有关的的行./grc/Makefile.am: howto_square2_ff.xml./grc/Makefile.in: howto_square2_ff.xml./lib/mathbase_sqrt_ff.h: * \sa howto_square2_ff for a version that subclasses gr_sync_block../lib/Makefile.am: howto_square2_ff.h./lib/Makefile.am: howto_square2_./lib/Makefile.am: qa_howto_square2_./lib/Makefile.am: qa_howto_square2_ff.h./lib/qa_:#include <qa_howto_square2_ff.h>./lib/qa_: s->addTest(qa_howto_square2_ff::suite());./lib/Makefile.in: qa_howto_square2_ff.lo./lib/Makefile.in: howto_square2_ff.lo./lib/Makefile.in: howto_square2_ff.h./lib/Makefile.in: howto_square2_./lib/Makefile.in: qa_howto_square2_./lib/Makefile.in: qa_howto_square2_ff.h./lib/Makefile.in:@AMDEP_TRUE@@am__include@@am__quote@./$(DEPDIR)/howto_square2_ff.Plo@am__quote@./lib/Makefile.in:@AMDEP_TRUE@@am__include@@am__quote@./$(DEPDIR)/qa_howto_square2_ff.Plo@am__quote@./swig/mathbase.i:#include "howto_square2_ff.h"./swig/mathbase.i:%include "howto_square2_ff.i"./swig/Makefile.am: howto_square2_ff.i./swig/Makefile.in: howto_square2_ff.i./swig/Makefile.in:@PYTHON_TRUE@ howto_square2_ff.i./python/qa_mathbase.py: def test_002_square2_ff (self):./python/qa_mathbase.py: sqr = howto_swig.square2_ff ()替换所有文件中的square和howto字符串为自己需要的字符串,其中howto代表模块名称,square代表功能模块find . -print | xargs perl -pi -e 's/square/sqrt/g'find . -print | xargs perl -pi -e 's/howto/mathbase/g'最后编译就是了./bootstrap./configure --prefix=/usrmakemake check检测结果如下:linux-3a23:/home/shaocong_ye/project/mathbase # make checkMaking check in configmake[1]: Entering directory `/home/shaocong_ye/project/mathbase/config'make[1]: Nothing to be done for `check'.make[1]: Leaving directory `/home/shaocong_ye/project/mathbase/config'Making check in libmake[1]: Entering directory `/home/shaocong_ye/project/mathbase/lib'make check-TESTSmake[2]: Entering directory `/home/shaocong_ye/project/mathbase/lib'..OK (2 tests)PASS: test_all=============1 test passed=============make[2]: Leaving directory `/home/shaocong_ye/project/mathbase/lib'make[1]: Leaving directory `/home/shaocong_ye/project/mathbase/lib'Making check in swigmake[1]: Entering directory `/home/shaocong_ye/project/mathbase/swig'make check-ammake[2]: Entering directory `/home/shaocong_ye/project/mathbase/swig'make[2]: Nothing to be done for `check-am'.make[2]: Leaving directory `/home/shaocong_ye/project/mathbase/swig'make[1]: Leaving directory `/home/shaocong_ye/project/mathbase/swig'Making check in pythonmake[1]: Entering directory `/home/shaocong_ye/project/mathbase/python'make check-TESTSmake[2]: Entering directory `/home/shaocong_ye/project/mathbase/python'/home/shaocong_ye/project/mathbase/lib:/home/shaocong_ye/project/mathbase/lib/.libs:/hom e/shaocong_ye/project/mathbase/swig:/home/shaocong_ye/project/mathbase/swig/.l ibs:/home /shaocong_ye/project/mathbase/python:/usr/lib/python2.6/site-packages:/usr/lib/python2.6/site -packages:.----------------------------------------------------------------------Ran 1 test in 0.002sOKPASS: run_tests=============1 test passed=============make[2]: Leaving directory `/home/shaocong_ye/project/mathbase/python'make[1]: Leaving directory `/home/shaocong_ye/project/mathbase/python'Making check in grcmake[1]: Entering directory `/home/shaocong_ye/project/mathbase/grc'make[1]: Nothing to be done for `check'.make[1]: Leaving directory `/home/shaocong_ye/project/mathbase/grc'Making check in appsmake[1]: Entering directory `/home/shaocong_ye/project/mathbase/apps'make[1]: Nothing to be done for `check'.make[1]: Leaving directory `/home/shaocong_ye/project/mathbase/apps'make[1]: Entering directory `/home/shaocong_ye/project/mathbase'make[1]: Nothing to be done for `check-am'.make[1]: Leaving directory `/home/shaocong_ye/project/mathbase'成功2011-4-7。

howto

howto

Out-of-tree 模块用gnuradio自带的功能扩展自定义模块什么是Out-of-tree 模块Out-of-tree 模块是不存在于gnuradio源代码树中的gnuradio组成部分,通常如果你想自己扩展gnuradio的功能和模块,Out-of-tree 模块就是你需要创造的这种模块(通常我们不会向实际的gnuradio源代码树里面加东西,除非你是想把它上传给开发者们整合使用)。

这样可以维护你的代码,并且延续主代码的功能。

工具和资源都可以自己管理作为一对捆绑式的工具,文件和脚本都可以作为第三方的程序或者gnuradio自己的一部分。

gr_modtool 模块编辑的利器开发一个模块的时候涉及很多单调和枯燥的工作:样板代码,makefile文件的编辑等,gr_modtool作为一个脚本,旨在帮助这些所有的事情自动编辑生成文件,尽可能的为开发者做跟多的工作,这样你就可以直接开始DSP编码的工作。

需要注意的是,gr_modtool在你所看到的代码上做了许多的假设,越是你自己定制的,或者有特定变化的,gr_modtool使用的就越少,但是它可能是启动新的模块的最好的地方。

Cmake,make等等。

在gnuradio中使用cmake来作为系统的构建。

不管你是否喜欢这个系统构建,你要构建模块就需要安装cmake(最常见的是make,但是也可以使用Eclipse或者MS Visual Studio)。

教程1 创建Out-of-tree 模块在下面的的教程中我们将使用名叫howto的模块。

第一步是创建这个模块。

利用gr_modtool是非常简单的,无论你想要什么样的新模块目录,只需要在命令行输入命令(这是在gnuradio源代码树之外的),然后继续。

% gr_modtool newmod howto #####howto就是你要创建的目录名Creating out-of-tree module in ./gr-howto... Done.Use 'gr_modtool add' to add a new block to this currently empty module.如果一切顺利,你将会有意个名叫gr-howto的目录。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

手把手教你如何编写自己的信号处理模块(how to write a signal processing block?)
虽然目前的基于Python的信号处理模块网上有丰富的资源,但是完全按照自己需求的信号处理模块还是自己动手写比较好,我建议初次接触编写模块的人可以从下面三个步骤进行。

一、下载gr-how-to-write-signal-processing-block 的模板,然后将其编译成功
下载地址为:ftp:///gnu/gnuradio/
下载后解压,然后通过terminal 进入到该目录(以根用户的权限进入)
然后
./configure
make check
make install
只要gnuradio 安装正确,且版本和gr-howto一致,就不会出错了,make check 会显示2 pass, 多长多长时间等等信息。

问题:很多人用该模板,发现生成的qa_howto.py在make check时,没有问题,而独立运行时提示无法import howto 模块
原因:在qa_howto.py里面直接是import howto, 所以只有当前的python路径和其安装路径一致,才可以调用否则无法成功
解决方法:1)首先需要让make install 将howto 模块装入到gnuradio的路径中
需要重新初始化,需要注意的是configure 需指定路径为/usr
./configure --prefix=/usr
make check
make install
此时当你进入到usr/lib/python2.6/site-packages/gnuradio 你会发现里面有一个howto.py 了
2)如果要直接运行qa_howto.py 则需要修改其源程序
将import howto 改为from gnuradio import howto
此时运行就能够成功了,到目前为止,我们得到了一个howto模块,具有平方的运算功能,这个以后都可以直接使用了。

二、如何按照自己的命名要求得到所需的模块
比如说我要写一个数学运算的模块mathbase 然后给其添加一个根号运算子模块
类似qa_howto.py的平方运算调用方式sqr=howto.square_ff() 我们希望通过这样的调用sqr = mathbase.sqrt_ff (),就能得到一个实现根号运算的子模块
这个过程大家要比较细致,但是一步一步来就不会出错了,首先不解释原因,我们先看看如何做就行了。

进入到相应的目录src/lib 中
1)重新命名几个文件名
howto.i 改为mathbase.i
howto_square_ff.h 改为mathbase_sqrt_ff.h
howto_square_改为mathbase_sqrt_
2)将下列文件中的howto 字符都替换为mathbase,
square 字符都替换成sqrt
square2 字符相关的都删除
需要替换的文件为都在src/lib 中:
mathbase.i mathbase_sqrt_ff.h mathbase_sqrt_ makefile.am makefile.in
建议采用search 功能的replace 来实现
首先search square2 字符串,然后将其对应的部分都删除但要保留square相关的然后search square 字符replace 为sqrt
最后search howto 字符replace 为mathbase
3)qa_howto.py里面也需要修改
复制代码
1. from gnuradio import gr, gr_unittest
2. import mathbase
3.
4. class qa_howto (gr_unittest.TestCase):
5.
6. def setUp (self):
7. self.tb = gr.top_block ()
8.
9. def tearDown (self):
10. self.tb = None
11.
12. def test_001_square_ff (self):
13. src_data = (-3, 4, -5.5, 2, 3)
14. expected_result = (9, 16, 30.25, 4, 9)
15. src = gr.vector_source_f (src_data)
16. sqr = mathbase.sqrt_ff ()
17. dst = gr.vector_sink_f ()
18. self.tb.connect (src, sqr)
19. self.tb.connect (sqr, dst)
20. self.tb.run ()
21. result_data = dst.data ()
22. self.assertFloatTuplesAlmostEqual (expected_result, result_data, 6)
23.
24.
25. if __name__ == '__main__':
26. gr_unittest.main ()
27.
细心完成上面的过程,然后重新编译
./configure --prefix=/usr
make check
make install
通过则说明,你已经得到了一个包含sqrt_ff()的mathbase.py模块
三、实现真正的求根运算
上面的方法其实只是改了一个名字而已,内核还是square运算,要实现真正的求根运算还需要进行如下修改
1)进入到mathbase_sqrt_
找到
复制代码
1. mathbase_sqrt_ff::general_work()
2. {
3. .....
4. for (int i = 0; i < noutput_items; i++){
5. out[ i ]=in[ i ]*in[ i ];
6. }
7. .....
8. }
9.
将out[ i ] = in[ i ]*in[ i ];改为 out[ i ] = sqrt(in[ i ]);
2)修改qa_howto.py 将验证数据改一下
src_data = (9, 16, 30.25, 4, 9)
expected_result = (3, 4, 5.5, 2, 3)
重新编译,通过则说明你的修改正确,以后就可以使用自己的编写的求根运算了
如果要添加新的运算,则需要编写mathbase_xxxx_以及在前面提到的需要修改的几个文件中添加适当的语句,如果有兴趣,我也可以给出具体的步骤。

附件中是编译成功的例子示例 gr-mathbase.tar.gz (1660 K) 下载次数:179
最后需要注意的一点就是新模快的命名, 得避开gnuradio已经存在的模块,如常用的math,test 等等,这个编译时不会提醒。

我们自己不妨将模块名称取的有自己的特色一点但也不影响程序的阅读。

相关文档
最新文档