码迷,mamicode.com
首页 > 编程语言 > 详细

如何编写pythonGNURADIO应用

时间:2014-12-02 15:02:55      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   使用   sp   on   文件   

三个基本概念:

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()来进行连接

如何编写pythonGNURADIO应用

标签:style   blog   io   ar   color   使用   sp   on   文件   

原文地址:http://www.cnblogs.com/xiexindut/p/4135389.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!