scipy.signal.spectrogram通过将信号划分为(部分重叠的)时间段,然后从每个段的快速傅立叶变换(FFT)计算功率谱来工作。可以使用
nperseg参数控制这些段的长度,该参数可让您调整由于不确定性原理而引起的频域和时域分辨率之间的权衡。制作
nperseg大让你在时域分辨率较低的成本在频域更高的分辨率。
除了改变进入每个段的样本数量之外,有时还需要在进行FFT之前对每个段应用零填充。这就是该
nfft参数的用途:
nfft :int,可选
如果需要零填充的FFT,则使用的FFT的长度。如果为 None ,则FFT长度为 nperseg 。默认为 无 。
默认情况下,,
nfft == nperseg表示不使用零填充。
为什么要应用零填充?
- 原因之一是,这会使FFT结果更长,这意味着您最终会得到更多的频率仓,并且频谱图在整个频率范围内看起来“更平滑”。但是,请注意,这实际上并没有给您带来更多的频域 分辨率 -从本质上讲,这是对FFT结果进行正弦插值的一种有效方法(请参见此处以获取更详细的说明)。
- 从性能的角度来看,填充段以使其长度为2的幂可能是有意义的,因为基数2 FFT可能比更通用的方法快得多。



