3

我有简单的音高检测。输入(麦克风)数据传递给 fft 例程,然后我正在寻找具有最大值的音高这意味着:

Max(pow(data[i].getRe(), 2) + pow(data[i].getIm(), 2)) for 0<= i < SAmplesSize

我需要它来检测吉他弦的主频率。它适用于频率 440 赫兹(也许更高,我没有检查)到 250 赫兹。低于这个值,检测到的频率是它应该达到的两倍,即。对于 195 赫兹,检测到的频率约为 380 赫兹。看起来它检测到低于 250 赫兹的高次谐波。对于纯 195 赫兹的音调,它可以完美地检测到,但对于 quitar 字符串,它是错误的。

有什么建议会导致这种情况吗?或者我应该使用更复杂的音高检测?

附言。采样率:8000hz,输入数据大小:1024

4

1 回答 1

1

我不具体了解吉他,但缺少基本原理似乎在声学中很常见。关于音高检测的 Wikipedia 页面暗示了 FFT 之后的二次处理步骤,也许其中之一会有所帮助。

另外,请参阅这两个 SO 问题,那里有很多很好的信息:(1)(2)

于 2010-12-21T16:08:04.927 回答