Main Content

相互相関を使用した信号の整列

実測では、複数のセンサーによって非同期に収集されたデータを含む場合が往々にしてあります。信号を積分し、並べて調べるには、信号を同期しなければなりません。この処理には xcorr を使用します。

たとえば、橋を渡る自動車を考えます。自動車の振動は、異なる点に置かれた 3 つの同じセンサーで測定されます。信号の到来時間はさまざまです。

信号を MATLAB® ワークスペースに読み込み、プロットします。

load relatedsig

tiledlayout(3,1)

ax(1) = nexttile;
plot(s1)
ylabel("s_1")

ax(2) = nexttile;
plot(s2)
ylabel("s_2")

ax(3) = nexttile;
plot(s3)
ylabel("s_3")
xlabel("Samples")

linkaxes(ax,"x")

3 つの信号ペア間の相互相関を計算します。これらの最大値が 1 になるように、それぞれ正規化します。

[C21,lag21] = xcorr(s2,s1);
C21 = C21/max(C21);

[C31,lag31] = xcorr(s3,s1);
C31 = C31/max(C31);

[C32,lag32] = xcorr(s3,s2);
C32 = C32/max(C32);

相互相関の最大値の位置は、時間の進みまたは遅れを示します。

[M21,I21] = max(C21);
t21 = lag21(I21);

[M31,I31] = max(C31);
t31 = lag31(I31);

[M32,I32] = max(C32);
t32 = lag32(I32);

相互相関をプロットします。各プロットの最大値の位置を表示します。

tiledlayout(3,1)

nexttile
plot(lag21,C21)
xline(t21,"-","Lag: "+t21,LabelOrientation="horizontal")
ylabel("C_{21}")
title('Cross-Correlations')

nexttile
plot(lag31,C31)
xline(t31,"-","Lag: "+t31,LabelOrientation="horizontal")
ylabel("C_{31}")

nexttile
plot(lag32,C32)
xline(t32,"-","Lag: "+t32,LabelOrientation="horizontal")
ylabel("C_{32}")
xlabel("Samples")

s2s1 より 350 サンプル進んでいます。s3s1 より 150 サンプル遅れています。したがって、s2s3 より 500 サンプル進んでいます。遅れの大きいベクトルをクリッピングして、信号を整列します。これで信号が同期され、次の処理に進む準備ができました。

s1 = s1(-t21:end);
s3 = s3(t32:end);

tiledlayout(3,1)
ax(1) = nexttile;
plot(s1)
ylabel("s_1")

ax(2) = nexttile;
plot(s2)
ylabel("s_2")

ax(3) = nexttile;
plot(s3)
ylabel("s_3")
xlabel("Samples")

linkaxes(ax,"x")

参考

| |

関連するトピック