Получение децибел с микрофона Android

Я искал довольно давно, и я не смог найти способ получить значение SPL/db с микрофона на Android.

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

Кто-нибудь знает как это сделать?


person Brandon    schedule 24.11.2010    source источник
comment
Вау, я просто надеялся на API и номер. Вам действительно нужно записать, чтобы получить информацию. Я надеялся просто послушать.   -  person    schedule 11.12.2010
comment
Насколько я прочитал исследование этого, да, вы делаете. Образцы могут быть очень короткими, всего несколько миллисекунд, но они должны быть. Однако вы можете удалить файл, как только произведете расчет. Я могу ошибаться, и может быть есть какой-то другой способ сделать это, которому я еще не научился, но я еще ничего не читал об этом.   -  person Brandon    schedule 13.12.2010
comment
Да, я просто смотрел вокруг и надеялся, что это будет легко. По сути, я просто слушаю и играю звук, основываясь на громкости звука вокруг него.   -  person Nicholas    schedule 23.05.2011


Ответы (3)


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

С этого момента в основном все зависит от калибровки и логарифмической величины. По сути, вы будете умножать или сворачивать на частотно-зависимую калибровку, а затем брать 10 * логарифмическую величину для всего или части частотного диапазона.

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

Затем у вас есть два варианта применения коррекции.

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

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

К сожалению, мало оснований предполагать более чем грубую согласованность от устройства к устройству, даже одной и той же модели.

person Chris Stratton    schedule 24.11.2010
comment
Спасибо за это! К сожалению, после всей этой работы я обнаружил, что мне даже не нужно было получать фактическое значение в децибелах. Я думаю, это для вас программирование. Спасибо, в любом случае! - person Brandon; 01.12.2010
comment
Вы ОЧЕНЬ правы в своем последнем утверждении. Мое приложение уже готово, и я тестировал его на нескольких разных устройствах, и показания, которые они возвращают, могут иметь значения в 10 раз больше, чем на других устройствах. Поэтому мне пришлось включить функцию калибровки, которая сравнила бы значения относительной тишины с нашей базовой линией для тишины. Спасибо, что включили это! - person Brandon; 12.01.2011

Работая над другими связанными приложениями и проводя исследования, я наткнулся на некоторую информацию, которая будет полезна всем, кто изучает что-то вроде этого.

Видите ли, микрофон на телефоне Android возвращает значение от 0 до +- 32 400. По большей части все, что превышает 2000, является действительно громким, например, концерт, клуб или механический шум. «Относительная тишина» составляет около 30. Однако значения этих значений относительны и будут различаться от телефона к телефону. Несколько устройств, расположенных рядом друг с другом, будут возвращать разные значения из-за наличия в них микрофонов. Значения могут немного отличаться или сильно.

Просто протестировав несколько разных телефонов на базе Android в своем офисе, я обнаружил, что некоторые устройства будут возвращать значения в 10 раз больше, чем другие устройства в той же ситуации. Вот почему не было никого, кто просто сказал: «Да, вы можете получить значение в децибелах, вот пример кода:», потому что на самом деле НЕТ надежного (и простого) способа сделать это реалистично.

Если бы вы загрузили его на одно устройство, вы могли бы получить, скажем, 30 дБ, а другое вернуло бы 300 дБ. Очевидно, что ни один человек не оказался бы в среде с уровнем шума 300 дБ без массивной защиты органов слуха. Значения должны быть приняты как относительные значения; как они относятся друг к другу. «Калибровка», будь то динамическая или иная, является обязательной, если вы хотите получить значения, которые вы можете использовать. Должна быть установленная базовая линия, которая не может исходить от вас, которую нужно сравнивать с вашей ценностью. Например, относительная тишина, как было сказано ранее, должна быть около 30.

Если телефон возвращает 456 в относительной тишине, то просто разделите ваши (30) на их (456), и вы получите коэффициент, который будет служить корректировкой значений, возвращаемых телефоном, чтобы они соответствовали тому, что вы ожидаете увидеть. , и эти значения можно использовать для некоторой степени надежности.

Это только то, что я нашел за последние несколько месяцев, надеюсь, это кому-то поможет.

person Brandon    schedule 23.02.2011
comment
Привет, твоя работа мне очень помогает. но у меня есть вопрос. Вы калибруете рассчитанные значения в децибелах или короткие данные, полученные из функции чтения?? С Уважением - person smoothumut; 26.05.2015

Приложение с открытым исходным кодом NoiseTube делает это, включая поддержку калибровки для конкретного устройства. Исходный код доступен здесь. Если у вас есть к ней доступ, я настоятельно рекомендую прочитать их статью Совместное шумовое картирование работает! Оценка совместного зондирования как альтернативы стандартным методам мониторинга окружающей среды (доступно за плату).

Некоторые моменты из источника:

person DeeperUnderstanding    schedule 02.09.2014