GNU Radio报错Index Error: output_index必须小于noutputs求助
GNU Radio Selector Block索引错误排查
问题描述
使用GNU Radio流图时,尝试通过Selector Block选择对应输出,运行时报错:
Index Error: output_index must be < noutputs
选择的索引1小于输出数量2,但仍触发该错误,以下是FT8_Receive层级块及顶层OOT模块的相关代码。
FT8_Receive层级块代码
class FT8_Receive(gr.hier_block2): def __init__(self, wave_select=0): gr.hier_block2.__init__( self, "FT8_Receive", gr.io_signature(1, 1, gr.sizeof_float*1), gr.io_signature(0, 0, 0), ) ################################################## # Parameters ################################################## self.wave_select = wave_select ################################################## # Connections ################################################## self.connect((self.blocks_selector_0, 1), (self.blocks_wavfile_sink_0_0, 0)) self.connect((self.blocks_selector_0, 0), (self.blocks_wavfile_sink_0_0_0, 0)) self.connect((self, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.blocks_selector_0, 0))
def get_wave_select(self): return self.wave_select def set_wave_select(self, wave_select): self.wave_select = wave_select self.blocks_selector_0.set_output_index(self.wave_select)
顶层流图OOT模块代码
from FT8_Receive import FT8_Receive RCV = FT8_Receive() wave_select = 1 RCV.set_wave_select(wave_select)
问题原因排查
报错的核心原因是Selector Block初始化时未指定正确的输出端口数量:
- 代码中缺失
self.blocks_selector_0的初始化逻辑,GNU Radio的Selector Block默认输出端口数量为1。 - 即使后续连接了两个输出端口到WAV Sink,Selector内部的
noutputs参数仍为默认值1,此时设置索引1会超出范围,触发Index Error。
解决方法
- 在FT8_Receive的
__init__方法中,补充Selector Block的初始化代码,明确指定输出端口数量为2:
# 在Parameters部分之后、Connections部分之前添加 self.blocks_selector_0 = gr.blocks.selector(gr.sizeof_float, 0, noutputs=2)
- 在
__init__方法末尾,调用self.set_wave_select(self.wave_select),确保初始参数生效:
# 在Connections部分最后添加 self.set_wave_select(self.wave_select)
- 重新编译并运行流图,即可正常设置索引1。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

