2016-11-09 65 views
0

我試圖找到兩個信號之間的一致性。我用mscohere功能,但結果看起來很吵,因爲信號很長(100000)。所以,我將信號分成一個記錄,並嘗試從(coherence=abs(Pxy)/sqrt(Pxx*Pyy))找到一致性。我找到PxxPyy,他們兩個都有1000記錄。但是,當我試圖找到Pxy我得到的點數是(129)分。和該程序無法正常工作。我不知道原因發現兩個信號的一致性

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); 

回答

0

看起來你的輸出域選擇在自相關和互相關之間是不一致的。我可能建議對這兩種措施使用一致的分析。

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

謝謝。信號很長,結果會很嘈雜。我必須將信號分成記錄。 – user6052232

相關問題