Forum: Digitale Signalverarbeitung / DSP / Machine Learning 16 Bit PCM - 96 dB Dynamikbereich - woher?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Walter T. (nicolas)


Lesenswert?

Guten Morgen zusammen,

wenn ich einen 16-Bit-PCM-Audiodatenstrom habe, habe ich bekanntlich 96 
dB Dynamikumfang. Sagt Wikipedia und auch alle andere Online-Quellen, 
die ich bislang gefunden habe.

Wenn ich versuche das selbst auszurechnen:
   20*log10(((2^15)-1)/1) = 90,3

Der Schalldruck ist eine Leistungswurzelgröße, der größte Wert ist 2^15 
- 1, der kleinste 1, und damit komme ich auf gut 90 dB Dynamik.

Woher kommen die 96 dB, die ich überall finde? Wie immer bin ich auch 
guten Literaturtipps gegenüber sehr aufgeschlossen.

Viele Grüße

(Alle Edits: Meine mentale Rechtschreibkorrektur ist noch nicht komplett 
gestartet.)

: Bearbeitet durch User
von Tobias P. (hubertus)


Lesenswert?

mit jedem zusätzlichen Bit verdoppelt sich die Anzahl darstellbarer 
Spannungslevel. Eine Verdoppelung in der Spannung sind 6 dB.

von Walter T. (nicolas)


Lesenswert?

Ja, das ist eine (recht gute) Näherung. Doppelte Spannung -> 6.02 dB.

Aber 1 Bit ist ja nicht die doppelte Spannung von Null Bit. Oder wenn 
ich es als vorzeichenbehaftet betrachte, habe ich nur 15 Bit. Sind 
wieder 90 dB.

: Bearbeitet durch User
von Tobias P. (hubertus)


Lesenswert?

Walter T. schrieb:
> Ja, das ist eine (recht gute) Näherung. Doppelte Spannung -> 6.02 dB.
>
> Aber 1 Bit ist ja nicht die doppelte Spannung von Null Bit. Oder wenn
> ich es als vorzeichenbehaftet betrachte, habe ich nur 15 Bit. Sind
> wieder 90 dB.

mit 1 Bit kannst du 2 Spannungen darstellen, mit 2 Bit 4 usw.
Schon 1 Bit sind 6 dB.

von Walter T. (nicolas)


Lesenswert?

Verstehe ich nicht. Mit 1 Bit habe ich nur das Vorzeichen, also die 
gleiche Spannung wahlweise positiv oder negativ. Damit ist der RMS immer 
gleich.

von Wastl (hartundweichware)


Lesenswert?

Walter T. schrieb:
> Wenn ich versuche das selbst auszurechnen:
>    20*log10(((2^15)-1)/1) = 90,3

Warum muss man, wenn man 16 Bit Zahlenumfang hat, zur Berechnung
der Dynamik ein Bit weniger annehmen?

von Tobias P. (hubertus)


Lesenswert?

Walter T. schrieb:
> Verstehe ich nicht. Mit 1 Bit habe ich nur das Vorzeichen, also die
> gleiche Spannung wahlweise positiv oder negativ. Damit ist der RMS immer
> gleich.

ne.
Mit 0 Bit kannst du genau 1 konstantes Spannungslevel ausgeben.
Mit 1 Bit kannst du doppelt so viele Spannungslevel erzeugen usw.

Selbst wenn es Vorzeichenbehaftet 1 Bit ist: 0 entspräche dann Null, 
eine 1 entspräche dann -1, also selbst dann hast du 2 unterscheidbare 
Spannungen.

von Walter T. (nicolas)


Lesenswert?

Der größte Wert, der in einem 16-Bit-PCM stehen kann, ist 32767. Der 
kleinste ist -32768 und der mit dem kleinsten RMS 1 oder -1.

von Tobias P. (hubertus)


Lesenswert?

Walter T. schrieb:
> Der größte Wert, der in einem 16-Bit-PCM stehen kann, ist 32767. Der
> kleinste ist -32768 und der mit dem kleinsten RMS 1 oder -1.

es geht nicht darum wie gross die Werte sind, sondern wie viele 
unterschiedliche Werte es gibt.

von Walter T. (nicolas)


Lesenswert?

Tobias P. schrieb:
> Es geht nicht darum wie gross die Werte sind, sondern wie viele
> unterschiedliche Werte es gibt.

Warum? Bei PCM ist das Vorzeichenbit ja nur eine Phasenlage, keine 
Pegelinformation.

Ich wäre wirklich dankbar für gute Literatur zur Elektroakustik, bei der 
die Digitaltechnik nicht zu kurz kommt.

von Mario M. (thelonging)


Lesenswert?

Wenn Du mit der Spannung Spitze-Spitze rechnest, hast Du kein 
Vorzeichen. Und zwischen Wackeln mit dem LSB und allen Bits liegt ein 
Faktor 65535, also 96dB.

von Walter T. (nicolas)


Lesenswert?

Okay, verstehe. Ich habe einen Offset von -0,5*LSB. Dann paßt auch die 
Formel von oben:

