Звуковая спектрограмма - PullRequest
4 голосов
/ 20 апреля 2011

Я сделал приложение, которое рисует БПФ на экране в реальном времени (с микрофона). Время по оси x, частота по оси y и цвет пикселя представляют амплитуду (в значительной степени спектрограмма ванильного БПФ).

Моя проблема в том, что, несмотря на то, что я могу видеть образец из музыки, там также много шума. Погуглив это, я вижу людей, применяющих логарифмический расчет к амплитуде. Должен ли я делать это? И если да, то как будет выглядеть формула? (Я использую C #, но я могу перевести математику в код, так что любой пример в порядке.)

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

Ответы [ 2 ]

8 голосов
/ 20 апреля 2011

Представление амплитуды в логарифмической шкале приближает чувствительность слуховой системы человека и, следовательно, дает вам лучшее представление того, что вы слышите, по сравнению с нелогарифмической шкалой.Математически все, что вам нужно сделать, это:

Alog = 20*log10 (abs (A))

, где A - амплитуда данных БПФ, а Alog - выход.коэффициент 20 - это просто соглашение и не влияет на изображение, которое вы, вероятно, в любом случае масштабируете до цветовой схемы.

РЕДАКТИРОВАТЬ

Пояснения относительнокоэффициент 20: единица измерения дБ (децибел) представляет собой логарифмическую единицу измерения отношения : она представляет собой шкалу, на которой расстояние между 100 и 10 такое же, как между 1000 и 100 (поскольку они имеюттакое же соотношение: 1000/100 = 100/10).Если вы измерите его в дБ, вы получите:

10*log10 (1000/100) = 10*log10 (100/10) = 10

Коэффициент 10 объясняется тем, что deci означает tenth, что означает, что 1 бел - 10 децибел (например, 1 килограмм - 1000 грамм)

Поскольку слуховая система человека также (приблизительно) измеряет коэффициенты, имеет смысл измерять уровень звука по логарифмической шкале, то есть измерять отношение уровня звука к некоторому контрольному значению.Поскольку уровень звука связан с мощностью (в ваттах) звуковой волны, вы фактически измеряете соотношение мощностей P / Pref.Кроме того, мощность пропорциональна квадрату амплитуды, так что в итоге вы получите:

10*log10 (P/Pref) = 10*log10 (A^2 / Aref^2) = 20*log10 (A/Aref)

по правилам журнала.Это происхождение фактора 20 - помните, что в компьютере звук представлен мгновенной амплитудой звуковой волны.

3 голосов
/ 20 апреля 2011

Логарифмический просмотр вашей спектрограммы - это действительно лучший способ просмотра аудиосигналов.Помните также, что вам нужно хорошее разрешение как во временном, так и в частотном направлении.Если у вас слишком мало лотков в одном или другом, это может выглядеть странно.

Еще один важный момент заключается в том, что просмотр вашего STFT в логарифмическом масштабе - это , а не шумоподавляющий метод.То, что вы видите как «шум», может быть фактическим шумом или это могут быть такие вещи, как гармоники , переходные процессы , спектральная утечка и другие вещикоторые, как ожидается, будут там.В зависимости от вашего приложения, если вам необходимо выполнить кратковременный анализ сигнала, преобразование вейвлет может быть более подходящим для ваших нужд.Это устраняет определенные недостатки STFT, такие как постоянный размер окна.

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