scipy.signal.spectrogram和scipy.signal.stft有什么区别?

时间:2019-04-15 06:58:59

标签: python scipy signal-processing

函数
spicy.signal.spectrogramhttps://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.spectrogram.html

spicy.signal.stfthttps://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.stft.html
似乎在做类似的事情。

这两个功能有什么区别?

1 个答案:

答案 0 :(得分:2)

Tl; dr :如果我用SciPy文档给出的输出来写:Sxx = Zxx ** 2

说明: 频谱图和短时傅立叶变换是两个不同的对象,但它们实际上是紧密相连的。

  

短时傅立叶变换(STFT)与傅立叶相关   用于确定正弦频率和相位含量的变换   随时间变化的信号局部部分的变化。在实践中,   计算STFT的过程是分割更长的时间信号   分成等长的较短段,然后计算傅立叶   在每个较短的片段上分别进行变换。这揭示了傅立叶   每个较短段的频谱。然后通常会绘制变化   光谱随时间变化。 Wikipedia

另一方面

  

光谱图是视觉光谱的   信号的频率随时间变化。 Wikipedia

频谱图基本上是在小窗口中切断信号,并显示一系列颜色,显示该频率或该特定频率的强度。与STFT完全相同。实际上,它使用的是STFT。

现在,对于差异,按照定义,频谱图是信号s(t)的短时傅立叶变换(STFT)的平方幅度:

spectrogram(t, w) = |STFT(t, w)|^2

scipy.signal.stft页面底部显示的示例显示:

>>> plt.pcolormesh(t, f, np.abs(Zxx), vmin=0, vmax=amp)

它正在运行,您可以看到一个色标。但这是线性的,因为有abs操作。

实际上,要获得真实的频谱图,应该写:

>>> plt.pcolormesh(t, f, Zxx ** 2, vmin=0, vmax=amp)