4

速度値(m / s)を継続的に受信するアプリケーションがあります。これらの値は、いくつかのノイズと変動を生成します。この速度は常に変化しますが、注目に値する実際の変更がいくつかあります。たとえば、速度値が大幅に低下した場合、方向転換が発生する可能性があります。

現在、最後のX値を使用していaverageます。Xは通常5〜15の数値です。これらの値をExcelでプロットして、生データとの違いを確認します。これは非常にうまく機能しlowerますが、履歴値は、less私の曲線が滑らかになります。higher履歴値、私のsmoother曲線は取得しますが、その後、遅い変更に反応し、それらの一部を無視します。

また、平均計算の最後の値に重みを付けようとしました。結果は、まだノイズが多い曲線ですが、生データよりもわずかに少なくなります。

私が探しているのは、生データに近い値を与えることができるノイズをフィルターで除去するためのより洗練された方法ですが、小さな変動やノイズも無視します。

それはどのような方法でしょうか、または既存のセットアップでできることはありますか?

4

3 に答える 3

5

そのためには、カルマンフィルターがまさに必要なものです。これを実装する無料のライブラリは次のとおりです:http://kalman.sourceforge.net/

一方、Kalmanは理解するのが非常に難しく、正しく使用するには少し調査が必要です(実装は非常に困難です)。この回答によると、補完フィルターの実装が簡単な場合があります。

于 2012-08-01T11:52:03.977 に答える
1

多くの人が言うことに反して、このシナリオでは単純なカルマンフィルターを実装することはまったく難しくありません。実際、カルマンフィルターの最も単純な特殊なケースは、指数フィルターです。これは、C++コードでは次のようになります。

filtered_speed+=0.02 * (speed_measurement - filtered_speed);

0.02は調整定数であり、その最良の値は、測定のノイズがどれだけあるか、および実際の速度がどれだけ速く変化すると予想されるかによって異なります。これも単純なIIRフィルターと同等です。

しかし、これはあまり役に立ちません。カルマンフィルターは魔法ではなく、操作する情報を追加しない限り、移動平均よりもはるかに優れた結果を生成しません(これにより、上記の式がより複雑になります)。次のような情報を使用できます。

  • 複数のセンサー:他のソースからも速度を推測できますか?次に、カルマンフィルターを使用して2つの測定値を組み合わせることができます
  • センサーノイズの変化:速度測定ノイズは通常同じですか、それとも変化していますか(たとえば、高速での測定は低速でのノイズと同じです)。変化していて、各測定のノイズを推定できる場合は、その情報をカルマンフィルターで使用できます。
  • プロセスノイズの変化:この時点で速度を速く変更するかゆっくり変更するかを他のソースから知っていますか?その情報も使用できます
  • 制御入力:たとえば、車の速度を測定していて、アクセルペダルやブレーキからのデータもある場合は、カルマンフィルターもそれを使用できます

It's these things that would make Kalman filter better than a simple moving average.

于 2013-11-30T14:52:11.600 に答える
0

平均は、非常に単純なローパス周波数フィルターです。ChebyshebButterworthのような他の人を試すことができるかもしれません:

ただし、以前はノイズをフィルタリングするには、信号のカットオフ周波数を知っている必要があります。次に、そのカットオフ周波数とフィルター遅延に応じて、目的に合ったより良いフィルターを使用できます。

比較するクリーンな信号がある場合は、ウィーナーファイラーを使用することもできます:http: //en.wikipedia.org/wiki/Wiener_filter

于 2012-08-01T11:54:44.870 に答える