Я пытаюсь реализовать поющую игру, которая будет анализировать необработанный микрофонный вход и сообщать игроку, насколько хорошо он поет. Это должно быть сделано в режиме реального времени.
Я сталкивался с множеством тем, задающих один и тот же вопрос, но я все еще не закончил с ним, вероятно, из-за недостатка опыта в этой области и мелкого математического фона. Я реализовал алгоритм, основанный на статье изменения высоты тона на сайте DSPDimension: http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/
Я извлекаю истинную частоту и величину, как объясняет статья, но я не знаю, как найти основную частоту с этим. Я пытался получить бин с наибольшей величиной, но он дает мне правильные результаты только для сигналов с более высоким шагом, не имеет значения, какой фактор передискретизации я использую, я все равно получаю плохие данные для сигналов с низкой частотой. Это неправильный подход или я на правильном пути, но что-то упустил?
Заранее спасибо,
РЕДАКТИРОВАТЬ: я забыл упомянуть, что меня интересует только класс тона, так что это нормально, если основной отсутствует, но у меня есть сильный обертон в образце.
EDIT2: Спасибо всем, я только что закончил версию алгоритма, которая работает как шарм. Проблема оценки низкого шага была из-за моего входного теста. Когда я пел ноту, она соответствовала правильно. Кроме того, сейчас я рассматриваю все гармоники, а не только самый высокий пик.
источник
Ответы:
Это потому , что гармоники являются больше , чем основной. Постройте свой спектр, и вы увидите. Лучший способ найти истинную основу - автокорреляция. Затем вы «скользите» по форме волны за собой и находите задержки, при которых форма волны совпадает с самой собой.
http://www.phon.ucl.ac.uk/courses/spsci/matlab/lect10.html
Вы действительно хотите, чтобы они пели точную ноту, или это нормально, если они поют октаву выше или ниже в зависимости от их голосового регистра?
источник
Да, использование оценки пиковой частоты для высоты тона неверно. Высота звука - это психоакустический феномен, поэтому определение или оценка высоты звука отличается от оценки частоты. В предыдущих ответах на подобные вопросы было много методов оценки высоты тона. Там более 1 на выбор.
Вот один из них: /programming/4227420/matlab-missing-fundamental-from-an-fft/4231322#4231322 и другой: Советы по улучшению обнаружения основного тона.
ДОБАВЛЕНО № 1: Вопросы, подобные этому, задают так часто, что я написал более длинное сообщение в блоге на эту тему: http://www.musingpaw.com/2012/04/musical-pitch-is-not-just-fft- frequency.html
источник