10*log10((((2^15)-1)/-0.5)^2) = 96,3 dB

Danke für die Erklärungen.

: Bearbeitet durch User
von Gerald K. (geku)



Lesenswert?

Walter T. schrieb:
> 10*log10((((2^15)-1)/-0.5)^2) = 96,3 dB

Ich komme mit der Formel nicht ganz klar.

von Tobias P. (hubertus)


Lesenswert?

Gerald K. schrieb:
> Walter T. schrieb:
>> 10*log10((((2^15)-1)/-0.5)^2) = 96,3 dB
>
>
>
> Ich komme mit der Formel nicht ganz klar.

die ist ja auch falsch.

20 * log10(65536) = 96.33 dB.

von Walter T. (nicolas)


Lesenswert?

Gerald K. schrieb:
> Ich komme mit der Formel nicht ganz klar.

INT16_MAX ist (2^15)-1, nicht 2^(15-1)

Aber die Formel ist tatsächlich falsch. Wegen des Offsets von 0,5 müßte 
es ja sein:

10*log10((((2^15)-1,5)/-0.5)^2) = 96,3 dB

auch wenn es nicht viel ausmacht.

: Bearbeitet durch User
von Gerald K. (geku)


Lesenswert?

Walter T. schrieb:
> Gerald K. schrieb:
>> Ich komme mit der Formel nicht ganz klar.
>
> INT16_MAX ist (2^15)-1, nicht 2^(15-1)

Ich habe auf Grund der Klammerung zunächst (2^15) gerechnet und 1 
subtrahiert.

: Bearbeitet durch User
von Walter T. (nicolas)


Lesenswert?

Gerald K. schrieb:
> Ich habe auf Grund der Klammerung zunächst (2^15) gerechnet und 1
> subtrahiert.

Dann will Hiper Calc Dich ärgern und behauptet das Gegenteil.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Geht es hier um europaeische oder afrikanische Schwalben?

scnr,
WK

von Wastl (hartundweichware)


Lesenswert?

Walter T. schrieb:
> Wegen des Offsets von 0,5 müßte es ja sein:

Was redest du da für einen Scheiss wegen Offset? Ein Zahlen-
umfang hat keinen Offset und braucht auch keinen. Nur die
Anzahl der Bits ist relevant für die Dynamik.

Wastl schrieb:
> Warum muss man, wenn man 16 Bit Zahlenumfang hat, zur Berechnung
> der Dynamik ein Bit weniger annehmen?

von Walter T. (nicolas)


Lesenswert?

Was redest Du für einen Scheiß wegen Zahlenumfang? Ein Zahlenumfang ist 
weder eine Leistungsgröße noch eine Leistungswurzelgröße und hat damit 
auch keine Dynamik.

von Wastl (hartundweichware)


Lesenswert?

Walter T. schrieb:
> Ein Zahlenumfang ist
> weder eine Leistungsgröße noch eine Leistungswurzelgröße und hat damit
> auch keine Dynamik.

Achso, ja dann ....

von Tobias P. (hubertus)


Lesenswert?

es gibt keine Offsets und solchen Kram.

Die Dynamik ist das Verhältnis von der grössten zur kleinsten 
Darstellbaren Spannung.
Bei 16 Bits ist die grösste Spannung 65536 mal so gross wie die 
Kleinste, das sind 96 dB, weil 20*log10(65536) = 96 ist.

ja, es ist natürlich, wenn man es genau nimmt, ein Faktor 65535, aber 
für alle praktischen Belange ist 65535 = 65536. Der Fehler ist im 
sub-0.1dB Bereich. Also rechnet man mit 2^16.

von Walter T. (nicolas)


Lesenswert?

Tobias P. schrieb:
> Die Dynamik ist das Verhältnis von der grössten zur kleinsten
> Darstellbaren Spannung.

Ich bin da absolut keine Experte, aber das allein kann es ja nicht sein.

Ansonsten würde ich einfach meine Achsen exponnentiell skalieren, also 0 
entspricht 1e-10 V, 1 entspricht 200 V und voilá habe ich mit 1 Bit mehr 
als 240 dB Dynamikumfang erreicht.

Oder banal: 0 entspricht 0V, 1 entspricht 1 V, mein Dynamikumfang ist 
unendlich!

: Bearbeitet durch User
von Harry R. (harry_r2)


Lesenswert?

Walter T. schrieb:
> würde ich einfach meine Achsen (...) skalieren

Wird bei der Sprach-Telefonie auch gemacht, um mit der gleichen Anzahl 
Bits einem größeren Bereich übertragen zu können. Durch die grössere 
Schrittweite bei hohen Pegeln ist die Auflösung dort gröber 
(="schlechter"), dafür kannst du aber auch noch das Flüstern hören.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Walter T. schrieb:
> Ich habe einen Offset von -0,5*LSB.

Der Offset spielt bei der Dynamik des Audiosignals keine Rolle, da er
nicht zur Lautstärker beiträgt (üblicherweise wird er auf Analogseite
mittels Koppelkondensatoren aus dem Signal entfernt).

