Многие измерения включают данные, собранные асинхронно несколькими датчиками. Если вы хотите интегрировать сигналы, вы должны синхронизировать их. У Signal Processing Toolbox™ есть функции, которые позволяют вам делать именно это.
Например, рассмотрим автомобиль, пересекающий мост. Вибрации, которые он производит, измеряются тремя идентичными датчиками, расположенными в разных точках. Сигналы имеют разное время прибытия.
Загрузите сигналы в рабочую область 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
Стройте блоки сигналов, оставив предыдущий сигнал нетронутым и отсекая задержки из других векторов. Добавьте 1 к различиям с задержкой для учета индексации на основе одного, используемой MATLAB ®. Этот метод выравнивает сигналы, используя в качестве опорных самое раннее время прибытия, то есть 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