Intuicyjne wyjaśnienie korelacji krzyżowej w dziedzinie częstotliwości


13

Zgodnie z twierdzeniem o korelacji krzyżowej: korelacja krzyżowa między dwoma sygnałami jest równa iloczynowi transformaty Fouriera jednego sygnału pomnożonej przez zespoloną sprzężoną transformatę Fouriera innego sygnału. Po zrobieniu tego, gdy weźmiemy ifft sygnału produktu, otrzymujemy pik, który wskazuje przesunięcie między dwoma sygnałami.

Nie jestem w stanie zrozumieć, jak to działa? Dlaczego miałbym uzyskać szczyt wskazujący przesunięcie między dwoma sygnałami. Mam matematykę z: http://mathworld.wolfram.com/Cross-CorrelationTheorem.html, ale nie jestem w stanie zrozumieć, co to oznacza intuicyjnie. Czy ktoś może podać jakieś wyjaśnienia lub wskazać odpowiednie dokumenty?

Dzięki!


Dzięki Dilip. Rozumiem, że otrzymam wiele szczytów. Co oznacza każdy z tych pików? I dlaczego miałbyś mieć wiele szczytów, kiedy bierzesz ifft? Przeczytałem matematyczny dowód na temat twierdzenia o korelacji krzyżowej, ale nie rozumiem, jak go interpretować. Bardziej jak to, co oznaczałoby pomnożenie FT jednego sygnału przez koniugat drugiego? jakie jest jego fizyczne znaczenie?
srebrny surfer

Kod nie działa. Kod kończy się z pewnym błędem jak indeks przekraczający wymiar macierzy, mimo że xiy podano jako 100, a l = 50
Athira

Odpowiedzi:


11

Koncepcja opiera się na twierdzeniu o splotie , które stwierdza, że ​​dla dwóch sygnałów i , iloczyn ich transformacji Fouriera i jest równy transformacie Fouriera splotu dwa sygnały. To jest:x(t)y(t)X(f)Y(f)

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

Możesz przeczytać więcej na temat wyprowadzenia tego twierdzenia pod powyższym linkiem do Wikipedii. Teraz splot jest bardzo ważną operacją dla układów liniowych jako takich, więc teoria o jego właściwościach jest dobrze rozwinięta.

Jednak to, co szukasz jest cross-korelacji między i . Oto klucz: całka korelacji krzyżowej jest równoważna całce splotowej, jeśli jeden z sygnałów wejściowych jest sprzężony i odwrócony w czasie . Pozwala to na wykorzystanie teorii opracowanej do oceny zwojów (takich jak techniki w dziedzinie częstotliwości do ich szybkiego obliczania) i zastosowanie ich do korelacji.x(t)y(t)

W twoim przykładzie obliczasz:

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

Przypomnijmy, że w dziedzinie Fouriera sprzężenie złożone jest równoważne odwróceniu czasu w dziedzinie czasu (wynika to bezpośrednio z definicji transformaty Fouriera). Dlatego korzystając z pierwszego równania podanego powyżej, możemy stwierdzić, że:

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

Jeśli następnie weźmiesz odwrotną transformatę Fouriera tego równania, sygnałem, który ci pozostanie, jest korelacja krzyżowa między i .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
Czy możesz zredagować swoją odpowiedź, dodając nieco więcej informacji o tym, jak kod ma odpowiadać na pytanie pierwotnego plakatu?
A_A,

1
Myślę, że widzę, dokąd zmierza z tym kodem, ale muszę powiedzieć, że jeśli uruchomiłeś ten kod z dowolnymi wektorami X i Y o długości ponad 100 próbek, musiałbyś zrobić filiżankę herbaty, czekając.
crowie

2
Sam kod nie jest odpowiedzią
tobasysta
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.