很抱歉问了一个与我之前问过的问题类似的问题(FFT 问题(返回随机结果)),但我已经查找了音高检测和自相关,并找到了一些使用自相关进行音高检测的代码。
我正在尝试对用户唱歌进行音高检测。问题是,它不断返回随机结果。我从http://code.google.com/p/yaalp/获得了一些代码,我已将其转换为 C++ 并进行了修改(如下)。我的采样率为 2048,数据大小为 1024。我正在检测正弦波和麦克风输入的音高。正弦波的频率是 726.0,它检测到它是 722.950820(我可以接受),但它检测到麦克风的音高是从大约 100 到大约 1050 的随机数。
我现在正在使用高通滤波器来消除直流偏移,但它不起作用。我做对了吗,如果是这样,我还能做些什么来解决它?任何帮助将不胜感激!
(固定的)
谢谢,
尼尔。
编辑:更改代码以实现截止频率为 30hz 的高通滤波器(来自What Are High-Pass and Low-Pass Filters?,谁能告诉我如何使用卷积将低通滤波器转换为高通滤波器?) 但它仍然返回随机结果。不幸的是,将它插入 VST 主机并使用 VST 插件来比较频谱对我来说不是一个选择。
编辑:已修复,感谢大家的帮助,但我从来没有让它工作,现在使用新代码。