Как лучше всего определить громкость сигнала? - PullRequest
2 голосов
/ 26 января 2012

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 26 января 2012

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

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

1 голос
/ 26 января 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

...