Многие измерения включают данные, собранные асинхронно несколькими датчиками. Если вы хотите интегрировать сигналы и изучить их в паре, вы должны синхронизировать их. Использование xcorr
с этой целью.
Например, рассмотрим автомобиль, пересекающий мост. Вибрации, которые он производит, измеряются тремя идентичными датчиками, расположенными в разных точках. Сигналы имеют разное время прибытия.
Загрузите сигналы в рабочую область MATLAB ® и постройте их график.
load relatedsig ax(1) = subplot(3,1,1); plot(s1) ylabel('s_1') axis tight ax(2) = subplot(3,1,2); plot(s2) ylabel('s_2') axis tight ax(3) = subplot(3,1,3); plot(s3) ylabel('s_3') axis tight xlabel('Samples') linkaxes(ax,'x')
Вычислите перекрестные корреляции между тремя парами сигналов. Нормализуйте их так, чтобы их максимальное значение составляло 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 = lag31(I32);
Постройте график перекрестных корреляций. На каждом графике отображается положение максимума.
subplot(3,1,1) plot(lag21,C21,[t21 t21],[-0.5 1],'r:') text(t21+100,0.5,['Lag: ' int2str(t21)]) ylabel('C_{21}') axis tight title('Cross-Correlations') subplot(3,1,2) plot(lag31,C31,[t31 t31],[-0.5 1],'r:') text(t31+100,0.5,['Lag: ' int2str(t31)]) ylabel('C_{31}') axis tight subplot(3,1,3) plot(lag32,C32,[t32 t32],[-0.5 1],'r:') text(t32+100,0.5,['Lag: ' int2str(t32)]) ylabel('C_{32}') axis tight xlabel('Samples')
s2
приводит s1
350 выборками; s3
лаги s1
150 выборками. Таким образом s2
приводит s3
на 500 выборки. Выровняйте сигналы путем отсечения векторов с более длинными задержками.
s1 = s1(-t21:end); s3 = s3(t32:end); ax(1) = subplot(3,1,1); plot(s1) ylabel('s_1') axis tight ax(2) = subplot(3,1,2); plot(s2) ylabel('s_2') axis tight ax(3) = subplot(3,1,3); plot(s3) ylabel('s_3') axis tight xlabel('Samples') linkaxes(ax,'x')
Теперь сигналы синхронизируются и готовы к дальнейшей обработке.
alignsignals
| finddelay
| xcorr