Android PCM Bytes - PullRequest
       30

Android PCM Bytes

8 голосов
/ 27 мая 2010

Я использую класс AudioRecord для анализа необработанных байтов PCM, которые поступают в микрофон.

Так что все работает хорошо. Теперь мне нужно преобразовать байты PCM в децибелы.

У меня есть формула, которая переводит звуковое давление в Па в дБ.

дБ = 20 * log10 (Па / ref Па)

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

Я пытался поместить значение в формулу te, но он возвращается с очень высоким значением, поэтому я не считаю его правильным

спасибо

Ответы [ 5 ]

11 голосов
/ 27 мая 2010

Отказ от ответственности: я мало знаю об Android.

Возможно, ваше устройство записывает в моно со скоростью 44 100 сэмплов в секунду (возможно, меньше), используя два байта на сэмпл. Итак, ваш первый шаг - объединить пары байтов в ваших исходных данных в двухбайтовые целые числа (я не знаю, как это делается в Android).

Затем вы можете вычислить значение в децибелах (относительно пика) каждого образца, сначала взяв нормализованное абсолютное значение образца и передав его в функцию Db:

float Db = 20 * log10(ABS(sampleVal) / 32768)

Значение около пика (например, +32767 или -32768) будет иметь значение Db около 0. Значение 3277 (0,1) будет иметь значение Db -20; значение 327 (.01) будет иметь значение Db -40 и т. д.

2 голосов
/ 01 сентября 2010

Я поднес свой измеритель уровня звука прямо к микрофону на моем Google Ion и сказал: «Woooooo!» и отметил, что отсечение произошло около 105 дБ спл. Надеюсь это поможет.

2 голосов
/ 27 мая 2010

Эталонное давление в расчетах Leq (уровень звукового давления) составляет 20 микропаскалей (среднеквадратичное). Для измерения абсолютных уровней Leq необходимо откалибровать микрофон с помощью калибратора. Большинство калибраторов подходят для микрофонных капсул 1/2 "или 1/4", поэтому я сомневаюсь в калибровке микрофона на телефоне Android. В качестве альтернативы вы можете использовать чувствительность микрофона (Па / мВ), а затем откалибровать уровень напряжения на АЦП. Еще менее надежные результаты можно было бы получить, сравнив значения Android с измеренным уровнем звука диффузного стационарного звукового поля с помощью измерителя уровня звука. Обратите внимание, что в вычислениях Leq вы обычно используете среднеквадратичные значения. Значение одного образца не значит много.

2 голосов
/ 27 мая 2010

Проблема, скорее всего, заключается в определении «эталонного» звукового давления на микрофоне. Я понятия не имею, что это было бы или если это доступно.

Единственное аудио-приложение, которое я когда-либо использовал, определяло 0db как «полную громкость», когда сэмплы имели значение + или - max (в беззнаковых 16 битах, которые были бы 0 и 65535). Чтобы получить это в БД, я бы, вероятно, сделал что-то вроде этого:

// assume input_sample is in the range 0 to 65535
sample = (input_sample * 10.0) - 327675.0
db = log10(sample / 327675.0)

Я не знаю, правильно ли это, но мне кажется, что математически бросил мне вызов. Когда input_sample приближается к «середине», он будет все больше и больше походить на отрицательную бесконечность.

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

1 голос
/ 11 ноября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...