2010-11-24 125 views
6

我正在做陀螺仪和加速度计数据结合的一些数学,我想低通滤波结果数据。那么有人可能会发布一些低通滤波器的通用代码?如何实施低通滤波器?

+0

你想要的代码生成系数或只是进行过滤?它应该是IIR还是FIR滤波器? – Guy 2010-11-24 22:20:10

回答

6

一个一阶IIR低通滤波器可以是这样的形式:

output_value = rate * input_value + (1.0 - rate) * previous_output_value; 

这是相当多里面有什么Apple的AccelerometerGraph示例。您可以根据要滚降或开始衰减的频率(非常非常粗略地每秒钟抖动)来选择速率参数,以获得更平滑的结果输出以及输入数据的采样率。

2

低通滤波器简单地平滑结果以消除高频。最简单的低通滤波器是一个箱式滤波器,它通过将n个采样平均到一起来完成。

对于平均2个样品一起,这是因为这样做简单:

sample[n] (sample[n] + sample[n + 1])/2; 
2

如果Apple的AccelerometerGraph例子太复杂了,您不能理解,我为我的班级创建了一个更简单的加速度计示例,您可以下载here。这为原始加速度计值实现了一个简单的低通和高通滤波器,然后将结果记录到屏幕上。

由于hotpaw2和戈兹贝达描述,这里采用的滤波计算的非常简单的加权移动平均:

UIAccelerationValue lowPassFilteredXAcceleration = (currentXAcceleration * kLowPassFilteringFactor) + (previousLowPassFilteredXAcceleration * (1.0 - kLowPassFilteringFactor));