可观察到模拟高频信号

时间:2014-05-06 14:31:45

标签: system.reactive

我有一台服务器接收来自客户端的批量信号样本。每批可包含多达1000个样品,每秒接收一次(1000 Hz)。一旦我收到样本,我想通过Observable在本地发布它们,它们是从信号源设备生成的频率。我已经整理了以下概念代码来完成我想要做的事情。

LINQPad代码:

var frequency = 1000; // samples / second
int sampleCount = 1000;
var samples = Enumerable.Range(1, sampleCount).ToArray();

ManualResetEvent done = new ManualResetEvent(false);
int count = 0;
Stopwatch sw = new Stopwatch();
sw.Start();

samples.ToObservable()
    .Do(_ => Thread.Sleep(1000/frequency))
    .Subscribe((next) => count++, () => { sw.Stop(); done.Set(); });

done.WaitOne();

sw.ElapsedMilliseconds.Dump("Subscription duration");
count.Dump("Items observed");

我尝试了其他方法来模拟样本之间的延迟,但是在如此高的频率下,任何基于计时器或基于任务的方法显然都有太多的开销来跟上。所以我的问题是:

  1. 这是延迟高频率观察的最佳方法吗?
  2. 在Do(...)方法中,我正在睡觉的'SubscribeOn'主题,对吗?
  3. 我应该明确地调用SubscribeOn()和ObserveOn()方法来帮助确保观察者代码不会干扰样本的发布吗?
  4. 提前致谢!

0 个答案:

没有答案