模拟信号求解相位差(1)

来源:互联网 发布:举报淘宝盗图 编辑:程序博客网 时间:2024/06/05 08:31

  本文基于《正弦相位的取样数值测量——高庆》在MATLAB上进行仿真实验,也可看成对此方法的验证。

1.理论基础

  假设输入的两个模拟信号的表达式分别为:
  μ1(t)=U1msin(ωt+θ1)
  μ2(t)=U2msin(ωt+θ2)
  将模拟信号转化为数字信号的采样序列:
  μ1(n)=U1msin(2πnN+θ1)
  μ2(n)=U2msin(2πnN+θ2)
其中N=TTs为模拟信号一个周期内的采样点数,Ts是采样器的取样周期
  从数学的角度可以得到以下推导:
  Nn=1U1(n)U2(n)=2Nn=1Umsin(2πnN+θ1)sin(2πnN+θ2)=Nn=1Umcos(θ1θ2)Nn=1Umcos(4πnN+θ1+θ2)
其中用到
  sinαsinβ=12cos(αβ)12cos(α+β)
  Um=12U1mU2m,其中U1m=Max(U1(n)),U2m=Max(U2(n)),这样就可以通过对采样序列的查询来得到U1mU2m的值。
  从数学方面可以知道,余弦信号在一个周期内整数倍取样和为0,所以上式可以变成=Nn=1Umcos(θ1θ2)=NUmcosϕ
其中ϕ=θ1θ2就是所求两个信号的相位差
求两个采样序列乘积的平均值为
U¯¯¯=1NNn=1U1(n)U2(n)=Umcosϕ
  这表明满足采样定理,且TTs=N时,一个周期内的正弦信号瞬间取样值的乘积的平均值正比于它们之间的相位差ϕ的余弦值,即cosϕ=U¯¯¯Um
  又根据泰勒公式可以得到:
cosϕ=1ϕ22!+ϕ44!ϕ66!++(1)nϕ2n(2n)!+(1)n+1ϕ2n+2(2n+2)!cosζϕ,0<ζ<1
可以近似表示为cosϕ1ϕ22!
我们可以得出被测相位差ϕ
ϕ=22cosϕ=22U¯¯¯Um()
  但这样得出的相位差会有较大误差,我们需要进行校正,所采用的方法是直接迭代法,取泰勒展开式的前四项:
cosϕ1ϕ22+ϕ424ϕ6720
y=ϕ2
cosϕ=1y2+y224y3720
得到迭代公式
yi=2(1U¯¯¯Um)+y2i124y3i1720
yiyi1<a(a)

2.流程图

Created with Raphaël 2.1.0开始 信号采集 检索峰值 计算平均值和Um 计算初始相位差 迭代公式 是否能到到精度要求? 输出相位差 结束 yesno

3.MATLAB仿真实现

clear all;%N = 200;                                                                  %采样数量F = 1;                                                                     %被采样信号频率1HzTs = 0.01;                                                                 %采样间隔 Fs = 1/Ts;                                                                 %采样频率%T = N*Ts;                                                                 %采样时长%n = 0:N-1;                                                                %时域采样序列(N个采样)NP = floor( (1/F)/(Ts) );                                                  %1个周期采样点数,floor()向负无穷大方向取整n = 0:NP-1;nTs = n*Ts;                                                                %时域采样时间序列%对下列信号进行研究g1=inline('2*sin(t)');g2=inline('3*sin(t+pi/4)');%采样序列f1=g1(2*pi*nTs);f2=g2(2*pi*nTs);%f2转置f2=f2.';U1m=max(max(f1));                                                          %求出f1中的最大值U2m=max(max(f2));                                                          %求出f2中的最大值Um=U1m*U2m/2;                                                              %计算UmUv=(f1*f2)/NP;                                                             %计算平均值angle=sqrt(2-2*(Uv/Um));                                                       %获得初始相位差%下面通过迭代提高相位差的精度Y0=angle*angle;a=0.00001;                                                                 %要求for i=1:10000000000    Y1=2*(1-Uv/Um)+Y0*Y0/12-Y0*Y0*Y0/360;                                  %迭代公式    if(Y1-Y0)<a                                                            %若两次迭代数值小于所要求精度,则停止迭代        break    else        Y0=Y1;    endendangle=sqrt(Y1)

4.误差分析

4.1采样数量

  此方法的精确度与采样数量有着密切的关系,虽然在满足采样定理的前提下采样的数据越多越好,但是单片机的处理能力是有限度的,它的取样频率是有上限的。

4.2求取U1mU2m的误差

  此方法是处理的离散采样点,虽然可以保证取出U1(n)U2(n)中的最大值来作为U1mU2m的近似值,但是无法保证离散采样点的最大值就是原始信号的峰值。

4.3时间误差

  上述我们得到的采样序列都是基于同步采样,即采样时间均一致。但在实际情况中,单片机对两信号的采样会有先后顺序。而这会导致在计算时发生偏差。
  以上就是我对于模拟信号求解相位差的理解和仿真实现,初次涉及此领域,有不足之处希望大家能够给予宝贵意见。

原创粉丝点击