このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
開始時間が異なる信号の整列
実測では、複数のセンサーによって非同期に収集されたデータを含む場合が往々にしてあります。信号を積分するには、信号を同期しなければなりません。Signal Processing Toolbox™ には、そのための関数があります。
たとえば、橋を渡る自動車を考えます。自動車の振動は、異なる点に置かれた 3 つの同じセンサーで測定されます。信号の到来時間はさまざまです。
信号を MATLAB® ワークスペースに読み込み、プロットします。
load relatedsig ax(1) = subplot(3,1,1); plot(s1) ylabel('s_1') ax(2) = subplot(3,1,2); plot(s2) ylabel('s_2') ax(3) = subplot(3,1,3); plot(s3) ylabel('s_3') xlabel('Samples') linkaxes(ax,'x')
信号 s1
は s2
からは遅れ、s3
に対しては先行しています。finddelay
を使用すると、この遅延を正確に計算できます。s2
は s1
より 350 サンプル進み、s3
は s1
より 150 サンプル遅れ、s2
は s3
より 500 サンプル進んでいることがわかります。
t21 = finddelay(s2,s1) t31 = finddelay(s3,s1) t32 = finddelay(s2,s3)
t21 = 350 t31 = -150 t32 = 500
進んだ信号はそのままにし、他のベクトルから遅延を取り除いて信号を整列させます。MATLAB® で使用される 1 ベースのインデックスを考慮して、ラグ差には 1 を追加します。この方法は、s2
による最も早い到着時間を基準として使用し、信号を整列させます。
axes(ax(1)) plot(s1(t21+1:end)) axes(ax(2)) plot(s2) axes(ax(3)) plot(s3(t32+1:end))
alignsignals
を使用して信号を整列させます。この関数は、先行する信号を遅らせることで機能するため、s3
による最も遅い到着時間を基準として使用します。
[x1,x3] = alignsignals(s1,s3); x2 = alignsignals(s2,s3); axes(ax(1)) plot(x1) axes(ax(2)) plot(x2) axes(ax(3)) plot(x3)
これで信号が同期され、次の処理に進む準備ができました。
参考
alignsignals
| finddelay
| xcorr