查看原文
其他

利用互相关函数求两时间序列的相位差,相当精确

2016-04-26 jgh530520 声振之家


本程序是利用互相关函数的计算公式来求解两个时间序列的相位差,求出来的结果相当精确。


具体的方法可以参考《基于虚拟仪器的相位测量算法研究》,发表于《电测与仪表》,白鹏等著!


方法一、利用互相关函数的性质:对于单频信号而言,时移相当于相移,相关系数从初始值变成最大值的时候,说明相位差也从初始相位差变为零。


在实际处理中,总是把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;



声明:本文由声振论坛会员jgh530520原创,版权归原作者所有,转载请联系原作者授权,并注明:来自@声振之家。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存