13

我正在专门研究以一种或其他方式编写一些信号处理算法,或者可能是这两者的某种组合。

性能不是一个大问题,表达意图的清晰性更为重要。

我希望实现以下“块”并组合它们:

  • 滤波器(FIR 和 IIR)
  • 相位检测器
  • 集成商
  • 搅拌机
  • 函数发生器
  • PLL(使用上述作为构建块)

我知道 Rx 可以被视为“Linq-to-streams”,而 TPL 是对并发的抽象。我还了解到 Rx 在内部使用 TPL 来管理其异步位,并且 TPL 数据流为 TPL 添加了可组合性。

所以两者都是异步的,都是可组合的,都是相当高级的(Rx moreso)。一般情况下和我上面的信号处理项目中应该在哪里使用它们?

4

1 回答 1

7

这取决于您正在处理什么样的原语 - 如果您使用放大类型来推送数据,Rx 和 TPL 会更加丰富,但如果您正在处理单个样本(例如 aIObservable<byte>ISourceBlock<float>),它可能工作很乏味。

最近实现了函数发生器、FFT、功率谱量化器等,我从 Rx 开始(这不是 TPL 擅长的并发/并行的情况),但发现我花了更多时间试图让它在Rx 模型 - 我最终选择了System.Stream.

它对我来说效果很好,并且令人惊讶地可组合。然而,性能和避免 GC 是我的首选,所以如果你也不介意,我建议 Rx - 你可以用反应式组合器做一些非常酷的事情。

于 2012-03-01T23:22:30.033 回答