Параметры для улучшения музыкального частотного анализатора - PullRequest
2 голосов
/ 20 октября 2011

Я использую БПФ для аудиоданных для вывода анализатора, как вы видели бы в Winamp или Windows Media Player.Однако вывод не выглядит так здорово.Я строю графики с использованием логарифмической шкалы и усредняю ​​линейные результаты из БПФ в соответствующие логарифмические ячейки.В качестве примера я использую бункеры типа:

16k, 8k, 4k, 2k, 1k, 500,250,125,62,31,15 [Гц]

Затем я строю график величины (дБ) от частоты [Гц].График определенно «реагирует» на музыку, и я вижу реакцию ударного сэмпла или высокого голоса.Но график очень «насыщен» рядом с более низкими частотами, и в целом не очень похож на то, что вы видите в приложениях, которые имеют тенденцию быть более равномерно распределенными.Мне кажется, что приложения, которые отображают визуальный вывод, как правило, делают с данными разные вещи, чтобы они выглядели лучше.

Что я могу сделать с данными, чтобы они больше походили на типичное приложение музыкального проигрывателя?

Немного полезной информации: я уменьшу частоту до одного канала 32 кГц и задаю временное окно 35 мс.Это означает, что БПФ получает ~ 1100 баллов.Я изменяю эти значения для эксперимента (т. Е. Пробовал 16 кГц и увеличиваю / уменьшаю длину интервала), но получаю похожие результаты.

Ответы [ 3 ]

4 голосов
/ 20 октября 2011

С БПФ в 1100 точек вы, вероятно, не сможете захватывать низкие частоты с большим частотным разрешением.

Подумайте об этом, 30 Гц соответствует периоду 33 мс, что при 32 кГц составляет примерно 1000 выборок.Таким образом, вы сможете захватить только 1 период за это время.

Таким образом, вам понадобится более длинное окно БПФ для захвата этих низких частот с резким частотным разрешением.

Вам, вероятно, понадобится временное окно в 4000 сэмплов или больше, чтобы начать получать заметно большеразрешение по частоте на низких частотах.Это тоже будет хорошо, так как вы будете получать около 8-10 обновлений спектра в секунду.

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

0 голосов
/ 20 октября 2011

Типичный визуализатор использует полосовые фильтры с постоянным Q, а не один FFT.

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

0 голосов
/ 20 октября 2011

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

Что вы можете сделать, это начать с очень широких, равномерно распределенных корзин БПФ, как у вас, и затем отслеживать количество элементов, которые помещены вкаждая ячейка FFTЕсли некоторые из бинов не используются в значительной степени вообще (обычно более высокие частоты), тогда расширьте эти бины так, чтобы они были больше (и, следовательно, имели больше входов частоты) и ограничивали низкочастотные бины.

Я работалв проектах, где мы просто тратим много времени на настройку бункеров для конкретных источников входного сигнала, но гораздо приятнее настраивать программное обеспечение в реальном времени.

...