Получение децибела с микрофона Android - PullRequest
3 голосов
/ 25 ноября 2010

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

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

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

Ответы [ 3 ]

12 голосов
/ 24 февраля 2011

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

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

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

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

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

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

5 голосов
/ 25 ноября 2010

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

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

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

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

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

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

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

2 голосов
/ 02 сентября 2014

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

Некоторые основные сведения из источника:

...