0

速度と加速度を決定したい (x,y) データのストリームがあります。データは非常に典型的で、たとえば車が走り回っている様子を表していると考えることができます。

新しいデータ ポイントは 2 ミリ秒ごとに発生します。不要な値を蓄積/保存したくないので、boost::accumulator.

このタイプのタスクを処理する簡単な方法はありますか? または、すでにこれを行っている既存の他のライブラリですか?または、私は自分の考えで正しい軌道に乗っていますか。どのタグを使用するかはまだわかりませんが、コンテナーが特定のプロパティの更新された値を保持し、古い位置データを保存しないという考えが気に入っています。

もう 1 つのアイデアは、循環バッファー (サイズ 200 など) を使用し、最後の 50 個の値に基づいて加速度を計算し、バッファー内のすべての値に基づいて速度を計算することです。ただし、バッファーが生の位置データを格納する場合、加速度と速度を計算するために毎回すべての要素をループする必要があります。これは、エンド要素から値を削除し、挿入する新しい要素からの値を追加することによって再計算される、ある種のローリング加速度と速度値を保持することで改善できます (バッファ内の重み 1/要素)。ただし、これはある種のブースト ローリング加重アキュムレータのように思えます。

4

1 に答える 1

0

おそらく、ある種のカルマンフィルターをデータに適用したいと思うでしょう。ノイズの影響を軽減するために古いデータが存在する必要があり、最新の情報に敏感な回答が得られるように、新しいデータが存在し、より高い重み付けが必要です。

位置のかなり単純なアプローチは、それをXと呼びましょう。ここで、各新しいサンプルはxです。

X = (1-w) * X + w * x

新しい値が入るたびに。重みwは、新しい情報と古い情報に対する感度を調整します。 w = 1は、履歴を気にしないことを意味し、w = 0は、新しい情報をまったく気にしないことを意味します (そして、何も保存しないことは明らかです)。

瞬間速度は、連続するポイント間の差を計算し、この差を時間間隔で割ることによって計算できます。これは、カルマン フィルターでフィルター処理できます。

加速度は、一連の速度の差を時間間隔で割ったものです。これらもフィルタリングできます。

分割された差は、位置よりもノイズに敏感になります。たとえば、位置を監視しているオブジェクトが停止した場合、位置の測定値を取得し続けます。連続測定の速度ベクトルは、ランダムな方向を指します。

ブーストアキュムレータは、あなたが望むことをしていないようです。

于 2015-03-02T15:55:19.060 に答える