计算时域与FFT的自相关

时间:2014-04-26 14:15:06

标签: signal-processing fft pitch-tracking

我使用ACF和AMDF的组合进行音高检测 首先,我在时域中使用ACF,如下所示:

Get a buffer of 2048 samples
Window it (Hamming window)
sum=Sum(Buffer[i]*Buffer[i+lag]) for all i < 2048 - lag
acf = sum / 2048

并重复最后两个步骤以考虑所有滞后。 (实际上对非整数滞后进行插值)

现在我发现你可以用FFT来计算ACF:

Get a buffer of 2048 samples
Window it (Hamming window)
fftBuf=fft(buffer)
buffer[i]=real(fftBuf[i])^2+imag(fftBuf[i])^2
fftBuf=fft(buffer) //ifft=fft for real signals
acfBuf = real(fftBuf) / 2048

然后actBuf [lag]是该滞后的ACF值。

我预计结果会相同或至少相似。但他们不是。 例如,对于65.4Hz的正弦波(注释C2),使用时域方法得到的相应滞后为674.25,使用fft得到〜536.795。

我错过了什么?或者两者都不一样?

0 个答案:

没有答案