GNU Radio——gr.hier_block2


比如,要构建一模块实现对信号做乘法再做加法

模块构造

###File  myblock.py
################################
#!/usr/bin/env python

from gnuradio import gr


class mul_add(gr.hier_block2):

    def __init__(self,a1,a2):

    gr.hier_block2.__init__(self, "mul_add",
                gr.io_signature(1, 1, gr.sizeof_float),      # Input signature
                gr.io_signature(1, 1, gr.sizeof_float)) # Output signature
        mul = gr.multiply_const_ff (a1)
        add = gr.add_const_ff (a2)
        self.connect(self,mul,add,self)
  • mul_add 是继承hier_block2 模块的新模块
  • _init_()是初始化函数
  • gr.hier_block2.__init__(...,...,...)参数:
    • self (它总是作为第一个参数被传递给构建函数的)
    • 字符串变量用于标记该阶层结构功能块(需要恰当相应地更名)
    • 一个输入签名和一个
    • 输出签名
      • 如果模块不存在输入接口
      • 如“源”,“漏”,可将输入端口写成gr.io_signature(0, 0, 0)产生一个 null 类型的 IO 签名(signature)
  • 对于阶层结构功能块 HierBlock 而言,不难发现它有一个输入和一个/两个输出。
  • gr.io_signature(min, max, size):
    • signature 签名
    • min ——最小的连接端口数
    • max—— 最大的连接端口数
    • 一般模块min,max都一样,但也可以设计不一样的,这时候就是模块有些端口可以连接,也可以不连接
    • size:输入/输出元素的大小
  • mul,add是需要连接的两个模块,至于为啥是self,mul,add,self前后self,根据具体情况定的,这里应该是mui_add这个模块是用于流程图内部的意思
  • 在这里插入图片描述

模块使用

#!/usr/bin/env python
from gnuradio import gr, gru, blks2
from gnuradio.wxgui import stdgui2, fftsink2, scopesink2
from gnuradio.eng_option import eng_option
from optparse import OptionParser
from myblock import mul_add
import wx
import sys



class test_graph (stdgui2.std_top_block):
    def __init__(self, frame, panel, vbox, argv):
        stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
        parser = OptionParser (option_class=eng_option)
        (options, args) = parser.parse_args ()

        Fs=2e5
        Fc=2e4



        #fft.win.set_baseband_freq(freq)
        sinwav=gr.sig_source_f (Fs, gr.GR_SIN_WAVE, Fc, 100)



        scop1 = scopesink2.scope_sink_f(frame, sample_rate=Fs)
        scop2 = scopesink2.scope_sink_f(frame, sample_rate=Fs)


  
        vbox.Add(scop1.win,1,wx.EXPAND)
        vbox.Add(scop2.win,1,wx.EXPAND)
        #这里这里!
        ma=mul_add(4,400);

        thr1 = gr.throttle(gr.sizeof_float, Fs)
  
      
        self.connect(sinwav,thr1)
        self.connect(thr1,scop1)
        self.connect(thr1,ma,scop2)


def main ():
    app = stdgui2.stdapp (test_graph, "Test Window")
    app.MainLoop ()

if __name__ == '__main__':
    main ()
  • 最后connect的部分是为了对比经过mul_add处理和未处理的信号长啥样
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

universe_1207

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值