【发布时间】:2010-11-24 02:43:05
【问题描述】:
很抱歉问了一个与我之前提出的问题 (FFT Problem (Returns random results)) 类似的问题,但我查找了音高检测和自相关,并找到了一些使用自相关进行音高检测的代码。
我正在尝试对用户唱歌进行音高检测。问题是,它不断返回随机结果。我有一些来自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 插件来比较频谱对我来说不是一个选择。
编辑:已修复,感谢大家的帮助,但我一直无法正常工作,现在使用新代码。
【问题讨论】:
-
顺便说一句:您的内存管理应该得到改进,因为您永远不会取消分配您分配的内存,但我相信您知道并且首先希望让算法运行。但你不应该忘记这一点!
-
为什么标记为 C++?该代码非常不是 C++。
-
其中没有一行 C++ 行,但 Niall 喜欢这种方式。
标签: c++ c signal-processing pitch pitch-tracking