5 Bild 5.1 Der CD-Player Mikroskopische Aufnahme der Oberfläche einer CD (© Kenneth M. Bart) Die Musik-CD hat in einem Siegeszug in den 1980er-Jahren den Plattenspieler verdrängt und ist heute überall verbreitet. Die CD bietet eine sehr gute Musikqualität, und die CDPlayer sind preiswert. Damit dieses System funktionieren konnte, musste eine Vielzahl von Problemen durch Ingenieure gelöst werden. Das erste grundsätzliche Problem, das geklärt werden musste, war, wie viel Musik auf eine CD passen sollte. Da das System neu war, konnte man diesen Parameter festlegen. Der Grund, warum man sich auf 74 min und 33 s geeinigt hat, war folgender: Es sollte mindestens Beethovens neunte Symphonie „Alle Menschen werden Brüder“ [17] auf eine CD passen. Da Ingenieure sorgfältig sind, hat man die Ausführungsdauer verschiedener Dirigenten gemessen. Herbert von Karajan brauchte nur 52 min, dagegen benötigte Wilhelm Furtwängler für diese Symphonie im Jahr 1951 bei den Bayreuther Festspielen über 70 min. Auf der spiegelnden Seite der CD befinden sich Löcher und Nichtlöcher, welche die binären Daten repräsentieren. Die spiralförmige Spur der Daten besitzt eine Länge von 5,38 km und wird von einem Laserstrahl mit 4,8 km h gelesen, was ungefähr Schrittgeschwindigkeit entspricht. Man kann sich vorstellen, dass es außer der Kapazitätsfrage auch eine Menge tech- 118 5 Der CD-Player nischer Probleme gab, die zu lösen waren. Neben den Fortschritten in der Mikroelektronik waren vor allem mathematische Methoden und Verfahren wichtig, um dieses technische Meisterwerk zu kreieren. Von der großen Menge an Mathematik, die im CD-Player enthalten ist, wollen wir hier die Methode der Fehlerkorrektur herausgreifen und beschreiben. Dabei wird die Zahlentheorie im Vordergrund stehen, die das Rechnen mit ganzen Zahlen zum Inhalt hat. Wir benötigen hier das Teilen ganzer Zahlen mit Rest. Der Einsatz von Verfahren zur Fehlerkorrektur bei der Musik-CD ermöglicht, dass Kratzer (bis zu einem gewissen Ausmaß) nicht hörbar sind. Das Konzept besteht darin, der Information Redundanz anzufügen, die benutzt werden kann, um Fehler zu erkennen und zu korrigieren. Wir können uns die Fehlerkorrektur am Beispiel unserer Sprache verdeutlichen, die viel Redundanz enthält und somit Fehlerkorrektur ermöglicht. So wird jeder das Wort „Infarmatiom“ als „Information“ mit zwei Fehlern korrigieren, indem er das Wort „Infarmatiom“ mit allen gültigen Wörtern, dem Codebuch, vergleicht. Man nimmt dabei an, dass weniger Fehler wahrscheinlicher sind als viele. Nimmt man an, es seien drei Fehler aufgetreten, so kann man „Infarmatiom“ auch zu dem Wort „Inkarnation“ korrigieren. Wenn man alle außer einem Buchstaben als fehlerhaft annimmt, kann man zu sehr vielen gültigen Wörtern korrigieren, und dies ist nicht mehr eindeutig. Die Worte „Aufstellung“ und „Abfalleimer“ sind zwei mögliche Lösungen, die nur einen bzw. zwei Buchstaben mit „Infarmatiom“ gemeinsam haben. In Analogie zum Vorgehen bei der deutschen Sprache kann man sich ein technisches Verfahren ausdenken, das ein gegebenes Wort mit allen gültigen Codewörtern vergleicht und das wahrscheinlichste, in der Regel das mit den wenigsten Fehlern, aussucht. Wie dies im Detail funktioniert, soll hier beschrieben werden. Anmerkung zum Lesen: Dieses Kapitel ist in zwei mathematische Niveaus gegliedert. Die Abschnitte 5.1 bis 5.3 beschreiben die mathematischen Grundlagen und die Verfahren zur Fehlerkorrektur anhand vieler Beispiele, jedoch überwiegend ohne Beweise. Für Leser, die eine etwas höhere abstrakte mathematische Denkweise mögen, wiederholen die Abschnitte 5.4 bis 5.5 die gleichen Verfahren allgemeiner, und es werden zusätzlich interessante Sätze und deren Beweise angegeben. Besonders empfehlenswert für diese Lesergruppe ist die elegante Lösung der Fehlerkorrektur durch Anwendung des euklidischen Algorithmus in Abschnitt 5.5.2. Dieser wird in Abschnitt 5.4.2 in üblicher und in erweiterter Form beschrieben. Der euklidische Algorithmus für sich selbst betrachtet ist ein Verfahren, das zur Lösung vieler Probleme einsetzbar ist. 5.1 Problemstellung Ursprünglich gab es ein Problem bei dem Herstellungsverfahren von CDs, denn die Ausbeute bei der Fertigung war zu gering. Da die Produktion nicht gut genug war, entstanden zufällige Fehler in den Daten auf der CD, die damit Ausschuss wurde und nicht funktioniert hat. Jeder kennt das Problem, dass es schlecht gebrannte CDs gibt, die nicht mehr lesbar oder abspielbar sind. Deshalb hat man sich entschlossen Fehlerkorrektur einzusetzen, die die Fehler bei der Fertigung korrigieren kann. Als Nebeneffekt werden nun neben den Fertigungsfehlern auch Fehler, die durch Kratzer oder Schmutz entstehen, korrigiert. 5.1 Problemstellung 119 Betrachten wir zunächst, wie Musik digitalisiert wird. Entsprechend Abschnitt 4.1 wandelt ein Mikrofon den Schall in ein elektrisches Signal um, das gespeichert werden muss. Im Fall der Musik-CD misst man 44 100 Mal pro Sekunde den Wert dieses Signals und speichert diese Abtastwerte in binärer Form, d. h. als Dualzahl ab. Bei der Musik-CD besteht jeder abgetastete Wert aus 16 bit. Also entstehen 16 · 44 100 = 705 600 bit/s pro Stereokanal. Die Anzahl der Quantisierungsstufen, die man entsprechend Abschnitt 4.1 nummerieren kann, ist mit 216 = 65 536 sehr groß. Damit kann die Musik von sehr leise bis extrem laut in sehr feinen Stufen aufgelöst werden1 . In Bild 5.2 ist ein Blockschaltbild angegeben, das den ganzen Vorgang, von der Musik bis zur Erzeugung der binären Daten und zurück, darstellt. Man erkennt links oben die Abtastung des elektrischen Musiksignals durch den AD-Umsetzer. Dieser Block wird als Quellcodierung bezeichnet. Linear quantisiert bedeutet dabei, dass die Quantisierungsstufen der Abtastung entsprechend Abschnitt 4.1 gleich groß C&D-Bit (Titel, Länge, ...) AD-Umsetzer Abtastrate 44,1 kHz 16 bit linear quantisiert Cross-Interleaved Reed-SolomonCodierer R = 34 Quellcodierung Kanalcodierung EFM rechter Kanal „eight to fourteen linker Kanal modulation“ + 3 merging bit + Synchronisation 1 Mbit/s 4,32 Mbit/s Störung Master Disc Vervielfältigung berührungsfreies Lesen Compact Disc linker Kanal Signalverarbeitung Interpolation DA-Umsetzer Decodierer Fehlerkorrektur Fehlererkennung Demodulation C&D-Bit Bild 5.2 1 Speicherung der Bits auf der CD Als die ersten CD-Player auf den Markt kamen, gingen durch Joseph Haydns Symphonie Nr. 94 „mit dem Paukenschlag“ [18] etliche Lautsprecher kaputt, und zwar genau durch den Paukenschlag. Mit den Werten der Abtastung kann extrem schnell zwischen leise und laut geschaltet werden, was für viele Lautsprecher zu schnell war. 120 5 Der CD-Player sind. Das abgetastete Signal wird dann dem Block Kanalcodierung zugeführt, in dem mit einem sog. Reed-Solomon-Codierer Redundanz zugefügt wird. Dies ist der Gegenstand dieses Kapitels, d. h.: Wir werden die Codierung und Decodierung von Reed-Solomon-Codes beschreiben. Nach der Codierung kommen zusätzliche Bits hinzu, was im Block oben rechts in Bild 5.2 skizziert ist. Zum einen die gleiche Menge Bits vom anderen Stereokanal und zum anderen die sog. C&D-Bits, die die Informationen zum Musiktitel, der Länge des Musikstücks etc. enthalten. Die „eight to fourteen modulation“ dient zur Vermeidung von zu langen Null- oder Eins-Folgen in den Daten. Dies wird erreicht, indem man einen Block von 8 bit auf einen Block von 14 bit abbildet, der eben nicht aus lauter Nullen bzw. Einsen besteht. Entsprechend der Mikroskopaufnahme in Bild 5.1 würde eine zu lange Folge von Nullen bedeuten, dass man sehr lange kein Loch (pit) hat. Dies hätte zur Konsequenz, dass die Synchronisation des Laserstrahls, d. h. den Laserstrahl exakt auf der Spur zu halten, nicht mehr so gut funktionieren würde. Diese Synchronisation basiert nämlich auf der Änderungen zwischen Loch (pit) und Nichtloch. Da es sich bei den pits um Dimensionen im Mikrometerbereich1 handelt, ist klar, dass ein Kratzer oder Schmutz die gespeicherten Daten ebenso verfälschen kann, wie Probleme beim Herstellungsverfahren, was durch den mittleren Block rechts in Bild 5.2 angedeutet ist. Insgesamt werden 4 320 000 bit/s (= 4,32 Mbit/s) benötigt, um die Musikqualität der CD sicherzustellen. Die unteren drei Blöcke in Bild 5.2 stellen die Wiedergabe der Musik dar. Zunächst wird im Block Demodulation die „eight to fourteen modulation“ rückgängig gemacht, indem einem Block aus 14 bit der entsprechende Block von 8 bit zugewiesen wird. Dann werden die Bits nach Stereokanälen und C&D-Bits getrennt. Anschließend ist der Reed-Solomon-Decodierer-Block gezeichnet, der evtl. aufgetretene Fehler korrigiert und erkennt und die korrigierten Daten weitergibt. Im DA-Umsetzer wird aus dem digitalen Signal wieder ein analoges Signal erzeugt, das dann verstärkt auf einen Lautsprecher gegeben wird. Die Problemstellung lautet demnach, wie kann man Fehler in den Daten korrigieren? Dazu werden wir Reed-Solomon-Codes beschreiben, jedoch zunächst die notwendigen mathematischen Grundlagen dafür einführen. Problemstellung Wie kann man Fehler in Daten korrigieren? 5.2 Elementare mathematische Grundlagen Für die Fehlerkorrektur mit Reed-Solomon-(RS-)Codes benötigen wir nur das Rechnen mit ganzen Zahlen. Dazu werden wir als erstes die Modulo-Rechnung einführen. Basis dafür ist das Teilen ganzer Zahlen mit Rest. Wir werden als Teiler Primzahlen verwenden und damit Primkörper definieren, in denen wir dann rechnen können. Die Eigenschaften eines 1 1 μm = 0,000 001 m 5.2 Elementare mathematische Grundlagen 121 Primkörpers sind so geartet, dass wir die gewohnten Grundrechenarten Addition, Subtraktion, Multiplikation und Division benutzen können. Der Vorteil beim Rechnen in einem Primkörper ist, dass er nur endlich viele Elemente besitzt, weshalb er auch als endlicher Körper bezeichnet wird. Danach werden wir Polynome in einer Variablen über Primkörpern definieren. Die Variable kann dabei auch nur die endlich vielen Werte aus dem Körper annehmen. Zum Schluss besprechen wir noch den Fundamentalsatz der Algebra bei endlichen Körpern, der eine Schlüsselrolle bei der Definition von RS-Codes spielen wird. Außerdem werden wir Pierre de Fermats kleinen Satz erörtern, dessen Aussage zu einem speziellen Polynom führt. Es sei darauf hingewiesen, dass in diesem Kapitel in Abschnitt 5.4 noch weitere mathematische Grundlagen eingeführt werden, um die Decodierung nochmals etwas abstrakter zu beschreiben. 5.2.1 Modulo-Rechnung bei ganzen Zahlen „Die ganzen Zahlen hat der liebe Gott gemacht, alles andere ist Menschenwerk.“ Leopold Kronecker, berühmter deutscher Mathematiker, 1823–1891 [19] Die Menge der ganzen Zahlen sei Z = {r, –2, –1, 0, 1, 2, r}. Setzen wir voraus, dass wir nur ganze Zahlen kennen, so können wir eine Division einführen, deren Ergebnis zwei ganze Zahlen liefert, nämlich ein Divisionsergebnis und einen Rest, der eine ganze Zahl kleiner als der Teiler ist. Für alle ganzen Zahlen a, b ∈ Z existiert ein Divisionsergebnis q ∈ Z und ein Rest r ∈ Z mit 0 o r < b, sodass gilt: a = b·q+r ←→ a : b = q Rest r. Bei der Modulo-Rechnung steht der Rest r im Mittelpunkt und der Quotient q ist zweitrangig. Im Prinzip führt jeder von uns täglich Modulo-Rechnung durch, indem er die Wochentage benennt. Es ist klar, dass wenn heute Sonntag ist, in sieben Tagen wieder Sonntag sein wird. Es wird auch in 14, 21, 28, r, also in j ·7, j ∈ N Tagen wieder Sonntag sein. Genauso war vor –7 Tagen Sonntag und vor –14, –21, r auch. Allgemein sind alle Tage j · 7, j ∈ Z Sonntage. Definition 5.1 Modulo-Rechnung Seien a, b, q, r ∈ Z und b n 0. Die Modulo-Rechnung a mod b besitzt als Ergebnis den Rest r. Folgende Notationen beschreiben das Teilen ganzer Zahlen mit Rest einer Zahl a durch b. a:b = a = a≡ b | q Rest r b·q+r r mod b a–r sprich: a kongruent r Modulo b b teilt (a – r). Falls der Rest r = 0 ist, so teilt b die Zahl a, und man schreibt b|a. Wir werden im Folgenden statt ≡ das Gleichheitszeichen = verwenden. 122 5 Der CD-Player Beispiel 5.2 Modulo-Rechnung Wir wollen einige Zahlenbeispiele zur Teilung ganzer Zahlen mit Rest ausführen: 17 : 5 = 3 Rest 2 −→ Rest, d. h. 5|15. 17 = 2 mod 5, offensichtlich teilt 5 die Differenz 17 – 2 = 15 ohne 29 : 7 = 4 Rest 1 −→ Rest teilt, also 7|28. 29 = 1 mod 7, auch hier gilt, dass 7 die Differenz 29 – 1 = 28 ohne 113 : 11 = 10 Rest 3 −→ 113 = 3 mod 11, erneut können wir sagen, dass 11 die Differenz 113 – 3 = 110 ohne Rest teilt, denn 110 = 10 · 11. 42:113 = 0 Rest 42 −→ ♦ 42 = 42 mod 113. Eine Besonderheit der Modulo-Rechnung ist, dass eine ganze Klasse von Zahlen das gleiche Ergebnis mod b liefert: a = c mod b −→ ∀i∈Z : a + i · b = c mod b, wobei (∀i∈Z :) bedeutet: Für alle ganzen Zahlen i gilt. Beispiel 5.3 Zahlen, die Modulo gerechnet das gleiche Ergebnis liefern Wir suchen alle Zahlen, die mod 7 gerechnet das Ergebnis 4 liefern. Einige Beispiele sind: 18 = 4 mod 7, 25 = 4 mod 7, 11 = 4 mod 7 usw. Wir können also zu der Zahl 4 Vielfache von 7 addieren und erhalten so alle Zahlen, die das gewünschte Ergebnis 4 ergeben: {r, –17, –10, –3, 4, 11, 18, 25, 32, r} = 4 mod 7 −→ {4 + j · 7, j ∈ Z} = 4 mod 7. ♦ Jetzt wollen wir an einem Beispiel untersuchen, wie die Modulo-Rechnung bei Summen und Produkten funktioniert. Beispiel 5.4 Modulo-Rechnung bei Summen und Produkten Betrachten wir zunächst eine Addition bei der mod-7-Rechnung. Wir errechnen 25 + 76 = 101 = 3 mod 7, wobei wir 101 durch 7 teilen müssen und den Rest bestimmen. Rechnen wir dagegen erst 25 = 4 mod 7 und 76 = 6 mod 7, addieren die Ergebnisse 4 + 6 = 10 und rechnen dies mod 7, so erhalten wir ebenfalls 3. Dass diese beiden Rechenwege immer zum gleichen Ergebnis führen, werden wir später zeigen. Berechnen wir das Produkt 44 · 78 = 3 432 = 2 mod 7, indem wir erst multiplizieren, müssen wir 3 432 durch 7 teilen und den Rest bestimmen. Viel einfacher dagegen ist es erst 44 = 2 mod 7 und 78 = 1 mod 7 zu berechnen, und dann die Ergebnisse zu multiplizieren. In diesem Fall ist man auch schon fertig, da das Produkt bereits kleiner als 7 ist, 2 · 1 = 2 mod 7. Auch hierfür werden wir zeigen, dass die beiden Rechenwege immer zum gleichen Ergebnis führen. ♦ 5.2 Elementare mathematische Grundlagen 123 Die Modulo-Rechnung kann bei Additionen bei den Summanden oder bei Multiplikationen bei den Faktoren durchgeführt werden, ohne dass sich das Ergebnis ändert. Dies vereinfacht das Modulo-Rechnen erheblich und wird im Folgenden gezeigt. Für die zwei Zahlen a, b ∈ Z gelte: a = qa c + ra und b = qb c + rb , anders ausgedrückt ist a = ra mod c und b = rb mod c. Die Addition von ra und rb habe als Ergebnis d, d. h. ra + rb = d mod c. Die Addition von Vielfachen von c ändert das Ergebnis nicht. Also können wir schreiben ra + rb + j · c = d mod c. Wählen wir j = qa + qb , so ergibt sich d = ra + rb + j · c = ra + rb + (qa + qb )c = ra + qa · c + rb + qb · c = a + b mod c. Für die Multiplikation von a und b kann man schreiben: a · b = (qa c + ra ) · (qb c + rb ) = qa qb cc + qa rb c + qb ra c + ra rb = ra rb mod c. Wir haben damit gezeigt, dass gilt: (a + b) mod c = (a mod c + b mod c) mod c (a · b) mod c = [(a mod c) · (b mod c)] mod c. Eine Anwendung dieser Regeln wollen wir benutzen, um den folgenden Satz zu beweisen. Satz 5.5 Teilbarkeit einer Zahl durch 9 Eine ganze Zahl a ist durch 9 teilbar, wenn ihre Quersumme durch 9 teilbar ist. Beweis Eine (s + 1)-stellige Dezimalzahl a kann durch ihre Ziffern wie folgt beschrieben werden a = a0 · 100 + a1 · 101 + r + as · 10s , mit ai ∈ {0, 1, 2, 3, r, 9}. Nun brauchen wir nur beide Seiten Modulo 9 zu rechnen und sehen, dass gilt 10 = 1 mod 9, 100 = 1 mod 9, 1 000 = 1 mod 9 usw. Damit erhalten wir a mod 9 = (a0 +a1 +a2 +r+as ) mod 9, wobei rechts genau die Quersumme steht. Wenn die Quersumme gleich 0 mod 9 ist, ist auch die Zahl gleich 0 mod 9, d. h. durch 9 teilbar. Nun wollen wir noch Primzahlen einführen, da sie eine wichtige Rolle bei den RS-Codes spielen werden. 124 5 Der CD-Player Definition 5.6 Primzahl Eine Zahl p ∈ Z, p > 1, die nur durch 1 und sich selbst teilbar ist, heißt Primzahl. Die Zahl 2 erfüllt die Definition einer Primzahl und ist die einzige gerade Primzahl. Bereits Euklid hat bewiesen, dass es unendlich viele Primzahlen gibt. Dass eine Primzahl die herausragende Eigenschaft besitzt, keinen Teiler außer die 1 und sich selbst zu haben, werden wir im folgenden Abschnitt ausnutzen. 5.2.2 Primkörper, Galoisfeld GF(p) Wir erhalten einen Primkörper, wenn wir ganze Zahlen addieren und multiplizieren, jedoch alle Operationen Modulo einer Primzahl p, also mod p durchführen. In der Mathematik bezeichnet der Begriff Körper eine Menge von Elementen mit zwei Rechenoperationen und bestimmten Eigenschaften für das Rechnen. Wir werden sehen, dass wenn man in einem Primkörper rechnet, das Leben sehr einfach ist. Man bezeichnet einen Primkörper auch als Galoisfeld1 GF(p). Offensichtlich treten als Ergebnisse bei der Addition und der Multiplikation nur Zahlen aus der Menge {0, 1, 2, r, p – 1} auf, da der Rest beim Teilen durch p immer echt kleiner als p ist. Definition 5.7 Primkörper, Galoisfeld GF(p) Sei p eine Primzahl. Ein Primkörper besteht aus den Elementen GF(p) = {0, 1, 2, r, p – 1}, sowie der Addition und der Multiplikation der Elemente a, b ∈ GF(p) Modulo p, d. h. a + b mod p und a · b mod p ∀a∈Z : a = b mod p, b ∈ {0, 1, 2, r, p – 1}. (5.1) Die Eigenschaften eines Primkörpers sind in Tabelle 5.1 zusammengefasst. Beispiel 5.8 Primkörper GF(5) Der Primkörper mit p = 5 ist: GF(5) = {0, 1, 2, 3, 4}. Die Multiplikation von Zahlen: 3 · 4 = 12 = 2 mod 5. Die Addition von Zahlen: 5 + 6 = 11 = 1 mod 5. Eine gemischte Rechnung: (2 + 6) · (5 + 6) = 3 · 1 = 3 mod 5. 1 ♦ Die Theorie wurde begründet durch den Mathematiker Évariste Galois. Eine Legende besagt, dass er 1832 im Alter von 20 Jahren bei einem Duell wegen einer jungen Dame starb, jedoch am Abend vorher noch seine mathematischen Gedanken aufgeschrieben und einem Freund gegeben hat.