同じ情報を持つ2つの信号をどのようにマッチさせるか

私は同じ情報を含む2つの信号S1とS2を持っていますが、S2はS1に比べて未知の量だけずらしてスケーリングされています(しかし、シフトは1〜10サンプル程度です)。

S1に「一致」させるためにS2に適用するシフトおよびスケーリング係数を計算(または推定)する最良(=最も有効かつ単純です)方法は何ですか。

私は、FFTで位相情報を使用することを指しているいくつかの論文を読みましたが、スケーリングが本当に問題ではない信号に取り組んでいました(とにかく完全に理解していないことを認めなければなりません)。私はMatlabで実際にこれを実装する方法について少し失われています(実際に私はOctaveを使用しています)。

可能であれば、Matlab/Octaveコードを使って説明したいと思います。

助けてくれてありがとう。

スティーブ

PS:私はそのようなテクニックが(例えばパノラマの)画像の自動ステッチングで使用されると思われるので、「画像処理」というタグを付け加えます。

0

2 答え

Matlabには、2つのベクトルの相互相関を計算するxcorr()という関数があります。相互相関は、2つの信号が重なるときに最も高くなる。次のコードは、サンプル単位のシフトを計算します:

x = xcorr(s1、s2)

     

[val、idx] = max(x);

     

shift = length(s1) - idx

スケーリング係数は、次の式で与えられます。

scale = max(s1)/ max(s2)

1
追加された
答えをありがとう。私の他のコメントで言及したように、フーリエ位相情報が良い近似を与えることができるかどうか、そしてなぜそれが知ることが好奇妙なのは確かに前向きな方法だと私は考えている。私が縮尺したと言うとき、私ははっきりしていませんでした。私は実際には時間軸で、つまり私の信号は実際には同じ長さではないことを意味しました。しかし、信号の前後に付加的な情報がほとんどないことから、信号の長さの比は '伸張率'の十分な近似値でなければならないと私は考える。
追加された 著者 aanund,
これは、s1とs2が同じ長さであることを前提としています。
追加された 著者 Ed Mallon,

特にシフトとスケールを見つける場合は、Matlabの相互相関関数を使用できます。 Matlab xcorr関数のいくつかの追加オプションは次のとおりです。

x = xcorr(s1, s2, M, 'unbiased'); 

ここで M は相互相関関数を計算するためのラグの最大数です。 入力引数 unbiased は、信号の有限長効果を処理します。バイアスされた推定器は、 $ n r [k] = \ frac {1} {N} \ sum_ {n = 1} ^ N s_1 [n] s_2 [n-k] $$ 不偏推定器は、 $ n r [k] = \ frac {1} {N-k} \ sum_ {n = 1} ^ N s_1 [n] s_2 [n-k] $$

$ s_1 $と$ s_2 $の関係が整数遅延よりも複雑で、ウィーナーフィルタウィキペディアを参照してください。関係が経時的に変化する場合、例えばlmsアルゴリズムを使用する適応フィルタが有用であり得る。

1
追加された
私は、フーリエ変換の位相情報がそれを行う最もクリーンな方法であると考えました。私の教育のために、あなたはそれについてコメントすることができますか?どのような場合でも、相互相関は私のニーズに適しています。私はその道を歩み続け、私の信号でどのくらいの遅延が見られるかを発見します。ダイナミックな遅延が必要な場合は、提案されているように適応フィルタを調べます。私は偏っていないvsの精度のおかげで、これを私の解決策としてマークします。
追加された 著者 aanund,
一般に、私はこの問題を私に助けてくれるだろうと思っていたフーリエシフト定理を参照しています(しかし、これは私の研究でこれをカバーしてから長い間です。論文:バーコード超解像のための新しいシフト推定アルゴリズム;この特定の信号タイプ(バーコードスキャンライン)が他の場所に適用できるかどうかはわかりません。信号間の関係は、s2 [n] = s1 [αn+β]
追加された 著者 aanund,
ごめんなさい!投稿した紙が間違っていた(수치)。これは私が投稿したはずのものです:バーの超解像度コード(セクション2.1)
追加された 著者 aanund,
「FFTで位相情報を使用することに言及している論文」へのリンクを提供できますか?また、時間軸のスケーリングではどういう意味ですか? $ s_2 [n] = s_1 [\ alpha n + \ beta] $または:$ s_2 [n] = \ alpha s_1 [n + \ beta] $ここで、はスケールで$ \ betaはシフトですか?
追加された 著者 Dale M,
この論文では、線間のシフトを推定するために相関関数も使用しています(eq3を参照)。その後、FFTを用いて解像度を上げる(1画素未満のずれを見積もる)。信号モデルでは、時間スケールは、スケールファクタの逆数に関連するスケールされた周波数応答につながります。たとえば、$ \ alpha> 1 $の場合、すべての正弦波はより低い周波数になります。おそらく、信号のパワースペクトルをマッチングすることによって、スケール係数を特定できます。これらのスペクトルは位相情報を含まない。スケールを修正したら、シフトを見積もることができます。
追加された 著者 Dale M,