Параметры для улучшения музыкального частотного анализатора

StackOverflow https://stackoverflow.com/questions/7829713

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Также один из вариантов, если вам нужны очень быстрые обновления для высокочастотных ячеек, но хорошее разрешение по частоте на низких частотах, - это обновлять высокочастотные ячейки быстрее (например, с помощью Windows, которую вы используете в данный момент), но вычислять низкочастотные ячейки реже (и с большими окнами, необходимыми для хорошей частоты.резолюция.)

Другие советы

Я думаю, что многие из этих приложений имеют переменные ячейки FFT.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top