Entscheidend ist allein das Verhältnis zwischen der größtmöglichen und
der kleinstmöglichen (von 0 verschiedenen) Amplitude. Die Amplitude ist
die halbe Differenz von oberem und unterem Scheitelwert.

Die größtmögliche Amplitude bei einem 16-Bit-DAC ist somit

a_max = ((2¹⁵-1)-(-2¹⁵))/2 = 2¹⁵-½

Die kleinstmögliche Amplitude ist

a_min = (1-0)/2 = ½

Anmerkung: Statt (1-0) könnte man genauso gut (87-86) schreiben, da der
Offset keine Rolle spielt.

Die Dynamik in dB ist

20·log₁₀(a_max/a_min) = 20·log₁₀((2¹⁵-½)/½) = 20·log₁₀(2¹⁶-1) ≈ 96,3

: Bearbeitet durch Moderator
von Walter T. (nicolas)


Lesenswert?

Wechseln wir von Werten auf Amplituden. Das klingt erst einmal sinnvoll.

Stichprobe beim "banalen" Fall 1-Bit:

Alles 0en -> Amplitude 0. Alles 1en -> Amplitude 0. Wechsel zwischen 0en 
und 1en -> Amplitude 0,5.

Dynamik: 20*log10(0.5/0,5) -> 0 dB.

Paßt.

Danke für die Erklärung!

Nachtrag: Aber wenn 1 Bit 0 dB Dynamik sind, passt das nicht mit 6 dB 
pro Bit mehr:

 1 Bit-> 0dB
 15 Bit -> 15 * 6 dB = 90 dB
 16 Bit = 1 Bit + 15 Bit = 90 dB

Hänge ich hier jetzt bei irgendeinem Zaunpfahlproblem?

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Lesenswert?

Walter T. schrieb:
> Nachtrag: Aber wenn 1 Bit 0 dB Dynamik sind, passt das nicht mit 6 dB
> pro Bit mehr.

Das ist ja nur eine Näherung für 2ⁿ >> 1 (n ist die Bitzahl).
Nur wenn diese Bedingung erfüllt ist, gilt

20·log₁₀(2ⁿ-1) ≈ 20·log₁₀(2ⁿ) = 20·n·log₁₀(2) ≈ 6·n

: Bearbeitet durch Moderator
von Walter T. (nicolas)


Lesenswert?

Kannst Du irgendwelchen "echten Stoff" (Literatur) empfehlen, wo diese 
Definitionen mal sauber behandelt werden, um nicht auf "Näherungen von 
irgendeinem Typen aus dem Internet" angewiesen zu sein?

Irgendwie scheint alle "gute" Literatur zur akustischen Meßtechnik, die 
ich kenne, irgendwann in den 80ern stehengeblieben zu sein.

Edit: Die jetzige Herleitung ist SEHR brauchbar (nach Deinem Edit). Die 
Frage war eher allgemein.

: Bearbeitet durch User
von Thomas Z. (thozei)


Lesenswert?


von Walter T. (nicolas)


Lesenswert?

Danke! Das Whitepaper ist wirklich sehr brauchbar und behandelt 
"zufällig" sogar den Aspekt, warum ich mich mit dem Kram überhaupt zu 
beschäftigen angefangen habe ("Echte" Dynamik vs. Noise Floor).

von Jim M. (turboj)


Lesenswert?

Walter T. schrieb:
> Der Schalldruck ist eine Leistungswurzelgröße, der größte Wert ist 2^15
> - 1, der kleinste 1,

Falsch.

Der kleinste Wert geht von 0 bis 1, das ist richtig.

Der größte Amplitude geht aber von -32768 bis +32767, und das sind die 
vollen 2^16 Bits. Daraus folgen die 96dB.

von Mann Fred (Gast)


Lesenswert?

Walter T. schrieb:
> 20*log10(((2^15)-1)/1) = 90,3

Da steckt der Fehler: Es sind 2^16. Wird hier gleich mehrmach falsch 
gemacht!

-> 20*log10(65535) = 96,x

Ein Signal kann innerhalb des Datenstroms von -32k bis 32k springen, 
damit ist die Dynamik 64k. Die darstellbare kleinste Größe ist 1.

Wenn man sich auf die Amplituden bezieht, die real abgebildet werden, 
müsste man die Bandbreite und die Anstiegszeit berücksichtigen. Die ist 
bei einem bandbegrenzten Signal erheblich geringer, daher nutzt ein 
Audiosignal die 96dB nur im Sonderfall aus, wenn f = Fs/2. Bei den heute 
üblichen 192kHz ist die Auslastung geringer. Daher würden sogar 1 Bit 
weniger reichen, um Audio darzustellen. Der Faktor geht mit Wurzel (192 
/ 48).

Yalu X. schrieb:
> 20·log₁₀((2¹⁵-½)/½) = 20·log₁₀(2¹⁶-1) ≈ 96,3
Ich würde beim Faktor 1/2 über die Rundung argumentieren. Das LSB ist 
maximal 0,5 digit falsch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.