Am 25.05.2018 wird die neue EU-Datenschutz-Grundverordnung (EU-DSGVO) als einheitliche europäische Datenschutzregelung eingeführt.
Gleichzeitig wurde das Bundesdatenschutzgesetz (BDSG) überarbeitet und tritt gemeinsam mit der EU-DSGVO zum 25.05.2018 in Kraft.
Entsprechend dieser neuen Vorgaben haben wir unsere Datenschutzerklärung überarbeitet.

Ihr findet diese Datenschutzerklärung im Unterforum
"Wichtige Informationen" viewforum.php?f=12

32bit Float VS 24 Bit Fixed

Grundlagen der Tontechnik, Literatur- und Linktips

Moderator: Moderation

loopbreaker
Vollmitglied
Beiträge: 69
Registriert: 07.01.2015, 10:19
Ort: Oesterreich

Re: 32bit Float VS 24 Bit Fixed

Beitragvon loopbreaker » 21.02.2015, 15:08

Danke!

Benutzeravatar
Wolfus
Senior Member
Beiträge: 567
Registriert: 16.09.2009, 12:41
Ort: StIngbert
Ort: St. Ingbert
Kontaktdaten:

Re: 32bit Float VS 24 Bit Fixed

Beitragvon Wolfus » 27.02.2015, 18:17

Zum Zitieren im anderen Forum: kein Problem, ich stehe zu meinen Aussagen. :-)
'Though nothing shows, someone knows. I wish that one was me. (Procol Harum, Quite Rightly So)

udr
Vollmitglied
Beiträge: 85
Registriert: 06.07.2011, 21:53

Re: 32bit Float VS 24 Bit Fixed

Beitragvon udr » 27.02.2015, 21:03

Arno hat geschrieben:...
Die in C oder Fortran benutzte double benutzt 1 bit für das Vorzeichen, 11 bit Exponent und 20 + 32 bit Mantisse. Damit ist die Genauigkeit auf 2,0*10^-308 bis 2,0*10^308 abgedeckt.

dies ist die Beschreibung einer 64bit-floating point Zahl.

