有关简单周期波形判定的思路

发布于 2025-01-17  106 次阅读


理想频谱分析

要求识别正弦波、锯齿波、三角波、脉冲波、混合波形这5种波形;
如下图,观察到脉冲波的频谱十分复杂,不同占空比脉冲波的频谱还有很大的差异,但是脉冲波的时域波形很简单,所以可以从时域下手去判定脉冲波
86f098d4e2e081e573909fab3f24cf6b
下面是正弦波、三角波、脉冲波的理想频谱,可以看到正弦波只有一个基波分量;三角波只有奇数次谐波,其三次谐波幅度是基波的1/9;锯齿波有n次谐波,其n次谐波幅度为基波的1/n。
对应功率谱的关系就要平方一下
590f35b11795e034103d7644e2dbabe8

最佳指标

经过测试,最佳的采样率为102.4kHz,FFT点数为1024点,最小分辨率刚好为100Hz,可以轻松识别500Hz到10kHz的波形,500Hz波形的持续时间为20ms,令采样时间为50ms,10kHz波形时域采样效果和频谱图如下
Pasted image 20250116233215
Pasted image 20250116233200

波形判决算法

具体代码暂不展示

时域波形分析

对脉冲波的时域特征进行判定,统计处于波形最大值和最小值附近的波形点数之和,与该周期内的所有点数比较(一个周期的判定以两次上升沿触发为准),如果数值处于合理的范围,则可判定为脉冲波,传入PS端参数ifpulse=1
以上需在zynq PL端实现,经时域判定后存入fifo,fifo满则依次存入ram中,50ms的采集时间很短,芯片内部的ram就足够存储了

频域波形分析

FFT IP核分别输出浮点实数序列r和浮点虚数序列i,数据传入ps端后进行平方和再开方(开方虽然增加了计算复杂度,但后期可以在屏幕上画出频谱图)后得到频谱
判定思路:
1、若ifpulse=1,判定为脉冲波;若ifpulse=0,进入下一步
2、用排序算法对除去直流分量的频谱序列从大到小排序(得到fft_sort),要带上功率谱序列的下标n_sort
3、若fft_sort(0)/fft_sort(1)大于30,判定为正弦波,如不是,进入下一步
4、以fft_sort(1)/fft_sort(n)<30条件为依据计算总的频谱分量个数n(由于采样率不够会也会导致一些较小谐波的产生,n的最大限度为4),再分别依次判定n_sort(1:n-1)是否可整除n_sort(0),只要有一个不可整除,判定为复杂波形,否则进入下一步
5、判定n_sort(1)是否可整除n_sort(0) if(n_sort(1)%n_sort(0) == 0),如不是,判定为复杂波形,如是,进入下一步
6、若n_sort(1)/n_sort(0)=2,进入步骤7,若n_sort(1)/n_sort(0)=3,进入步骤8,若n_sort(1)/n_sort(0)>=4,判定为复杂波形
7、判定fft_sort(1)/fft_sort(0)是否在(31/64,33/64)区间内 且 fft_sort(2)/fft_sort(0)是否在(26/81,28/81)区间,若是,判定为锯齿波,若不是,判定为复杂波形
8、判定fft_sort(1)/fft_sort(0)是否在(1/18,3/18)区间内,若是,判定为三角波,若不是,判定为复杂波形
经过以上判决步骤,绝大部分波形都可以正确识别,只有极少数比较极端的不行

最后更新于 2025-03-03