Android байты PCM

Я использую класс AudioRecord, чтобы проанализировать сырые данные pcm байты, как это прибывает в микрометр.

Таким образом, это работает приятно. Теперь я должен преобразовать pcm байты в децибел.

У меня есть формула, которая берет звук, предуверенный в Pa в дб.

дб = 20 * log10 (Pa/ref Pa)

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

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

спасибо

9
задан Pintac 27 May 2010 в 00:30
поделиться

4 ответа

Предупреждение: я мало знаю об Android.

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

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

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

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

12
ответ дан 4 December 2019 в 11:04
поделиться

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

2
ответ дан 4 December 2019 в 11:04
поделиться

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

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

// 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 между нулевыми пересечениями, опять же то, о чем я мог только догадываться, потому что я понятия не имел, как это на самом деле работает .

2
ответ дан 4 December 2019 в 11:04
поделиться

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

2
ответ дан 4 December 2019 в 11:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: