利用互相关函数求两时间序列的相位差,相当精确
本程序是利用互相关函数的计算公式来求解两个时间序列的相位差,求出来的结果相当精确。
具体的方法可以参考《基于虚拟仪器的相位测量算法研究》,发表于《电测与仪表》,白鹏等著!
方法一、利用互相关函数的性质:对于单频信号而言,时移相当于相移,相关系数从初始值变成最大值的时候,说明相位差也从初始相位差变为零。
在实际处理中,总是把A(t)、B(t)进行离散化采集以方便计算机的处理,设
则相关函数为:
方法二、利用互相关函数的两同频正弦信号的互相关函数零时刻值与其相位差的余弦值成正比的原理获得相位差。
离散公式为:
式中k为采样点。通过信号x和y的自相关与互相关函数的计算,可求得它们的相位差。
比较两种方法可知:第二种方法的计算精度较高。可见如果只是简单的求取互相关函数,用第一种方法即可( 直接调用xcorr),但是如果要求取延迟时间,则可以按照互相关的具体公式编写函数!
具体程序如下:
n=512;
%设定每周期数据采集点数
T=5;
%采样周期数
fen=60;
%将度转化为分:1度=60分
hs=360/(2*pi);
%弧度转化为度数
t=0:2*pi/(n-1):2*T*pi;
%采样数
N=length(t);
%采样长度
y1=4*sin(t);
%信号1
y2=4*sin(t+pi/(180*6));
%信号2
Cc=xcorr(y1);
%求互相关函数
%用互相关函数数学表达式求相位差:
%rm(n)=Rxy(n)/sqrt(Rxx(0)*Ryy(0))
C0=sum(y1.*y2);
%y1和y2互相关
A0=sum(y1.*y1);
%y1自相关
B0=sum(y2.*y2);
%y2自相关
a=sqrt(A0);
b=sqrt(B0);
zhunquezhi=(pi/(180*6))*hs*fen
jiaocha=acos(C0/(a*b))*hs*fen
%相位差计算公式
jdwucha=jiaocha-zhunquezhi
%绝对误差
xdwucha=((jiaocha-zhunquezhi)/zhunquezhi)*100
%相对误差
%用有效值计算比值差
youxiaoy1=sqrt((1/(N-1))*sum(y1.^2));
%计算y1有效值
youxiaoy2=sqrt((1/(N-1))*sum(y2.^2));
%计算y2有效值
bizhicha=abs((youxiaoy1-youxiaoy2)/youxiaoy1)*100;
%计算比值差
%作图
m=(-N+1):(N-1);
subplot(311);
plot(t,y1);
grid;
subplot(312);
plot(t,y2);
grid;
subplot(313);
plot(m,Cc);
grid;