模拟信号求解相位差(1)
来源:互联网 发布:举报淘宝盗图 编辑:程序博客网 时间:2024/06/05 08:31
本文基于《正弦相位的取样数值测量——高庆》在MATLAB上进行仿真实验,也可看成对此方法的验证。
1.理论基础
假设输入的两个模拟信号的表达式分别为:
将模拟信号转化为数字信号的采样序列:
其中
从数学的角度可以得到以下推导:
其中用到
从数学方面可以知道,余弦信号在一个周期内整数倍取样和为0,所以上式可以变成
其中
求两个采样序列乘积的平均值为
这表明满足采样定理,且
又根据泰勒公式可以得到:
可以近似表示为
我们可以得出被测相位差
但这样得出的相位差会有较大误差,我们需要进行校正,所采用的方法是直接迭代法,取泰勒展开式的前四项:
令
得到迭代公式
当
2.流程图
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求取U1m、U2m 的误差
此方法是处理的离散采样点,虽然可以保证取出
4.3时间误差
上述我们得到的采样序列都是基于同步采样,即采样时间均一致。但在实际情况中,单片机对两信号的采样会有先后顺序。而这会导致在计算时发生偏差。
以上就是我对于模拟信号求解相位差的理解和仿真实现,初次涉及此领域,有不足之处希望大家能够给予宝贵意见。
- 模拟信号求解相位差(1)
- 模拟信号求解相位差(2)
- FPGA测两路信号相位差
- 模拟信号
- 模拟求解迷宫问题(DFS+BFS)
- PWM变模拟信号(积分电路 )
- PWM变模拟信号(积分电路 )
- PWM变模拟信号(积分电路 )
- 信号(1)不可靠信号
- (模拟信号/数字信号)分别以(模拟信号/数字信号)中传输方式
- 模拟信号的数字化
- 模拟信号的隔离
- 11.模拟信号示波器
- 模拟信号运算电路
- 模拟信号示波器
- 模拟信号的隔离
- 模拟信号隔离
- 什么是模拟信号
- 98. Validate Binary Search Tree
- 人群分析--Beyond Counting: Comparisons of Density Maps for Crowd Analysis Tasks
- [BZOJ]1266: [AHOI2006]上学路线route spfa+最小割
- JDBC连接oracle数据库,并实现批量插入
- JavaSSM学习小结(3):Service层开发
- 模拟信号求解相位差(1)
- extern C作用总结
- postgresql删除主键
- Android三种姿势带你玩转360度全景图功能
- SSH中hibernate配置mysql乱码问题
- 如何识别C++编译以后的函数名(demangle)
- oracle用dbms_workload_repository取AWR报告方法
- Caffe_Windows学习笔记(五)用训练好的caffemodel来进行分类
- ThinkJS3升级之路