找到两个信号的一致性

时间:2016-11-09 02:09:38

标签: matlab signal-processing

我试图找到两个信号之间的一致性。我使用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);

1 个答案:

答案 0 :(得分:1)

看起来您的输出域选择在自相关和互相关之间不一致。我建议对两种措施使用一致的分析。

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