相位差的求取问题
两个信号进行相关,得到时间延时的相关系数图,但由于两个信号同时采集,同时结束,长度一样,延时的时候第二个信号后面的数据在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 编辑 ] 已解决
%==========================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]