2010-11-30 11 views
4

私はいくつかの高調波でさまざまな周波数のトーンを再生するいくつかのサウンドファイルを生成しています。
最終的には、これらのサウンドは小さなスピーカーを備えたデバイスで再生されます。Python:サウンドファイルの周波数解析

私はスピーカーの周波数応答曲線を持っており、Pythonで次の操作を実行したい:

  1. プロットサウンドファイルの周波数スペクトル。ファイルのFFTを取り、プロットする必要がありますgnuplot
  2. データシートの周波数応答曲線に基づいて非線形伝達関数を適用します。
  3. 関数が適用された後の結果をプロットします。

誰もが知っています:

  • これを行うための最も簡単な方法がどうなりますか?
  • またはアプリケーション(GNU/Linuxベース)これは私のためにできますか?
+0

SciPyの紹介には、FFTを行い、結果をプロットすることが含まれています。http://www.scipy.org/Getting_Started –

+1

あなたのロゴはおいしく見えます。 –

答えて

8

あなたは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)) 
+0

Hとは何ですか?あなたはNを意味しましたか? – waffleman

+0

いいえ、私は 'H'を意味しました。申し訳ありませんが、私は怠け者なので、一歩一歩をスキップしました。 'h 'がインパルス応答であれば、' H = scipy.fft(h) 'となります。あなたの質問の項目2では、伝達関数の周波数応答が直接与えられているので、 'H'になります。 –

0

scipyにはFFTがあり、gnuplotにうまくフックします。計算するにはsignalモジュールを使用できるはずです。

2

numpyとmatPlotLibを使用できます。以下のコードのようなもの:

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

fftスペクトルのグラフが表示されます。