GNU Radio——gr.hier_block2
文章目录模块构造模块使用比如,要构建一模块实现对信号做乘法再做加法模块构造###Filemyblock.py#################################!/usr/bin/env pythonfrom gnuradio import grclass mul_add(gr.hier_block2):def __init__(self,a1,a2):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条内容
所有评论(0)