0

我想为数字信号处理实现一个基于数据流的系统,就像GNU Radio一样,其中处理以块的形式进行,并且这些块串在一起以处理数据流。据我所知,有三种方法可以传递数据流:一个块可以“推送”数据到下一个块,一个块可以从前一个块“拉”数据,或者块可以处理数据缓冲区并返回数据缓冲区,调度程序处理缓冲区(最后一种方式是 GNU Radio 的操作方式)。

每种方法都需要权衡取舍。例如,对于接受一个输入流并返回两个输出流的块,“拉动”架构要求输出流使用任意大的缓冲区进行缓冲(第二个输出可以n在第一个输出之前“拉动”样本)被拉)。类似地,“推送”方法对于采用 2 个输入流并返回 1 个输出流的块有同样的问题。但我认为这两种方法都使块实现更容易,因为每个块都可以将它们的输入和输出视为一个流。

在我进一步了解这个项目之前,我想知道:有没有研究过实现这种流程图的不同方式之间的权衡?我真的很想要一篇我可以阅读的文章,以便在实施中途遇到问题之前了解这些问题。

4

1 回答 1

0

这是一个非常广泛的问题。您绝对可以阅读很多书籍,以便对手头的问题形成非常有见地的意见。

但是,通用操作系统的世界中不存在拉动。你可以有两件事

  1. 轮询,您的下游块不断询问“还有新数据吗?”,这是一种浪费,通常被认为是糟糕的设计
  2. 等待,这让您的下游块的线程等待,直到调度程序或相邻块通知他更改(即有新数据可用,或者您的下游块现在准备处理更多数据,因此您可以生成一些)

GNU Radio 的 2. 可扩展性很好,易于多线程,因此在 SMP 架构上运行良好。我写了一篇关于 GNU Radio 调度机制如何工作的非常小的、非常基本的介绍,但也有一些来自http://gnuradio.org的信息链接

于 2015-01-08T17:04:58.473 回答