Среднеквадратичное значение в частотной области

Я пытаюсь создать плагин спектрального анализатора с помощью С++; После БПФ я хотел бы как-то усреднить каждый бин, используя RMS. Причина в том, что я хочу, чтобы график частоты отображался медленнее для лучшего просмотра. Как я могу этого добиться? Чтобы быть немного более конкретным, у меня есть БПФ с размером выборки 4096 с частотой дискретизации 44 100 Гц. Я обновляю дисплей каждые 40 мс. Каждый кадр БПФ отображается слишком быстро для человеческого глаза. Как я могу сгладить это с помощью некоторого усреднения?

Спасибо,

Исайя Томпсон


person Isaiah Thompson    schedule 29.07.2014    source источник
comment
Для меня это больше похоже на фильтрацию высокочастотных компонентов. Возможно, вам действительно нужен фильтр нижних частот, который их удаляет.   -  person duffymo    schedule 29.07.2014
comment
Duffymo, спасибо за ответ. Чтобы быть немного более конкретным, у меня есть БПФ с размером выборки 4096 с частотой дискретизации 44 100 Гц. Я обновляю дисплей каждые 40 мс. Каждый кадр БПФ отображается слишком быстро для человеческого глаза. Как я могу сгладить это с помощью некоторого усреднения?   -  person Isaiah Thompson    schedule 30.07.2014
comment
Вы можете получить затухающий средний эффект с чем-то вроде bin_value = (old_bin_value * 0,8) + new_bin_value.   -  person ScottMcP-MVP    schedule 30.07.2014
comment
Спасибо вам обоим. Оба ответа были на правильном пути.   -  person Isaiah Thompson    schedule 30.07.2014


Ответы (1)


Ваш дисплей обновляется каждые 40 мс, конечно, бессмысленно. У вас есть 44 100 выборок в секунду, 4096 выборок на БПФ, то есть около 11 БПФ в секунду. Это один каждые 90 мс, а не 40 мс.

Кроме того, общий способ отображения этого - спектрограмма. Не используйте 4096-битное БПФ, это в любом случае излишне. Вместо этого используйте 1024-точечное БПФ. Теперь вы получите 44 БПФ в секунду. Нанесите цветовой код на каждую ячейку и нанесите каждое БПФ на вертикальную линию. Горизонтальная ось — это ось времени. Теперь вы можете показывать полминуты БПФ на одном экране, и он будет прокручиваться по горизонтали со скоростью 44 пикселя в секунду. Это достаточно медленно, чтобы глаз мог отслеживать.

person MSalters    schedule 30.07.2014
comment
Большое спасибо за Ваш ответ. Вы правы в том, что частота обновления слишком высока, но я считаю, что мне нужен БПФ 4096. Я копирую показанный здесь спектральный анализатор: www.waves.com/plugins/h-eq-hybrid-equalizer. Спасибо за уделенное время. - person Isaiah Thompson; 31.07.2014
comment
@IsaiahThompson: 7-полосный эквалайзер?! Вы можете сделать это с помощью 256-точечного БПФ. - person MSalters; 31.07.2014
comment
Если вы посмотрите на график, частота начинается с 10 Гц. При 256-точечном БПФ бины увеличились бы примерно на 86 Гц, что является огромным скачком. - person Isaiah Thompson; 31.07.2014
comment
Вы бы не заметили, если бы усилили компонент 9 Гц на 3 дБ! (Самый нижний бин начинается с 0 Гц, постоянный ток) - person MSalters; 31.07.2014
comment
Спасибо за ваши добрые слова. Первые десять строк увеличиваются на десять Гц. Следующие десять строк увеличиваются на 100 Гц с несколькими промежуточными точками, затем на 1000 Гц и т. д. Какой размер БПФ вы бы предложили для этого? - person Isaiah Thompson; 31.07.2014
comment
@IsaiahThompson: Это предполагает преобразование без БПФ. Возможно, вейвлеты? - person MSalters; 31.07.2014