gpt4 book ai didi

c# - 过滤连续数据,如何去除瞬变?

转载 作者:行者123 更新时间:2023-11-30 19:43:45 24 4
gpt4 key购买 nike

我正在编写一个 C# 应用程序,它以约 100Hz 的速率从 Wii Remote 连续获取加速度计数据。此数据在到达时存储在列表中(每个轴一个列表)。我有一个计时器,它每隔一秒触发一次(所以当它触发时列表包含约 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 的截图。输入数据是第一张图,第二张显示过滤器输出: Graphs showing input and output data

最佳答案

FIR滤波器有 transient 阶数的长度。对于 30 的瞬变长度,您可以保存前 100 个样本中的最后 30 个样本并将它们添加到当前数据中,然后在过滤后丢弃该瞬变(130 个过滤样本中的前 30 个)。

关于c# - 过滤连续数据,如何去除瞬变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14184422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com