基于信号FFT频谱的幅频测量方案

学生,记录,科技 2018-07-23 4 条评论 访问: 6,890 次

要求:测量信号(50~1000Hz,方波)基波和各谐波频率及幅值(频率精度1%,幅值精度5%)
针对该要求我们要确定大致的解决方案,通过采样得出信号序列,再通过FFT得出频谱,分析频谱得到需要测量的基波和各谐波频率及幅值。
fft.jpg

需要注意的问题:
1.根据香农采样定理(信息论,为了不失真地恢复模拟信号,采样频率应该不小于模拟信号频谱中最高频率的2倍,即f s≥2f max)
针对此处,50~1000Hz方波,则系统采样频率不得低于1000Hz x 2,但是在真正的工程应用上,采样频率Fsample一般是信号频率的20倍是比较理想的(并不很确定!)即Fsample=20 x Fsignal.
2.当系统性能资源受限制时,无法实时对信号进行FFT变换,对于实时性要求不高的测量系统,可以先对信号进行采样,采满系统需要的信号长度时再结束采样,开始进行信号处理等操作,结束后再重新采样。

3.对于DSP库中的FFT函数,有不同的输入序列长度1024,256,64等,尽量选择更长的序列以提高精度,输出频谱宽度为N/2。(N为FFT输入序列长度)
4.经过测试测量系统ADC精度在至少要在12bit以上,更高的ADC精度,可以从根本上提高测量系统精度,在这里测量系统采用12bit
5.FFT函数在测量系统上频谱的频率分辨率由采样序列长度N和采样频率Fsample共同确定,计算方法是Fdelta=Fsample/N(N为FFT输入序列长度),故,要提高频率精度,降低采样频率Fsample并提高FFT输入序列长度N,或者更换FFT算法,加窗。
6.由信号频率范围计算采样频率最大范围,针对50Hz~1000Hz(正弦)信号,使用1024长度的FFT计算频谱,则理论最低和最高采样频率为2000Hz~51200Hz,最低采样频率可由香农采样定理可知,由信号最高频率可得,而往往最高采样频率容易被忽视,它由信号最低频率和FFT输入序列长度N确定,FsampleMax=1/((1/Fsignalmin)/N).采样频率高于FsampleMax,理论上,测量系统在N个采样点数上无法采得完整的一个周期,那么FFT之后无法得到相对完整的频谱。
7.对于数字测量系统,尽量避免对浮点数直接强转为整型,这样会舍小数,损失精度,一般的解决方法是对浮点数乘以10或者100再进行强转以保留小数位,条件是数据不发生溢出。同时还要尽量避免小数除以大数的情况,由于数据类型存储长度一定,结果的小数位一部分会被舍弃,精度降低。
8.由于测量系统为离散数字系统,无法进行同步采样,FFT频率分辨率受限,故频谱上的尖峰所对应的频率有时并不是被测信号理论的频率,反而在信号频点附近波动。也存在尖峰并不明显的情况,即频谱最高点周围存在某些点的幅值较最高点依然占有很大的比例,理论频率在频谱上平缓的突起中存在,并没有准确的尖峰与之对应。
9.为尽量得到整数的频率分辨率,可以将采样频率进行如下处理,FsampleNew=FsampleOrig x 1.024.
10.对于频谱上非常明显的尖峰(只有最高点非常突出,最高点左右两点幅值几乎为零)此时通过一定的计算可由此尖峰的幅值反推出实际信号的幅值,尖峰效果越明显,计算出来的幅值精度越高,可以在5%以内。对于平缓的凸起,即发生了频谱泄露,此时需要更新幅值计算方法,综合计算最高点及其周围点的幅值,取其实部虚部,求平方和再开方,以此作为更优的幅值,经过测试在20 x 1.024 x Fsignal采样率下,FFT序列长度1024,由此方法计算出来的原始信号幅度误差在5%以内,满足要求。还有另外一种方法解决此问题,以提高幅值测量精度,在20 x 1.024 x Fsignal的初始采样率下,将初始采样率进行一定范围的左右波动,分别进行FFT变换,直到出现非常明显的尖峰,即最高点两侧点的幅值均远小于最高点幅值,此时的幅值精度是非常高的,但在这20倍采样率下,频谱的尖峰一般和理论频率存在一些差异。
11.采样率尽量避免是信号频率的整数倍
fft1.jpg

综上,整体实现方案如下:
测频:
以Fsample=2500Hz的初始采样频率进行采样,通过算法找出基频位置,粗略测量的基频Fbase,更新采样率为Fsample=Fbase x 2 x 1.024,重新采样处理,得到精确的Fbase,在根据Fbase推算出n次谐波的频率,在此处需要注意,方波只有奇次谐波,对于任意波,需要验证n次谐波是否存在.至此信号频率可以测量出来,经过部分测试,测得的频率误差在1%以内。
测幅:
对于基波(1次谐波)和n次谐波采用同样的方法,即以n次谐波频率的20 x 1.024倍进行采样,在对应频率附近搜索幅度最高点,并取幅度最高的点及其两侧各两个点所对应的实部虚部分别求平方再求和开平方,经过换算作为最终幅值。各频点的幅值均可以此算法测量。经过部分测试,此方法测得的幅值误差在5%以内。

此测量方案从未真正应用在实际测量系统中,仅供参考,自求多福!
方波的n次谐波幅值n=1,3,5,...
Amp=VH x (4/pi) x (1/n)
参考文献:STM32 DSP FFT


除非注明,嗯VIEW文章均为原创,转载请以链接形式标明本文地址
本文地址:https://www.umview.com/Amplitude-frequency-measurement-of-signal-based-on-FFT-spectrum

本文由 nash.zhao 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

4 条评论

  1. SILENCE
    SILENCE

    真是不理解你是怎么看下去的

    1. nash.zhao
      nash.zhao

      emmmm,毕竟这是专业课啊/笑哭

  2. 李扬
    李扬

    学到了学到了

  3. Yuuki
    Yuuki

    这是趁着热乎总结一波呀。

取消回复

添加新评论