2014-08-28 34 views
0

我想實現一個基於數據流的數字信號處理系統,很像GNU Radio,其中處理髮生在塊中,並且這些塊串在一起處理數據流。據我所知,有三種方式可以傳遞數據流:塊可以將數據「推送」到下一個塊,塊可以從前一個塊「拉」數據,或者塊可以處理數據緩衝區並返回數據緩衝區,調度程序處理緩衝區(最後一種方式是GNU Radio的操作方式)。需要幫助瞭解數據流處理權衡

每種方法都有權衡。例如,對於採用一個輸入流並返回兩個輸出流的塊,「拉」結構要求輸出流用任意大的緩衝器進行緩衝(第二個輸出可以在第一個輸出之前被「拉動」輸出被拉動)。同樣,「推送」方法對於採用2個輸入流並返回1個輸出流的塊也有同樣的問題。但我認爲這兩種方法都可以使塊實現更容易,因爲每個塊都可以將它們的輸入和輸出視爲一個流。

在我進一步瞭解該項目之前,我想知道:是否有對這種實現這種流程圖的不同方式之間的權衡進行研究?我真的很想寫一篇我可以閱讀的文章,以便我在理解這些問題之前,在實施過程中遇到一些問題。

回答

0

這是一個令人難以置信的廣泛問題。你肯定可以閱讀很多書籍,就這件事情形成一個真正的消息靈通的看法。

但是,在通用OS的世界中不存在拉動。你可以有兩件事情

  1. 投票,你的下游塊不斷地問「有沒有然而新的數據?」,這是一種浪費,一般被認爲是不好的設計
  2. 等待,它可以讓你的下游封閉的線程等待,直到調度程序或相鄰塊通知他的變化(即有新的數據可用,或者您的下游塊現在已準備好處理更多數據,因此您可以生產一些)

GNU Radio確實是2.擴展性好,易於多線程,因此可以在SMP架構上出色地工作。我已經寫了一個非常小的,真正基本的GNU Radio調度機制,但也有一些信息從http://gnuradio.org