1

問題

同じ物理信号の測定値を含む2 つの配列 ( XaXb ) がありますが、それらは異なるサンプル レートで取得されています。最後に、Xaデータの物理ログは、 Xbとは異なる時間に開始されます。データのロギングも別の時間に停止します。

すなわち

(以下は重要なステートメントの要約であり、コードではありません。)

sampleRatea > sampleRateb % Resolution of Xa is greater than that of Xb
t0a ~= t0b % Start times are not equal
t1a ~= t1b % End times are not equal

目的

これらのデータ セットを最適に並べるインデックスの必要なシフトを見つけます。

アプローチ

fminconを使用して、(おそらく内挿関数を使用して) 同じサンプル レートになるように編集されたバージョンXaXbの間の平均二乗誤差 (MSE)を最小化するインデックスを見つけます。

私はこれをやろうとしましたが、常に自由度が多すぎるようです。このプロセスを促進する可能性のあるプロセスに光を当てることができる人はいますか?

4

2 に答える 2

1

一定の周波数を持つ 2 つのサンプルがあると仮定すると、問題は非常に単純なものになります。

scale次のlocationような を見つけます。

Xa、そのインデックスに対応するタイムスタンプで、 + * そのインデックスXbに対応 するタイムスタンプで最もよく一致します。locationscale

これに同意する場合は、自由度が 2 つしか残っていないことがわかります。サンプル レートの比率がわかっている場合は、自由度が 1 つにまで減少します。


これで難しい部分は完了したと思いますが、まだいくつかの作業が残っています。

  1. タイムスタンプと値を持つ 2 つのサンプルがどの程度一致しているかを判断します
  2. 位置と縮尺パラメータの最適な組み合わせを見つける

これらの 2 つの手順を適切に完了すると、ソリューションは最適なタイムスタンプを見つけるのに最適であることに注意してください。(整数)インデックスのシフトを探しているので、これらのタイムスタンプをインデックスに変換しても、実際には最適ではないかもしれませんが、かなり近いはずです。

于 2013-11-07T13:28:09.510 に答える
0

これは、開始するのに十分な簡単なソリューションです。入力信号が与えられ、XaおよびでそれぞれXbサンプリングされます。sampleRateasampleRateb

g = gcd(sampleRatea,sampleRateb);
Ya = interp(Xa,sampleRateb/g);
Yb = interp(Xb,sampleRatea/g);
Yfs = sampleRatea*sampleRateb/g;

[acor,lag] = xcorr(Ya,Yb);
time_shift = lag(acor == max(acor))/Yfs;

この変数time_shiftは、A の開始から B の開始までの経過時間を示します。B が最初に開始した場合、結果は負になります。

サンプリング レートが比較的高い場合、これは恐ろしく非効率的です。一方が他方の整数倍である場合、または GCD が比較的大きい場合は、はるかに優れています。

于 2013-11-07T18:48:07.973 に答える