我在一个执行音频数据实时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。
这是某种正常化吗?
这是来源:
答案 0 :(得分:3)
我不知道Python,但看起来它只是增加了实际到复数FFT输出的两个镜像复共轭的幅度。你可以很容易地只采用前半部分的大小并乘以2。
最后,它计算对数幅度,大概是得到(缩放)dB值。
答案 1 :(得分:-1)
我的猜测是音频声音采用立体声文件格式,这是左/右声道的平均值。我这样说是因为这句话:fftx=fftx[0:len(fftx)/4]
这是使用立体声信号时的常见操作。
但我不知道为什么要养一条运河。