需要帮助理解数据流处理权衡

时间:2014-08-28 18:46:33

标签: stream iterator dataflow gnuradio

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

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

在我进一步完成这个项目之前,我想知道:有没有研究过这种实现流程图的不同方法之间的权衡?我真的很喜欢我能阅读的一篇文章,这样我才能理解这些问题,然后再遇到问题。

1 个答案:

答案 0 :(得分:0)

这是一个非常广泛的问题。你肯定可以阅读很多书籍,以便对手头的问题形成一个非常明智的意见。

然而,在通用OS的世界中并不存在拉动。你可以有两件事

  1. 轮询,您的下游区块不断询问“还有新数据吗?”,这很浪费,通常被认为是糟糕的设计
  2. waiting,它让你的下游块的线程等到调度程序或相邻块通知他更改(即,有新数据可用,或者你的下游块现在已经准备好处理更多数据,所以你可以生成一些)
  3. GNU Radio做的2.它可以很好地扩展,易于多线程,因此在SMP架构上运行良好。我已经写了一个非常小的,非常基本intro到GNU无线电调度机制如何工作,但也有一些信息从http://gnuradio.org

    链接
相关问题