Я пытаюсь реализовать поющую игру, которая будет анализировать необработанный микрофонный вход и сообщать игроку, насколько хорошо он поет. Это должно быть сделано в режиме реального времени.
Я сталкивался с множеством тем, задающих один и тот же вопрос, но я все еще не закончил с ним, вероятно, из-за недостатка опыта в этой области и мелкого математического фона. Я реализовал алгоритм, основанный на статье изменения высоты тона на сайте DSPDimension: http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/
Я извлекаю истинную частоту и величину, как объясняет статья, но я не знаю, как найти основную частоту с этим. Я пытался получить бин с наибольшей величиной, но он дает мне правильные результаты только для сигналов с более высоким шагом, не имеет значения, какой фактор передискретизации я использую, я все равно получаю плохие данные для сигналов с низкой частотой. Это неправильный подход или я на правильном пути, но что-то упустил?
Заранее спасибо,
РЕДАКТИРОВАТЬ: я забыл упомянуть, что меня интересует только класс тона, так что это нормально, если основной отсутствует, но у меня есть сильный обертон в образце.
EDIT2: Спасибо всем, я только что закончил версию алгоритма, которая работает как шарм. Проблема оценки низкого шага была из-за моего входного теста. Когда я пел ноту, она соответствовала правильно. Кроме того, сейчас я рассматриваю все гармоники, а не только самый высокий пик.