FFT – Spectral Leakage
假设用于ADC
输出数据分析的采样点数为N
,而采样率为Fs
,那我们就知道,这种情况下的FFT
频谱分辨率为δf
,那么δf=Fs/N
。如果此时我们给ADC
输入一个待测量的单频Fin
,如果此时Fin
除以δf
不是整数,就会产生频率泄露。要尽可能保证测得的FFT
不会产生频谱泄露,有两种方式进行处理,相干采样和时域加窗。
(1)相干采样
假设M
是我们需要采样的输入信号的周期数,那么M/Fin=N/Fs
,也就是两个时间长度是一致的,也就是Fin/ Fs=M/N
,这个比值要能够被表达成为有理数(也就是整数或者分数)。N
必须是2
的幂数(这是从蝶形运算的角度考虑的)。M
和N
还必须要互为质数(这样可以避免重复采样相同位置的,重复采样周期信号相同的位置点不会获得额外的信息,因此不推荐M
取非素数(素数,除了1和它本身以外不再有其他因数的自然数))。如果选择了M/N
为非互质时,将导致信号周期性的量化,以及仅有少量的量化步进被测试。量化周期性的重复,建立了一个线谱,它是一个令人费解的实频率线(如下图2所示在谐波镜像之下的红线,这是由ADC
的非线性导致的,而黑色痕迹则是因为量化周期的重复性导致的,也就是M/N
为非互质导致的,图3是采用相干采样得到的结果。
从相干采样的描述来看,相干采样的输入信号Fin
和采样频率Fs
必须是同步信号。另外相干采样可以确保信号功率仅在一个FFT bin
(也就是频谱分辨率)之中。
图1 相干采样定理:
图2 重复相同位置采样导致的谐波痕线抬升:
图3 相干采样改善还原了真实的非线性特性:
(2)时域加窗
如果采样的波形是非连续的,也就是采集的样本不是信号的整数倍周期,那么就需要消除这种现象,从而减小FFT
的频谱泄露(注意不是完全改善),TI
的官方文档为我们展示了这一现象,如下图3所示,对信号进行了时域加窗,加窗之后频谱泄露有所减小。
图4 非周期采样频谱泄露展示:
很明显No window
(矩形窗)的旁瓣非常高,也就意味着,它的泄露抑制的不是很好。但是频率分辨率准确,幅值精度低。
- 不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。信号的截短产生了能量泄漏,而用
FFT
算法计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的,但是我们可以通过选择不同的窗函数对它们的影响进行抑制。(矩形窗 主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低;布莱克曼窗主瓣宽,旁瓣小,频率识别精度 最低,但幅值识别精度最高)Hanning
(汉宁窗)是使用最广泛的一种窗函数,除此之外还有,Hamming
(海明窗),Flat-top
窗和Balckman-Harris
窗,矩形窗产生最窄的谱线,加Flat-top
窗谱线最宽。旁瓣的影响和精确频率分辨率 有时候是不可兼得的。(矩形窗主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低;Flat-top
窗主瓣 宽,旁瓣小,频率识别精度最低,但幅值识别精度最高)
图5 TI官方的不同窗函数的频谱特性:
图6 不同应用使用的窗函数:
-
Processing loss(dB)
,也叫做相干功率增益,对一个信号进行加窗操作之后将会减少信号在时域上的幅值,尤其是在窗函数的左右边界,这种幅度的减小会引入幅度误差,每个窗函数的这种处理损失不太一样,TI
已经列于下表之中,矩形窗不存在损失。 -
Scalloping loss(dB)
,由于FFT
变换的结果是离散的,那么信号的频率有可能会落在两个FFT bin
之间,这样原本的功率就会被分散到两个bin
上,从而相对于原先的功率就会产生损失,这就叫做栅栏损失。
图7 不同窗函数使用的处理误差:
图8 不同窗函数的形状:
TI
的ADC
分析软件,内部已经对加窗处理损失进行修正。
大家可自行使用FFT
分析软件分析一下非整周期采样使用各种窗口的结果,加深理解Highest side lobe level、Processing loss、Scalloping loss以及Half main lobe width
。应用时域加窗技术会影响频谱分辨率。