GNU-Radio Companion:启用/禁用带变量的块

时间:2016-02-23 00:55:17

标签: gnuradio gnuradio-companion

我有一个具有多种功能的GRC项目,但并非所有项目都必须同时调用。将它分成几个独立的项目将是一个解决方案,但我更喜欢一个更灵活的解决方案,它可以动态激活/停用顶级流程图中的某些块。

所以我的想法是根据变量的值启用/禁用块。这有可能吗?或者有其他类似的解决方案吗?

2 个答案:

答案 0 :(得分:0)

尝试“选择器”块。您可以使用两个变量设置活动输​​入/输出端口。

在内部,选择器是一个分层块,它将暂停您的流程图,断开以前活动的输入和输出块连接现在活动的块,然后继续操作流程图。

以这种方式,它不是样本准确的,可能不是选择的工具。您可能希望查看消息传递而不是使用变量,并转到“Multiply(with)Matrix”块。

答案 1 :(得分:0)

您可以使用带有一个输入和n个输出的epy块。在工作功能中,您可以根据需要映射输入。 example_parameter(可以通过流程图中的变量设置)可以确定输出索引。 在流程图中插入一个python块,双击它,在编辑器ctrl + a,ctrl + v中打开。 祝你好运!

 import numpy as np
 from gnuradio import gr
 import time

 class blk(gr.sync_block):  # other base classes are basic_block, 
 decim_block, 
 interp_block
"""Embedded Python Block example - a simple multiply const"""

def __init__(self, example_param=1.0):  # only default arguments here
    """arguments to this function show up as parameters in GRC"""
    gr.sync_block.__init__(
        self,
        name='EPY demux',   # will show up in GRC
        in_sig=[np.complex64],
        out_sig=[np.complex64,np.complex64] # ADD HERE HOW MANY OUTPUTS YOU WANT
    )
    # if an attribute with the same name as a parameter is found,
    # a callback is registered (properties work, too).
    self.example_param = example_param

def work(self, input_items, output_items):
    """example: multiply with constant"""
    output_items[int(self.example_param)][:] = input_items[0]
    return len(input_items[0])`