0

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に設定された理由.

私は明らかに物理学科に欠けていますが、数学は理解しています。誰かが背後にある物理学の推論を説明してくれるとしたら、私はとても助かります. リンクしたページに用語の説明があることは知っていますが、デバイスがどの軸に沿って加速または回転しているかの写真と用語が一致することを除いて、まだ意味がありません。

4

1 に答える 1

2

これはローパス デジタル フィルターです。振動(高周波信号)を簡単な方法で除去するために使用されます。

アルファは 0 から 1 の間です。アルファが高いほど、より多くの振動が除去されます (重力の履歴値をより信頼します)。一方、重力値は大幅に遅れます。

詳細については、http : //en.wikipedia.org/wiki/Low-pass_filterを参照してください。離散時間の実現セクションを参照してください。

于 2012-01-13T11:58:52.580 に答える