intputs/outputs 可变数量的 GNU Radio 块

GNU Radio block with variable number of intputs/outputs

我目前正在尝试使用自定义源块对多个通道进行并行信号处理。到目前为止,我创建了一个 OOT 源块,它可以将一个通道的数据完美地流式传输到一个输出。

现在我正在寻找一种方法来扩展此模块,以便它可以并行支持更多数量的通道(= 源块的输出;最多 64 个)。因为用于提取样本的协议将它们全部提取在一起,所以不可能使用同一源块的更多实例。

到目前为止我发现的东西:

这个问题是否有已知的解决方案或解决方法?

看看 add 块:它有许多可配置的输入!

现在,这里的技巧有三重:

  1. 定义一个 io_signature 作为允许可调数字的输入和输出。如果您使用 gr_modtool add 创建新区块,您的 io_signatures 将被 <+MIN_IN+><+MAX_IN+><+MIN_OUT+><+MAX_OUT+> 填充。调整这些以反映您实际的最小和最大输入和输出端口号。如果您想要 1infinity 输入,请使用 1-1
  2. 在您的 (general_)work 方法中,通过执行类似 ninputs = input_items.size() 的操作检查输入数量,并通过执行 noutputs = output_items.size() 检查输出数量.
  3. (可选,如果您想使用 GRC)修改块 GRC XML:

    中的 <sink>/<source> 定义
    <sink>
            <name>in</name>
            <type>complex</type>
            <nports>$num_inputs</nports>
    </sink>
    

num_inputs 可以是块参数; compare the add_XX block源代码。