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

  本文基于《正弦相位的取样数值测量——高庆》在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) 时,则被测相位差为 ϕ=yi()

2.流程图

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

3.MATLAB仿真实现

clear all;

%N = 200;                                                                  %采样数量
F = 1;                                                                     %被采样信号频率1Hz
Ts = 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;                                                              %计算Um
Uv=(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;
    end
end
angle=sqrt(Y1)

4.误差分析

4.1采样数量

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

4.2求取 U1mU2m 的误差

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

4.3时间误差

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

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值