%% Align Signals with Different Start Times
% Many measurements involve data collected asynchronously by multiple
% sensors. If you want to integrate the signals, you have to synchronize
% them. The Signal Processing Toolbox(TM) has functions that let you do
% just that.
%
% For example, consider a car crossing a bridge. The vibrations it produces
% are measured by three identical sensors located at different spots. The
% signals have different arrival times.

%% 
% Load the signals into the MATLAB(R) workspace and plot them.

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')

%%
% Signal |s1| lags |s2| and in turn leads |s3|. The delays can be computed
% exactly using |finddelay|. You see that |s2| leads |s1| by 350 samples,
% |s3| lags |s1| by 150 samples, and |s2| leads |s3| by 500 samples.

t21 = finddelay(s2,s1)
t31 = finddelay(s3,s1)
t32 = finddelay(s2,s3)

%%
% Line up the signals by leaving the earlier signal untouched and clipping
% the delays out of the other vectors. Add 1 to the lag differences to
% account for the one-based indexing used by MATLAB(R). This method aligns
% the signals using as reference the earliest arrival time, that of |s2|.

axes(ax(1))
plot(s1(t21+1:end))

axes(ax(2))
plot(s2)

axes(ax(3))
plot(s3(t32+1:end))

%%
% Use |alignsignals| to align the signals. The function works by delaying
% earlier signals, so use as reference the latest arrival time, that of
% |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)

%%
% The signals are now synchronized and ready for further processing.

%% 
% Copyright 2012 The MathWorks, Inc.