В этом примере показано, как использовать последовательность взаимной корреляции, чтобы обнаружить задержку поврежденной шумом последовательности. Выходная последовательность является задержанной версией входной последовательности с аддитивным белым Гауссовым шумом. Создайте две последовательности. Одна последовательность является задержанной версией другого. Задержка является 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