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.
}
Pau*_*l R 11
rollingX,rollingY,rollingZ值在对函数的调用期间是持久的.它们应在使用前的某个时刻初始化.这些"滚动"值只是输入值的低通滤波版本(也称为"移动平均值"),它们从瞬时值中减去,为您提供高通滤波输出,即您从移动平均线获得当前偏差.
附加说明
移动平均线只是一个粗略的低通滤波器.在这种情况下,它就是所谓的ARMA(自回归移动平均线),而不仅仅是一个简单的MA(移动平均线).在DSP术语中,这是一个递归(IIR)滤波器而不是非递归(FIR)滤波器.不管所有术语如何,是的,您可以将其视为平滑函数" - 它"平滑"所有高频能量并让您对信号的平均值进行缓慢变化的估计.如果您然后减去这个来自瞬时信号的平滑信号然后差异将是你滤出的内容,即高频率的东西,因此你得到一个高通滤波器.换句话说:high_pass_filtered_signal = signal - smoothed_signal.