Zunächst muß man wissen, daß es sich beim MPEG-Audiocodieren nicht um ein Kompressionsverfahren im eigentlichen Sinne handelt, sondern um eine verlust-
behaftete Codierung (Reduktion). Der Unterschied zwischen Kompression und Reduktion ist, dass bei einer Reduktion wie der des Mp3-Formates, eine Herstellung der Ausgangsdatei nicht mehr möglich ist, da Toninformationen komplett gelöscht werden. Das heißt, der Informationsgehalt wird tatsächlich verringert und läßt sich bei der Decodierung nicht mehr exakt rekonstruieren. Im Gegensatz dazu bleiben bei der Codierung mittels Kompression die Informationen des Audiosignals erhalten und können beim Decodieren wieder vollständig hergestellt werden.
Der Kompressionsvorgang kann in mehrere Schritte eingeteilt werden:
1. Teilung des Audiosignals
Bei der MPEG-Audiokodierung wird zuerst das zu kodierende Audiosignal vom Zeit- in den Frequenzbereich überführt. Während dieses Vorgangs wird es zunächst in 32 Frequenzbänder (Subbands) unterteilt. Bis zum Layer 2 hatten alle 32 Subbänder die gleiche Größe von 625 Hz. Seit dem Layer 3 sind die Subbänder an die Eigenschaften des menschlichen Gehörs angepasst. Hierfür sorgt ein sogenannter polyphaser Filter, sprich es geschieht eine gleichzeitige Verminderung und Filterung der Abtastwerte. Jedes Subband repräsentiert dabei einen bestimmten Ausschnitt des Frequenzspektrums.
Das in Bänder zerlegte Audiosignal bietet dem Algorithmus deutlich mehr Angriffsfläche, als das uniforme Audiosignal. Der MP3-Encoder knöpft sich jedes Subband einzeln vor und untersucht es gemäß dem Psychoakustischen Modell (siehe Psychoakustik weiter unten) auf verzichtbare Frequenzen. In einem ersten Schritt fallen die Subbänder weg, deren Pegel unterhalb dieser Verdeckungsfunktion liegt. Jedes Subband erfährt nun eine Abtastung, deren Resultat 16-Bit-große Samples sind.
Bei der Teilung dieser Samples in kleine Teilbereiche entsteht der nächste Ansatzpunkt zur Datenreduktion. Jedes Sample besteht zwar aus 16 Bit, jedoch sind nicht unbedingt alle 16 nötig, um den Pegel darzustellen. So können beispielsweise die führenden Nullen eines 16-Bit-Samples entfallen. Ergibt sich bei einem Sample der Wert 0000011101010101, so stutzt der Algorithmus das Ergebnis auf 11101010101.
Um aus diesen reduzierten Angaben wieder die originalen 16 Bit rekonstruieren zu können, benötigt der Decoder zwei Angaben: den Skalierungsfaktor sowie die Bit Allocation. Der Skalierungsfaktor gibt an, an welcher Stelle die verbliebenen Bits des Samples sich im ursprünglichen Zustand befunden haben. Die Bit Allocation enthält die Information, wie viele Bits im Sample verblieben sind, da man ja nicht mehr mit einer festen Zahl von 16 Bit rechnen kann. Würde man nun diese Informationen für jedes Sample einzeln ablegen, wäre nicht viel gewonnen. Daher teilen sich je zwölf Samples diese Werte.
2. Kompression Layer III
Bereits Layer 1 und 2 unterteilten in Subbänder, Layer 3 geht jedoch einen Schritt weiter. Da es nämlich bei der in Schritt 1 erwähnten Aufteilung in Zeit- und Frequenzbereich zu einer Überlappung der 32 Subbänder kommen kann, wodurch ein Ton einer festen Frequenz zwei Bänder beeinflussen kann (man spricht hier vom sogenannten \"Aliasing\"-Effekt), erfolgt beim Layer 3 eine modifizierte diskrete Cosinus-Transformation, die sich um die Zeit-/Frequenztransformation kümmert.
Geht es um die Bearbeitung von Sound, lassen sich grundsätzlich zwei Perspektiven unterscheiden. Entweder das Audiosignal wird als eine Serie von Samples betrachtet, die einem analogen Signal entsprechen. Oder die Unterscheidung erfolgt nicht über die Zeit, sondern über die Frequenzen. Je nach Art der gewünschten Manipulation eignet sich die eine oder andere Perspektive besser. Das Mischen von Signalen oder das Erhöhen der Amplitude geschieht leichter in einer zeitorientierten Basis. Frequenzmanipulationen fallen naturgemäß bei der nach Frequenzen aufgeschlüsselten Sichtweise leichter. Um die Daten von einer in die andere Perspektive zu konvertieren, bedient man sich einer speziellen Transformation. Um ein Optimum zwischen Zeit- und Frequenzunterscheidung zu erreichen, bildet Layer 3 zwei verschiedene Blocklängen: eine lange mit 36 Samples und eine kurze mit zwölf Samples. In der Praxis heißt dies: Bei den die niedrigen Frequenzen kommen lange Blöcke zum Einsatz. Die langen Blöcke würden jedoch bei höheren Frequenzen keine ausreichende Auflösung erlauben, hier finden die kurzen Blöcke Verwendung. Im so genannten Mixed Block Mode kommen für die beiden Frequenzbänder mit den niedrigsten Frequenzen lange Blöcke zum Einsatz. Für die 30 verbliebenen Frequenzbänder sind die kurzen Blöcke an der Reihe. Damit erlaubt dieser Modus eine bessere Frequenauflösung bei den niedrigen Frequenzen, ohne eine Tribut an die Abtastrate bei den hohen Frequenzen zu zahlen.
3. Kodierung mittels Huffmann-Verfahren
Als letzter Schritt der Komprimierung erfolgt beim Layer III eine Huffman-Kodierung. Dieser Algorithmus kommt beispielsweise auch bei Packprogrammen wie ZIP zum Einsatz. Bei Huffman ist die Häufigkeit bestimmter Werte entscheidend. Häufig auftauchende Werte erhalten eine kurze Bitfolge, selten auftretende Werte hingegen eine Lange. Daher ermittelt der Algorithmus zunächst die Verteilung der Werte innerhalb der zu komprimierenden Daten.
Um einen sogenannten Huffman-Baum zu ermitteln, beginnt man mit den beiden seltensten Werten. Ihnen wird eine \"0\" beziehungsweise eine \"1\" zugewiesen. Es erfolgt eine Zusammenfassung der beiden Werte, in der Reihenfolge sind sie nun durch die Summe ihrer Häufigkeit repräsentiert. Das gleiche geschieht mit den nächsten beiden seltensten Werten. Dieser Vorgang ist beendet, wenn nur noch ein Wert übrig ist. Das Ergebnis dieser Vorgehensweise ist eine Baumstruktur. Anhand dieser Struktur erfolgt die Kodierung. Jede Verzweigung nach links erhält eine 0, jede Rechtsverzweigung ist durch eine \"1\" gekennzeichnet. In unserem kleinen Beispiel wäre der weniger häufige Wert 4 durch die Bitfolge 010 repräsentiert. Der häufigste Wert 6 bekommt dagegen eine schlichte 1 zugeordnet.
Vor der Huffman-Kodierung steht die Anordnung der Subbänder. Die Frequenz gibt die Reihenfolge der Bänder vor. Die Subbänder mit niedrigeren Frequenzen enthalten üblicherweise deutlich mehr Werte, als diejenigen der hohen Frequenzen, wo in der Regel 0 oder Werte in der Nähe von 0 erscheinen. Der Encoder unterteilt die Subbänder in drei Bereiche. Jeder Bereich erhält einen eigenen Huffman-Baum, um den optimalen Kompressionsfaktor zu erreichen.
Zunächst klammert der Encoder die Frequenzbänder mit den hohen Frequenzen aus, eine Kodierung ist hier nicht notwendig, da sich ihre Größe aus denen der anderen zwei Regionen ableiten lässt. Die zweite Region enthält Frequenzbänder, in denen die Werte von -1 bis 1 häufig auftauchen. Der dritte Bereich enthält alle verbleibenden Werte und wird ein weiteres Mal in drei Regionen unterteilt, von denen jede einen eigenen Huffman-Baum zugewiesen bekommt. Welcher Huffman-Baum zum Einsatz kommt, wird innerhalb der MP3-Datei abgelegt.
|