AndroidのDevicemotionEvent値の計算
-
27-10-2019 - |
質問
使いたいです AndroidのSensoreventが提供する値 指定されている同じ値を計算します DeviceMotionEvent.
私の問題は、GX、GY、GZを指すAndroidドキュメントの一部です。
public void onSensorChanged(SensorEvent event)
{
// alpha is calculated as t / (t + dT)
// with t, the low-pass filter's time-constant
// and dT, the event delivery rate
final float alpha = 0.8;
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
linear_acceleration[0] = event.values[0] - gravity[0];
linear_acceleration[1] = event.values[1] - gravity[1];
linear_acceleration[2] = event.values[2] - gravity[2];
}
の値であると思われるもの gravity
そのコードで参照されている配列?また言及しています alpha
, 、しかし、私はまだそれが何であるか、式がどのように機能するかをまだ理解していません(ローパスフィルターとは何ですか?「タイムコンスタント」をどのように決定しますか?なぜそれが0.8に(非常にarbitrarily意的に)設定されたのか。
私は明らかに物理学部には不足していますが、数学を理解しています。ですから、誰かが物理学の推論を背後に説明するのがとても親切なら、私は多くの義務を負うでしょう。私がリンクしたページに用語の説明があることは知っていますが、それらは、デバイスの軸が沿って加速または回転する軸の写真と一致することを除いて、私の心にはまだ意味がありません。
解決
これはローパスデジタルフィルターです。簡単な方法で振動(高濃度の信号)を除去するために使用されます。
アルファは0〜1の間です。高いアルファは、より多くの振動が除去されます(重力の歴史的価値をより信頼します)、一方で重力は非常に遅れています。
ここにもっと情報があります: http://en.wikipedia.org/wiki/low-pass_filter 、離散時間実現セクションをご覧ください。
所属していません StackOverflow