Android PCM-Bytes

8

Ich verwende die AudioRecord-Klasse, um rohe PCM-Bytes zu analysieren, wie sie im Mikrofon enthalten sind.

Das funktioniert also gut. Jetzt muss ich die PCM-Bytes in Dezibel umwandeln.

Ich habe eine Formel, die Ton in Pa in db aufnimmt.

db = 20 · log10 (Pa / ref Pa)

Also die Frage ist, die Bytes, die ich von audiorecorder aus dem Puffer bekomme, was ist es Amplitude pascal Schalldruck oder was.

Ich habe versucht, den Wert in te Formel zu setzen, aber es kommt mit sehr hohen dB zurück, so dass ich nicht denke, es ist richtig

Danke

    
Pintac 27.05.2010, 00:30
quelle

5 Antworten

11

Haftungsausschluss: Ich weiß wenig über Android.

Wahrscheinlich nimmt Ihr Gerät bei 44.100 Samples pro Sekunde (vielleicht weniger) mit zwei Bytes pro Sample in Mono auf. Also besteht Ihr erster Schritt darin, Bytepaare in Ihren Originaldaten in Zwei-Byte-Ganzzahlen zu kombinieren (ich weiß nicht, wie dies in Android gemacht wird).

Sie können dann den Dezibelwert (relativ zum Peak) jeder Probe berechnen, indem Sie zuerst den normalisierten Absolutwert der Probe nehmen und ihn an Ihre Db-Funktion übergeben:

%Vor%

Ein Wert in der Nähe des Peaks (z. B. +32767 oder -32768) wird einen Db-Wert nahe 0 haben. Ein Wert von 3277 (0,1) wird einen Db-Wert von -20 haben; Ein Wert von 327 (.01) hat einen Db-Wert von -40 usw.

    
MusiGenesis 27.05.2010, 01:04
quelle
2

Der Referenzdruck in Leq-Berechnungen (Schalldruckpegel) beträgt 20 Mikro-Pascal (RMS). Um absolute Leq-Level zu messen, müssen Sie Ihr Mikrofon mit einem Kalibrator kalibrieren. Die meisten Kalibratoren passen auf 1/2 "- oder 1/4" -Mikrofonkapseln, so dass ich Zweifel habe, das Mikrofon auf einem Android-Telefon zu kalibrieren. Alternativ können Sie möglicherweise die Mikrofonempfindlichkeit (Pa / mV) verwenden und dann den in den ADC eintretenden Spannungswert kalibrieren. Noch weniger zuverlässige Ergebnisse konnten erzielt werden, indem die Android-Werte mit dem gemessenen Schallpegel eines diffusen stationären Schallfeldes unter Verwendung eines Schallpegelmessers verglichen wurden. Beachten Sie, dass Sie in Leq-Berechnungen normalerweise die RMS-Werte verwenden. Der Wert einer einzelnen Probe bedeutet nicht viel.

    
Han 27.05.2010 07:42
quelle
2

Ich hielt meinen Schallpegelmesser direkt neben dem Mikrofon auf meinem Google-ion und ging 'Woooooo!' und stellte fest, dass Clipping um 105 db spl aufgetreten ist. Hoffe das hilft.

    
BobG 01.09.2010 03:18
quelle
1

Das Problem ist wahrscheinlich die Definition des "Referenz" Schalldrucks am Mikrofon. Ich habe keine Ahnung, was es wäre oder ob es verfügbar ist.

Die einzige Audioanwendung, die ich je benutzt habe, definierte 0db als "Volles Volumen", wenn die Samples bei + oder - Max Wert waren (in unsignierten 16 Bits, das wären 0 und 65535). Um dies in db zu tun, würde ich wahrscheinlich so etwas tun:

%Vor%

Ich weiß nicht, ob das richtig ist, aber es fühlt sich für mich mathematisch an. Wenn sich das input_sample der "Mitte" nähert, wird es mehr und mehr wie eine negative Unendlichkeit aussehen.

Nun, wenn ich darüber nachdenke, wenn Sie eine SPL oder etwas brauchen, das eine andere Trickserei wie RMS-Evaluierung zwischen den Nulldurchgängen erfordert, dann könnte ich das nur erraten, weil ich keine Ahnung habe, wie es wirklich funktioniert .

    
dash-tom-bang 27.05.2010 00:44
quelle
1

Die Einheiten sind die Einheiten, die für das Referenzlesen verwendet werden. In der Formel wird der Messwert durch den Referenzwert geteilt, so dass die Einheiten gelöscht werden und nicht mehr relevant sind.

Mit anderen Worten, Dezibel ist eine Art, zwei Dinge zu vergleichen, es ist keine absolute Messung. Wenn Sie es so sehen, als wäre es absolut, dann ist der Vergleich mit dem leisesten Geräusch, das der durchschnittliche Mensch hören kann.

In unserem Fall handelt es sich um einen Vergleich zum höchsten Messwert, den das Gerät verarbeitet (daher ist jeder andere Messwert negativ oder kleiner als das Maximum).

    
DaveWalley 11.11.2011 19:43
quelle

Tags und Links