三个基本概念:

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. M - 非常可乐

    很明显看出来的广搜题目,不过因为有3个杯子相互倾倒,所以会产生6种倒发,比较冗杂,不过应该可以构造一个数组来解决这个问题,试试看吧 ////////////////////////////////// ...

  2. Java 内省 Introspector

    操纵类的属性,有两种方法 反射 内省 面向对象的编程中,对于用户提交过来的数据,要封装成一个javaBean,也就是对象 其中Bean的属性不是由字段来决定的,而是由get和Set方法来决定的 pub ...

  3. Swift_UILabel

    一.初始化 // 初始化UIlabel,并设置frame //let labelOne = UILabel.init(frame: CGRect.init(x: 10, y: 20, width: 3 ...

  4. Android中的Zip解压缩

    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import ...

  5. mysql源码分析

    http://blog.csdn.net/u012935160/article/category/2697485

  6. 深入分析 Java 中的中文编码问题--转

    几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言 ...

  7. Java多态性举例说明

    Java多态性的概念也可以被说成“一个接口,多个方法”. (一)相关类 class A ...{ public String show(D obj)...{ return ("A and D ...

  8. python一些技巧

    1. 使用目录管理 sys.path.append(sys.argv[0][:sys.argv[0].rfind('com'+os.sep+'abc')]) from com.abc.libs imp ...

  9. JDK5-静态导入

    import static 1. 导入一个类内所有静态成员 import static java.lang.Math.*; public class StaticImport { public sta ...

  10. RuntimePermissions

    This sample shows runtime permissions available in Android M and above. Display the log on screen to ...