Найти в Дзене
Инженер. Фотографъ.

MATLAB. Цифровая обработка сигналов \ 3 - Синхронизация сигналов

Многие измерения включают в себя данные, собранные асинхронно несколькими датчиками. Если вы хотите интегрировать сигналы, их необходимо синхронизировать. В наборе инструментов 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)

Выровняйте сигналы, оставив более ранний сигнал нетронутым и вырезав задержки из других векторов. Добавьте 1 к разности задержек, чтобы учесть индексацию на основе единицы, используемую в MATLAB. Этот метод выравнивает сигналы, используя в качестве эталона самое раннее время прибытия s2.

axes(ax(1))
plot(s1(t21+1:end))
axes(ax(2))
plot(s2)
axes(ax(3))
plot(s3(t32+1:end))
-2

Используйте 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)
-3

Теперь сигналы синхронизированы и готовы к дальнейшей обработке.