gnuradio:如何更改退出“关联访问代码 - 标记”块的标记值?

信息处理 格努拉迪奥 前言
2022-02-07 18:02:27

背景:我在 gnuradio 中构建了一个传统的解调器,并试图将有效负载数据从流程图发送到外部 Python 脚本。我正在使用 gnuradio v3.7.12。

在我看来,最佳方法是使用流程图:

  • 找到序言并标记它
  • 将有效载荷后面的数据转换为 pdu
  • 将 pdu 作为消息发送到外部 Python 代码

我已经使用以下块构建了一个成功执行此操作的流程图:输入比特流->“关联访问代码 - 标记流”->“重新打包位”->“到 PDU 的标记流”->“ZMQ PUSH 消息接收器”。

问题是“相关访问代码 - 标记流”块需要在前导码和有效负载之间有一个非常具体的标头:包含有效负载大小的 32 位(16 位重复两次)。如果我是控制输入信号的人,这很好。但是,我尝试接收的任何其他信号都不会包含此标头字段。

因此,我尝试使用“相关访问代码 - 标记”块而不是“相关访问代码 - 标记流”块,但该块将长度标记值设置为 0,这会阻止信号链的其余部分正常工作. 似乎我需要做的就是将长度标签的值更改为我预期的有效负载长度,但不幸的是,经过数小时搜索有关标签、消息和 pdus 的文档后,我一直无法弄清楚如何做到这一点.

我在正确的轨道上吗?我附上了我的工作流程图(带有“标签流”块)以及非工作流程图(带有“标签”块)。我尝试了很多东西(标记流对齐,流到标记流),但我什么也做不了。

工作 GRC:https ://www.dropbox.com/s/ilv0ry1x4nvqelj/tag_stream_test.grc?dl=0

非工作 GRC(无法设置长度标签!): https ://www.dropbox.com/s/aoueiovuvj9ss8z/tag_test.grc?dl=0

感谢您的任何帮助,您可以提供。个人电脑

2个回答

我也遇到了同样的问题,并想出了“标记重写”python 块来更新值。 https://gist.github.com/4a65be9c5139eb132f311b68808d36a6

但是,即使我能够更新长度,“Repack Bits”块似乎也无法接收它。因此,虽然我能够更改标签的值,但我仍然没有实现从流中取出数据的目标。

迄今为止我发现的唯一答案是为此创建一个自定义块。这是我的解决方案: https ://github.com/paulgclark/gr-reveng

“相关访问代码 - 标记流 - 固定长度”块(名称太长)不处理任何包含长度的标题字段,而只是从您输入的块属性中获取长度。