仍然在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