Die in diesem thread diskutierten 32bit float Zahlen für wav-Dateien werden im
IEEE-754-Format (http://de.wikipedia.org/wiki/IEEE_754) mit
1 Bit Vorzeichen, 8Bit Exponent und 23 Bit Mantisse gespeichert.

Diese Info war wahrscheinlich in den verloren gegangenen emails drin.
Ebenso wie die Info, dass sich eine 24bit fixed Zahl (1bit Vorzeichen, 23 Bit Mantisse)
ohne Informationsverlust in eine IEEE 32bit float wandeln läßt.
Ich würde es schade finden, wenn diese Info in diesem thread nicht mehr drin ist.

Grüße, udr

Benutzeravatar
Arno
Senior Member
Beiträge: 774
Registriert: 08.08.2009, 14:55
Ort: Bochum
Ort: Bochum

Re: 32bit Float VS 24 Bit Fixed

Beitragvon Arno » 28.02.2015, 13:46

Hallo,
udr hat geschrieben:Die in diesem thread diskutierten 32bit float Zahlen für wav-Dateien werden im
IEEE-754-Format (http://de.wikipedia.org/wiki/IEEE_754) mit
1 Bit Vorzeichen, 8Bit Exponent und 23 Bit Mantisse gespeichert.


Das schrieb ich bereits.

udr hat geschrieben:Ebenso wie die Info, dass sich eine 24bit fixed Zahl (1bit Vorzeichen, 23 Bit Mantisse)


Üblicherweise wird eine Darstellung im Zweierkomplement verwendet, was nicht einfach 1 bit als Vorzeichen benutzt.

udr hat geschrieben:ohne Informationsverlust in eine IEEE 32bit float wandeln läßt.


Das ist richtig. Umgekehrt nicht - man schreibe ein Programm in der Programmiersprache der Wahl und teile beispielsweise 3 durch 4. Benutzt man eine Ganzzahldarstellung (integer bei C/C++) ist das Ergebnis 0.
Kleiner Scherz am Rande: mit double als Datentyp lautet das Ergebnis vermutlich 0.749999999...

Gruß, Arno
Moment, Moment! Haben Sie das gehört? Was für ein seltsamer Ton!

udr
Vollmitglied
Beiträge: 85
Registriert: 06.07.2011, 21:53

Re: 32bit Float VS 24 Bit Fixed

Beitragvon udr » 01.03.2015, 10:17

Arno hat geschrieben:
udr hat geschrieben:Die in diesem thread diskutierten 32bit float Zahlen für wav-Dateien werden im
IEEE-754-Format (http://de.wikipedia.org/wiki/IEEE_754) mit
1 Bit Vorzeichen, 8Bit Exponent und 23 Bit Mantisse gespeichert.

Das schrieb ich bereits.

das habe ich überlesen, Entschuldigung.

udr hat geschrieben:Ebenso wie die Info, dass sich eine 24bit fixed Zahl (1bit Vorzeichen, 23 Bit Mantisse)

Arno hat geschrieben:Üblicherweise wird eine Darstellung im Zweierkomplement verwendet, was nicht einfach 1 bit als Vorzeichen benutzt.
udr hat geschrieben:ohne Informationsverlust in eine IEEE 32bit float wandeln läßt.

Das ist richtig. Umgekehrt nicht - man schreibe ein Programm in der Programmiersprache der Wahl und teile beispielsweise 3 durch 4. Benutzt man eine Ganzzahldarstellung (integer bei C/C++) ist das Ergebnis 0.
Kleiner Scherz am Rande: mit double als Datentyp lautet das Ergebnis vermutlich 0.749999999...

Wobei ich da noch erwähnen möchte, dass die 24bit fixed-Zahlen nach dem Normieren auf 0dBFS (=2^24-1) keine exakte Entsprechung
bei den 32bit-float IEEE-Zahlen haben (0dBFS = 1.00000...) sondern gerundet werden müssen.

Beitrag ab hier nochmals geändert:
Meine DAW hat in dem Bereich so knapp unter 0dBFS irgendwelche Exportprobleme.
Wenn ich einen Sinus mit exakt 0dBFS aus der 32bit float-Welt exportiere,
hat der 24bit-fixed-Export nur die halbe Auflösung in diesem Bereich.
Beim 32bit float Export wird die maximal mögliche Auflösung erreicht.

In meinem originalen Posting dachte ich, das liegt im Zahlenformat begründet.
Aber das stimmt nicht: beide Zahlenformate habe fast diesselbe Auflösungsgenauigkeit.
Der Auflösungsverlust geschieht irgendwie beim Export aus meiner DAW.
Das werde ich nochmals genauer prüfen müssen.

Diese 24bit-Ungereimtheiten bestätigen für mich nochmals, meinen Workflow vollständig in 32bit float durchzuführen.
Wobei für mich der Hauptgrund ist, dass man mit 32bit-float praktisch keinen Überlauf erzeugen kann.

Gruss, udr

Benutzeravatar
Tomte
Senior Member
Beiträge: 410
Registriert: 13.11.2007, 18:46

Re: 32bit Float VS 24 Bit Fixed

Beitragvon Tomte » 01.03.2015, 14:22

udr hat geschrieben:Meine DAW hat in dem Bereich so knapp unter 0dBFS irgendwelche Exportprobleme.
Wenn ich einen Sinus mit exakt 0dBFS aus der 32bit float-Welt exportiere,
hat der 24bit-fixed-Export nur die halbe Auflösung in diesem Bereich.
Beim 32bit float Export wird die maximal mögliche Auflösung erreicht.

Was heißt genau, im Export ist nur die halbe Auflösung? Wie siehst Du/misst Du das?

Benutzeravatar
Wolfus
Senior Member
Beiträge: 567
Registriert: 16.09.2009, 12:41
Ort: StIngbert
Ort: St. Ingbert
Kontaktdaten:

Re: 32bit Float VS 24 Bit Fixed

Beitragvon Wolfus » 01.03.2015, 16:22

Ich habe noch nie etwas für DAWs programmiert, aber bei 32 Bit Float 1.0 als 0dB zu verwenden, ist extrem ungeschickt. In jeder binären Auflösung als Integer ist man 1 Einheit über der Vollaussteuerung. 1.0 ist binär 1.000000 (etc.), wird also zu 1000<insgesamt n-1 Nullen) in der Integer-Darstellung. Gerade 1 zu viel. Bei 32 Bit FLoat kann man mit 24 Bit Mantisse rechnen, daher lässt sich ohne Rundungsfehler bis 11<insgesamt n-2 Einsen) wandeln. Von daher wäre geschickter, 1 - 2^-23 als 0dBFS zu wählen.

Das Problem besteht aber nur bei 24 Bit, wegen der 24-Bit Auflösung der Mantisse. Nach 16 Bit verliert man nichts, da die Auflösung der Mantisse besser als die des Integer-Wertes ist und man ohnehin runden muss. Da mehr als 24 Bit für echte Ohren bei der jetzigen Evolutionsgeschwindigkeit und der Wertebereiche verschiedener physikalischer Standardwerte für den Export auf alle Zeiten reichen werden, ist 64Bit Float vielleich für Zwischenberechnungen aber sonst nirgends sinnvoll. Es wäre von daher durchaus eine Überlegung wert, sich von der Festlegung der Aussteuerungsgrenze her auf das 24Bit Format zu beziehen, damit man es voll ausnutzt.

Aber Alles in Allem: wie bei Ethan Winer korrekt bemerkt, wird das in der Praxis in den seltensten Fällen wirkliche Auswirkungen haben, wie beim Dithern. Wenn ich mich richtig entsinne hat er sinngemäß gemeint, noch nie sei eine Aufnahme (zumindest im Pop-Bereich) durch ungeschicktes oder fehlendes Dithern verdorben worden. Wenn man die 1.0 als Grenze nimmt, geht halt ein Bit der 24 möglichen verloren. Die reine Rundung geht in der oberen Hälfte des möglichen Betrags nach oben, die untere nach unten. Ohne Rauschen wird also bei -6 dB ein Sprung entstehen und damit eine Verzerrung entsprechend 1 Bit.
'Though nothing shows, someone knows. I wish that one was me. (Procol Harum, Quite Rightly So)

udr
Vollmitglied
Beiträge: 85
Registriert: 06.07.2011, 21:53

Re: 32bit Float VS 24 Bit Fixed

Beitragvon udr » 01.03.2015, 16:51

Tomte hat geschrieben:Was heißt genau, im Export ist nur die halbe Auflösung? Wie siehst Du/misst Du das?

In dem vorliegenden Fall wollte ich mal sehen, was meine DAW so um 0dBFS in den verschiedenen Formaten macht.
Also habe ich einen 1Hz Sinus mit 0dBFS generiert in der 32bit float Welt (geht auch mit 24 bit, habe ich aber noch nicht getestet).

Anschliessend habe ich das Signal als Wav exportiert in 24bit fixed und 32bit float.
Dithering war dabei ausgeschaltet.
Die Zahlen im Wave-File um 1 herum (nach 0.25sec) habe ich mir dann im hex-Editor angeschaut.
Was tatsächlich in der DAW passiert kann ich nicht nachvollziehen.

Hier das Ergebnis beim Maximaldurchgang in

| Binaer 24bit fixed | binaer 32bit float und decimal 32bit float
| 11111111111111111111010| 111111011111111111111111110101 = 9.99999344348907e-01|
| 11111111111111111111100| 111111011111111111111111111000 = 9.99999523162842e-01|
| 11111111111111111111101| 111111011111111111111111111010 = 9.99999642372131e-01|
| 11111111111111111111110| 111111011111111111111111111100 = 9.99999761581421e-01|
| 11111111111111111111110| 111111011111111111111111111101 = 9.99999821186066e-01|
| 11111111111111111111111| 111111011111111111111111111110 = 9.99999880790710e-01|
| 11111111111111111111111| 111111011111111111111111111111 = 9.99999940395355e-01|
| 11111111111111111111111| 111111100000000000000000000000 = 1.00000000000000e+00|
| 11111111111111111111111| 111111100000000000000000000000 = 1.00000000000000e+00|
| 11111111111111111111111| 111111100000000000000000000000 = 1.00000000000000e+00|
| 11111111111111111111111| 111111011111111111111111111111 = 9.99999940395355e-01|
| 11111111111111111111111| 111111011111111111111111111110 = 9.99999880790710e-01|
| 11111111111111111111110| 111111011111111111111111111101 = 9.99999821186066e-01|
| 11111111111111111111110| 111111011111111111111111111100 = 9.99999761581421e-01|
| 11111111111111111111101| 111111011111111111111111111010 = 9.99999642372131e-01|

Ich weiss nicht, ob das nicht nur ein Clipping ist bei 24bit fixed oder was da passiert.
Es hat auf jeden Fall auch was mit der 0dBFS-Definition zu tun.
Das 32bit float hat 0dbFS auf jeden Fall bei exakt 1 und auch die Stufung stimmt exakt.

Wie schon mehrfach gesagt, ist das nur von theoretischem Interesse.
Da ich aber manchmal selbst WAV-Files aus C oder Python heraus schreibe,
würde ich das Verhalten an den Wertebereichsgrenzen gerne verstehen.

Gruss, udr

udr
Vollmitglied
Beiträge: 85
Registriert: 06.07.2011, 21:53

Re: 32bit Float VS 24 Bit Fixed

Beitragvon udr » 01.03.2015, 18:57

Wolfus hat geschrieben:bei 32 Bit Float 1.0 als 0dB zu verwenden, ist extrem ungeschickt.

Also meine DAW hat 0dBFS für 32bit float bei exakt 1 und eine Auflösung von 5.96e-8 knapp unterhalb der 1.
Im Inneren einer DAW ist das wahrscheinlich am bequemsten zu programmieren.
Mir scheint auch, dass das WAV-Fileformat exakt 1 als 0dBFS nimmt.
Wolfus hat geschrieben:Bei 32 Bit FLoat kann man mit 24 Bit Mantisse rechnen, daher lässt sich ohne Rundungsfehler bis 11<insgesamt n-2 Einsen) wandeln. Von daher wäre geschickter, 1 - 2^-23 als 0dBFS zu wählen.

