Zusammenfassung zu Codierungstheorie Proseminar Mathematische Modelle in den Naturwissenschaften WS 09/10 Thomas Holzer 0755600 Sandra Sampl 0755049 Kathrin Oberradter 0755123 1
Inhaltsverzeichnis 1. Einführung 1.1. Das Problem der Codierungstheorie 1.2. Grundlagen 1.3. Hamming- Distanz und Gewicht 2. Lineare Codes 2.1. Einführung linearer Codes 2.2. Duale Codes 3. Pseudorationale Codes 3.1. Gewichtsverteilung pseudorationaler Codes 4. Perfekte Codes 4.1. Hamming Codes 5. Hadamard Matrizen 2
GRUNDLAGEN Die Codierungstheorie befasst sich mit der Übertragung von Information über fehlerbehaftete Kanäle und ist ein Teilgebiet der Informationstheorie. Die Informationstheorie beschäftigt sich mit dem Messen von Information der Darstellung von Information und der Leistungsfähigkeit von Kommunikationssystemen bei der Informationsübertragung und -verarbeitung. Ein weiteres wichtiges Gebiet der Informationstheorie ist die Kryptographie, das oft mit Codierungstheorie verwechselt wird. Die Kryptographie behandelt Methoden und Verfahren zur Realisierung eines vertraulichen Austausches von Information über einen offenen nicht abhörsicheren Kanal. 1.1. Das Problem der Codierungstheorie Die Codierungstheorie ist eine junge mathematische Theorie und ist in den 40er Jahren entstanden. Ihre Problemstellung stammt aus der Nachrichtenübermittlung: Das Übertragen von (binären) Informationen über Telefonleitungen, Funk oder Satelliten verläuft oft nicht ungestört. Weil diese Informationen durch äußere Einflüsse wie beispielsweise schlechtes Wetter und Blitzeinschläge möglicherweise zerstört bzw. verändert werden. Ebenfalls fehleranfällig ist das Auslesen von Speichermedien, da viele Bits durch hohe Auslesegeschwindigkeit oder auch diversen Verunreinigungen der Disketten verloren gehen können. Abhilfe dagegen verschafft man sich durch Einbau von Redundanzen, die ein oder mehrere Fehler auffangen können. Eine Möglichkeit wäre, den Text zum Beispiel mehrfach hintereinander zu senden, damit der Empfänger durch Vergleich der einzelnen Versionen auf die ursprüngliche schließen kann. Das Erweitern der Information mit Redundanzen nennt man Codierung, die Rückübersetzung der empfangenen Nachricht in den Klartext Decodierung. Beispielsweise kann man jedem Buchstaben des deutschen Alphabets einen binären 5- Tupel zuordnen A -> 00000,B -> 00001,C -> 00010,.... Beim Hinzufügen eines sechsten Bit als Quersumme, lässt sich beim Empfang überprüfen, ob während der Übertragung ein Bit des Buchstabens verändert wurde. Es bezeichne A ein Alphabet, das wir ohne Einschränkung als Teilmenge eines endlichen Körpers betrachten können. Die k-tupel (a1,..., ak) von Buchstaben aus A nennen wir Codewörter oder Blöcke, die Menge aller Codewörter bezeichnen wir mit B Ein Code oder Codierer der Länge n ist eine injektive Abbildung von B auf C = C(B) 3
Wir werden einen Code C je nach Bedarf als injektive Abbildung oder als Bildmenge dieser betrachten. Zu jedem Code gibt es einen Decodierer mit 1.2 Grundlagen Definition 1.3 Ein Code der Länge n über dem Alphabet ist eine Menge von n-tupeln aus. Meist benutzen wir und dann sagt man, C ist ein Code über q. Codes über 2 und 3 heißen binäre und ternäre Codes. Beispiel 1.4 1. Die Deutsche Sprache. Ein erstes Beispiel Laut einer Sutide an eeinr enhsegciln Utvriesänit ist es egal, in wlhecer Rloheegifne die Buctbeashn in eniem Wrot snid. Das eizing Wtchigie ist, dsas der etsre und der lettze Btasbhcue am rtgihcein Pltaz snid. Der Rset knan toatl decaindnurher sien, und man kann es iemmr ncoh onhe Plroembe lesen. Das legit daarn, dass wir nchit jeedn Bhubcsetan aellin leesn, serondn das Wrot als Gnezas. Ein zweites Beispiel Ex wax eixmal exn kxeinex süxes xädcxen, dxs hxtte jxdexmanx lxeb, dex sxe xur axsah, ax alxerlxebstxn abxr ihrx xro_mxttex, dix wx_te gax nixht, wxs six axles dxm Kxnde gxben sxlltx. Eixmal xchenxte sxe xhm xin Kxppchex vox rotxm Sxmt, uxd wexl ixm dax so wxhl staxd, uxd ex nxchtx anxers mexr trxgen xollte, xie_ ex nur xas Rxtkäpxchen. 2. Ein Code C mit M Wörtern der Länge n kann als (M x n)-matrix geschrieben werden, deren Zeilen die Codewörter sind. Zum Beispiel ist der binäre Repetitionscode der Länge 3 dargestellt durch 3. Sei ein binärer Code der Länge 2. Wir fügen redundante Information hinzu, um Fehler aufdecken zu können: 4
ist 1-Fehler erkennend, da der erhaltene Vektor kein Codewort ist, wenn ein Fehler auftritt. Zum Korrigieren eines Fehlers brauchen wir mehr Information: ist 1-Fehler korrigierend. Er deckt außerdem zwei Fehler auf. Ist ein Code C eine Teilmenge eines Vektorraums V, so benutzen wir eine Abstandsfunktion in V zum Aufdecken und Korrigieren von Fehlern. Haben je zwei Codewörter den Abstand 2t + 1, so wird ein empfangener Vektor im Abstand t von einem Codewort als dies Codewort decodiert. Sonst wird um Wiederholung der Übertragung gebeten. Dies nennt man Minimaldistanzdecodierung oder Hamming- Decodierung. Sie maximiert die Wahrscheinlichkeit, Fehler zu korrigieren, falls der Kanal folgende Eigenschaften hat: Jedes Symbol hat dieselbe Wahrscheinlichkeit p, geändert zu werden. Wird ein Symbol verändert, so ist die Wahrscheinlichkeit für jeden der q-1 Fehler gleich groß. Beispiel 1.5 Sei C der binäre Repetitionscode der Länge 3. Das Codewort (0; 0; 0) werde über einen binären symmetrischen Kanal mit Symbolfehlerwahrscheinlichkeit p geschickt. Die Vektoren (0; 0; 0), (0; 0; 1), (0; 1; 0) und (1; 0; 0) werden als (0; 0; 0) decodiert. Also ist die Wortfehlerwahrscheinlichkeit von C gleich 1.3. Hamming-Distanz und Gewicht Definition 1.6 Die Hamming-Distanz d(x; y) zwischen zwei Vektoren x = (x1,.., xn), y =(y1,., yn) ist die Anzahl der Man definiert die Minimaldistanz von C als Lemma 1.7 Die Hamming-Distanz ist eine Metrik. Beweis. d(x; y) ist die Minimalzahl der Änderungen von Koordinaten, die man an x vornehmen muss, um y zu erhalten. Ändert man x erst zu z und dann z zu y, so sind dies mindestens so viele Schritte wie bei der direkten Änderung von x zu y. Satz 1.8 Es sei C ein Code. Dann gilt: (i) Ist d(c) t + 1, dann deckt C bis zu t Fehler in einem Wort auf. 5
(ii) Ist d(c) 2t + 1, dann korrigiert C bis zu t Fehler in einem Wort. Beweis. Es seien x der gesendete und y der empfangene Vektor. (i) Wegen d(x,y) t d(c) kann y kein gültiges Codewort sein, falls ein Fehler passiert ist, somit wird jeder Fehler t erkannt. (ii) d(x,y) t, dann gilt für alle anderen Codewörter d(x,z) 2t + 1 t = t + 1 > t d(x,y) y kann richtig zu x zugeordnet werden. (iii) Wegen d(x,y) d(c) e 1 d(c) - e kann y nicht im Fehlerkorrekturradius um ein anderes Codewort als x sein y wird zu x korrigiert, falls d(x,y) e, sonst Fehlermeldung. Bemerkung 1.9 Der Fehlerkorrekturradius ist im Bereich 0,...emax frei wählbar und hat großen Einfluss auf das Fehlererkennungsverhalten. So kann man zb: bei einem Code mit d(c)=5 2 Fehler korrigieren, allerdings werden dann schon 3 Fehler falsch korrigiert. Man kann aber auch keine Fehler korrigieren, dafür aber bis zu 4 Fehler erkennen. (Und falls möglich, durch den Informationskanal neu anfordern) Definition 1.10 Ist C ein Code der Länge n mit M Wörtern und Minimaldistanz d, dann wird C als (n,m,d)-code bezeichnet. Definition 1.11 Für x = (x1,., xn) ist das Gewicht w(x) die Anzahl der Elemente 0 in (x1,. xn). Lemma 1.12 Beispiel 1.8 (Beispiel 1.4 fortgesetzt) 2. Lineare Codes 2.1. Einführung linearer Codes Allgemeine Codes C sind meist unübersichtlich und im Allgemeinen schwierig zu codieren bzw. zu decodieren. Besser wird es mit einer zusätzlichen Vektorraumstruktur. Definition 2.1. (Linearer Code, Gewicht von Codewörtern) Einen Code C nennen wir linear, falls C ein Untervektorraum von ist. Lineare Codes in der Dimension k bezeichnen wir als [n, k] q Code bzw. als [n, k, d] q Code, wenn d die Minimaldistanz des Codes ist. Für ein Codewort x heißt die natürliche Zahl C 6
das Gewicht (bzw. die Hamming-Norm) von x. Bemerkung 2.2. Für einen linearen Code C gelten: (a) Der Hamming-Abstand zweier Codewörter x, y aus C ist identisch mit dem Gewicht ihrer Differenz, d.h. es gilt d(x, y) = w(x y). (b) Die Minimaldistanz von C entspricht den minimalem Gewicht nichtverschwindender Codewörter aus C, d.h. es ist d(c) = min{w(x) : 0 x C}. Beweis. Man beachte, dass lineare Codes stets die Differenz ihrer Codewörter sowie auch das Nullwort 0 = (0,..., 0) enthalten. Daher folgen die Aussagen (a) und (b) aus d(x, y) = d(x y, 0) = w(x y) für x, y C. Als Codierer eines linearen Codes dient die sogenannte Erzeugermatrix. Dazu die Definition 2.4. (Erzeugermatrix, Symmetriegruppe) Es sei C ein [n, k] q Code mit Basis x 1 = (x 11,..., x 1n ), x 2,..., x k heißt die k n Matrix. Dann eine Erzeuger- bzw. eine Generatormatrix von C. Eine Erzeugermatrix G von C nennen wir reduziert, falls G die Gestalt mit hat. Dann sagen wir auch, dass G in Standardform vorliegt. Zwei Codes C, aus heißen äquivalent, wenn es eine Permutation von n Elementen gibt, sodass gilt: Ist C =, so nennen wir eine Symmetrie von C. Die Menge aller Symmetrien des Codes C Sym(C):= { S n : ist Symmetrie von C} heißt Symmetriegruppe von C. Anmerkung 2.5 (a) Betrachtet man eine Erzeugermatrix G eines Codes C als lineare Abbildung von, so ist C das Bild von unter G, d.h es gilt 7
Offensichtlich ist G injektiv und dient somit als Codierer von C. (b) Ist G in Standardform, so bilden die ersten k Koordinaten x 1,..., x k eines Codewortes x die Informationssymbole (information symbols) und die letzten n-k Koordinaten x k+1,..., x n die Kontrollsymbole (parity check symbols) von x. Bemerkung 2.6. Zu jedem linearen Code gibt es einen äquivalenten Code mit reduzierter Erzeugermatrix. 3. Pseudorationale Codes 3.1. Gewichtsverteilung pseudorationaler Codes Die einfachste obere Schranke für die Distanz eines Codes ist die Singleton-Schranke. Satz 3.1. (Singleton - Schranke) Für einen Code C über der Länge n und Minimaldistanz d gelten: (a) Die Anzahl der Codewörter ist durch beschränkt. (b) Ist C ein linearer Code der Dimension k, so gilt die Abschätzung 8
Beweis: Zum Beweis genügt die Feststellung, dass sich zwei Codewörter aus C notwendigerweise schon in den ersten n-(d-1) Komponenten unterscheiden. Also ist die Anzahl aller Codewörter durch beschränkt. Definition 3.2. (Pseudorationaler Code, Singletondefekt) Ein Code C heißt pseudorational, falls die Anzahl seiner Codewörter die Singleton- Schranke annimmt oder C = {0} gilt. Es gilt dann c = qn d+1 für einen (n, c, d) q Code C {0} bzw. d = n k + 1, falls C linear mit den Parametern [n, k, d] q ist. Pseudorationale Codes heißen auch MDS Codes (= maximum distance separable). Bei einem linearen Code C nennen wir die Differenz zwischen n k+1 und d Singletondefekt oder auch Pseudogeschlecht von C. Beispiel und Definiton 3.3. Die Singleton-Schranke ist für alle Codewortlängen n scharf. Die n-fachen Wiederholungscodes, die Parity-Check-Codes sowie der gesamte Raum geben Beispiele für pseudorationale Codes (vgl. 2.7). Zusammen mit dem Nullcode {0} nennen wir diese Typen von Codes, d.h. pseudorationale Codes der Länge n und Dimension 0, 1, n 1 oder n, auch triviale Codes. Beispiel 3.4. Für die Konstruktion eines nichttrivialen pseudorationalen Code der Länge q + 2 betrachten wir den Fall q = 4. Es sei = {0, 1, a, b}. Die Matrix ist dann Erzeugermatrix eines [6, 3, 4] 4 bzw. Kontrollmatrix eines [6, 4, 3] 4 Codes, da jeweils drei Spalten der Matrix linear unabhängig sind. Dieser Code wird auch Hexacode genannt. 3.2 Reed-Solomon-Codes Die Klasse der Reed-Solomon-Codes ist die wichtigste und meistverwandte Klasse von (pseudorationalen) Codes. Zum Beispiel werden diese Codes in variierter Form als sogenannte CIRC - Codes bei Audio und Compact Discs verwendet. Definition 3.5. (Reed-Solomon-Code) 9
Bemerkung 3.6 (Parameter und Erzeugermatrix von 10
4. Perfekte Codes 4.1. Hamming-Codes Definition 4.1. (Perfekter Code) Ein Code C mit ungerader Minimaldistanz d(c) = 2e(C) + 1 heißt perfekt, falls es zu jedem Element y genau ein Codewort x C mit Abstand d(x, y) e(c) gibt. Für y definiert eine Kugel vom Radius r um y. Einfache Beispiele perfekter Codes liefern die binären n-fachen Wiederholungscodes mit ungerader Länge n = 2m + 1. Solche [n, 1, n]2 Codes besitzen den Fehlerkorrekturparameter m. Definition 4.2. (Hamming-Code) Es seien k > 1 eine natürliche Zahl und. Ein linearer [n, n k] q Code C heißt Hamming-Code Ham[n, n k] q, falls d(c)=3 ist. 11
#C=q^(n-k) -> Hamming-Code ist perfekter Code 5. Hadamard-Matrizen Hadamard Matrizen dienen der Erzeugung von Hamming Codes. Definition 5.1 Eine Hadamard-Matrix der Ordnung n ist eine nxn-matrix H= (h i,j ) mit den Einträgen +1 und -1. Außerdem muss gelten: (wobei I n die nxn Einheitsmatrix bezeichnet) (Orthogonalität bis auf n) Beispiele für Hadamard-Matrizen Diese Beispiele sind die kleinstmöglichen Ordnungen, denn es gilt: Satz 5.2 Es sei n>2. Existiert eine nxn Hadamard-Matrix, so ist n durch 4 teilbar. Beweis Wenn meine eine Zeile oder eine Spalte einer Hadamard-Matrix mit -1 multipliziert, so erhält man eine neue Hadamard-Matrix. Deshalb kann man davon ausgehen, dass die erste Zeile einer Hadamard-Matrix nur 1en enthält. Somit hat die zweite Zeile (nach evtl. Permutation der Spalten) die Form Es gilt a+b = n (wegen n Spalten der Matrix) und a-b = 0 (weil Skalarprodukt der ersten und zweiten Zeile ist a-b). Daraus folgt a=b= n/2, dh. die Einträge 1 und -1 in der zweiten (sowie in jeder weiteren Zeile) gleich oft auf. Die dritte Zeile hat dann die Form (evtl. nach Permutation von ersten n/2 bzw. zweiten n/2 Spalten): Da diese orthogonal zur ersten Zeile steht, folgt daraus x+y = n/2. Aus der Orthogonalität zur zweiten Zeile folgt: x+(n/2-y)=n/2. 12
Beides zusammen ergibt x=y=n/4. Somit ist n/4 eine ganze Zahl, dh n ist durch 4 teilbar. Konstruktion 5.3 Es gibt viele verschiedene Methoden, konstruktiv Hadamard-Matrizen zu finden. Hier sind 2 davon: Konstruktion nach Sylvester 5.4 Diese Methode geht auf den engl. Mathematiker James J. Sylvester zurück. Wenn H n eine Hadamard-Matrix ist mit Grad n, dann lässt sich eine Hadamard-Matrix vom Grad 2n wie folgt konstruieren: Das kann man wie folgt nachrechnen: Bsp: Walsh-Matrizen 5.4.1 Somit ergibt sich z.b. folgende Folge von Matrizen, die nach dem Mathematiker Joseph Leonard Walsh benannten Walsh-Matrizen: Walsh-Matrizen sind normalisierte Hadamard-Matrizen vom Grad 2 k. Konstruktion über das Legendre-Symbol 5.5 Man definiert sich bei dieser Konstruktion eine Matrix Q=(q ij ) (=Jacobsthal-Matrix) vom Grad p (wobei p eine Primzahl ist) mit Hilfe des Legendre-Symbols (a/p): Ist nun p=4k-1 mit, so gilt: und: 13
wobei J eine Matrix ist, mit lauter Einträgen 1. Nun konstruieren wir die Hadamard-Matrix vom grad p+1: Man kann nachrechnen, dass dies ebenfalls eine Hadamard-Matrix ist (mit, Diese so konstruierten Matrizen heißen Hadamard-Matrizen vom Paley-Typ, benannt nach dem englischen Mathematiker Raymond E.A.C. Paley. Beispiel 5.6 p=3: H 4 = H 4 * H 4 T = Hadamard-Code 5.7 Wir nehmen eine (4n)x(4n) Hadamard-Matrix. Die erste Zeile und erste Spalte dieser Matrix enthalte nur Einsen, wie z.b.: Nun streichen wir die erste Spalte und ersetzen jede -1 durch 0. Die Zeilen der Matrix, die dabei entsteht, bilden die Codewörter eines (4n-1,4n,2n)-Codes. 14
Im Beispiel erhalten wir die 8 Codewörter (1111111),(0101010),(1001100),(0011001), (1110000),(0100101),(100011) und (0010110). Dies ist ein (7,8,4)-Code. Nehmen wir noch die 8 Komplemente der Codewörter hinzu, erhalten wir einen (7,16,2)- Code. Bis auf die Reihenfolge der Koordinaten stimmt dieser Code mit dem [7,4]- Hamming-Code überein. Als Codewörter erhalten wir somit: C=(11111111), (10101010), (11001100), (10011001), (11110000), (10100101), (11000011), (10010110), (00000000), (01010101), (00110011), (01100110), (00001111), (01011010), (00111100), (01101001) Also: Bei einer Hadamard-Matrix vom Rang 8 = 2^3 erhalten wir 16 = 2^4 Codewörter der Länge 8. Die einzelnen Codewörter unterscheiden sich an jeweils 4 Stellen. Der Hamming-Abstand beträgt also 4. Unser Code kann also höchstens 2^1-1 = 1 Fehler korrigieren. 15
Quellen: (bzw. Zitate) Wolfgang Willems, Codierungstheorie, de Gruyter, 1999 Ralph-Hardo Schulz, Codierungstheorie: Eine Einführung, Vieweg, 2003. J. H. van Lint. Introduction to Coding Theory. Springer GTM 86 (1999). W. Willems. Codierungstheorie. Walter de Gruyter (1999). Klein Andreas. Visuelle Kryptographie. Springer (2007) http://de.wikipedia.org/wiki/code http://de.wikipedia.org/wiki/kodierungstheorie http://www.ricam.oeaw.ac.at/people/page/winterhof/coding.pdf http://www-dm.informatik.unituebingen.de/skripte/codierungstheorie/codierungstheoriews0506.pdf http://einstein.informatik.uni-oldenburg.de/rechnernetze/hamming-.htm http://www.spotlight.de/zforen/ccc/m/ccc-1163619990-19896.html www.quixquax.at 16