如何在GNU Radio 3.8中适配3.7版本的benchmark_rx.py与benchmark_tx.py
GNU Radio 3.8适配3.7 gr-digital窄带示例解决方案
1. 修复message_source属性缺失问题
GNU Radio 3.8对blocks模块的消息源做了类型化拆分,原3.7中的blocks.message_source被替换为带类型后缀的专用模块:
- 将
pkt.py中第81行的代码:
替换为:self._pkt_input = blocks.message_source(gr.sizeof_char, msgq_limit)
(self._pkt_input = blocks.message_source_b(msgq_limit)_b后缀对应char类型,若涉及其他数据类型,需用对应后缀模块,如float类型用message_source_f)
2. 替换已移除的digital.mod_pkts模块
3.7中的digital.mod_pkts是整合了包成帧、加扰、调制的组合块,3.8中该模块被移除,需手动搭建等效链路:
原代码(transmit_path.py):
self.mod = digital.mod_pkts(modulator, options.pkt_len, options.pkt_pad, options.pkt_enc, pad_for_usrp=True)
替换为等效链路:
# 1. 加扰模块(对应原pkt_enc参数) self.scrambler = digital.additive_scrambler_bb( 0x8A, 0x7F, 7, count=0, bits_per_byte=1, reset_tag_key="") # 2. 生成默认包头部 self.header_gen = digital.packet_header_default_bb( options.pkt_len, 0x1234, length_tag_name="packet_len") # 3. 组装头部与负载 self.packet_assembler = digital.packet_assembler_b( options.pkt_len, length_tag_name="packet_len") # 4. 初始化调制器(与原modulator参数对应,如GMSK调制) self.mod = modulator() # 按逻辑连接链路:消息源 → 解包 → 加扰 → 头部生成 → 组装 → 调制 # 需根据原代码的数据流顺序调整连接关系,确保功能与原mod_pkts一致
3. 接收端benchmark_rx.py对应调整
原3.7的digital.demod_pkts同样被移除,需替换为:
- 对应解调模块(如
digital.gmsk_demod_cb) - 头部解析模块(
digital.packet_header_parser_bb) - 负载解复用模块(
digital.packet_payload_demux_b) - 解扰模块(
digital.additive_descrambler_bb)
按接收数据流顺序连接各模块,对齐原功能。
4. 其他注意事项
- 确保所有Python2到Python3的语法转换完成(如
print加括号、异常处理语法调整) - 验证各模块的参数与原3.7示例一致,尤其是标签名(如
packet_len)、同步字、加扰系数等 - 分步测试单个模块初始化,排除模块导入错误后再整合整个拓扑
内容的提问来源于stack exchange,提问作者Trevor Gordon
相关产品推荐
相关产品推荐

