Интуитивное объяснение взаимной корреляции в частотной области


13

Согласно теореме о взаимной корреляции: взаимная корреляция между двумя сигналами равна произведению преобразования Фурье одного сигнала, умноженного на комплексное сопряжение преобразования Фурье другого сигнала. После этого, когда мы берем ifft сигнала продукта, мы получаем пик, который указывает на сдвиг между двумя сигналами.

Я не могу понять, как это работает? Почему я получаю пик, который указывает на сдвиг между двумя сигналами. Я получил математику от: http://mathworld.wolfram.com/Cross-CorrelationTheorem.html, но я не могу понять, что это означает интуитивно. Кто-нибудь может дать какое-нибудь объяснение или указать мне правильные документы?

Благодарность!


Спасибо, Дилип. Я понимаю, что получу несколько пиков. Что указывает каждый из этого пика? И почему вы получаете несколько пиков, когда вы берете Ifft? Я прочитал математическое доказательство о теореме о взаимной корреляции, но я не понимаю, как ее интерпретировать. Больше похоже на то, на что указывает умножение FT одного сигнала на сопряжение другого? каково его физическое значение?
серебряный серфер

Код не работает. Код заканчивается с некоторой ошибкой, такой как индекс превышает размерность матрицы, даже если x и y были заданы как 100 и l = 50
Афира

Ответы:


11

x(t)y(t)X(f)Y(f)

F{x(t)y(t)}=F{x(t)}F{y(t)}

Вы можете прочитать больше о выводе этой теоремы по ссылке выше в Википедии. Теперь свертка сама по себе является очень важной операцией для линейных систем, поэтому теория ее свойств хорошо разработана.

x(t)y(t)

В вашем примере вы рассчитываете следующее:

F{x(t)}(F{y(t)})

Напомним, что в области Фурье комплексное сопряжение эквивалентно обращению времени во временной области (это следует непосредственно из определения преобразования Фурье). Следовательно, используя первое приведенное выше уравнение, мы можем утверждать, что:

F{x(t)y(t)}=F{x(t)}(F{y(t)})

x(t)y(t)


-1
% Matlab function for frequency domain cross correlation
function [Lag,C]=xcorrf(X,Y,L)
% X, Y ---> Input vectors 
% L --->  maximum lag (must be less than minimum of (length of X, Y)
% C ---> correlation vector
% Lag ---> lag times  
X=X(:);
Y=Y(:);
s1=size(X);
s2=size(Y);
D=min(s1(1,1),s2(1,1));
for i=1:L
    X1=ifft(fft(X(1:D-i,:)).*conj(fft(Y(i+1:D,1))));
    C(i,1)=X1(1,1);
end

C=flipud(C);
X1=ifft(fft(X(1:D,:)).*conj(fft(Y(1:D,1))));
C(L+1,1)=X1(1,1);
for i=1:L
    X1=ifft(fft(Y(1:D-i,:)).*conj(fft(X(i+1:D,1))));
    C(i+L+1,1)=X1(1,1);
end
Lag=-L:1:L;
end

3
Не могли бы вы отредактировать свой ответ, добавив немного больше информации о том, как код должен отвечать на вопрос оригинального автора?
A_A

1
Я думаю, я вижу, куда он идет с этим кодом, но я должен сказать, что если вы запустили этот код с любыми векторами X и Y длиной более 100 сэмплов, вам придется сделать чашку чая, пока вы ждете.
Crowie

2
Один только код не является ответом
тобассист
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.