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。

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

于 2012-11-17T14:13:53.377 回答
-1

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

但是我不知道为什么要修建运河。

于 2012-11-17T13:55:48.617 回答