Как лучше всего определить громкость сигнала?

Я хочу определить громкость аудиосигнала.

Я нашел два варианта:

  1. Вычислить среднеквадратичное значение амплитуды
  2. найти максимальную амплитуду

Есть ли преимущества в использовании № 1 или № 2?

Вот что я пытаюсь сделать: я хочу, чтобы мой Android анализировал звук с микрофона. Я хочу, чтобы устройство обнаруживало громкий шум. Ввод короткий [].


person gregm    schedule 26.01.2012    source источник
comment
Какой звуковой сигнал? Зачем нужен объем? (не для того, чтобы просто разозлить вас, я действительно считаю, что трудно ответить на ваш вопрос, не зная)   -  person zrslv    schedule 26.01.2012
comment
Я скорректировал вопрос.   -  person gregm    schedule 26.01.2012


Ответы (2)


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

Поскольку ваше ухо не одинаково чувствительно ко всем частотам, лучше коррелировать ваше восприятие можно с помощью A-взвешивание сигнала. Разделите (отфильтруйте) сигнал на октавные полосы, рассчитайте среднеквадратичное значение для каждой полосы и примените А-взвешивание.

person Han    schedule 26.01.2012

Если вы хотите проверить уровень громкости, просто вычислите его значение в дБ (я предполагаю, что сигнал нормализован, т.е. 1 == максимальный уровень):

level[n] = - 20 x log(1/signal[n]); 

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

Проверьте Google, он даст вам много ресурсов об алгоритме NoiseGate и методах удаления шума:

http://en.wikipedia.org/wiki/Noise_gate

http://www.developer.com/java/other/article.php/3599661/Adaptive-Noise-Cancellation-using-Java.htm

person vitakot    schedule 26.01.2012