我正在编写一个 C# 应用程序,它以 ~100Hz 的速率从 Wii 遥控器连续获取加速度计数据。此数据在到达时存储在一个列表中(每个轴一个列表)。我有一个计时器,它每隔一秒触发一次,(所以当它触发时列表包含~100 个元素),然后它对列表应用一个低通滤波器(使用信号处理 Math.NET Neodym 库),并写入将数据保存到文件中,并清除下一批数据的所有列表。
现在的问题是,输出的过滤器数据在开始时波动很大,每次应用过滤器时都会发生这种情况,所以每隔一秒,我的数据中就会出现一些错误值,这使得它完全没用。
我该如何解决这个问题,以便过滤器仍然每秒钟应用一次,但可以避免瞬变。我怀疑这可以使用重叠窗口来完成,但不太确定如何?
这是我的过滤器的代码,此代码每秒执行一次:
listXLow = MathNet.SignalProcessing.Filter.OnlineFilter.CreateLowpass(MathNet.SignalProcessing.Filter.ImpulseResponse.Finite, 100, 1, 30).ProcessSamples(listX.ToArray()).ToList();
在参数中,在 ImpulseResponse.Finite 之后,100 是采样率,1 是截止频率,30 是滤波器阶数。
这是显示我的 I/O 外观的屏幕截图。输入数据是第一个图,第二个显示过滤器输出: