傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗

上文传送门:
傅里叶变换学习笔记(一)
本文将对傅里叶变换应用中常见的两个问题进行讨论。
(一) 栅栏效应
先看一个典型的应用案例:
构造信号:
x ( t ) = − s i n ( 2 π f 1 t ) + s i n ( 2 π f 2 t ) , f 1 = 10 H z , f 2 = 12 H z x\left(t\right)=-sin\left(2\pi f_1t\right)+sin\left(2\pi f_2t\right),f_1=10Hz,f_2=12Hz x(t)=sin(2πf1t)+sin(2πf2t),f1=10Hz,f2=12Hz
从表达式中可以看出, x ( t ) x(t) x(t)中有 f 1 = 10 H z f1=10Hz f1=10Hz f 2 = 12 H z f2=12Hz f2=12Hz两个频率的谐波成分,其连续信号波形长这样:
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第1张图片截取信号的一个完整周期,并将其离散采样,记为 x ( z ) x(z) x(z),采样率为200Sa/s(采样间隔为0.005s)。截断采样后的信号长度为100,形状长这样:傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第2张图片
直接对其进行快速傅里叶变换,结果为:
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第3张图片
连续信号 x ( t ) x(t) x(t)中并不包含 f = 11 H z f=11Hz f=11Hz频率的谐波,这在 x ( z ) x(z) x(z)的FFT结果中并不能反映出来。理想情况下x(z)傅里叶变换结果应该为(红色点线):
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第4张图片
究竟是什么样的原因造成这种误差呢?通过观察,FFT结果中在信号频带附近只能取到10Hz和12Hz,而在我们关注的11Hz并没有计算结果,这显然是由于计算分辨率过低,只能计算特定频率点处的幅值。FFT中频率分辨率为:
F s / N Fs/N Fs/N
(Fs为采样率、N为数据点数)
也就是说,在FFT计算中只能计算频率为整数倍的Fs/N的频率点,而无法分析其余频率点的谐波成分,本例中 F s = 200 Fs=200 Fs=200 N = 100 N=100 N=100,频率分辨率为2。这样的计算结果就像通过一道栅栏看风景,只有透过栅栏缝隙的景色才能被看到,这种现象被称为栅栏效应
那么如何提高频率分辨率呢?
从频率分辨率的公式来看,增加数据点数是一个方法,
那么如何增加数据点呢?
首先来看一下补零操作,所谓补零,就是在分析数据的开头或末尾位置人为添加若干个0数据点以达到扩充数据点数的目的。接上例,在 x ( z ) x(z) x(z)末尾补400个0值,对补零后的数据经FFT之后结果为:
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第5张图片
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第6张图片
从结果来看,频率分辨率似乎更细致了,因为增加了信号的长度N,频率分辨率相应变小,但是 x ( t ) x(t) x(t)的真实特征仍然没有反映出来, f = 10 H z f=10Hz f=10Hz的频率点处幅值仍不为0,与之前计算结果相比较,幅值曲线似乎只是更“光滑”了一些,而且出现了一系列旁瓣。

再看另一种数据扩展的操作,将 x ( z ) x(z) x(z)延拓4个周期:
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第7张图片
FFT结果为:
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第8张图片
计算结果符合预期。思考一个问题:同样是数据扩展,为什么周期延拓会提高计算精度,而补零操作不能?
从感性角度较容易解释,仅将一段数据简单补零的操作,实际上并不能增加数据所表达的信息,而仅仅是提高了FFT本身的分析精度,这个操作就好比用一个放大镜去看一个已经打码的图片一样,即使放大镜倍数再高也无法准确的看出原有图片的细节。而将数据周期延拓则是对信号的信息表达有“加强”的效果,当然FFT结果会得到优化。
而从逻辑上直接解释这个问题并不容易,观察补零后的信号,其在时域中可被看作是周期延拓后的信号在乘一个矩形窗的结果。根据性质:**信号在时域上的乘积运算等价于在频域上的卷积运算。**矩形窗的傅里叶变换结果是 s i n c sinc sinc函数,过程如图:
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第9张图片
关于卷积计算的过程,用公式表达不能直观理解,引用敌台大神的动画图。
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第10张图片(来源:从采样点到声音:sinc函数和卷积 - 知乎 (zhihu.com))
图中橘黄色为 s i n c sinc sinc函数、绿色为卷积结果。可以看出,卷积后的结果可视为将蓝色峰值点做插值处理,而插值函数正是 s i n c sinc sinc函数,这也是补零后信号频谱中出现旁瓣的原因。
总结一下,对一个信号进行周期延拓会增大信号的频率分辨率,而补零只是在原有频谱上进行 s i n c sinc sinc插值处理。

