2

オーディオデータのリアルタイムFFTグラフを実行するプログラムでこのコードスニペットに出くわしました。

data=scipy.array(struct.unpack("%dB"%(bufferSize*2),data))
ffty=scipy.fftpack.fft(data)
ffty=abs(ffty[0:len(ffty)/2])/1000
ffty1=ffty[:len(ffty)/2]
ffty2=ffty[len(ffty)/2::]+2                
ffty2=ffty2[::-1]                
ffty=ffty1+ffty2                              
ffty=scipy.log(ffty)-2

後の部分の背後にある数学を理解していませんでしたabs()。これは、マグニチュード配列の前半を追加し、後半を逆にして2を追加するようなものです。

これはある種の正規化ですか?

これがソースです:

http://www.swharden.com/blog/2010-03-05-realtime-fft-graph-of-audio-wav-file-or-microphone-input-with-python-scipy-and-wckgraph/

4

2 に答える 2

3

Pythonはわかりませんが、実数から複素数へのFFT出力の2つの鏡像複素共役の半分の大きさを追加しているように見えます。前半の大きさだけを簡単に取り、2を掛けることもできます。

最後に、おそらく(スケーリングされた)dB値を取得するために、対数の大きさを計算します。

于 2012-11-17T14:13:53.377 に答える
-1

私の推測では、オーディオサウンドはステレオファイル形式で提供され、これは左右の運河の平均です。私はこの線のためにそう言っています:fftx=fftx[0:len(fftx)/4]これはステレオ信号を使用するときの一般的な操作です。

しかし、なぜ運河が上がるのかわかりません。

于 2012-11-17T13:55:48.617 に答える