Определение высоты звука с помощью БПФ для трубы

Как получить частоту с помощью БПФ? Какая правильная процедура и коды?


person airuslee    schedule 11.02.2010    source источник
comment
Я думаю, ТАК нужен тег trumpet ..   -  person skaffman    schedule 11.02.2010


Ответы (5)


Обнаружение высоты звука обычно включает измерение интервала между гармониками в спектре мощности. Спектр мощности получается из БПФ путем взятия величины первых N / 2 бинов (sqrt (re ^ 2 + im ^ 2)). Однако существуют более сложные методы определения высоты тона, такие как кепстральный анализ, в котором мы берем БПФ журнала спектра мощности, чтобы определить периодичность спектральных пиков.

person Paul R    schedule 11.02.2010

Стабильная нота музыкального инструмента - это периодический сигнал, и наш друг Фурье (вторая буква «F» в «БПФ») говорит нам, что любой периодический сигнал может быть построен путем добавления набора синусоидальных волн (обычно с разными амплитудами и частотами). , и фазы). Основная - это самая низкая частотная составляющая, соответствующая высоте тона; остальные компоненты являются обертонами и кратны основной частоте. Относительное сочетание основного тона и обертонов определяет тембр или характер инструмента. Кларнет и труба, играющие в унисон, звучат «гармонично», потому что имеют одну и ту же основную частоту, однако их можно идентифицировать индивидуально из-за разного тембра (смесь обертонов).

Для вашей проблемы вы можете сэмплировать трубу в течение временного окна, вычислить БПФ (которое разлагает последовательность выборок на составляющие ее цифровые частоты), а затем утверждать, что высота тона - это частота ячейки с наибольшей величиной. При желании это можно было бы тривиально квантовать до ближайшего музыкального полушага, например ми-бемоль. (Ищите БПФ в Википедии, если вы не понимаете взаимосвязь между частотой дискретизации и результирующими элементами разрешения по частоте, или если вы не понимаете ущерб от слишком низкой частоты дискретизации.) Это, вероятно, удовлетворит ваши потребности, потому что фундаментальные компонент обычно имеет большую энергию, чем любой другой компонент. Чем длиннее окно, тем выше точность высоты тона, поскольку центры бинов станут ближе друг к другу по частоте. Однако, если окно настолько длинное, что труба заметно меняет свою высоту в течение всего окна, тогда эффективность техники значительно снизится.

person seanmac7577    schedule 18.02.2010
comment
Привет! Не могли бы вы прояснить, что вы имеете в виду, говоря: «это можно было бы тривиально квантовать до ближайшего музыкального полушага, как ми-бемоль». Разве преобразование частоты в основной тон не будет больше похоже на то, где результирующая пиковая частота наиболее близка к основной частоте основного тона? - person user488792; 19.02.2011
comment
Я думаю, что точности БПФ недостаточно для удобной настройки. Обнаружение высоты тона возможно, но даже для этого потребуется довольно высокая частота дискретизации или длина буфера (с упомянутым недостатком). Тем не менее, анализ Quefrency (да, это написание) может помочь. Вы в основном измеряете периодичность между пиками БПФ. См. Ответ Паура Р. - person Gauthier; 28.05.2013

DansTuner - мой проект с открытым исходным кодом для решения этой проблемы. На самом деле я трубач. Он имеет код определения высоты тона, взятый из Audacity.

person dfrankow    schedule 11.06.2010
comment
Ваш репозиторий кода не работает. Не могли бы вы опубликовать сообщение на GitHub? - person S Meaden; 09.10.2016
comment
@SMeaden Я исправил ссылку на странице проекта на исходный код, который находится в репозитории Subversion: sourceforge.net/p/danstuner/code/HEAD/tree. Возможно, этого достаточно. - person dfrankow; 11.10.2016

ia добавил этих org.apache.commons. math.transform.FastFourierTransforme в проект, и он отлично работает

person Eugine    schedule 02.06.2011

Здесь представлена ​​короткая статья в блоге о непараметрических методах оценки PSD (спектральная плотность мощности) вместе с некоторыми более подробными ссылками. Это может помочь вам начать оценку PSD, а затем найти шаг.

person Paul    schedule 11.02.2010