三个基本概念:

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(sample_rate, analog.GR_SIN_WAVE, frequency,ampl)函数,而创建信宿则调用了 audio.sink中的模块。 值得主要的是audio.sink 只接受幅度为-1到+1的浮点数,在编写程序时,我们要注意其取值范围。如果输入信号是整形,gnuradio会报错,但是如果输入幅度大于1确不会报错,但是我们会得到一个错误的结果。

Line 16-17 负责连接各个模块,。

最后5行,就负责启动这个模块。

python构建流图总结:

1. 在最开始,需要导入Import 一些gnuradio模块,其中gr通常是必须的。

2. 流图保存在一个 以gr.top_block 为父类的类里面。

3. 在创建模块是,一般会调用一个函数

4. block 通过在流图类里面调用self.connect()来进行连接

如何编写pythonGNURADIO应用的更多相关文章

  1. Angular2入门系列教程2-项目初体验-编写自己的第一个组件

    上一篇 使用Angular-cli搭建Angular2开发环境 Angular2采用组件的编写模式,或者说,Angular2必须使用组件编写,没有组件,你甚至不能将Angular2项目启动起来 紧接着 ...

  2. 从零开始编写自己的C#框架(28)——建模、架构与框架

    文章写到这里,我一直在犹豫是继续写针对中小型框架的设计还是写些框架设计上的进阶方面的内容?对于中小型系统来说,只要将前面的内容进行一下细化,写上二三十章具体开发上的细节,来说明这个通用框架怎么开发的就 ...

  3. 从零开始编写自己的C#框架(27)——什么是开发框架

    前言 做为一个程序员,在开发的过程中会发现,有框架同无框架,做起事来是完全不同的概念,关系到开发的效率.程序的健壮.性能.团队协作.后续功能维护.扩展......等方方面面的事情.很多朋友在学习搭建自 ...

  4. 从零开始编写自己的C#框架(26)——小结

    一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...

  5. 从零开始编写自己的C#框架(25)——网站部署

    导航 1.关掉访问保护 2.发布网站 3.复制网站到服务器 4.添加新网站 5.设置网站访问权限 6.设置文件夹访问权限 7.控制可更新文件夹执行权限 8.设置“应用程序池”.net版本与模式 9.附 ...

  6. 从零开始编写自己的C#框架(24)——测试

    导航 1.前言 2.不堪回首的开发往事 3.测试推动开发的成长——将Bug消灭在自测中 4.关于软件测试 5.制定测试计划 6.编写测试用例 7.执行测试用例 8.发现并提交Bug 9.开发人员修复B ...

  7. TypeScript为Zepto编写LazyLoad插件

    平时项目中使用的全部是jQuery框架,但是对于做webapp来说jQuery太过于庞大,当然你可以选择jQuery 2.*针对移动端的版本. 这里我采用移动端使用率比较多的zepto框架,他跟jqu ...

  8. 使用NUnit为游戏项目编写高质量单元测试的思考

    0x00 单元测试Pro & Con 最近尝试在我参与的游戏项目中引入TDD(测试驱动开发)的开发模式,因此单元测试便变得十分必要.这篇博客就来聊一聊这段时间的感悟和想法.由于游戏开发和传统软 ...

  9. 编写自己的PHP MVC框架笔记

    1.MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). ...

随机推荐

  1. How to distribute your own Android library through jCenter and Maven Central from Android Studio

    In Android Studio, if you wish to include any library to your application. You could just simply add ...

  2. 《A First Course in Mathematical Modeling》-chaper1-差分方程建模

    从今天开始笔者将通过这个专栏可是对“数学建模”的学习.其实对于“数学建模”自身的内涵或者意义并不需要太多的阐释,下图简洁明了的阐释了数学建模的意义. 其实数学建模本身可以看成换一种角度去解读数学,将我 ...

  3. 《Mathematical Olympiad——组合数学》——操作和游戏

    这篇文章,我们开始对奥数中有关操作和游戏的问题进行分析和讨论,其实在信息学竞赛中涉及到的一些博弈问题(分析必胜策略)的问题(例如巴什博弈.尼姆博弈),本质上来讲,就是组合数学当中的组合游戏,并不是真正 ...

  4. Java实现人民币大写代码解析

    想要实现人民币大写,在发票等场景中使用?? 1234.56显示为:壹仟贰佰叁拾肆元伍角陆分,那就往下看看吧! 本程序可以实现 0 到 9999 9999 9999.994 以内的人民币大写转换,精确到 ...

  5. poj2287

    田忌赛马的题目- - 贪心策略: 1,如果田忌的最快马快于齐王的最快马,则两者比. (因为若是田忌的别的马很可能就赢不了了,所以两者比) 2,如果田忌的最快马慢于齐王的最快马,则用田忌的最慢马和齐王的 ...

  6. poj1016

    题目大意:数据统计 看明白了,就是给你一个数,例如31123314,代表的意思有3个1,1个2,3个3,1个4,但数字本身的有的数字也是有3个1,1个2,3个3,1个4,所以这样的数叫做self-in ...

  7. Collections之sort、reverse

    在使用List集合时,通常情况下希望从集合中得到的对象是按照一定顺序排列的,但是List集合的默认排序方式为按照对象的插入顺序,可以通过java.util.Collections类的静态方法sort( ...

  8. Swift: 继承

    为了在属性值改变的时候获得通知,类可以为继承的属性添加属性观察者.属性观察者可以添加到任何属性上,不管这个属性原来是存储属性还是计算属性. Swift中的类没有一个统一的基类. 为了讲明白继承,我们先 ...

  9. Android 高仿微信实时聊天 基于百度云推送

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38799363 ,本文出自:[张鸿洋的博客] 一直在仿微信界面,今天终于有幸利用百 ...

  10. 《CODE》讲了什么?

    本书首先从黑夜中用手电筒开关灯的方式来与小伙伴交流从而引出了编码与组合的概念,并阐明了编码的本质就是交流,是一种用来在机器与人之间传递信息的方式.然后在第 2~3 章中讲述了编码与组合的应用,如电报机 ...