Zum 3DCenter Forum
Inhalt




Das Floating-Point-Format im Detail

Teil 1 von 3 / 1. März 2004 / von aths / Seite 4 von 13


   Ziel: Gleichverteilung des Rauschabstandes

Wie gezeigt, hat es die lineare Quantisierung ansich, dass kleine Werte mit einem großen Unsicherheitsfaktor behaftet sind, große Werte hingegen mit einem kleinen Unsicherheitsfaktor. Vergleicht man die gespeicherten, also letzlich gerundeten Werte mit den "wahren" Ergebnissen, die bei exakter Rechnung tatsächlich herauskommen würden, gibt es natürlich unvermeidliche Abweichungen. Würde man die jeweiligen Abstände zwischen dem "wahren" und dem tatsächlich errechnetem Wert aufzeichnen, erhielte man die entsprechende Fehlerkurve. Diese sieht fast immer chaotisch aus, ohne ein System erkennen zu lassen. Deshalb spricht man vom Rauschen. Andersherum betrachtet ist das berechnete, ungenaue Ergebnis das Resultat einer Überlagerung des echten Ergebnisses mit dem unvorhersehbaren Fehlersignal, eben dem Rauschen.


Fast immer gibt es Abweichungen zum wahren Wert.

Dass das Wort "Rauschen" zur Charakterisierung der Fehlerkurve seine Berechtigung hat, kann man auch "in echt" erfahren, indem man eine WAV-Datei in das 8-Bit-Format konvertiert. Handelt es sich um laute Musik, ist die Qualität akzeptabel, denn laute Musik übertönt (= "maskiert") das Rauschen für unser Gehör. Handelt es sich aber um einen Flüsterton, rauscht die Wiedergabe unerträglich. Denn der relative Genauigkeitsverlust, ausgehend vom 16-Bit-WAV, ist bei kleinen Werten natürlich viel höher. Der Quantisierungsfehler kommt viel stärker zum tragen und stört.

Der durchschnittliche (oder größte) Fehler zum wahren Wert wird auch als Rauschabstand bezeichnet, und oft in dBa gemessen. Uns sollen die konkreten Hintergründe der Dezibel-Einheit nicht weiter interessieren, außer einer interessanten Tatsache: Diese Einheit misst logarithmisch. Das widerspiegelt auch die Eigenschaften unseres Gehörs. Hätten wir ein "lineares" Gehör, hätten wir ein großes Problem, denn die Heftigkeit akkustischer Schallwellen ist höchst unterschiedlich: Beim Rascheln der Blätter gibt es nur schwache Amplituden, während der Presslufthammer richtig viel Energie ans Ohr bringt.

Die Unterschiede sind so gewaltig, dass wir mit linearer Wahrnehmung entweder keine Blätter rascheln hören könnten, oder alternativ beim Presslufthammer aufgrund eines Stresshormon-Schocks den Tod erleiden würden. Zum Glück aber nehmen wir beispielsweise 1000 Watt Musik-Leistung nur als doppelt so laut wahr, wie 100 Watt Leistung. Stark vereinfacht ausgedrückt, ist der lauteste Ton (bevor das Ohr schmerzt) nur 64 mal so laut, wie das leiseste wahrnehmbare Geräusch. Damit decken wir jedoch einen Unterschied im Leistungs-Pegel von 1 : 1 Million ab!

Logarithmische Maßeinheiten haben weitere Vorteile, weil man Rechnungen vereinfacht. Kennt man die Signal-Dämpfung eines Kabels auf 100 Meter, kann man ganz leicht die Dämpfung für 200 oder 300 Meter ausrechnen. Das Phänomen der Dämpfung ist exponentiell, was die Umkehrfunktion, nämlich der Logarithmus, für uns gleich wieder wegrechnet. Exponentielles Wachstum spielt auch bei Floating-Point-Zahlen eine große Rolle.

