iOS - 加速度计的高通滤波器方程

Boo*_*oon 4 signal-processing objective-c ios

有人可以解释一下如何到达下面的等式来加速度计值的高通滤波吗?我不需要数学推导,只需对它进行直观的解释即可.

    #define kFilteringFactor 0.1
    UIAccelerationValue rollingX, rollingY, rollingZ;

    - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {

        // Subtract the low-pass value from the current value to get a simplified high-pass filter

        rollingX = (acceleration.x * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));

        rollingY = (acceleration.y * kFilteringFactor) + (rollingY * (1.0 - kFilteringFactor));

        rollingZ = (acceleration.z * kFilteringFactor) + (rollingZ * (1.0 - kFilteringFactor));

         float accelX = acceleration.x - rollingX;
         float accelY = acceleration.y - rollingY;
         float accelZ = acceleration.z - rollingZ;

       // Use the acceleration data.

    }

Jan*_*ano 14

虽然其他答案是正确的,但这是一个简单的解释.使用kFilteringFactor 0.1,您将获取当前值的10%并添加先前值的90%.因此,该值与先前值保持90%的相似性,这增加了其对突然变化的抵抗力.这样可以降低噪音,但也会降低对信号变化的响应能力.为了降低噪音并保持响应,你需要非平凡的滤波器,例如:互补,卡尔曼.


Pau*_*l R 11

rollingX,rollingY,rollingZ值在对函数的调用期间是持久的.它们应在使用前的某个时刻初始化.这些"滚动"值只是输入值的低通滤波版本(也称为"移动平均值"),它们从瞬时值中减去,为您提供高通滤波输出,即您从移动平均线获得当前偏差.

附加说明

移动平均线只是一个粗略的低通滤波器.在这种情况下,它就是所谓的ARMA(自回归移动平均线),而不仅仅是一个简单的MA(移动平均线).在DSP术语中,这是一个递归(IIR)滤波器而不是非递归(FIR)滤波器.不管所有术语如何,是的,您可以将其视为平滑函数" - 它"平滑"所有高频能量并让您对信号的平均值进行缓慢变化的估计.如果您然后减去这个来自瞬时信号的平滑信号然后差异将是你滤出的内容,即高频率的东西,因此你得到一个高通滤波器.换句话说:high_pass_filtered_signal = signal - smoothed_signal.