Для работы над проектом мне нужно измерить уровень громкости либо из записанного аудиофайла, либо в режиме реального времени, используя микрофон. После моего основного исследования я попытался использовать библиотеку звуковых файлов. Файл был прочитан с использованием звукового файла и с помощью 20*np.log10(np.sqrt(np.mean(np.absolute(a)**2))) я вычислил значение дБ. Я получаю отрицательное значение для звукового файла. Но нормальный звук может быть в диапазоне 50-70 дБ, и я получаю отрицательное значение. Кто-нибудь может помочь мне разобраться в этом?

0
K K 23 Окт 2018 в 10:12

2 ответа

Лучший ответ

Короткий ответ: дБ - это не то же самое, что дБ. Ваши результаты, вероятно, верны.

Длинный ответ: уровни дБ всегда определяют отношение к некоторому эталонному значению. Для аудио / акустики существует множество эталонных значений, и вам нужно указать, какое из них вы используете значение в дБ, чтобы иметь смысл. Когда ты говоришь

нормальный звук может быть в пределах 50-70 дБ

Это не совсем точное утверждение, вы, вероятно, имеете в виду

нормальный звук может быть в пределах 50-70 дБ SPL

Где вы указываете значение относительно эталонного уровня звукового давления 20 мкПа.

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

Также ясно, что вы не можете напрямую связать значения дБ FS со значениями дБ SPL: если вы проиграете один и тот же аудиофайл (то есть берете некоторое значение дБ FS) и проиграете его дважды, но увеличите громкость вашего динамика, это приведет к до двух разных значений дБ SPL (то, что вы слышите).

3
cheersmate 24 Окт 2018 в 08:45

Вам нужно добавить ссылку на звук, т. Е. 20 log10(P rms_value/P ref)+120 dB, чтобы получить данные в диапазоне dB масштаба. Pref можно настроить из вашего модуля ввода.

1
Rahul Devanavar 30 Ноя 2019 в 10:12
52943151