吉他弦的FFT音高检测

3

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

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

我需要它来检测吉他弦的主频。它适用于440赫兹(也许更高,我没有检查)到250赫兹的频率范围内。在此值以下,检测到的频率是应有频率的两倍,例如195赫兹的检测频率约为380赫兹。看起来它在250赫兹以下检测到了更高的谐波。对于纯195赫兹的音调,它可以完美检测,但对于吉他弦似乎有些问题。
有什么建议可以导致这种情况吗?或者我应该使用更复杂的音高检测方法?
附:采样率:8000赫兹,输入数据大小:1024

你能发布吉他在195赫兹的FFT吗? - Michael Kopinsky
抱歉图片质量不佳,频谱如下:187 Hz的频谱: http://img688.imageshack.us/i/195qq.jpg/330 Hz的频谱: http://img98.imageshack.us/i/330l.jpg - cartoon_20
1个回答

1
我不太了解吉他,但基础知识缺失在声学中似乎很普遍。维基百科关于音高检测的页面提到了FFT之后的二次处理步骤,也许其中的一种会有帮助。
另外,请查看这两个SO问题,那里有很多有价值的信息:(1)(2)

有人能告诉我如何从此链接http://www.tedknowlton.com/resume/CCPPT.htm计算Rd吗? 对于: FFT大小:512 感兴趣的频率:440Hz - cartoon_20
采样频率:8000Hz - cartoon_20
@cartoon_20 - 我扫描了这份文件,没有看到 Rd - 你在看哪一页? - mtrw
@mtrw - 在“使用中央C测量进行示例计算”的表格中,在“图5. FFT Bin插值”图表下方。Rd - 这是有关下采样率的内容。 - cartoon_20
这是降采样率,或者比例。如果 FSample 是 N,并且你将其降采样到 N/K,那么降采样比率将会是 K。如果你感兴趣的频率是 440 Hz,那么你至少需要 FSample > 880 Hz,更安全的选择可能是 1200 Hz。如果原始 FSample 是 8000,那么你需要 K <= 6。 - mtrw
显示剩余12条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接