Der durchschnittliche absolute Quantisierungsfehler ist bei Fixpoint-Zahlen bei jedem Wert gleich groß. Doch bezogen auf den tatsächlichen Zahlenwert stört die Abweichung bei kleinen Werten viel mehr, als bei großen. Angenommen, der Handel würde alle Preise auf einen ganzen Euro aufrunden. Das stört bei kleinen Preisen natürlich viel mehr, als wenn man eine Großanschaffung tätigt. Diese Bevor- bzw. Benachteiligung ist nicht einsichtig, und geradezu "ungerecht". Das Ziel muss also sein, mittels nichtlinearer Quantisierung den Rauschabstand möglichst gleichmäßig zu verteilen, und ihn unabhängig von der Amplitude zu machen. Müsste man dank Mehrwertsteuer-Erhöhung generell 1% mehr auf alle Produkte bezahlen, würde als das gerechter empfunden: Es trifft alle, und zwar abhängig davon, "wieviel sie abkönnen". Beim Quantisieren können große Zahlenwerte einen größeren Fehler vertragen, als kleine Zahlenwerte.

Dafür spricht eine weitere Tatsache, denn kleine Zahlenwerte sind in der Welt fast immer häufiger, als große. Ob man zum Beispiel die Größe aller Seen vergleicht, oder die Höhe der monatlichen Telefonrechnung aller Deutschen: Besonders große Werte sind eher die Ausnahme, kleinere Zahlen würden solche Statistiken dominieren. Löst man kleine Zahlen auf Kosten der großen Zahlen feiner auf, kommt das mehr Daten zugute, als andere darunter leiden.

Für ISDN-Telefonie werden in der Sekunde 8000 Samples genommen und mit 8 Bit quantisiert. Die 8 Bit stellen Zahlenwerte von -1 bis 1 dar. Aber die Umwandlung ist nichtlinear. Es handelt sich zwar nicht um Floating-Point-Zahlen, aber um eine Art "Vorstufe". Praktisch funktioniert das so: Der Analog-Digital-Wandler erzeugt zunächst linear quantisierte Werte, jedoch in einer Auflösung von 12 oder 13 Bit (AD-Wandler mit linearem Output sind nunmal einfacher zu bauen). Die noch recht hoch aufgelösten Werte werden dann umgerechnet und quasi auf 8 Bit "komprimiert". Dabei sind kleine Amplituden feiner abgestuft, als große. Das MPEG Audio Layer, zum Beispiel MP3, nutzt gleichfalls die Möglichkeit, hoch aufgelöste, linear quantisierte Werte in weniger hoch aufgelöste, nichtlinear quantisierte Werte umzuwandeln. Die feinen Abstufungen bei leisen Tönen bleiben erhalten, das eingefügte Rauschen bei lauten Tönen können wir nicht wahrnehmen.


   Fließkomma - Das Experiment mit dem Geld

Lösen wir uns jetzt von der "Philosophie" und werden konkret. Der Euro ist in Einheiten gestückelt von 1, 2 und 5. Betrachten wir das als Faktor. Der gilt für den Ein-Euro-Bereich ebenso für den 10- und 100-Euro-Bereich. Natürlich gilt er auch für den 1-Cent-Bereich und für den 10-Cent-Bereich. Um eine Euro-Zahlungseinheit darzustellen, könnten wir einmal den Faktor speichern, und einmal den Bereich. An Faktoren haben wir 1, 2 und 5. Den Bereich wollen wir auf 1 Euro normieren.

Die 0 steht dafür. -1 für den 10-Cent-Bereich, -2 für den 1-Cent-Bereich, und andersherum 1 für den 10-Euro-Bereich und die 2 für den 100-er Bereich. Mit anderen Worten legt der Bereich fest, wo wir das Komma ansetzen! 20 Euro entspricht: + 2 1. Auseinandergepflückt: + = positiver Betrag, 2 = Faktor, 1 = Verschiebung der Komma-Stelle um 1 Stelle nach rechts. Da wir auf 1,0 Euro normiert haben, sind wir mit der Komma-Verschiebung im 10-Euro-Bereich, zusammen mit dem Faktor 2 haben wir die 20 Euro. Toll!

50 Cent entspricht + 5 -1. Faktor 5, Komma-Stelle um 1 Position nach links. Wir haben ja auf 1,0 Euro normiert, nach der Komma-Verschiebung sind das 0,1 Euro = 10 Cent, mit dem Faktor 5 kommen wir auf 50 Cent. Das Prinzip sollte klar sein. Es ist das Prinzip der Floating-Point-Zahlen.






Kommentare, Meinungen, Kritiken können ins Forum geschrieben werden - Registrierung ist nicht notwendig Zurück / Back Weiter / Next

Shortcuts
nach oben