antonylau 发表于 2008-6-16 16:37

相位差的求取问题

两个信号进行相关,得到时间延时的相关系数图,但由于两个信号同时采集,同时结束,长度一样,
延时的时候第二个信号后面的数据在matlab里面是补0处理么?
于是结果会呈现菱形,从负时间轴到正时间轴。
但对于正弦函数,在每一个周期的时候,两者都应该有一个最大的相关值,且幅度应该一样?
这种情况怎么处理?
就是在这个基础上我想找到两个信号的相位差(如果还差2pi整数倍估计也不行),结果不太一样,怎么回事?

clear; clc;
n=50;                              %设定每周期数据采集点数
T=10;                               %采样周期数
t=0:1/n:T-1/n;                      %采样数
N=length(t); fs=200;

y1=2*sin(2*pi*t);                           %信号1
delay0=pi/3;                           %相位差取pi/3

y2=3*sin(2*pi*t+delay0);                  %信号2

figure, subplot 121; plot(t,y1); subplot 122; plot(t,y2);
%=========================method1==========================================
C0=sum(y1.*y2);%y1,y2 cross-correlation
A0=sum(y1.*y1);%y1 auto-correlation
B0=sum(y2.*y2);%y2 auto-correlation
a=sqrt(A0); b=sqrt(B0); delay1=acos(C0/(a*b));

%=========================method2==========================================
Cc=cpsd(y1,y2,[],[],[],fs,'twosided');
Ccabs=abs(Cc); Ccphase=angle(Cc); Ccphaseunwrap=unwrap(Ccphase);
figure; subplot 131; plot(Ccabs);
=max(Ccabs(1:100)); delay2=Ccphaseunwrap(t_max);

%==========================method3=========================================
for i=0:50,
    temp=xcorr(y1(70:120),y2(i+70:120+i),'coeff'); y(i+1)=temp(51);   
end
=max(y);delay3=2*pi*(t_maxnew-1)/n;
subplot 132; plot(y);

%=========================method 4======================================
for i=0:50,
    temp=sum(y1(70:120).*y2(i+70:120+i)); ynew(i+1)=temp/50;
end
=max(ynew);delay4=2*pi*(t_new-1)/n;
subplot 133; plot(ynew);

%====================method 5==========================================
NEWCORR=crosscorr(y1,y2,300); =max(NEWCORR);
delay5=2*pi*(tmax-301)/n+2*pi; figure,plot(NEWCORR);


[ 本帖最后由 ChaChing 于 2009-3-5 13:59 编辑 ]

antonylau 发表于 2008-6-17 14:30

已解决
%==========================method3=========================================

for i=0:50,
    temp=xcorr(y1(70:120),y2(i+70:120+i),'coeff');
    y(i+1)=temp(51);   

end
=max(y);
delay3=2*pi-2*pi*(t_maxnew-1)/n;
subplot 132; plot(y);

%=========================method 4======================================

for i=0:50,
    temp=sum(y1(70:120).*y2(i+70:120+i));
    ynew(i+1)=temp/50;   
      
end
=max(ynew);
delay4=2*pi-2*pi*(t_new-1)/n;
subplot 133; plot(ynew);

%====================method 5==========================================
NEWCORR=crosscorr(y1,y2,300);
=max(NEWCORR);
delay5=2*pi-2*pi*(tmax-301)/n+2*pi;
figure,plot(NEWCORR);


n的取值足够大时

结果一致~~
页: [1]
查看完整版本: 相位差的求取问题