Python: 声音文件的频率分析
我正在生成一些声音文件,这些文件会播放不同频率的音调,并且有一定数量的谐波。
最终,这些声音会在一个小扬声器的设备上播放。
我有扬声器的频率响应曲线,想在Python中做以下几件事:
- 绘制声音文件的频谱。我需要对文件进行快速傅里叶变换(FFT),然后用
gnuplot
来绘图。 - 根据数据表中的频率响应曲线,应用一个非线性传递函数。
- 在应用这个函数后,绘制结果。
有没有人知道:
- 做这些事情的最简单方法是什么?
- 或者有没有一个应用程序(基于GNU/Linux)可以帮我完成这些?
3 个回答
4
你可以使用numpy和matplotlib这两个库。下面的代码大概是这样的:
spectrum = numpy.fft.fft(signal)
frequencies = numpy.fft.fftfreq(len(spectrum))
pylab.plot(frequencies,spectrum)
pylab.show()
这段代码会显示一个fft频谱的图表。
10
我知道你没有提到Pylab/Matplotlib,但它是可以用的。这里有一个例子(假设是单通道信号):
x, fs, nbits = audiolab.wavread('schubert.wav')
audiolab.play(x, fs)
N = 4*fs # four seconds of audio
X = scipy.fft(x[:N])
Xdb = 20*scipy.log10(scipy.absolute(X))
f = scipy.linspace(0, fs, N, endpoint=False)
pylab.plot(f, Xdb)
pylab.xlim(0, 5000) # view up to 5 kHz
Y = X*H
y = scipy.real(scipy.ifft(Y))