Beim vorgeschriebenen IEEE-754 hat die Mantisse 23bit plus einer angenommenen 1 davor, sodass die Mantisse dann immer größer gleich 1 und kleiner 2 wird. Damit wird es schwierig mit 0dBFS = 2^24-1.
Wolfus hat geschrieben:Wenn man die 1.0 als Grenze nimmt, geht halt ein Bit der 24 möglichen verloren. Die reine Rundung geht in der oberen Hälfte des möglichen Betrags nach oben, die untere nach unten. Ohne Rauschen wird also bei -6 dB ein Sprung entstehen und damit eine Verzerrung entsprechend 1 Bit.

Ich meine auch, dass das für die Tontechnik-Praxis irrelevant ist.
Die offizielle Definition von 0dBFS in den unterschiedlichen Zahlenformaten (falls es denn eine gibt) würde mich trotzdem interessieren.
Spätestens, wenn ich mal wieder ein WAV binär schreibe.

Gruss, udr

loopbreaker
Vollmitglied
Beiträge: 69
Registriert: 07.01.2015, 10:19
Ort: Oesterreich

Re: 32bit Float VS 24 Bit Fixed

Beitragvon loopbreaker » 02.03.2015, 13:57

Wolfus hat geschrieben:Zum Zitieren im anderen Forum: kein Problem, ich stehe zu meinen Aussagen. :-)


