如何从噪声中过滤加速度计数据

时间:2010-09-26 11:36:49

标签: filtering accelerometer

alt text

附图是带有3轴的加速度计数据图。情节中的突然颠簸是噪音。我想摆脱它们。那么在这种情况下应该使用什么过滤器?如果有可能为它提供一些伪代码和解释。

6 个答案:

答案 0 :(得分:2)

看起来你只想要一个低通滤波器。

答案 1 :(得分:2)

对于测量数据,您可以在其中建立物理上正在进行的模型,或物理上可能的模型,我建议使用Kalman filter。它比其他方法更复杂,但可能提供更清晰的输出和/或更好的响应性。

答案 2 :(得分:1)

查看数据,你不希望任何偷看在一定时间内改变一定数量的值(大约200,让我们称之为max_y_delta)(也许是5-15,{{1} })。

因为我不确定您的数据具有哪种结构,所以我假设它是3个浮点值数组max_x_delta,每个整数位置都有一个数据点。我提出的解决方案应尽可能简单,您应该尝试data_array的不同值以获得良好的结果。即使有正确的价值观,我也相信有更好的解决方案,但也许这个对你来说已经足够好了。

max_x/y_delta

请注意,此代码有两个您可能不需要的缺点:

  • 那里的检测非常简单 你的数据中还有一些东西 意味着在那里,所以你可能 失去其中一些。
  • 在检测到峰值后,峰值周围的max_x_delta = 10 max_y_delta = 200 for each of the 3 arrays for x = -1000...1000 points_above_delta = 0 average_value = 0 for deltax = -max_x_delta/2...max_x_delta/2 average_value += data_array[deltax] if abs(data_array[deltax] - data_array[x]) > max_y_delta points_above_delta++ endif end for deltax average_value = average_value / max_x_delta if points_above_delta > max_x_delta/4 for deltax = -max_x_delta/2...max_x_delta/2 data_array[deltax] = average_value end for deltax end if end for x 区域中的每个值都会设置为该区域中的平均值,这将给您一条直线。

答案 3 :(得分:1)

答案 4 :(得分:0)

尝试中值滤波器:http://en.wikipedia.org/wiki/Median_filter,它可以去除峰值,但不能去除边缘

答案 5 :(得分:0)

中值滤波器用于去除二维数据中的椒盐噪声。在这个您想要去除的峰的一维数据中,高强度点类似于2D中的盐和胡椒。我会推荐一个中值滤波器,它将有助于摆脱这些尖峰并且几乎没有变化。唯一的缺点是它是一个非线性滤波器。只要您仔细更新社区,就应该高效实施。