GNU Radio中的块类型

时间:2016-03-29 16:30:59

标签: gnuradio gnuradio-companion

我还在学习GNU Radio,但我无法理解有关信号处理块类型的内容。据我所知,如果我创建一个块,在输入和输出4个样本中说2个样本,它将是2的插值器。

但是现在,我想创建一个将成为成帧器的块。因此,它将有两个输入和一个输出。该块将从第一个输入接收n个样本,然后从第二个输入获取m个输入并附加到从输入1接收的样本,然后输出它们。在这种情况下,我的样本应该是字节。

请问这个案子怎么办?我这样走的是正确的道路吗?有人知道继续这种情况吗?

2 个答案:

答案 0 :(得分:2)

您的情况(输入0和输入1与输出的相对比率不同)不包含在GNU Radio所拥有的sync_block / interpolator / decimator“模板中,因此你必须使用通用块方法。

假设您熟悉gr_modtool¹,可以使用它来添加interpolator(相对费率> 1),decimators(< 1)和{{ 1}}(= 1)块:

sync

但请注意-t BLOCK_TYPE, --block-type=BLOCK_TYPE One of sink, source, sync, decimator, interpolator, general, tagged_stream, hier, noblock. 类型。使用它,您可以实现一个对输入和输出之间的关系没有任何限制的块。这意味着

  1. 您必须从输入中手动general个项目,因为您从输入中获取的项目数量不再能够通过输出项目的数量得出,并且
  2. 您必须实现一个consume()方法来告诉GNU Radio调度程序您需要为给定输出提供多少项目。
  3. forecast会给你一个存根,你只需要添加正确的代码!

    <小时/> ¹如果你不是:它已经在GNU Radio Guided Tutorials中引入,第3部分左右,我认为这将是一个快速而有趣的读物。

答案 1 :(得分:0)

考虑到这个问题是4年前提出的,并且从那时起GNU Radio发生了许多变化,我想补充一下答案,现在这可以与 Patterned Interleaver 一起使用

patterned_interleaver_image

此块的工作方式如下:它在左侧的端口中接收输入,并在右侧的端口中输出单个交错模式。因此,让我们想象一个具有2个输入V1和V2的块:

V1 = [0,1,0,0,1,1]

V2 = [1,1,1,0,1,0]

假设我们希望输出是V1的前2位,然后是V2的前2位,然后是V1的后2位,然后是V2的后2位,依此类推...也就是说,我们希望输出为

Vo = [0,1,1,1,0,0,1,0,1,1,1,0]。

为完成此任务,我们转到 Patterned Interleaver 块的属性,该块如下所示:

patterned_interleaver_properties

模式字段使我们可以控制输入端口中的比特被交织的顺序。默认情况下,它们位于[0,0,1,1]中,这意味着该块将从输入端口0提取2位,然后从输入端口1提取2位。相应的输出将为

[0,1,1,1,0,0,1,0,1,1,1,0,],

即V1的前2位,然后是V2的前2位,然后是V1的后2位,依此类推。

让我们看看另一个示例。如果“模式”字段设置为[0,0,1,1,1,0],则输出将是从输入端口0开始的2位,然后是从输入端口1开始的3位,然后是从输入端口0开始的1位。输出,我们将获得[0,1,1,1,1,0,0,1,0,1,0,0]。

最后,“模式”字段还用于确定输入端口的数量。如果“模式”字段为[0,0,1,2],我们将看到另一个输入端口已添加到块中。

patterned_interleaver_3_inputs