是否可以在GNU Radio块的__init__中访问工作函数的变量?

时间:2015-06-04 09:10:47

标签: python gnuradio

在下面的GNU Radio处理块中,我无法确定首先将input_items的值传递给work的人/什么。是否可以将该值传递给__init__函数?

我有一个文件xyz.py:

class xyz(gr.sync_block):
    """
    docstring for block add_python
    """
    def __init__(self, parent, title, order):
        gr.sync_block.__init__(self,
            name="xyz",
            in_sig=[numpy.float32,numpy.float32],
            out_sig=None)
            ................
           ................
           //I want to access the value of input_items here
           ...............
           ...............


    def work(self, input_items, output_items):
        ................

2 个答案:

答案 0 :(得分:3)

__init__函数只调用一次"初始化"类的新实例。除了设置输入和输出类型以便可以成功连接块之外,它与通过流程图移动数据无关。

因此,在top_block中,您可能有:

proc = xyz() # xyz's __init__ is called here
self.connect(source, proc, sink) # still no input_items, just connected flowgraph

稍后,您运行流程图:

tb = top_block()
tb.run() # 'input_items' are now passed to 'work' of each block in succession

运行流程图时,GNU Radio调度程序从源块中获取大量样本并将它们放入缓冲区。然后它将该缓冲区传递给流程图中下一个块的work函数,以及一个"空的"输出项的缓冲区。

因此,当有数据需要处理时,调度程序会自动调用每个块的work函数。 __init__无法访问work的任何参数,因为input_itemswork被调用时甚至尚未传递给__init__

答案 1 :(得分:0)

work是一个与__init__完全分开的函数。其参数不能在该函数之外访问。如果您想访问input_items,请将其添加到__init__参数列表,并在致电__init__时将其传递。