3

2 つの異なるセンサーからのデータを 2 つの別々のベクトルにロードしています。これらのセンサーは同じ加速度を測定するため、パターンは同じです。ただし、測定ノイズのため、値は両方でわずかに異なります。また、サンプリング周波数や遅延などが異なるため、一方のベクトルの長さは他方の長さよりも大きくなります。

私の質問は、これら 2 つのベクトルをどのように同一視するかです。つまり、vectorB の特定の読みに対応する vectorA の読みを見つける必要があります。findpeaks() 関数を使用して極値を比較しようとしましたが、正確な方法がわかりません。

ありがとう!

4

2 に答える 2

3

いくつかのデータを収集できると仮定すると、両方のセンサーのサンプリング周波数を調整できます。2 つの加速度計の場合、電話をバケツの内壁にテープで貼り付け、床に沿って転がすなど、奇妙なことを行うことを意味する可能性があります。結果のデータを見ると、両方のセンサーから相関信号があるはずです。両方のセンサー データの FFT を取得すると、サンプリング レートがどのように一致するかを確認できます。周期のオフセットは、携帯電話を枕やたたんだ毛布の上に落とすなど、突然の加速イベントが発生したことで説明できます。

2 つのセンサーのサンプリング周波数がキャリブレーションされると、2 つのセンサー間で補間を行ってベクトルを一致させることができます。残念ながら、センサーが互いに相対的に任意の方法で初期化されている場合、これは役に立ちません。独立した周辺機器を備えたマルチタスク OS では、このアプローチは 2 つのトレース間のオフセットを取得するのにあまり効果的ではない可能性があります。しかし、少なくとも、各センサーのサンプリング レートを知るのに役立つはずです。信号が同じレートにリサンプリングされている場合、畳み込みを行うと (上記で提案したように)、収集されたデータからリアルタイムでオフセットを決定できるはずです。

于 2012-11-20T21:34:24.463 に答える
3

元のサンプル レートがなければ、それらを「一致させる」方法はありません。これは、データが実際には時間と大きさの両方であるためです。時間を省略すると、サンプルがいつ発生したかがわからないため、発生した他のサンプルと異なるかどうかを知ることができません (別の時間に発生した可能性があるため)。

ここで、データが比較的近い場合、サンプル頻度の相対的な違いを推定し、それを使用して再サンプリングすることができますが、サンプリングの精度によってはうまく機能しない場合があります。

サンプルレートが近く、ほぼ一定であると仮定できますか?

あなたがしようとしているのは、機能を最小限に抑えることです

r 上の int(||f(r*t) - g(t)||^2)。

本質的に、f の時間軸を g に「一致」するまでスケーリングします。同じレートが一定でない場合、r は t の関数です。これは、最小値が一意ではない可能性が高いため、問題を扱いにくくします (ただし、r の最小有界変動ではそうなる可能性があります)。

たとえば、さまざまな r に対してその式を計算し、ある範囲の r の最小値を見つけようとすることができます。式が何らかの境界内にない場合は、「一致」として拒否できます。

カルマン フィルターを使用して結果をさらに絞り込むなど、より高度な処理を行うことができます。

それは実際には、データがどれほど正確であり、結果がどれほど正確であるかによって異なります (偽陽性は誰かを殺すことになりますか?)。

あなたはそれが出発点を持っているのと同じデータであると仮定しているので、これは上記の最小化問題で一意の r を得るはずです。ただし、サンプルレートはほぼ一定であると仮定する必要があります(または最小化問題を適応させます)。

おそらくより良い方法は、代わりにサンプリングレート/時点を取得しようとすることですか? (その後、問題はほとんど些細なことになります)。

于 2011-01-21T05:52:59.020 に答える