intputs/outputs 可变数量的 GNU Radio 块
GNU Radio block with variable number of intputs/outputs
我目前正在尝试使用自定义源块对多个通道进行并行信号处理。到目前为止,我创建了一个 OOT 源块,它可以将一个通道的数据完美地流式传输到一个输出。
现在我正在寻找一种方法来扩展此模块,以便它可以并行支持更多数量的通道(= 源块的输出;最多 64 个)。因为用于提取样本的协议将它们全部提取在一起,所以不可能使用同一源块的更多实例。
到目前为止我发现的东西:
- A pdf 这似乎已经准确地解释了要做什么,但它似乎已经过时并且 GNU Radio 不再支持此功能。
- description 将来应该实现的功能。
这个问题是否有已知的解决方案或解决方法?
看看 add
块:它有许多可配置的输入!
现在,这里的技巧有三重:
- 定义一个
io_signature
作为允许可调数字的输入和输出。如果您使用 gr_modtool add
创建新区块,您的 io_signatures
将被 <+MIN_IN+>
、<+MAX_IN+>
、<+MIN_OUT+>
和 <+MAX_OUT+>
填充。调整这些以反映您实际的最小和最大输入和输出端口号。如果您想要 1
到 infinity
输入,请使用 1
、-1
。
- 在您的 (
general_
)work
方法中,通过执行类似 ninputs = input_items.size()
的操作检查输入数量,并通过执行 noutputs = output_items.size()
检查输出数量.
(可选,如果您想使用 GRC)修改块 GRC XML:
中的 <sink>
/<source>
定义
<sink>
<name>in</name>
<type>complex</type>
<nports>$num_inputs</nports>
</sink>
num_inputs
可以是块参数; compare the add_XX
block源代码。
我目前正在尝试使用自定义源块对多个通道进行并行信号处理。到目前为止,我创建了一个 OOT 源块,它可以将一个通道的数据完美地流式传输到一个输出。
现在我正在寻找一种方法来扩展此模块,以便它可以并行支持更多数量的通道(= 源块的输出;最多 64 个)。因为用于提取样本的协议将它们全部提取在一起,所以不可能使用同一源块的更多实例。
到目前为止我发现的东西:
- A pdf 这似乎已经准确地解释了要做什么,但它似乎已经过时并且 GNU Radio 不再支持此功能。
- description 将来应该实现的功能。
这个问题是否有已知的解决方案或解决方法?
看看 add
块:它有许多可配置的输入!
现在,这里的技巧有三重:
- 定义一个
io_signature
作为允许可调数字的输入和输出。如果您使用gr_modtool add
创建新区块,您的io_signatures
将被<+MIN_IN+>
、<+MAX_IN+>
、<+MIN_OUT+>
和<+MAX_OUT+>
填充。调整这些以反映您实际的最小和最大输入和输出端口号。如果您想要1
到infinity
输入,请使用1
、-1
。 - 在您的 (
general_
)work
方法中,通过执行类似ninputs = input_items.size()
的操作检查输入数量,并通过执行noutputs = output_items.size()
检查输出数量. (可选,如果您想使用 GRC)修改块 GRC XML:
中的<sink>
/<source>
定义<sink> <name>in</name> <type>complex</type> <nports>$num_inputs</nports> </sink>
num_inputs
可以是块参数; compare the add_XX
block源代码。