Python中用于频谱图的FFT

26 投票
4 回答
36321 浏览
提问于 2025-04-15 13:44

我想知道怎么用Python来读取WAV PCM文件中的频率峰值,然后生成一张图像,用于频谱分析。

我正在尝试制作一个程序,可以读取任何音频文件,把它转换成WAV PCM格式,然后找到频率的峰值和截止点。

4 个回答

5
from pylab import *
specgram(signal)

这是最简单的做法。在这个情况下也非常方便:

subplot

不过要注意:Matplotlib的速度很慢,但它能生成很漂亮的图像。如果你需要做复杂的动画,尤其是3D动画,最好不要用它。

16

audiolab加载WAV文件非常简单:

from audiolab import wavread
signal, fs, enc = wavread('test.wav')

或者你可以用它来读取任何常见的音频格式,然后转换成WAV格式:

from audiolab import Sndfile
sound_file = Sndfile('test.w64', 'r')
signal = wave_file.read_frames(wave_file.nframes)

而且,PyLab里自带了频谱图的功能:

from pylab import *
specgram(signal)

具体来说,它是matplotlib的一部分。这里有一个更好的例子。

25

Python的wave库可以让你导入音频文件。导入之后,你可以使用numpy来对音频进行快速傅里叶变换(FFT)

接下来,matplotlib可以制作非常好看的图表,效果完全可以和MATLAB媲美。

虽然这篇文章有点老旧,但它可能会帮助你入门,解决你描述的问题(当然,文章是用Python写的)。

撰写回答