2011-10-18 33 views
1

用C语言编写了一个频域基音检测算法,现在我试图估计基频。我有傅里叶变换的最大幅度分档,但也可以是不需要的谐波F0。我在某处读到可以使用cepstral analysis来估计F0。所以,这里是我遵循的步骤:使用倒谱分析估计基本频率

  1. 花时间域缓冲区x,使窗口复制瓦特。
  2. FTTw = FFT(w)的
  3. 平方量值FTTw的
  4. FTTA = FFT(一)
  5. B =平方FTTA
  6. 估计基本采用B
的大小为a =日志

我在最后一步(6)遇到问题。 b中的幅度非常高,我不确定我完全理解它们代表的是什么(quefrencies?),最重要的是我怎么能根据它们来估计它的基础。

欢迎任何建议!谢谢!

+0

由于这是更多的DSP相关的编程相关,你可能想尝试http://dsp.stackexchange.com而不是http://stackoverflow.com –

+0

做到这一点,有几个小时,没有答案/评论。我猜这个社区还很小,所以我在这里尝试了我的运气:) –

+0

你可能需要耐心 - 给它24小时左右 - 不同的时区等等。如果你在这里得到答案,它可能是来自某人无论如何在http://dsp.stackexchange.com活动... –

回答

1

倒谱峰顶(位于交叉轴上)的位置告诉你原始信号的音高周期。 的幅度的高峰并不是特别重要。

+0

谢谢保罗,我还有一个小问题:我可以做一个二次插值,以提高倒谱峰之间的准确度,或者我应该回到原始具有已知频率的FFT数据并在那里进行。 (对不起,在原文中增加了另一个问题:D,但是我看到你在DSP方面帮助了其他人,并且我认为你可能知道) –

+0

可能更好的方法是将原始FFT输入填零 - 这会给你具有更高*分辨率*的内插频谱。或者,如果您确实需要更高的*精确度*,则只需使用更大的时间窗口即可。 –