如何编写pythonGNURADIO应用

三个基本概念:

flow graph

很大一部分GNURADIO程序就是一个流图。流图包括若干信号处理模块(BLock),以及一些用表示数据流的边。

BLock

所有信号处理过程在block中进行。在最好情况下,每个block只包含一项功能,这回使得GNURADIO程序更加灵活。

Block由c++书写,据说不是很难。

Data

在block间传递的数据可以是c++中的任何数据,在实际上,大多数数据类型都是复数,短实数,长整型,浮点数等。传递的数据可以是比特,也可以是样本。

流图的总结:

gnuradio 中所有的信号处理是通过流图的

一个流图由若干模块组成,每个模块会执行一个操作,例如:过滤,信号叠加,变化,解码,连接到硬件等。

信号在模块之间以多种方式传递,复数或者实整型,浮点数,或者其他我们定义的数据类型。

python

每一个流图需要至少一个信宿和信号源。

python 中一个流图的例子。

代码的位置在 : gr-audio/examples/python/dial_tone.py.

 1 #!/usr/bin/env python
 2
 3 from gnuradio import gr
 4 from gnuradio import audio, analog
 5
 6 class my_top_block(gr.top_block):
 7     def __init__(self):
 8         gr.top_block.__init__(self)
 9
10         sample_rate = 32000
11         ampl = 0.1
12
13         src0 = analog.sig_source_f(sample_rate, analog.GR_SIN_WAVE, 350, ampl)
14         src1 = analog.sig_source_f(sample_rate, analog.GR_SIN_WAVE, 440, ampl)
15         dst = audio.sink(sample_rate, "")
16         self.connect(src0, (dst, 0))
17         self.connect(src1, (dst, 1))
18
19 if __name__ == ‘__main__‘:
20     try:
21         my_top_block().run()
22     except [[KeyboardInterrupt]]:
23         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()来进行连接

时间: 2024-11-26 01:31:21

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

利用 Django REST framework 编写 RESTful API

利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framework 真乃一大神器,可以轻易的甚至自动化的搞定很多事情,比如: 自动生成符合 RESTful 规范的 API 支持 OPTION.HEAD.POST.GET.PATCH.PUT.DELETE 根据 Content-Type 来动态的返回数据类型(如 text.json) 生成 browserable

如何编写一个带命令行参数的Python文件

看到别人执行一个支持命令行参数的python文件,瞬间觉得高大上起来.牛逼起来,那么如何编写一个带命令行参数的python脚本呢?不用紧张,下面将简单易懂地让你学会如何让自己的python脚本,支持命令行参数. 首先你要知道python中的sys模块的一些功能: import sys print "the number of python program's argument:",len(sys.argv) print "the value of every argument

转载---编写高质量代码:改善Java程序的151个建议(第3章:类、对象及方法___建议47~51)

阅读目录 建议47:在equals中使用getClass进行类型判断 建议48:覆写equals方法必须覆写hashCode方法 建议49:推荐覆写toString方法 建议50:使用package-info类为包服务 建议51:不要主动进行垃圾回收 回到顶部 建议47:在equals中使用getClass进行类型判断 本节我们继续讨论覆写equals的问题,这次我们编写一个员工Employee类继承Person类,这很正常,员工也是人嘛,而且在JavaBean中继承也很多见,代码如下: 1 p

如何编写方法

1.编写方法要考虑的内容 (1)通过项目的需求了解方法要完成的具体任务是什么 (2)确定方法的可访问性(private默认) (3)这个方法调用后能够产生的结果是什么 (4)给这个方法起一个"响亮"的名称 (5)调用这个方法需要的条件是什么(参数) 2.方法具体定义规范 访问修饰符 返回值类型  方法名称(各个参数) { ////方法具体要完成的任务 return 返回值: }

sublime text3---Emmet:HTML/CSS代码快速编写神器

Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度,比如下面的演示:  Zen coding下的编码演示 一.快速编写HTML代码 1.  初始化 HTML文档需要包含一些固定的标签,比如<html>.<head>.<body>等,现在你只需要1秒钟就可以输入这些标签.比如输入"!"或"html:5",

编写程序(C语言)

编写程序: 如果用户输入1,则提示输入租车数量,用变量i保存,然后计算需支付的金额,并输出. 如果用户输入2,则提示输入购票数量,用变量j保存,然后计算需支付的金额,并输出. 如果用户输入其它数,则提示选择错误. 费用计算方法: 租一辆车需支付150元. 门票一张60元,如果购票数>=10,则每张50元. #include <stdio.h>int main(){ int choose,i,j,money; printf("\n\t\t旅游自助服务\n"); prin

用Xamarin和Visual Studio编写iOS App

一说开发 iOS app,你立马就会想到苹果的开发语言 Objective C/Swift 和 Xcode.但是,这并不是唯一的选择,我们完全可以使用别的语言和框架. 一种主流的替换方案是 Xamarin,这是一个跨平台框架,允许你开发 iOS.Android 和 OSX.Windows app,它使用的是 C# 和 Visual Studio.最大的好处在于,Xamarin 允许你在 iOS 和 Android app 间共享代码. Xamarin 与其他跨平台框架相比有一个最大的好处:使用

用VS2010编写的C++程序,在其他电脑上无法运行,提示缺少mfc100.dll的解决办法

问题: 在自己电脑上用VS2010编写的VC++程序(使用MFC库),不能在其他电脑上运行.双击提示: "无法启动此程序,因为计算机中丢失mfc100.dll 尝试重新安装该程序以解决此问题." 解决方案: 方案一 采用静态编译使用VS2010编译的程序在windowsxp中运行时,经常会出现找不到相关的DLL文件,我们可以使用静态编译的方法把这些运行依赖文件打包到*.exe中来,以减少对环境的依赖. 一般可以配置以下两项: 项目 -< **属性 -< 配置属性-<

iOS 视图:重绘与UIScrollView(内容根据iOS编程编写)

我们继续之前的 Hypnosister 应用,当用户开始触摸的时候,圆形的颜色会改变. 首先,在 JXHypnosisView 头文件中声明一个属性,用来表示圆形的颜色. #import "JXHypnosisView.h" @interface JXHypnosisView () /** 颜色 */ @property (nonatomic,strong) UIColor * circleColor; @end @implementation JXHypnosisView - (in