@Robotex

Как найти доминирующую частоту звукового сигнала?

Получил я набор семплов сигнала с микрофона. Теперь нужно найти частоту звука. Как это сделать? Я так понимаю, что с помощью Фурье. А как именно?

Грубо говоря, я хочу нажать клавишу пианино и чтоб телефон сказал частоту этой ноты. Или на гитаре ноту извлечь и т.п.
  • Вопрос задан
  • 531 просмотр
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg
Любые ответы на любые вопросы
В музыке за основной тон (высоту) звука берут самый низкочастотный (левый) пик на спектрограмме.

Короче, сделайте Фурье, отбросьте правую половину значений, найдите комплексный модуль оставшихся значений, слева на право его переберете - первый найденный максимум - ваша нота в герцах.
Ответ написан
Комментировать
1eqinfinity
@1eqinfinity
sound design, music, DSP
Вот библиотека на Python, в которой есть все, что вам понадобится: sms-tools

Помимо выбора самого низкого пика нужно удостовериться, что этот пик соответствует стабильному сигналу, а не локальному низкочастотному шуму. Если вы поете, а кто-то топнул ногой, или даже если вы произнесли согласную "п" близко к микрофону, то самая низкая частота на FFT не будет соответствовать тому, что вам надо узнать. Это принципиальные моменты в решени этой задачи, но все-таки изобретать велосипед не стоит, достаточно просто понимать, как это работает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы