Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

開始時間が異なる信号の整列

実測では、複数のセンサーによって非同期に収集されたデータを含む場合が往々にしてあります。信号を積分するには、信号を同期しなければなりません。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')

信号 s1s2 からは遅れ、s3 に対しては先行しています。finddelay を使用すると、この遅延を正確に計算できます。s2s1 より 350 サンプル進み、s3s1 より 150 サンプル遅れ、s2s3 より 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)

これで信号が同期され、次の処理に進む準備ができました。

参考

| |

関連するトピック