Python:声音文件的频率分析

时间:2010-11-30 16:27:12

标签: python audio wav fft gnuplot

我正在生成一些声音文件,这些声音文件可以播放具有一定数量谐波的各种频率的音调 最终,这些声音将在带有小扬声器的设备上播放。

我有扬声器的频率响应曲线,并希望在Python中执行以下操作:

  1. 绘制声音文件的频谱。我需要对文件进行FFT并用gnuplot
  2. 绘制它
  3. 根据数据表中的频率响应曲线应用非线性传递函数。
  4. 应用函数后绘制结果。
  5. 有谁知道:

    • 这样做最简单的方法是什么?
    • 应用程序(基于GNU / Linux)可以为我做这件事吗?

3 个答案:

答案 0 :(得分:9)

我知道你没有提到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))

答案 1 :(得分:3)

你可以使用numpy和matPlotLib。类似下面的代码:

spectrum = numpy.fft.fft(signal)
frequencies = numpy.fft.fftfreq(len(spectrum))
pylab.plot(frequencies,spectrum)
pylab.show()

这将显示fft光谱图。

答案 2 :(得分:0)

scipy有一个FFT并很好地挂钩到gnuplot。您应该能够使用signal模块进行数学运算。