【问题标题】:Block types in GNU RadioGNU Radio 中的块类型
【发布时间】:2016-07-17 08:16:17
【问题描述】:

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

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

请问在这种情况下如何处理?我走的是正确的道路吗?有谁知道继续这种类型的场景吗?

【问题讨论】:

    标签: gnuradio gnuradio-companion


    【解决方案1】:

    GNU Radio 拥有的sync_block/interpolator/decimator“模板”没有涵盖您的情况(输入 0 和输入 1 与输出的相对速率不同),因此您必须使用通用的块方法。

    假设您熟悉gr_modtool¹,您可以使用它添加诸如interpolator(相对率>1)、decimators(sync(=1)块:

    -t BLOCK_TYPE, --block-type=BLOCK_TYPE
                        One of sink, source, sync, decimator, interpolator,
                        general, tagged_stream, hier, noblock.
    

    但还要注意general 类型。使用它,您可以实现一个对输入和输出之间的关系没有任何限制的块。这意味着

    1. 您将不得不手动 consume() 从输入中获取项目,因为您从输入中获取的项目数量无法再通过输出项目的数量得出,并且
    2. 您必须实现forecast 方法来告诉GNU Radio 调度程序对于给定的输出您需要多少项目。

    gr_modtool 会给你一个存根,你只需要添加正确的代码!


    ¹ 如果你不是:它在GNU Radio Guided Tutorials 第 3 部分左右介绍,我认为这对你来说会是一个快速而有趣的阅读。

    【讨论】:

    • 感谢您的回复。实际上我正在使用gr_modtool,它是一个很棒的工具。而且,我认为我应该尝试更好地了解调度程序如何通过Work()general_work() 方法管理输入和输出项。
    【解决方案2】:

    考虑到这个问题是在 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

    Pattern 字段允许我们控制输入端口中的位将被交错的顺序。默认情况下,它们在 [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]。

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

    patterned_interleaver_3_inputs

    【讨论】:

      猜你喜欢
      • 2019-12-16
      • 2016-02-25
      • 2020-01-09
      • 1970-01-01
      • 2018-04-10
      • 2020-08-20
      • 2017-01-21
      • 1970-01-01
      • 2020-07-10
      相关资源
      最近更新 更多