В этом примере показано, как использовать последовательность взаимной корреляции для обнаружения временной задержки в последовательности, поврежденной шумом. Выходная последовательность представляет собой задержанную версию входной последовательности с аддитивным белым гауссовым шумом. Создайте две последовательности. Одна последовательность является отложенной версией другой. Задержка составляет 3 выборки. Добавьте ) белого шума к задержанному сигналу. Используйте выборочную последовательность взаимной корреляции для обнаружения задержки.
Создайте и постройте график сигналов. Установите для генератора случайных чисел значения по умолчанию для воспроизводимых результатов.
rng default x = triang(20); y = [zeros(3,1);x]+0.3*randn(length(x)+3,1); subplot(2,1,1) stem(x,'filled') axis([0 22 -1 2]) title('Input Sequence') subplot(2,1,2) stem(y,'filled') axis([0 22 -1 2]) title('Output Sequence')

Получите выборку последовательности взаимной корреляции и используйте максимальное абсолютное значение для оценки запаздывания. Постройте график последовательности взаимной корреляции образцов. Как и ожидалось, максимальное значение кросс-корреляционной последовательности имеет место на запаздывании 3.
[xc,lags] = xcorr(y,x); [~,I] = max(abs(xc)); figure stem(lags,xc,'filled') hold on stem(lags(I),xc(I),'filled') hold off legend(["Cross-correlation",sprintf('Maximum at lag %d',lags(I))])

Подтвердите результат с помощью finddelay функция.
finddelay(x,y)
ans = 3