有人可以解释一下如何得出下面的方程来对加速度计值进行高通滤波吗?我不需要数学推导,只需要直观的解释就足够了。
#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.
}
虽然其他答案是正确的,但这里有一个简单的解释。使用 kFilteringFactor 0.1,您将采用当前值的 10% 并添加先前值的 90%。因此,该值与之前的值保持 90% 的相似度,这增加了其对突然变化的抵抗力。这会降低噪声,但也会降低对信号变化的响应能力。为了减少噪音并保持响应,您将需要不平凡的过滤器,例如:补充 https://stackoverflow.com/questions/1586658/combine-gyroscope-and-accelerometer-data,卡尔曼。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)