Matlab的spectrogram()函数可计算信号的STFT。它对NFFT参数的描述如下:


S = SPECTROGRAM(X,WINDOW,NOVERLAP,NFFT)指定用于计算离散傅立叶变换的频率点的数量。如果未指定NFFT,则



我正确的是,NFFT仅在频率分辨率和计算数量之间进行权衡?对于我的离线工作,无需节省周期。 NFFT是否有任何最大限​​制?频谱泄漏或其他我应该知道的问题,还是可以将该参数设置得尽可能高?

#1 楼

FFT的长度是频率和时间分辨率之间的权衡。频谱图通常是通过对目标信号计算重叠的FFT来生成的。如果延长FFT的时间,则每个输出仓的有效带宽会变小,因此沿频率轴的分辨率会提高。可获得的频率分辨率的唯一限制因素是从信号中获得的总观测时间。

但是,同时,您能够解析时间上局部的特征减少。考虑这一点的一种直观方法是将FFT视为复杂的下变频,然后进行积分和转储操作:

$$
X [k] = \ sum_ {n = 0} ^ {N-1}(x [n] e ^ {\ frac {-j2 \ pi n k} {N}})
$$

以这种方式查看它会使时间分辨率的损失更加明显。括号中的乘积将$ x [n] $的频率下移$ \ frac {2 \ pi n k} {N} $,然后将所得信号积分到$ N $样本的窗口上。如果$ x [n] $中有一个仅位于有限时间范围内的功能,则随着$ N $变大,更多重叠的FFT将在其积分时间窗口内包含该时间段。因此,该特征将出现在光谱图图像的更多行中(假设时间沿Y轴)。然后,如果您减少该功能所在的频谱图的列(即频点),您会注意到一个更宽,更模糊的峰值。因此,您解析功能开始时间的实际时间位置的能力较低。

您也很正确,增加FFT长度确实需要更多的计算,这可能与实时应用有关。 br />