【2023年电赛H题信号分离装置】软件锁相思路
1. 引言
在B站看到一位老哥将软件锁相程序开源了,这里简单解读一下这份程序,写下实现流程,记录的同时还可供朋友们实现参考。
2. 资源
- ADC1、ADC2、ADC3
- AD9833 × 2
3. 流程
- 使用ADC1采样信号C,进行FFT,获取信号A、B波形类型和频率和相位后,通过AD9833,输出信号A'和信号B',重建信号波形。
获取信息: 信号A基频fA、相位pA;信号B基频fB、相位pB。
相位获取: $ arctan(\frac{bn}{an})$,即FFT输出数组对应索引的虚部bn和实部an。
波形识别: 基波幅值不同。
- 使用ADC2采样信号A',使用ADC3采样信号B'。分别通过FFT,获取信号A'的信号B'的频率和相位以及与原信号的相位差,并将相位差转换为角度制,并归一化为0-100°之间。
获取信息: 信号A'基频fA'、相位pA';信号B'基频fB'、相位pB'、pA与pA'相位差diffpA、pB与pB'相位差diffpB。
- 将fA与fA'、fB与fB'进行对比判断:if(fA == fA' && fB == fB')进行前置锁相操作,else AD9833重新重建A'、B'波形(参数不变)。
锁相前置操作: 将fA赋值给fA'',fB赋值给fB'',锁相标志位复位为p=-1,获取fB和fA的比值ZE=fB/fA,锁相标志位置一。
-
开始锁相。第一次循环,将第二步获取的相位差分别存储到数组diffpAarr[0]和diffpBarr[0]中(仅在标志位p=-1时,进行一次,后续标志位p>=0),再重复上述1、2、3操作,将新获取到的相位差分别存储到数组diffpAarr[1]和diffpBarr[1]中。判断:if(diffpAarr[0]>diffpAarr[1])则fA''+=0.01,否则fA''-=0.01,然后AD9833进行波形重建;信号B'同理。
-
判断重复上述1、2、3操作中获取的fA和fA'以及fB和fB'是否相同,有其一不相同则锁相标志位置零,跳出锁相,直到fA和fA'以及fB和fB'相同,则再进入锁相操作循环当中。
博客导航
本文来自博客园,作者:膝盖中箭卫兵,转载请注明原文链接:https://www.cnblogs.com/hai-feng-dev/p/18994815

浙公网安备 33010602011771号
https://orcid.org/0000-0001-5102-772X