Извините, что задал вопрос, похожий на тот, который я задавал ранее ( Проблема БПФ (возвращает случайные результаты) ), но я посмотрел обнаружение основного тона и автокорреляцию и нашел некоторый код для определения основного тона, используя автокорреляция.
Я пытаюсь определить тональность пения пользователей. Проблема в том, что он возвращает случайные результаты. У меня есть код из http://code.google.com/p/yaalp/, который я преобразовал в C ++ и изменил (ниже). Моя частота дискретизации 2048, а размер данных 1024. Я определяю высоту как синусоидальной волны, так и микрофонного входа. Частота синусоидальной волны равна 726,0, и она обнаруживает 722,950820 (что вполне нормально), но она определяет тональность микрофона как случайное число от 100 до 1050.
Сейчас я использую фильтр верхних частот для удаления смещения постоянного тока, но он не работает. Я делаю это правильно, и если да, что еще я могу сделать, чтобы это исправить? Любая помощь будет принята с благодарностью!
(фиксированный)
Спасибо
Найл.
Редактировать: Изменен код для реализации фильтра верхних частот с частотой среза 30 Гц (из Что такое фильтры верхних и нижних частот? , кто-нибудь может подсказать, как преобразовать фильтр нижних частот? фильтровать, используя свертку к высокочастотному?), но он все еще возвращает случайные результаты. Подключить его к хосту VST и использовать плагины VST для сравнения спектров, к сожалению, для меня не вариант.
Редактировать: Исправлено, спасибо за помощь всем, но я так и не заработал, теперь использую новый код.