了解Python代码段中的FFT运算

时间:2012-11-17 13:05:56

标签: python fft

我在一个执行音频数据实时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/

2 个答案:

答案 0 :(得分:3)

我不知道Python,但看起来它只是增加了实际到复数FFT输出的两个镜像复共轭的幅度。你可以很容易地只采用前半部分的大小并乘以2。

最后,它计算对数幅度,大概是得到(缩放)dB值。

答案 1 :(得分:-1)

我的猜测是音频声音采用立体声文件格式,这是左/右声道的平均值。我这样说是因为这句话:fftx=fftx[0:len(fftx)/4]这是使用立体声信号时的常见操作。

但我不知道为什么要养一条运河。