МАТЛАБ - Отсутствует фундаментальный из БПФ
В настоящее время я работаю над своим проектом на четвертом курсе (информатика), который включает автоматическую транскрипцию музыки -> ноты. Я делаю это в Matlab на данный момент, но на каком-то этапе мне придется перейти на Java.
Моя проблема: у меня есть программа, возвращающая правильные ноты для чистых синусоидальных тонов, теперь я столкнулся с проблемой, когда дело доходит до получения основной частоты из ноты, сыгранной естественным инструментом. С некоторыми примечаниями пик, представляющий основную часть примечания, кажется, полностью отсутствует. Например, когда я играю ноту G3 из гаражного диапазона, она отображается как G4, так как на моем графике появляются только 1-я, 3-я, 5-я и 7-я гармоники. Я попытался добавить изображение, но так как это мой первый пост, он не позволил бы мне. Любые указатели в правильном направлении будут с благодарностью.
4 ответа
Это не необычно. Очень часто для основного звучания не хватает, или почти так, мужских голосов, больших струнных инструментов и многих других звуковых источников.
Это делает использование пикового результата БПФ исключительно плохим при определении музыкальных нот на реальных музыкальных инструментах, в отличие от генераторов синусоидальных функций. Это потому, что высота звука отличается от пиковой спектральной частоты. Пек - это психоакустический феномен восприятия. Так что это то, что вам нужно прочитать. Есть множество исследовательских работ на эту тему.
Поэтому вам нужно взглянуть на совершенно другой набор алгоритмов. Попробуйте кепстры (кепстральный анализ), спектры гармонических произведений, автокорреляцию и т. П. (Лаги AMDF, ASDF и т. Д.), RAPT (надежный алгоритм отслеживания высоты тона), YAAPT и т. Д.
ДОБАВЛЕНО: я написал более подробное объяснение звуков с отсутствующими основами в блоге.
Нет ничего необычного в том, что основная частота ноты музыкального инструмента ослабляется относительно гармоник (также называемых обертонами), а в некоторых случаях величина основной частоты может быть значительно ниже величины обертонов.
Посмотрите на этот график частоты / величины для настоящего фагота (не синтезированного фагота), играющего ноту G3. Соблюдайте ослабленный основной (196, 39 Гц) относительно первой гармоники. Но также обратите внимание, что все целочисленные кратные гармоники видны до 10-й гармоники. На самом деле, присутствует намного больше гармоник, но они не видны на этом графике линейной величины.
В вашем случае дополнительный факт, что спектр вашей музыкальной ноты G3 показывает только 1-ю, 3-ю, 5-ю и 7-ю гармоники, говорит о том, что что-то не так. Ваш тестовый звук, по-видимому, синтезирован, поэтому проблема может заключаться в том, как был синтезирован звук.
Спектры реальных музыкальных инструментов обычно показывают основную частоту и множество целочисленных гармоник, таких как 1, 2, 3 и так далее, как показано выше. И гармоники обычно простираются намного выше 6 кГц для большинства нот, играемых на большинстве инструментов.
Посмотрите на этот график частоты / децибел_магнитности реального фагота (не синтезированного фагота), играющего ноту G3. Обратите внимание, что в общей сложности присутствует 37 целочисленных кратных гармоник, пока они не исчезнут при минимальном уровне шума около -104 дБ.
Вы можете прослушать этот образец фагота и увидеть его спектр здесь: Спектр музыкальных инструментов фагота
Также прочитайте этот подробный пост об аналитических подходах к автономной музыкальной транскрипции
Тот факт, что вы видите пики на 2f, 4f, 6f и 8f, в значительной степени подразумевает, что либо ваши входные данные на самом деле на октаву выше того, что вы думаете, либо вы неправильно интерпретируете шкалу частот ваших результатов. Если бы вам просто не хватало основной частоты, вы бы также увидели 3f, 5f и 7f.
Предложения:
- Составьте свои входные данные, прежде чем вы это сделаете. Вы должны иметь возможность наблюдать частоту доминирующего термина.
- Послушайте записку, сделанную в гараже. Это выше или ниже среднего C?
- Убедитесь, что вы понимаете, откуда взяты значения на шкале частот на вашем графике.
Вы пробовали запустить его через спектрограмму (функция спектрограмма в MATLAB), чтобы определить, что происходит?
Я не знаю, какие алгоритмы вы используете, без этой информации мы не можем сказать, что происходит не так. Меня тревожит то, что ваша вторая третья гармоника (вторая вершина на графике) намного больше вашей второй гармоники (первая вершина на графике).
Вы уверены, что у вас есть все права на выборку: т. Е. Ваш ДПФ имеет частоты только до половины частоты дискретизации (как положительного, так и отрицательного частотного диапазона)? Также: как вы подавляете какую-либо переходную часть вашего сигнала?