Explicação intuitiva da correlação cruzada no domínio da frequência


13

De acordo com o teorema da correlação cruzada: a correlação cruzada entre dois sinais é igual ao produto da transformada de Fourier de um sinal multiplicada pelo conjugado complexo da transformada de Fourier de outro sinal. Depois de fazer isso, quando pegamos o sinal do produto, obtemos um pico que indica a mudança entre dois sinais.

Não consigo entender como isso funciona? Por que eu receberia um pico que indica a mudança entre dois sinais. Eu obtive as contas em: http://mathworld.wolfram.com/Cross-CorrelationTheorem.html, mas não sou capaz de entender o que isso significa intuitivamente. Alguém pode me dar uma explicação ou me indicar os documentos certos?

Obrigado!


Obrigado Dilip. Entendo que estarei recebendo vários picos. O que indica cada um desses picos? E por que você obteria vários picos ao tomar o ifft? Eu li provas matemáticas sobre o teorema da correlação cruzada, mas não entendo como interpretá-lo. Mais como o que a multiplicação de FT de um sinal com conjugado de outro indica? qual é o significado físico disso?
surfista prateado

O código não é de trabalho .Os extremidades código-se com alguns erros, como índice de ultrapassar a dimensão da matriz, embora o x e y foram dadas como 100 e l = 50
Athira

Respostas:


11

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

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

Você pode ler mais sobre a derivação desse teorema no link acima da Wikipedia. Agora, a convolução é uma operação muito importante para sistemas lineares por si só, portanto a teoria sobre suas propriedades é bem desenvolvida.

x(t)y(t)

No seu exemplo, você está calculando o seguinte:

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

Lembre-se de que no domínio de Fourier, a conjugação complexa é equivalente à reversão do tempo no domínio do tempo (isso segue diretamente da definição da transformação de Fourier). Portanto, usando a primeira equação dada acima, podemos afirmar que:

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
Você pode editar sua resposta com um pouco mais de informação sobre como o código deve responder à pergunta do pôster original?
A_A 21/09/16

1
Acho que vejo aonde ele está indo com esse código, mas devo dizer que se você executasse esse código com quaisquer vetores X e Y com mais de 100 amostras de comprimento, teria que fazer uma xícara de chá enquanto espera.
Crowie

2
Código por si só não é uma resposta
tobassist
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.