好的,这里有很多问题,谷歌上有很多阅读材料,但我不知道怎么回事。我想得到一段语音的基本频率。基本步骤应该是:
以下是我在AS3中实现此功能的方法:
var signal:Vector.<Number> = my1024PointSignal; // an audio signal 1024 samples long
var imx:Vector.<Number> = new Vector.<Number>(signal.length); // 1024 point vector to hold imaginary part of fft
hammingWindow(signal); // window it
zeroFill(imx); // fill imx with zeros
FFT(signal, imx); // convert signal into real and imaginary components of fft
toPolar(signal, imx); // convert fft to polar coordinates
// square each bin, and take the log of each bin, discard phase
for (var i:int = 0, l:int = signal.length; i < l; i++) {
signal[i] = Math.log(Math.pow(signal[i], 2));
imx[i] = 0;
}
FFT(signal, imx); // or maybe inverseFFT(signal, imx), i don't know
现在,当我这样做并以FFT为结束时,当我绘制它时,箱子看起来是相反的顺序?我也看到二次谐波的峰值大于基波的峰值。当我这样做并采用逆FFT时,我得到一个看起来反映在N / 2周围的音频信号,并且峰值似乎也是相反的。整件事情也很吵。我做错了什么?
答案 0 :(得分:0)
对于倒谱我总是习惯这个步骤:
倒谱的等式:
IFFT(log(abs(FFT(s))))
也许你看到了反映,因为你没有得到第四步(4)
区别在于以IFFT结尾和以FFT结束?
不同之处在于比例表示,如果您使用FFT结束,则需要仅提取实际信息,对于以下两个方程式,您将得到相同的形状:
IFFT(log(abs(FFT(s)))) == real(FFT(log(abs(FFT(s)))))
来自倒谱的情节示例:
IFFT(log(abs(FFT(s))))
:
real(FFT(log(abs(FFT(s)))))
:
这是一个倒谱示例,来自440hz的4096点正弦,44100hz采样