Matlab 寻找两个信号的相干性
我试图找到两个信号之间的一致性。我使用了Matlab 寻找两个信号的相干性,matlab,signal-processing,Matlab,Signal Processing,我试图找到两个信号之间的一致性。我使用了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.
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);
看起来您的输出域选择在自相关和互相关之间不一致。我是否可以建议对这两个指标使用一致的分析
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);
非常感谢。信号很长,结果会产生噪音。我必须把信号分成记录。