GPS を使用した追跡アプリケーションに取り組んでいます。大丈夫なのですが、通行止めや悪天候などで点数がずれることがあります。それらをプロットすると、多くのホップ/ジャンプがあり、正しく見えません。
悪い信号を除外するには、どのアルゴリズムを実行すればよいですか? 私にはぼかしアルゴリズムのアプリケーションのように見えますが、どう思いますか?
GPS を使用した追跡アプリケーションに取り組んでいます。大丈夫なのですが、通行止めや悪天候などで点数がずれることがあります。それらをプロットすると、多くのホップ/ジャンプがあり、正しく見えません。
悪い信号を除外するには、どのアルゴリズムを実行すればよいですか? 私にはぼかしアルゴリズムのアプリケーションのように見えますが、どう思いますか?
いくつかのオプションがあります:
私はフィルターを使用するのが好きです - カルマン フィルターは典型的な (そしてしばしば最良の) ソリューションです - 安価な IIR (無限インパルス応答) フィルターよりも優れた量の予測平均を使用します。
FilteredValue = FilteredValue * 0.75 + NewValue * 0.25
1 秒あたり 4 ~ 5 回の修正を行う GPS モジュールを入手できます。これにより、上記の「安価な」フィルタを適切な応答時間で使用できるようになります。
また、ノイズが少なく、屋内での受信が優れている (可能な場合)、より優れた GPS (SiRF III 以上) を入手することもできます。
消費者向け GPS ユニットは、可能な場合は「道路にスナップ」するため、道路から離れた場所でのエラーや、その他のいくつかの技術が消費者に表示されることはありません。
カルマンは実装が簡単ではありませんが、外部データセットやセンサー (道路速度など) がなければ最適なオプションです。コードとチュートリアルについては、http://www.google.com/search?q= open%20source%20kalman%20filter をご覧ください。
-アダム
re: 「ポップ」ノイズの存在下でのフィルタリング--
これを行うために私が見つけた最も簡単な方法の1つは次のとおりです。
delta = newValue - filteredValue;
delta = delta > LARGEST_SANE_DELTA ? LARGEST_SANE_DELTA
: (delta < -LARGEST_SANE_DELTA ? -LARGEST_SANE_DELTA : delta);
filteredValue += alpha*delta;
ここで、alpha = 1/tau であり、tau は問題のローパス フィルターの時定数であり、上記のコードの反復間の時間の倍数で表されます。この値は、入力の大きな変化LARGEST_SANE_DELTA
の可能性を表し、newValue
過度に大きな変化をクリップします。この種のノイズを拒否するより良い方法があるかもしれませんが、それらはより複雑であり、私が言及したものは非常に単純です.
カルマン フィルターを使用します。