Обнаружение пиков в Performous коде - PullRequest
3 голосов
/ 09 августа 2010

Я искал, чтобы реализовать определение высоты голоса в iphone, используя метод HPS.Но обнаруженные тоны не очень точны. Performous делает достойную работу по определению высоты тона.

Я просмотрел код, но не до конца понял теорию расчетов.Они используют БПФ и находят пики.Но та часть, где они используют фазу вывода БПФ, меня смутила. Я полагаю, что они используют некоторую эвристику для голосовых частот.

Итак, кто-нибудь может объяснить, какой алгоритм используется в Performous для определения высоты звука?

1 Ответ

1 голос
/ 18 ноября 2010

[Performous] [1] извлекает высоту звука из микрофона.Также код с открытым исходным кодом.Вот описание того, что делает алгоритм, от парня, который его кодировал (Tronic на irc.freenode.net # Perforous).

  • Вход PCM (с буферизацией)
  • FFT(1024 сэмпла за раз, впоследствии удалите 200 сэмплов из передней части буфера)
  • Метод переназначения (по сравнению с предыдущим БПФ, которое было 200 сэмплами ранее)
  • Фильтрация пиков (эта часть может бытьсделано намного лучше или даже пропущено)
  • Объединение пиков в наборы гармоник (мы называем комбинацию тоном)
  • Временная фильтрация тонов (обновите набор обнаруженных ранее тонов вместо простого использованиянедавно обнаруженные)
  • Выберите лучший вокальный тон (ограничения частоты, взвешивание, могут также использовать гармонический массив, но я не думаю, что мы используем)

Я все еще не был 'не могу понять эту информацию и реализовать ее.Если кому-то это удастся, пожалуйста, опубликуйте свои результаты здесь и прокомментируйте этот ответ, чтобы SO уведомил меня.

Задача будет заключаться в создании минимальной оболочки C ++ для этого кода.

...