GNU Radio io_signature

GNU Radio io_signature

本文关键字:signature io Radio GNU      更新时间:2023-10-16

我进入了GNU Radio,在我创建了一个新块之后,在主类中我有这样的代码:

square_ff_impl::square_ff_impl()
  : gr::block("square_ff",
              gr::io_signature::make(<+IMIN+>, <+IMAX+>, sizeof (<+ITYPE+>)), // input signature
              gr::io_signature::make(<+OMIN+>, <+OMAX+>, sizeof (<+OTYPE+>))) // output signature
{
    // empty constructor
}

我真的不知道该把什么放在最小和最大(即使在阅读文档之后)。

你能给我一些例子吗?

IMIN - minimum number of acceptable input ports
IMAX - maximum number of acceptable input ports
OMIN - minimum number of acceptable output ports
OMAX - maximum number of acceptable output ports

文档在BlocksCodingGuide的IOSignatures部分中讨论了一点:

  • 前两个参数是最小和最大端口数,这允许
  • 在运行时有一个可选择的端口数。

值为-1表示"无限制"。

作为一个源块的例子,看一下null源块的IO签名,它不接受输入:

null_source_impl::null_source_impl (size_t sizeof_stream_item)
  : sync_block("null_source",
                  io_signature::make(0, 0, 0),
                  io_signature::make(1, -1, sizeof_stream_item))
{
}

对于接收器,检查null接收器,它没有输出:

null_sink_impl::null_sink_impl(size_t sizeof_stream_item)
  : sync_block("null_sink",
               io_signature::make(1, -1, sizeof_stream_item),
               io_signature::make(0, 0, 0))
{
}

和一个简单的处理块add_ff,它接受无限输入,只产生1个输出流:

add_ff_impl::add_ff_impl(size_t vlen)
  : sync_block("add_ff",
          io_signature::make (1, -1, sizeof(float)*vlen),
          io_signature::make (1,  1, sizeof(float)*vlen)),
d_vlen(vlen)
{
...