(二) 频谱泄漏与加窗
频谱泄漏也做FFT时最常见的一个问题,举一个更简单的例子:
设信号 w ( t ) = s i n ( 2 π f t ) , f = 10 H z w(t)=sin(2πft),f=10Hz w(t)=sin(2πft)f=10Hz,对 w ( t ) w(t) w(t)进行离散采样,采样率为200Sa/s,记为 w ( z ) w(z) w(z)。取5个整周期共100个点进行FFT计算:
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第11张图片
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第12张图片
下面进行如下操作:取4.7个周期,共94个点进行FFT计算:
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第13张图片
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第14张图片
频谱中反映的信息并不是单一频率的信号,而在10Hz附近的频率均有幅值,这种现象就是频谱泄漏。之前解释过DFT只是在DFS基础上,截取时域上的主值区间,只取1个周期的信号描述整个时间序列。按照上图信号截断的方法,完整的信号其实是这样的:
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第15张图片
这种非整周期的截断导致延拓信号与原信号相位不连续,这是产生频谱泄漏的主要原因。主频周围频率点的谐波可视为对相位突变的补偿。
如何避免频谱泄漏呢?对于单频率的信号,只需要周期截断就可以了。对于频率成分复杂的信号,无法保证截断操作能满足各频率下的整周期。这时可以对时域信号进行加窗操作来降低频谱泄漏。

所谓加窗,就是在原信号上乘一个窗函数,对信号的截断操作可以理解为给信号加了一个矩形窗,这种加窗操作实质上是对原信号进行加权操作,单位矩形窗每个点的权值为1,而这些权值函数统称为窗函数

汉宁窗是最常用的窗函数之一,他长这样:
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第16张图片
再看上边非周期截断那个信号,经过加窗之后:
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第17张图片
经过加窗之后,信号的开头和末尾均为0,这在一定程度上弱化了相位突变的影响,频谱泄漏现象明显降低。
使用不同的窗函数会对信号的频谱带来不同的影响,分析常用的三个窗函数:汉宁窗、海明窗和blackman窗。
时域和其频谱特征如下:
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第18张图片
傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗_第19张图片
汉宁窗和海明窗的主瓣宽度相当,均小于blackman窗,主瓣宽度越宽,能量越集中在主瓣位置,但频率的分辨率会随之变差。汉宁窗和blackman窗的旁瓣衰减速度较快,相比较下海明窗的旁瓣衰减速度较慢,但海明窗离主瓣最近的旁瓣衰减较大。根据如上特性,可对窗函数的选择做一些总结(仅针对上述三个窗函数!!!):

  1. 宽频信号可使用旁瓣衰减较快的汉宁窗或blackman窗,具体选择可根据频率分辨率要求确定。
  2. 窄带信号可使用海明窗处理,其对主瓣有较高分辨率的同时对临近旁瓣有较好的抑制效果。
  3. 汉宁窗是通用的选择,若只定性分析信号的谐波成分而对其幅值精度要求不高的话,汉宁窗是不错的选择。

当然,常用的窗函数还有三角窗、平顶窗、凯塞窗等,分析方法相同。具体选择还需要具体分析信号的特征和分析的需求,结合窗函数的性能进行综合评估以满足要求。

下期预告:《时频分析——从STFT到HHT》

欢迎信号处理爱好者讨论交流:vx:jazzie_inja

你可能感兴趣的:(傅里叶变换学习笔记,笔记,快速傅立叶变换,频域,信号处理)