You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python编写的GNURadio单输出QA测试代码适配双异类型输出

如何调整GNURadio QA测试代码以测试复数和浮点型双输出模块?

我已编写一个具有1个输入、2个输出的GNURadio模块,目前正在用Python编写QA测试代码。以下是用于测试1输入1输出模块的代码,请问如何调整该代码以测试两种不同类型(复数和浮点型)的输出?

src_data = (0, 1, -2, 5.5, -0.5)
expected_result = (0, 2, -4, 11, -1)
src = blocks.vector_source_f (src_data)
mult = multiply_py_ff (2)
snk = blocks.vector_sink_f ()
self.tb.connect (src, mult)
self.tb.connect (mult, snk)
self.tb.run ()
result_data = snk.data ()
self.assertFloatTuplesAlmostEqual (expected_result, result_data, 6)

刚好做过类似的GNURadio模块测试,给你捋清楚怎么调整代码:

核心思路是分别处理两个输出端口,用对应数据类型的Sink接收结果,再用GNURadio QA框架提供的对应断言方法验证。假设你的模块输入是浮点型,第一个输出为浮点、第二个为复数(如果类型顺序反过来,调整端口索引就行),调整后的完整测试代码如下:

def test_my_dual_output_module(self):
    # 1. 准备测试数据与预期结果
    src_data = (0, 1, -2, 5.5, -0.5)  # 输入浮点数据
    # 预期的浮点输出(根据你的模块功能自定义)
    expected_float_out = (0, 2, -4, 11, -1)
    # 预期的复数输出(根据你的模块功能自定义,比如转复数后加虚部1)
    expected_complex_out = (0+0j, 1+1j, -2+1j, 5.5+1j, -0.5+1j)

    # 2. 创建流图组件
    src = blocks.vector_source_f(src_data)
    # 替换成你的双输出模块实例,比如 my_custom_module()
    dual_out_module = my_custom_module()
    # 对应类型的Sink:浮点用vector_sink_f,复数用vector_sink_c
    float_sink = blocks.vector_sink_f()
    complex_sink = blocks.vector_sink_c()

    # 3. 连接流图:指定模块的输出端口
    self.tb.connect(src, dual_out_module)
    self.tb.connect(dual_out_module[0], float_sink)  # 连接第一个输出端口(浮点)
    self.tb.connect(dual_out_module[1], complex_sink)  # 连接第二个输出端口(复数)

    # 4. 运行流图并清理
    self.tb.run()
    self.tb.stop()
    self.tb.wait()  # 确保流图完全停止

    # 5. 获取结果并验证
    float_result = float_sink.data()
    complex_result = complex_sink.data()

    # 浮点结果用assertFloatTuplesAlmostEqual验证
    self.assertFloatTuplesAlmostEqual(expected_float_out, float_result, 6)
    # 复数结果用GNURadio QA提供的assertComplexTuplesAlmostEqual验证
    self.assertComplexTuplesAlmostEqual(expected_complex_out, complex_result, 6)

几个关键注意点:

  • 模块的输出端口索引从0开始,如果你模块的第一个输出是复数、第二个是浮点,只需要调换dual_out_module[0]和dual_out_module[1]对应的Sink即可
  • 复数预期值可以用x+yj的字面量形式,或者complex(x, y)函数创建
  • 一定要调用stop()和wait(),避免流图资源未释放导致后续测试出错
  • 如果你的模块输入是复数类型,只需要把vector_source_f换成vector_source_c,对应调整输入数据格式就行

内容的提问来源于stack exchange,提问作者Alex Rosa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:52:38