来源: 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() :叠加短整型输入数值同另一个短整型常数。
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