2016-11-09 1 views
0

Ich versuche die Kohärenz zwischen zwei Signalen zu finden. Ich habe mscohere Funktion verwendet, aber das Ergebnis sieht Rauschen aus, weil das Signal lang ist (100000). Also habe ich das Signal in einen Datensatz aufgeteilt und versuche die Kohärenz aus (coherence=abs(Pxy)/sqrt(Pxx*Pyy)) zu finden. Ich fand die Pxx und Pyy und beide haben 1000 Datensätze. Als ich jedoch versuchte, Pxy die Anzahl der Punkte zu finden, die ich bekam, ist es (129) Punkte. und das Programm funktioniert nicht. Ich weiß nicht, den Grund für dieseKohärenz von zwei Signalen suchen

N=100000; 
SF=1000;  
A=sin(2*pi*100*t)+0.5*sin(2*pi*300*t); 
Y=0.8*randn(1,length(A))+A; 
D=reshape(A(1,1:100000),[1000,100]).'; 
M=length(D(1,:)); 
D1=reshape(Y(1,1:100000),[1000,100]).'; 
M1=length(D1(1,:)); 
for i=1:100 
    FFT_A(i,:)=fft(D(i,:)); 
    S_A(i,:)=(FFT_A(i,:).*conj(FFT_A(i,:)))/M; 
    FFT_Y(i,:)=fft(D1(i,:)); 
    S_Y(i,:)=(FFT_Y(i,:).*conj(FFT2_Y(i,:)))/M; 
    Pxy (i,:)= cpsd(D(i,:),D1(i,:)); 
end 
S_A_F=sum(S_A); 
S_Y_F=sum(S_Y); 
Pxy_F=sum(Pxy); 
coherence=abs(Pxy_F)./sqrt(S_A_F.*S_Y_F); 

Antwort

0

Sieht aus wie Ihre Ausgabedomäne Auswahl zwischen der Autokorrelations- und der Kreuzkorrelation unvereinbar ist. Darf ich vorschlagen, eine konsistente Analyse für beide Maßnahmen zu verwenden.

Pxx = cpsd(D, D);%auto-spectra D 
Pyy = cpsd(D1, D1);%auto-spectra D1 
Pxy = cpsd(D, D1);%cross-spectra D-D1 

coherence = abs(Pxy.*conj(Pxy))./(Pxx.*Pyy); 
+0

Vielen Dank. Das Signal ist lang und das Ergebnis wird laut. Ich muss das Signal in Aufzeichnungen aufteilen. – user6052232

Verwandte Themen