如何编写pythonGNURADIO应用
三个基本概念:
flow graph
很大一部分GNURADIO程序就是一个流图。流图包括若干信号处理模块(BLock),以及一些用表示数据流的边。
BLock
所有信号处理过程在block中进行。在最好情况下,每个block只包含一项功能,这回使得GNURADIO程序更加灵活。
Block由c++书写,据说不是很难。
Data
在block间传递的数据可以是c++中的任何数据,在实际上,大多数数据类型都是复数,短实数,长整型,浮点数等。传递的数据可以是比特,也可以是样本。
流图的总结:
gnuradio 中所有的信号处理是通过流图的
一个流图由若干模块组成,每个模块会执行一个操作,例如:过滤,信号叠加,变化,解码,连接到硬件等。
信号在模块之间以多种方式传递,复数或者实整型,浮点数,或者其他我们定义的数据类型。
python
每一个流图需要至少一个信宿和信号源。
python 中一个流图的例子。
代码的位置在 : gr-audio/examples/python/dial_tone.py.
#!/usr/bin/env python from gnuradio import gr
from gnuradio import audio, analog class my_top_block(gr.top_block):
def __init__(self):
gr.top_block.__init__(self) sample_rate = 32000
ampl = 0.1 src0 = analog.sig_source_f(sample_rate, analog.GR_SIN_WAVE, 350, ampl)
src1 = analog.sig_source_f(sample_rate, analog.GR_SIN_WAVE, 440, ampl)
dst = audio.sink(sample_rate, "")
self.connect(src0, (dst, 0))
self.connect(src1, (dst, 1)) if __name__ == '__main__':
try:
my_top_block().run()
except [[KeyboardInterrupt]]:
pass
line 1: 告诉操作系统这是一个python文件,需要使用python解释器来运行。如果想要直接在命令行中运行该程序,则需要这一行。
line 3,lin4: 导入需要的模块,来运行gnuradio. 其作用和c语言中的 #include很想。
gr 模块,是最基本的gnuradio 模块。每一个运行gnuradio程序时都需要导入这一个模块。audio 模块, 音频设备模块
analog, 和模拟信号有关的功能和模块。
line 6-17 定义了一个类,继承于gr.top_block, 这个类可以认为是该流图的一个容器。继承于 gr.top_block的方法可以使我们方便的添加和链接模块。
我们注意到,该类中只包含一个初始化函数,用来创建这个类。 在初始化函数的第一行line8,父类
的初始化函数被调用。在python中很多类似的操作都需要显示的调用。
接下来Line10-11 定义了两个变量,用来控制采样频率和信号幅度。
Line 13-15 定义了3个block, 信号源src0,src1 和信宿 dst.
创建信号源时调用了 analog.sig_source_f(
的浮点数,在编写程序时,我们要注意其取值范围。如果输入信号是整形,gnuradio会报错,但是如果输入幅度大于1确不会报错,但是我们会得到一个错误的结果。sample_rate, analog.GR_SIN_WAVE, frequency,ampl
)函数,而创建信宿则调用了 audio.sink中的模块。 值得主要的是audio.sink 只接受幅度为-1到+1
Line 16-17 负责连接各个模块,。
最后5行,就负责启动这个模块。
python构建流图总结:
1. 在最开始,需要导入Import 一些gnuradio模块,其中gr通常是必须的。
2. 流图保存在一个 以gr.top_block 为父类的类里面。
3. 在创建模块是,一般会调用一个函数
4. block 通过在流图类里面调用self.connect()来进行连接
如何编写pythonGNURADIO应用的更多相关文章
- Angular2入门系列教程2-项目初体验-编写自己的第一个组件
上一篇 使用Angular-cli搭建Angular2开发环境 Angular2采用组件的编写模式,或者说,Angular2必须使用组件编写,没有组件,你甚至不能将Angular2项目启动起来 紧接着 ...
- 从零开始编写自己的C#框架(28)——建模、架构与框架
文章写到这里,我一直在犹豫是继续写针对中小型框架的设计还是写些框架设计上的进阶方面的内容?对于中小型系统来说,只要将前面的内容进行一下细化,写上二三十章具体开发上的细节,来说明这个通用框架怎么开发的就 ...
- 从零开始编写自己的C#框架(27)——什么是开发框架
前言 做为一个程序员,在开发的过程中会发现,有框架同无框架,做起事来是完全不同的概念,关系到开发的效率.程序的健壮.性能.团队协作.后续功能维护.扩展......等方方面面的事情.很多朋友在学习搭建自 ...
- 从零开始编写自己的C#框架(26)——小结
一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...
- 从零开始编写自己的C#框架(25)——网站部署
导航 1.关掉访问保护 2.发布网站 3.复制网站到服务器 4.添加新网站 5.设置网站访问权限 6.设置文件夹访问权限 7.控制可更新文件夹执行权限 8.设置“应用程序池”.net版本与模式 9.附 ...
- 从零开始编写自己的C#框架(24)——测试
导航 1.前言 2.不堪回首的开发往事 3.测试推动开发的成长——将Bug消灭在自测中 4.关于软件测试 5.制定测试计划 6.编写测试用例 7.执行测试用例 8.发现并提交Bug 9.开发人员修复B ...
- TypeScript为Zepto编写LazyLoad插件
平时项目中使用的全部是jQuery框架,但是对于做webapp来说jQuery太过于庞大,当然你可以选择jQuery 2.*针对移动端的版本. 这里我采用移动端使用率比较多的zepto框架,他跟jqu ...
- 使用NUnit为游戏项目编写高质量单元测试的思考
0x00 单元测试Pro & Con 最近尝试在我参与的游戏项目中引入TDD(测试驱动开发)的开发模式,因此单元测试便变得十分必要.这篇博客就来聊一聊这段时间的感悟和想法.由于游戏开发和传统软 ...
- 编写自己的PHP MVC框架笔记
1.MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). ...
随机推荐
- HDOJ(HDU) 2502 月之数(进制)
Problem Description 当寒月还在读大一的时候,他在一本武林秘籍中(据后来考证,估计是计算机基础,狂汗-ing),发现了神奇的二进制数. 如果一个正整数m表示成二进制,它的位数为n(不 ...
- 广度优先搜索BFS
广度优先搜索可以形成一个广度优先搜索树 算法时间为O(V+E),两重循环 输入:图g,起点start(int) 需要的数据结构:队列Q.color数组(存放每个顶点的颜色) 算法过程: 1. 预处理: ...
- POJ 2029 Get Many Persimmon Trees(水题)
题意:在w*h(最大100*100)的棋盘上,有的格子中放有一棵树,有的没有.问s*t的小矩形,最多能含有多少棵树. 解法:最直接的想法,设d[x1][y1][x2][y2]表示选择以(x1, y1) ...
- poj 2187 凸包加旋转卡壳算法
题目链接:http://poj.org/problem?id=2187 旋转卡壳算法:http://www.cppblog.com/staryjy/archive/2009/11/19/101412. ...
- Spring与Hibernate集成中的Session问题
主要讨论Spring与Hibernate集成中的session问题 1.通过getSession()方法获得session进行操作 public class Test extends Hibernat ...
- inux常用命令大全
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...
- 【jquery mobile笔记二】jquery mobile调用豆瓣api示例
页面主要代码如下 <div data-role="page" id="page1"> <div data-role="hea ...
- 使用国人的koala来重新预编译BOOTSTRAP的LESS文件
好玩...
- [PWA] 9. Service worker registerion && service work's props, methods and listeners
In some rare cases, you need to ask user to refresh the browsser to update the version. Maybe becaus ...
- Linux TCP队列相关参数的总结
作者:阿里技术保障锋寒 原文:https://yq.aliyun.com/articles/4252 摘要: 本文尝试总结TCP队列缓冲相关的内核参数,从协议栈的角度梳理它们,希望可以更容易的理解和记 ...