我有一个具有多种功能的GRC项目,但并非所有项目都必须同时调用。将它分成几个独立的项目将是一个解决方案,但我更喜欢一个更灵活的解决方案,它可以动态激活/停用顶级流程图中的某些块。
所以我的想法是根据变量的值启用/禁用块。这有可能吗?或者有其他类似的解决方案吗?
答案 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])`