如何实现LowPass过滤器?

时间:2010-11-24 22:16:09

标签: iphone iphone-sdk-3.0 ios4 signal-processing

我正在对陀螺仪和加速度计数据进行一些数学计算,我想对结果数据进行低通滤波。那么有人可以为低通滤波器发布一些通用代码吗?

3 个答案:

答案 0 :(得分:6)

一阶IIR低通滤波器的形式如下:

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

这正是Apple的AccelerometerGraph示例中的内容。您可以根据要滚降或开始衰减的频率(非常非常大致每秒抖动)来选择速率参数,以获得更平滑的结果输出,以及输入数据的采样率。

答案 1 :(得分:2)

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

对于平均2个样本,这很简单:

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

答案 2 :(得分:2)

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

正如hotpaw2和Goz描述的那样,这使用了一个非常简单的加权滚动平均值来计算滤波器:

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