2016-10-23 6 views
0

Ich versuche, Kreuzkorrelation zwischen zwei Signalen in Zeit- und Frequenzbereich zu berechnen. Ich habe ein anderes Ergebnis für beide Fälle.Berechnung Kreuzkorrelation

time=0:1/1000:2; 
    A=sin(2*pi*f*t)+sin(2*pi*f*t); 
    Y=randn(1,length(A)); 
    C1=xcorr(A,Y); 
    figure 
    plot(C1); 
    FFT_A=fft(A); 
    FFT_Y=fft(Y); 
    F2=FFT_A.*conj(FFT_Y); 
    C2=ifft(F2); 
    plot(C2); 

Dank

Antwort

1

Dies wird durch Aliasing verursacht. Bitte versuchen Sie den folgenden Code.

clear; 
    clc; 
    N=4000; 
    Fs=1000; 
    a1_normalized_frequency=0.1; 
    b1_normalized_frequency=0.3; 
    a1_amplitude=1; 
    b1_amplitude=0.5; 
    time=0:1/Fs:4; 
    a1_frequency=Fs*a1_normalized_frequency; 
    b1_frequency=Fs*b1_normalized_frequency; 
    A=[zeros(1,length(time)) a1_amplitude*sin(2*pi*a1_frequency*time)+b1_amplitude*sin(2*pi*b1_frequency*time) zeros(1,length(time))]; 
    Y=randn(1,length(A))+A; 
    Cross_Correlation_Time_domain=xcorr(A,Y); 
    figure(1) 
    plot(Cross_Correlation_Time_domain); 
    FFT_A=fft(A); 
    FFT_Y=fft(Y); 
    Multiply_FFT_A_Y=FFT_A.*FFT_Y; 
    cross_correlation_frequency_domain=ifft(Multiply_FFT_A_Y); 
    figure(2) 
    plot(fftshift(real(cross_correlation_frequency_domain))); 

Ich habe Nullen zu Ihrem A Array hinzugefügt Aliasing zu vermeiden.

Wenn ich cross_correlation_frequency_domain plotten verwendete ich fftshift Funktion, um die Signalreihenfolge auszurichten.

+0

Vielen Dank. Bitte, wenn ich ein Signal um plus/minus 100 Sample verschieben und die Korrelation darstellen möchte, wie kann ich das tun? – user6052232

+0

Sie meinen, Sie wollen Ihr um 100 Samples verschobenes A-Signal plotten? In diesem Fall, einfach "Plot (A (101: Ende))" – KKS

+0

Danke, ja, zweimal. eins plus 100 und eins minus 100 – user6052232