3

Matlab で DFT (デジタル フーリエ変換) を介して相関を使用して類似の 2 つの信号を比較しようとしましたが、相関関数では実際には予測できない結果が得られます。たとえば、これら 2 組のシグナルを比較すると、次のようになります。

  • 相関1と2
  • 相関 3 および 4 (自己相関)

MATLAB Figure のスクリーンショット

「corr 1 および 2」の場合よりも「corr 3 および 4」の場合の方が高い相関ピークが予想されます。

私も信号を「平均からゼロ」にしようとしましたが、これは役に立ちませんでした。

これは期待どおりの結果ですか、それとも前処理などを見逃していましたか?

4

2 に答える 2

0

@ジョナス、私はあなたの答えにコメントする画像を挿入し、十分なフォーマット(申し訳ありませんが、ここでは初心者)を作る方法を見つけることができなかったので、私はこのコメントを「答え」として残します。

だから、私が見つけたのは、次の図では、あなたの方法が期待しない結果をもたらすことです:

ここに画像の説明を入力してください

ご覧のとおり、自己相関のピークは相互相関のピークよりも低くなっています。
私が使用したコードは以下のとおりです。

trace1=(abs(linspace(-64,64,128))<20)*200;
trace2=trace1-(abs(linspace(-64,64,128))<10)*50;
trace1=trace1-(abs(linspace(-64,64,128))<10)*100;

subplot(321);
plot(trace1); grid on;
subplot(322); 
plot(trace2); grid on;
subplot(323);
plot(xcorr(trace1,trace2)); grid on;
title('unnormalized cross-correlation');
subplot(324);
plot(xcorr(trace2,trace2)); grid on;
title('unnormalized autocorrelation');

subplot(325);
plot(xcorr(trace1/sum(trace1(:)),trace2/sum(trace2(:)))); grid on;
title('normalized cross-correlation');
subplot(326);
plot(xcorr(trace2/sum(trace2(:)),trace2/sum(trace2(:)))); grid on;
title('normalized autocorrelation');
于 2012-02-08T17:37:12.527 に答える
0

データ トレースを正規化する必要があります。つまり、相関する前にそれぞれの積分で割ります。次のコードは、データ トレースを正規化すると、自己相関によって実際に大きな値が得られることを示しています。

%# producing your data
trace1=(abs(linspace(-64,64,128))<20)*200;
trace2=trace1-(abs(linspace(-64,64,128))<10)*50;
figure;
subplot(321);
plot(trace1);
subplot(322);
plot(trace2);
subplot(323);
plot(xcorr(trace1,trace2))
title('unnormalized cross-correlation');
subplot(324);
plot(xcorr(trace2,trace2))
title('unnormalized autocorrelation');
%
%# what you should be doing:
subplot(325);
plot(xcorr(trace1/sum(trace1(:)),trace2/sum(trace2(:))))
title('normalized cross-correlation');
subplot(326);
plot(xcorr(trace2/sum(trace2(:)),trace2/sum(trace2(:))))
title('normalized autocorrelation');

につながる

図のスクリーンショット - 上記のコードを使用して作成

ここで、ピークを拡大して、正規化された自己相関が正規化された相互相関よりも高いピークを持っていることを示しました。

于 2012-02-07T10:33:57.827 に答える