如何将 GNU Radio 块的输出类型声明为 PMT?

How to declare the output type of a GNU Radio block to be PMT?

简而言之:我想在我的块中输出 PMT,但 GNU Radio 不允许。

通常我在 GNU Radio 上为不同的应用程序编写 OOT 块。在这里,我试图编写一个块来将文件输出为消息类型。

问题是如果我们块的输出类型为numpy.float32,我们声明相同使用:

def __init__(self):
  gr.sync_block.__init__(self,name="<anything_you_want>",out_sig=[(numpy.float32)])

现在我有一个类似的问题,我希望输出是 GNU Radio 的 PMT 类型。在那种情况下 out_sig 应该是什么?

PMT(多态类型)是可变大小的便携式容器。

它们用于消息传递和标记,但不用于流数据。

如果要输出消息,则定义一个空的out_sig,即

..., out_sig=[], in_sig=[])

并使用message_port_register_out方法注册输出端口,使用message_port_pub方法发送消息。

消息传递记录在 the doxygen documentation

但是,我建议您学习 Guided Tutorials,并阅读第 1-5 章,其中解释了项目流和消息之间的区别。由于您已经可以编写 OOT,因此这对您来说应该是一个快速阅读:)

如果你想要一个已经使用上述方法的最小块,试试我的最小 variable_to_msg 块。

此外,已经有一个块可以打开文件并提取消息:它是 Tim O'Shea 的 gr-pyqt, and is called file_message_source.

的一部分