仍然在BigNerdRanch iOS开发手册上。加速度传感器低通滤波
在加速度计章节中,他们首先实现了加速度计跟踪功能,但它相当不稳定。然后,他们建议通过改变原始代码到一个低通滤波器,适用于它:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
HypnosisView *hv = (HypnosisView *)[self view];
[hv setXShift:10.0 * [acceleration x]];
[hv setYShift:10.0 * [acceleration y]];
[hv setNeedsDisplay];
}
这样:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
HypnosisView *hv = (HypnosisView *)[self view];
float xShift = [hv xShift] * 0.8 + [accel x] * 2.0;
float yShift = [hv yShift] * 0.8 + [accel y] * 2.0;
[hv setXShift:xShift];
[hv setYShift:yShift];
[hv setNeedsDisplay];
}
相当简单的问题:他们在哪里,从获取这些值?我一直在寻找通过的文件,我发现一些关于低通滤波器,这说明下面的代码:
#define kFilteringFactor 0.1
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
// Use a basic low-pass filter to keep only the gravity component of each axis.
accelX = (acceleration.x * kFilteringFactor) + (accelX * (1.0 - kFilteringFactor));
accelY = (acceleration.y * kFilteringFactor) + (accelY * (1.0 - kFilteringFactor));
accelZ = (acceleration.z * kFilteringFactor) + (accelZ * (1.0 - kFilteringFactor));
// Use the acceleration data.
}
不过,我第一次与该代码试过,我得到了一个错误(通过分析我的应用程序)说''*'的左边值是垃圾值'。我的加速度计跟踪也不起作用。
我对这些数值意味着什么很困惑。例如,在代码的第一部分,为什么他们将加速度值乘以10?为了获得更大的运动?我可以理解,但第二代低通滤波器对我来说绝对没有意义。
我认为乘以10的原因是UIAcceleration在G中给出了返回值,其中1G是每秒9.81米/秒。 10是9.81的近似值。 – SDJMcHattie