Matplotlib频谱图与STFT

时间:2016-02-05 16:37:22

标签: python matplotlib fft spectrogram

我目前正在使用matplotlib计算频谱图。我指定NFFT = 512但是得到的图像的高度为257.然后我试图做一个STFT(短时傅立叶变换),它给出了512维向量(如预期的那样)。如果我绘制STFT的结果,我可以看到512个值中的一半只是镜像的,所以我只得到257个值(就像matplotlib)。有人可以向我解释为什么会这样吗?我一直认为FT是基础变换,为什么会引入这种冗余呢?

谢谢。

1 个答案:

答案 0 :(得分:1)

冗余是因为您向FFT输入严格实数信号,因此DFT结果是复共轭(Hermitian)对称。这种冗余是由于严格实际输入的所有虚部都为零的事实。但是这个DFT的输出可以包括非零虚数分量来指示相位。因此,该DFT结果必须是共轭对称的,以便结果中的所有虚部将在两个DFT结果半部(相同的幅度,但是相位相位)之间抵消,指示严格的实际输入。此外,基本变换的较低257个区域将具有512度(缩放器)自由度,就像输入一样。但是,频谱图会丢弃所有相位信息,因此它只能显示257个唯一值(仅限幅度)。

如果您向DFT输入复数(例如,正交)信号,那么可能不会有Hermitian冗余,并且您将拥有512长度DFT的1024个自由度。

如果您想要图像高度为512(给定实际输入),请尝试使用1024的FFT大小。