【问题标题】:How to implement a LowPass Filter?如何实现低通滤波器?
【发布时间】:2010-11-24 22:16:08
【问题描述】:

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

【问题讨论】:

  • 您希望代码生成系数还是只执行过滤?应该是 IIR 还是 FIR 滤波器?
  • 好吧,我想要一个类似于 Apple 用于过滤加速度计数据的过滤器。只有他们的代码对我不起作用。
  • 在什么情况下不起作用?
  • 好吧,看来我需要传入 UIAccelerometer 结构(我没有使用),除非那只是一个保存当前加速度计值的结构?
  • UIAcceleration 只是一个包含加速度计每个轴的当前值的结构。

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


【解决方案1】:

一阶 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;
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-06
        • 1970-01-01
        • 2016-02-26
        • 1970-01-01
        • 1970-01-01
        • 2017-12-21
        • 2010-10-23
        相关资源
        最近更新 更多