2

私はアンドロイド用のコンパスを作っています、そして私はそれを動かしていますが、それは一つの欠陥を持っています。コンパスの読み取り値は、デバイスが動いていないときでも、常に2度ずつ変化しています。これはセンサーの磁気歪みが原因であることはわかっていますが、ユーザーが移動しているときにアプリを応答させながら、ユーザーが静止しているときにあまり変化が表示されないようにするにはどうすればよいですか。では、どうすればより安定したコンパスの外観を与えることができますか?

4

3 に答える 3

2

信号を滑らかにする必要があります。生の最後の値を表示する代わりに、最後のN個の値の平均を表示するのはどうですか?

于 2013-03-21T03:47:21.413 に答える
1

ローパスフィルターを実装してみましたか?http://blog.thomnichols.org/2011/08/smoothing-sensor-data-with-a-low-pass-filter

于 2013-03-21T04:18:03.033 に答える
1

コンパスを作成する場合は、加速度と磁場の両方をローパスフィルター処理する必要があります。

ローパスフィルターの例を次に示します。あまりエレガントではありませんが、原則を示すためだけに:

float filteredValue;

void lowPassFilter(float rawValue) {

    final float alpha = 0.8f;
    float filteredValue = alpha * filteredValue + (1.0f - alpha) * rawValue;

    return filteredValue;
}

FilteredValueは、(メンバー変数のように)各呼び出しの後に記憶されることに注意してください。

一方、rawValueは、 event.values [0]のように、センサーイベントからの値です。

すべての「新鮮な」新しいrawValueがフィルタリングされた値の20%にのみ影響することに注意してください(これはalphaによって与えられます)。これにより、遅延が発生しますが、読み取りに「安定性」がもたらされます。

于 2013-03-25T21:06:54.960 に答える