scipy.signal.spectrogram nfft参数

时间:2017-05-30 17:32:34

标签: python numpy scipy signal-processing spectrogram

nfft参数在此函数中的含义是什么?有关文档https://docs.scipy.org/doc/scipy-0.19.0/reference/generated/scipy.signal.spectrogram.html

,请参阅此链接

1 个答案:

答案 0 :(得分:10)

scipy.signal.spectrogram通过将信号分成(部分重叠)时间段,然后从每个段的Fast Fourier Transform(FFT)计算功率谱来工作。可以使用nperseg参数控制这些段的长度,这样可以调整由uncertainty principle引起的频域和时域中的分辨率之间的权衡。使nperseg更大可以在频域中提供更高的分辨率,但会降低时域分辨率。

除了改变进入每个段的样本数量之外,有时还希望在进行FFT之前对每个段应用零填充。这就是nfft参数的用途:

  

nfft :int,可选

     

如果需要零填充FFT,则使用FFT的长度。如果,则FFT长度为 nperseg 。默认为

默认情况下,nfft == nperseg,表示不会使用零填充。

为什么要应用零填充?

  • 一个原因是这会使FFT结果更长,这意味着您最终会得到更多的频率分档和一个看起来更平滑的频谱图。在频率维度上。但请注意,这实际上并没有在频域中为您提供分辨率 - 它基本上是对FFT结果进行sinc插值的有效方法(参见{{3更详细的解释)。
  • 从性能角度来看,填充段以使其长度为2的幂可能是有意义的,因为基数-2 FFT可以比更通用的方法快得多。