• 如何编写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()来进行连接

  • 相关阅读:
    家庭记账本_2
    家庭记账本_1
    安卓学习进度_25
    安卓软件学习进度_24
    对体温上报app的总结
    安卓软件学习进度_23
    安卓软件学习进度_22
    安卓开发
    安卓开发
    安卓开发
  • 原文地址:https://www.cnblogs.com/xiexindut/p/4135389.html
Copyright © 2020-2023  润新知