Python Matplotlib谱图与STFT

Python Matplotlib谱图与STFT,python,matplotlib,fft,spectrogram,Python,Matplotlib,Fft,Spectrogram,我正在用matplotlib计算光谱图。我指定NFFT=512,但结果图像的高度为257。然后我试着做一个STFT(短时傅立叶变换),它给了我512维向量(正如预期的那样)。如果我绘制STFT的结果,我可以看到512个值中有一半是镜像的,所以实际上我只得到257个值(如matplotlib)。有人能给我解释一下为什么会这样吗?我一直认为FT是一种基础转换,为什么它会引入这种冗余 谢谢。冗余是因为您向FFT输入了严格的实信号,因此DFT结果是复共轭(厄米)对称的。这种冗余是由于严格实输入的所有虚部

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


谢谢。

冗余是因为您向FFT输入了严格的实信号,因此DFT结果是复共轭(厄米)对称的。这种冗余是由于严格实输入的所有虚部均为零。但该DFT的输出可以包括非零虚部,以指示相位。因此,此DFT结果必须是共轭对称的,以便结果中的所有虚部将在两个DFT结果的两半之间抵消(大小相同,但相位相反),表示严格的实输入。此外,与输入一样,基本变换的较低257个容器将具有512个(缩放)自由度。然而,光谱图丢弃了所有相位信息,因此它只能显示257个唯一值(仅限幅值)

如果您向DFT输入复数(例如,正交)信号,则可能不会有厄米冗余,并且您将从512长度DFT获得1024个自由度


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

请参阅关于共轭的部分。您正在绘制真实信号的真实分量或幅度,真实信号的正频率和负频率将被镜像。DF参数有意义,但我仍然不明白为什么较低的256个分量与顶部的256个分量相同。但我也给了维基百科一个链接,所以我想我会仔细阅读。谢谢:)