声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1743|回复: 1

[综合讨论] 相位差的求取问题

[复制链接]
发表于 2008-6-16 16:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
两个信号进行相关,得到时间延时的相关系数图,但由于两个信号同时采集,同时结束,长度一样,
延时的时候第二个信号后面的数据在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);
[y_max,t_max]=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
[y_maxnew,t_maxnew]=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
[y_new,t_new]=max(ynew);  delay4=2*pi*(t_new-1)/n;
subplot 133; plot(ynew);

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


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

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

 楼主| 发表于 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
[y_maxnew,t_maxnew]=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
[y_new,t_new]=max(ynew);  
delay4=2*pi-2*pi*(t_new-1)/n;
subplot 133; plot(ynew);

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


n的取值足够大时

结果一致~~

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-5 21:26 , Processed in 0.195062 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表