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