我试图找到两个信号之间的一致性。我使用mscohere
函数但结果看起来很差,因为信号很长(100000)
。因此,我将信号分成记录,并尝试从(coherence=abs(Pxy)/sqrt(Pxx*Pyy))
找到一致性。我找到了Pxx
和Pyy
,并且他们都有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 :(得分: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);