Gracias Wolfus :)

Benutzeravatar
Tomte
Senior Member
Beiträge: 410
Registriert: 13.11.2007, 18:46

Re: 32bit Float VS 24 Bit Fixed

Beitragvon Tomte » 02.03.2015, 16:22

udr hat geschrieben:
Tomte hat geschrieben:Was heißt genau, im Export ist nur die halbe Auflösung? Wie siehst Du/misst Du das?

In dem vorliegenden Fall wollte ich mal sehen, was meine DAW so um 0dBFS in den verschiedenen Formaten macht.
Also habe ich einen 1Hz Sinus mit 0dBFS generiert in der 32bit float Welt (geht auch mit 24 bit, habe ich aber noch nicht getestet).

Anschliessend habe ich das Signal als Wav exportiert in 24bit fixed und 32bit float.
Dithering war dabei ausgeschaltet.
Die Zahlen im Wave-File um 1 herum (nach 0.25sec) habe ich mir dann im hex-Editor angeschaut.
Was tatsächlich in der DAW passiert kann ich nicht nachvollziehen.

Hier das Ergebnis beim Maximaldurchgang in

| Binaer 24bit fixed | binaer 32bit float und decimal 32bit float
| 11111111111111111111010| 111111011111111111111111110101 = 9.99999344348907e-01|
| 11111111111111111111100| 111111011111111111111111111000 = 9.99999523162842e-01|
| 11111111111111111111101| 111111011111111111111111111010 = 9.99999642372131e-01|
| 11111111111111111111110| 111111011111111111111111111100 = 9.99999761581421e-01|
| 11111111111111111111110| 111111011111111111111111111101 = 9.99999821186066e-01|
| 11111111111111111111111| 111111011111111111111111111110 = 9.99999880790710e-01|
| 11111111111111111111111| 111111011111111111111111111111 = 9.99999940395355e-01|
| 11111111111111111111111| 111111100000000000000000000000 = 1.00000000000000e+00|
| 11111111111111111111111| 111111100000000000000000000000 = 1.00000000000000e+00|
| 11111111111111111111111| 111111100000000000000000000000 = 1.00000000000000e+00|
| 11111111111111111111111| 111111011111111111111111111111 = 9.99999940395355e-01|
| 11111111111111111111111| 111111011111111111111111111110 = 9.99999880790710e-01|
| 11111111111111111111110| 111111011111111111111111111101 = 9.99999821186066e-01|
| 11111111111111111111110| 111111011111111111111111111100 = 9.99999761581421e-01|
| 11111111111111111111101| 111111011111111111111111111010 = 9.99999642372131e-01|

