Das prinzipielle Verfahren des Quantisierers ist folgendes: Wenn die Signalintensität eines Subbandes unter dessen Maskierung liegt, muß das Signal gar nicht kodiert werden, weil es unhörbar bleibt. Ansonsten werden die Frequenzsamples mit gerade so vielen Bits quantisiert, daß das dadurch eingeführte Quantisierungsrauschen durch die Maskierung gerade noch unhörbar bleibt.
Für jede Gruppe von 3x12 Samples eines Subbandes gibt es einen Wert, der angibt, mit wie vielen Bits Auflösung diese Samples quantisiert werden und bis zu drei Skalierungsfaktoren (höchstens einer für 12 Samples). Die Skalierungsfaktoren werden bei der Dekodierung mit den quantisierten Samples multipliziert, wodurch sich eine Verbesserung der Quantisierungsauflösung ergeben kann. Drei Skalierungsfaktoren pro Block werden nur verwendet, wenn es unbedingt nötig ist, um Verzerrungen des Signals zu vermeiden. Skalierungsfaktoren werden von zwei oder allen drei 12er-Gruppen gemeinsam genutzt wenn: (1) sich die Werte der Skalierungsfaktoren ähnlich genug sind, oder (2) wenn der Kodierer erkennt, daß die zeitliche Maskierung des Gehörs die eingeführten Fehler unhörbar macht.
Es wird eine Iterationsschleife durchlaufen, die Quantisierungsparameter in geordneter Weise variiert, die Samples quantisiert und das dadurch erzeugte Quantisierungsrauschen tatsächlich ausrechnet, um zu prüfen, ob es im unhörbaren Bereich bleibt. Wenn dies nicht der Fall ist, wird für die entsprechenden Subbänder eine feinere Quantisierung gewählt ("noise allocation"). Diese Schleife benötigt den Hauptteil der Rechenzeit beim Quantisierungsprozeß. Außerdem werden die quantisierten Samples zusätzlich Huffman-kodiert, um eine weitere Reduzierung des Speicherbedarfs zu erzielen. Die verwendeten Huffman-Bäume sind statisch.
Für ein Audiosignal, das mit einer Abtastfrequenz von 44,1 kHz aufgezeichnet wurde und durch Kompression auf eine Datenrate von 128 kBit/s reduziert werden soll, ergibt sich pro Datenblock eine Größe von:
1152 (Samples/Block) x 128000 (Bits/s) / 44100 (Samples/s) = 3344 (Bits/Block)
Benötigt ein Block weniger als die diese Anzahl an Bits, so werden die übrigen Bits an das sogenannte "Bit-Reservoir" übergeben. Läßt sich umgekehrt ein Block nicht ohne hörbaren Qualitätsverlust mit der vorgegebenen Blockgröße kodieren, so können Bits aus dem Bit-Reservoir entnommen werden, die zusätzlich zur Kodierung des Blocks verwendet werden. Die Blöcke, die nicht die ganze Blockgröße benötigen, werden mit Daten der nächsten Blöcke aufgefüllt; siehe Bild 8. Es dürfen jedoch zu keiner Zeit mehr Bits entnommen werden als im Bit-Reservoir vorhanden sind.[1]
Ich denke, das lässt keine Fragen offen.
jaybee
[1] http://goethe.ira.uka.de/seminare/redundanz/vortrag14/#quantisierung