看到这样一段话:FFT 分析中常常要用到窗函数。在基于FFT 的测量中正确选择窗函数非常关键。频谱泄漏是由FFT 算法中的假设造成的,FFT
算法中假设离散时间序列可以精确地在整个时域进行周期延拓,所有包含该离散时间序列的信号为周期函数,周期与时间序列的长度相关。然而如果时间序列的长度不是信号周期的整数倍(fIN/fSAMPLE
( NWINDOW/NRECORD)
,假设条件即不成立,就会发生频谱泄漏。绝大多数情况下所处理的是一个未知的平稳信号,不能保证采样点数为周期的整数倍。频谱泄漏使给定频率分量的能量泄漏到相邻的频率点,从而在测量结果中引入误差。选择合适的窗函数可以减小频谱泄漏效应。为进一步了解窗函数对频谱的影响,我们考察一下窗函数的频率特性。输入数据通过一个窗函数相当于原始数据的频谱与窗函数频谱的卷积。窗函数的频谱由一个主瓣和几个旁瓣组成,主瓣以时域信号的每个频率成份为中心。旁瓣在主瓣的两侧以一定的间隔衰减至零。FFT
产生离散的频谱,出现在FFT 每个谱线的是在每个谱线上的连续卷积频谱。如果原始信号的频谱成份与FFT
中的谱线完全一致,这种情况下采样数据的长度为信号周期的整数倍,频谱中只有主瓣。没有出现旁瓣的原因是旁瓣正处在窗函数主瓣两侧采样频率间隔处的零分量点。如果时间序列的长度不是周期的整数倍,窗函数的连续频谱将偏离主瓣的中心,频率偏移量对应着信号频率和FFT
频率分辨率的差异,这个偏移导致了频谱中出现旁瓣,所以,窗函数的旁瓣特性直接影响着各频谱分量向相邻频谱的泄漏宽度。
我不明白这个主瓣,旁瓣到底是什么,能不能用矩形窗和汉明窗的图对比说明下。
另外,进行zero
padding只是增加了数据的长度,而不是原信号的长度。就好比本来信号是一个周期的余弦信号,如果又给它补了9个周期长度的0,那么信号并不是10个周期的余弦信号,而是一个周期的余弦加一串0,补的0并没有带来新的信息。其实zero
padding等价于频域的sinc函数内插,而这个sinc函数的形状(主瓣宽度)是由补0前的信号长度决定的,补0的作用只是细化了这个sinc函数,并没有改变其主瓣宽度。而频率分辨率的含义是两个频率不同的信号在频率上可分,也就要求它们不能落到一个sinc函数的主瓣上。所以,如果待分析的两个信号频率接近,而时域长度又较短,那么在频域上它们就落在一个sinc主瓣内了,补再多的0也是无济于事的。
我的疑问是:如果一个音频采样率为2048HZ(假设),我对2000个点进行了傅里叶变换,得到了2000个复数的结果。这样频率分辨率为2048/2000。如果进行了补零,那么对2048个点进行了傅里叶变换,难道不是得到2048个复数结果吗?那频率分辨率不就是2048/2048了吗?
谢谢。
很多人说,实际上没有变,因为 补得零不是实际数据。话说我有1000个点,然后不了N多个零,难道也行。不是很理解。
补零后,频率分辨率是变了,但是,会影响运算结果的真实性。