いままで何も考えずに加速度センサを使ってたので反省メモ。
【iOS】【swift】加速度センサー CMMotionManager
iOSによらず、なんにせよ加速度センサで値をセンシングするときは絶対にやったほうが良い事。
センシングした生の値を使うのではなく、必ず**ローパスフィルタ(ハイパスフィルタ)**をかけるようにする。
アルゴリズムは以下
output_value = rate * input_value + (1.0 - rate) * previous_output_value;
リアルタイムでセンシングした値(input_value)と1つ前の値(previous_output_value)で加算平均する。
rateは割合です。
Swiftで書いたコードは以下
final let LOWPASS_FILTER = 0.1
...
var accelX: UIAccelerationValue = 0.0
accelX = (accelX * (1.0 - self.LOWPASS_FILTER)) + (inputX * self.LOWPASS_FILTER)
参考にした記事
加速度センサ と ローパスフィルタ (波形)
How to implement a LowPass Filter?
加速度センサーの使い方 - 測定値の平滑化
おわり