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

有人可以解释一下,如何达到下面的公式加速度计值的高通滤波? 我不需要math推导,只需要直观的解释就足够了。

     #define kFilteringFactor 0.1
     UIAccelerationValue rollingX,rollingY,rollingZ;

     - (void)加速度计:(UIAccelerometer *)加速度计didAccelerate :( UIAcceleration *)加速度{

         //从当前值减去低通值得到一个简化的高通滤波器

         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;

        //使用加速度数据

     }

rollingX,rollingY,rollingZ值在对函数的调用中保持不变。 它们应该在使用前的某个时候初始化。 这些“滚动”值只是input值的低通滤波版本(又名“移动平均值”),从瞬时值中减去input值,以获得高通滤波输出,即您正在从移动平均值获得当前偏差。

附加说明

移动平均线只是一个粗略的低通滤波器。 在这种情况下,它就是所谓的ARMA(自回归移动平均值),而不仅仅是一个简单的MA(移动平均值)。 在DSP方面,这是一个recursion(IIR)滤波器,而不是非recursion(FIR)滤波器。 不pipe所有术语如何,是的,你可以把它看作是一个平滑函数“ – 它”平滑掉“所有的高频能量,让你慢慢地改变信号平均值的估计值,如果你减去这个来自瞬时信号的平滑信号,然后差异就是你滤除的内容,即高频的东西,因此你得到一个高通滤波器,换句话说: high_pass_filtered_signal = signal - smoothed_signal

而其他答案是正确的,这是一个简单的解释。 使用kFilteringFactor 0.1,您将获得当前值的10%,并将之前值的90%。 因此,这个值与之前的值保持了90%的相似度,这增加了它对突然变化的抵抗力。 这降低了噪声,但也使得它对信号变化的响应性降低。 为了减less噪音并保持其响应,您将需要非平凡的filter,例如: 补充 ,卡尔曼。

好的,这个代码是在计算一个低通信号,然后减去当前值。

一个方波的值是5和10两个值。换句话说,它在5和10之间振荡。然后低通信号试图find平均值(7.5)。 然后将高通信号计算为电stream值减去平均值,即10-7.5 = 2.5或5-7.5 = -2.5。

低通信号是通过对过去的值进行积分来计算的,通过将当前值的一小部分加到过去的低通值的90%。