9

距離を測定するデバイスからデータを読み取っています。私のサンプル レートは高く、距離の大きな変化 (速度) を測定できますが、これは、速度が低い場合、デバイスが同じ数の測定値を提供することを意味します (デバイスの粒度による)。これにより、「階段状」の曲線が得られます。

私がする必要があるのは、速度を計算するために曲線を滑らかにすることです。次に、加速度を計算する必要があります。

これについて最善の方法は?

(サンプルレートは1000Hzまで、計算レートは10HzでOK。VS2005でC#を使用)

4

6 に答える 6

27

moogs のウィキペディア エントリは、データを平滑化するための出発点として適しています。しかし、それは意思決定の助けにはなりません。

それはすべて、データと必要な処理速度に依存します。

移動平均 は、上位の値を平坦化します。最小値と最大値に関心がある場合は、これを使用しないでください。また、移動平均を使用すると、データが(少し)平坦になり、加速度が小さく見えるため、加速度の測定に影響を与えると思います。それはすべて、必要な精度に帰着します。

Savitzky–Golay 高速アルゴリズム。移動平均線と同じ速さ。これにより、ピークの高さが維持されます。実装がやや難しい。そして、正しい係数が必要です。私はこれを選びます。

カルマン フィルター 分布がわかっていれば、これで良い結果が得られます (GPS ナビゲーション システムで使用されます)。たぶん、実装するのはやや難しいでしょう。私は過去にそれらを使用したことがあるので、これについて言及します。しかし、彼らはおそらくこの種のものの初心者には良い選択ではありません.

上記により、信号のノイズが減少します。

次に行う必要があるのは、「加速度」の開始点と終了点を検出することです。元の信号の派生物を作成することでこれを行うことができます。導関数が Y 軸 (ゼロ) と交差するポイントは、おそらく信号のピークであり、加速度の開始と終了を示している可能性があります。

次に、二次導関数を作成して、最小および最大の加速度自体を取得できます。

于 2008-10-15T10:09:50.077 に答える
9

平滑化フィルターが必要です。最も単純なのは「移動平均」です。最後の n ポイントの平均を計算するだけです。

ここでの質問は、n を決定する方法です。アプリケーションについて詳しく教えていただけますか?

(他にももっと複雑なフィルターがあります。それらは入力データをどのように保持するかによって異なります。良いリストはWikipediaにあります)

編集!: 10Hz の場合、最後の 100 個の値を平均します。

于 2008-10-15T09:52:41.063 に答える
3

移動平均は一般的にひどいものですが、ホワイト ノイズには適しています。移動平均と Savitzky-Golay はどちらも相関関係に帰結するため、非常に高速であり、リアルタイムで実装できます。1 次導関数や 2 次導関数などの高次情報が必要な場合は、SG が適切な選択です。SG の魔法は、フィルターに必要な一定の相関係数にあります。ローカルに適合する多項式の長さと次数を決定したら、係数を一度見つけるだけで済みます。R (sgolay) または Matlab を使用してそれらを計算できます。

また、Savitzky-Golay 最適適合多項式 (Savitzky-Golay 導関数と呼ばれることもあります) を使用して、ノイズを含む信号の 1 次導関数を推定することもでき、通常、1 次導関数の適切な推定値が得られます。

カルマン フィルター処理は非常に効果的ですが、計算量が多くなります。短い畳み込みに勝るものはありません。

ポール
センタースペース ソフトウェア

于 2009-11-05T07:00:53.337 に答える
1

上記の記事に加えて、Catmull-Rom Splinesをご覧ください。

于 2008-10-15T10:48:46.393 に答える
0

移動平均を使用してデータを平滑化できます。

于 2008-10-15T09:53:32.807 に答える
0

上記のGvSの優れた回答に加えて、3次または2次スプラインなどの一般的な曲線フィッティングを使用して、平均化された結果のステッピング効果を平滑化/削減することも検討できます。

于 2008-10-15T10:49:01.090 に答える