文章目录
来源: http://gnuradio.microembedded.com/tutorialswritepythonapplications
1 #!/usr/bin/env python
2
3 from gnuradio import gr
4 from gnuradio import audio
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 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 350, ampl)
14 src1 = gr.sig_source_f (sample_rate, gr.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
- 关于import 的gr和audio
- gr:基础模块,通常都要导入
- audio:载入音频设备
- 第 6-17 行定义了一个叫 my_top_block 的类,
- 它是从另外一个名字为 gr.top_block 的类继承下来的。
- 此类(函数)对流程图而言基本上是个容器类(container)。通过对类 gr.top_block 的继承,便可得到所需的添加和连接功能块的 hooks 和 functions 等。
- 在这个类中仅只定义了一个函数:该类的构造函数 +init+()。在此函数的第一行(程序的第8行)便调用了父类的构造函数
- src0 和 src1是定义的两个信号源
- gr.sig_source_f 的后缀"f"表示其输出的是浮点型(float)数据
- 如果把整型的采样信号注入音频“漏”功能块(audio.sink)中去的话,GNU Radio 便回报一个出错信息(error)- 但是在上例中如果设置振幅大于 1 的话,尽管会得到一个变形但并没有出错的信息的回报。
- 信号“漏”在第 15 行被定义: audio.sink() 的行为正像一个声卡,它可播放任何管流其内的信号。正如该功能块之前描述那样,信号源已设置,但采样信号频率还要明确表示。
- 第 16 和 17 行用来连接功能块。
- 用来连接功能块的一般句法是 self.connect(block1, block2, block3, …)
- 代码中的16-17的意思是:src0 和 dst 的第一路输入,src1 和 dst 的第二路输入
- (src0, (dst, 0)) 表示:把 src0 同 dst 的端口 0 相连
- try 和 except 的是确保在 Ctrl+C 被键入时停止流程图(否则它便无休止的运行下去)
- 用来触发 Python 的异常函数 KeyboardInterrupt
后缀定义数据类型
- 应用:比如函数gr.fir_filter_ccf()
- 定义了一个 FIR (有限冲击响应滤波器)带复合输入、复合输出和浮点抽头的滤波器
- gr.add_const_ss() :叠加短整型输入数值同另一个短整型常数。