Ich weiss nicht, ob das nicht nur ein Clipping ist bei 24bit fixed oder was da passiert.
Es hat auf jeden Fall auch was mit der 0dBFS-Definition zu tun.
Das 32bit float hat 0dbFS auf jeden Fall bei exakt 1 und auch die Stufung stimmt exakt.

Wie schon mehrfach gesagt, ist das nur von theoretischem Interesse.
Da ich aber manchmal selbst WAV-Files aus C oder Python heraus schreibe,
würde ich das Verhalten an den Wertebereichsgrenzen gerne verstehen.

Gruss, udr

Das ist - zumindest für die Theorie - ein sehr schönes Beispiel mit dem 1 Hz Sinus.

Zur "Stufigkeit"/Auflösung: Theoretisch hat es hier bei 24bit in der Tat mehr "Treppchen" und weniger Auflösung. In der digitalen Domäne hat es immer diese Quantisierungsfehler, die ein Quantisierungsrauschen erzeugen - nur liegt das hier in beiden Fällen so niedrig im Pegel, dass es in der Praxis (bei der Wiedergabe) keinerlei Rolle spielt. (Wenn ich mit sehr vielen Signalen innerhalb einer DAW rechne, können sich diese Fehler eben durchaus relevant aufaddieren, weswegen hier größere Wortbreiten sinnvoll sind.)

Ich hab die Zahlenformate-Definitionen nicht im Kopf. Bei 24 bit fixed ist es wohl einfach der Maximalwert, den wir da sehen können. Dass jetzt davor und danach zwei Samples mehr als bei 32bit float auf dem Wert stehen, kommt sicher von der Auflösung. Bei 1 Hz ist das kein Clipping.

Der 1 Hz Sinus ist also ein wunderbares Beispiel, und mit viel Halbwissen könnte man sich prima über Analog vs. Digital und den (Un-)Sinn höherer Wortbreiten streiten...


Zurück zu „Schule des guten Tons“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste