Skript zur Vorlesung Signale und Codes Oktober 2012 Inhaltsverzeichnis 1 Einleitung 2 2 Informationstheorie 2.1 Entropie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 AEP, Datenkompression und Shannons Source-Coding-Theorem 2.3 Kanalkapazität und Shannons Noisy-Channel-Theorem . . . . 2.3.1 Beispiele von Kanälen . . . . . . . . . . . . . . . . . . 2.3.2 Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.3 Gemeinsam typische Folgen . . . . . . . . . . . . . . . 2.3.4 Das Coding-Theorem . . . . . . . . . . . . . . . . . . 2 3 4 7 7 8 9 10 3 Codierungstheorie 3.1 Block-Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Lineare Codes . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Syndromdecodierung . . . . . . . . . . . . . . . . . . 3.2.2 Hamming-Codes . . . . . . . . . . . . . . . . . . . . 3.2.3 Majority-Logic-Decoding . . . . . . . . . . . . . . . 3.2.4 Weight-Enumeratives . . . . . . . . . . . . . . . . . 3.2.5 Golay-Codes . . . . . . . . . . . . . . . . . . . . . . 3.2.6 Reed-Muller-Codes . . . . . . . . . . . . . . . . . . . 3.2.7 Schranken für Codes . . . . . . . . . . . . . . . . . . 3.3 Zyklische Codes . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 Bose-Chaudhuri-Hocquenghem-Codes (BCH-Codes) 3.3.2 Reed-Solomon-Codes . . . . . . . . . . . . . . . . . . 12 12 14 15 15 16 17 18 21 22 23 28 29 1 . . . . . . . . . . . . 1 Einleitung Jeder Kommunikationskanal unterliegt unvorhersehbaren Störungen, die man in der Praxis überwinden möchte. Dazu können einerseits im Einzelfall die jeweiligen Komponenten des Systems verbessert werden (größere Antenne, höhere Sendeleistung, höherwertige Komponenten, . . . ) oder andererseits an einem systematischen Lösungsansatz gearbeitet werden. Hierbei kommen codierungs- und informationstheoretische Techniken zum Einsatz, die die Qualität eines Kanals verbessern. Man ergänzt einen Kanal um Encoder und Decoder, um systeminherente Fehler so gut wie möglich zu korrigieren. Der Encoder fügt einer Nachricht Redundanz hinzu. Der Decoder regeneriert aus einem gestörten, redundanten Signal wieder das ursprüngliche Signal. • Informationstheorie befasst sich mit den theoretischen Grenzen und Möglichkeiten der eben beschriebenen Systeme. • Codierungstheorie befasst sich mit dem tatsächlichen Entwurf von Encoder-Decoder-Verfahren für solche Kanäle. Sie findet darüber hinaus in der Komplexitätstheorie (Average-Case Hardness, Beweis für IP = PSPACE) und der Kryptographie (McEliece Kryptosystem, Sicherstellung von ehrlichen Verhalten bei Mehrparteienberechnungen) Anwendung. 2 Informationstheorie Quellen/Signale modellieren wir als diskrete Zufallsvariablen X, Y, . . . über Alphabeten X , Y, . . . (üblicherweise {0, 1}n ). Dadurch wird modelliert, dass ein Empfänger eines Signals kein vollständiges Wissen über diese Nachricht hat. Er ist also überrascht von diesem Signal. Bei deterministischen Prozessen (Empfänger kennt bereits die Nachricht) kann man die Kommunikation komplett sparen. 2 2.1 Entropie Definition 1 (Information, Üúberraschung). Sei X eine Zufallsvariable gegeben durch eine Wahrscheinlichkeits-Masse-Verteilung p(x) = P r[X = x], x ∈ X . Wir bezeichnen I(x) = − log(p(x)) als die Information/Üúberraschung eines Zeichens x. Definition 2 ((Shannon-)Entropie). Die (Shannon-)Entropie einer Zufallsvariable X ist definiert durch X H(X) = − p(x) · log(p(x)) = IE[I(x)]. x∈X Die Pseudoeinheit für H(X) heißt Bits. Ist Xn ein zeitinvarianter (stationärer) Prozess, bei dem alle Xi unabhängig identisch verteilt sind, dann bezeichnet H(Xn ) die Rate des Prozesses und wird in Bits pro Zeiteinheit angegeben. Definition 3 (Verbundentropie). Die Verbundentropie zweier Zufallsvariablen X und Y ist definiert als die Entropie der Zufallsvariable (X, Y ), also XX H(X, Y ) = − p(x, y) · log(p(x, y)). x∈X y∈Y Definition 4 (Bedingte Entropie). Die bedingte Entropie ist definiert durch X XX H(X|Y ) = − p(y) · H(X|Y = y) = − p(x, y) · log(p(x|y)). y∈Y x∈X y∈Y Definition 5 (Transinformation, gemeinsame Information). Die Transinformation/gemeinsame Information I(X; Y ) gibt an, um wie viele Bits sich die Entropie von X verringert, wenn man Y lernt. Sie ist gegeben durch I(X; Y ) = H(X) − H(X|Y ) = XX x∈X y∈Y p(x, y) · log( p(x, y) ). p(x) · p(y) Eigenschaften der Entropie 1. 0 ≤ H(X) ≤ log(|X|), wobei die erste Gleichheit gilt, wenn für ein xi p(xi ) = 1 gilt. Die zweite Gleichheit, wenn X auf X gleichverteilt ist. 3 Beweis. Wir benutzen Jensens Ungleichung für konkave Funktionen: H(X) − log |X | = X = X p(x) log 1 − log |X | p(x) p(x) log 1 p(x)|X | x x 1 ) p(x)|X | 1 ≤ log IE( ) p(x)|X | X 1 = log p(x) p(x)|X | x X 1 = log p(x) |X | x = IE(log = log(1) = 0 2. H(X, Y ) = H(X) + H(Y |X) 3. H(X, Y |Z) = H(X|Z) + H(Y |X, Z) 4. 0 ≤ I(X; Y ) = I(Y ; X) 5. I(X; Y ) = H(X) − H(X|Y ) = H(Y ) − H(Y |X) = H(X) + H(Y ) − H(X, Y ) 2.2 AEP, Datenkompression und Shannons Source-CodingTheorem Wir interessieren uns dafür, wie sich bei häufiger Wiederholung eines Zufallsexperiments Vorhersagen über die Gesamtmessung machen lassen. Sei 4 X eine Zufallsvariable, X1 , . . . , Xn identisch, unabhängig verteilt mit p(x). Dann ist die Wahrscheinlichkeit, dass wir Messfolge (x1 , . . . , xn ) messen Qn p(x1 , . . . , xn ) = i=0 p(xi ). Man sieht, dass nicht alle Tupel gleiche Auftrittswahrscheinlichkeit haben. Man kann jedoch die Auftrittswahrscheinlichkeit der Folge, die man messen wird, vorhersagen; d.h. die Zufallsvariable p(X1 , . . . , Xn ) schätzen. Es wird sich zeigen, dass p(X1 , . . . , Xn ) für wachsendes n nahe an 2−n·H(X) liegt. Satz 1 (Asymptotische Äquipartitionsprinzip (AEP)). Sind X1 , . . . , Xn identisch, unabhängig verteilt, dann konvergiert − n1 ·log(p(X1 , . . . , Xn )) → H(X) in der Wahrscheinlichkeit. Genauer: 1 · log(p(X1 , . . . , Xn )) − H(X)| > ] → 0 für n → ∞ n P Beweis. Es ist − n1 log(p(X1 , . . . , Xn )) = − n1 ni=1 log(p(Xi )). Das schwache Gesetz der großen Zahlen besagt nun, dass P r[| − 1 1X log − H(X)| > ] n p(Xi ) 1X 1 1 P r[| − log − IE(log )| > ] n p(Xi ) p(x) 1 V ar(log p(x) ) P r[| − n2 = ≤ n→∞ −→ 0 Wir werden nun sehen, dass das AEP typische Mengen charakterisiert. (n) Definition 6 (Typische Menge). Eine typische Menge A bezüglich p(x) ist die Menge aller endlichen Folgen/Tupel (x1 , . . . , xn ) ∈ X n , sodass 2−n·(H(X)+) ≤ p(x1 , . . . , xn ) ≤ 2−n·(H(X)−) bzw. |− 1 1 log − H(X)| ≤ . n p(x1 , . . . , xn ) Eigenschaften typischer Mengen (n) 1. P r[(x1 , . . . , xn ) ∈ A ] > 1 − für hinreichend großes n (n) 2. |A | ≤ 2n(H(X)+) (n) 3. |A | > (1 − ) · 2n(H(X)−) Beweis. 1. Folgt direkt aus der AEP, da P r[(x1 , . . . , xn ) ∈ A(n) ] 1 1 log − H(X)| ≤ ] n p(x1 , . . . , xn ) −→ 1 > 1 − = P r[| − 5 2. Es gilt 1 X = p(xn ) ≥ xn ∈X n p(xn ) (n) xn ∈A X ≥ X −n(H(X)+) 2−n(H(X)+) = |A(n) |·2 (n) xn ∈A n(H(X)+) ⇒ |A(n) |≤2 3. Wegen 1. gilt für hinreichend großes n 1− < X P r[(x1 , . . . , xn ) ∈ A(n) ]= p(xn ) (n) xn ∈A ≤ X −n(H(X)−) 2−n(H(X)−) = |A(n) |·2 (n) xn ∈A n(H(X)−) ⇒ |A(n) | > (1 − ) · 2 Anwendung zur Datenkompression Seien X1 , . . . , Xn Zufallsvariablen mit Massefunktion p(x). Wir suchen kurze Beschreibungen für die Folgen (x1 , . . . , xn ). Dazu teilen wir X n in zwei Mengen ein: eine typische Menge (n) A (n) und eine untypische A (n) = X n \A . Wir gehen folgendermaßen vor: (n) 1. Ordne die Elemente in A (n) und A lexikographisch. 2. Induziere jedes Tupel (x1 , . . . , xn ) in beiden Mengen mit seinem lexikographischen Index in der jeweiligen Menge. (n) 3. Für (x1 , . . . , xn ) ∈ A benötigt man höchstens n · (H(X) + ) + 1 Bits. Verwende ein zusätzliches Führungsbit, um anzuzeigen, dass (n) (x1 , . . . , xn ) ∈ A . (n) 4. Analog für (x1 , . . . , xn ) ∈ A . Verwende n · log |X | + 1 Bits plus Führungsbit zum Codieren, also maximal n·log |X |+2 für jedes Tupel. Das Codierungsschema hat folgende Eigenschaften: • Der Code ist bijektiv und “leicht“ decodierter. • Typische Folgen haben kurze Beschreibungen der Länge ≈ n · H(X). (n) • Falls H(X) < log |X |, dann enthält A zwar die überwältigende Anzahl an Folgen; diese Folgen tauchen jedoch nur mit sehr geringer Wahrscheinlichkeit auf. 6 (n) Sei n hinreichend groß, sodass P r[xn ∈ A ] > 1−. Wir können nun die erwartete Codewort-Länge einer Folge (x1 , . . . , xn ) berechnen. l(xn ) bezeichne die Länge der Codierung von xn . IE[l(X n )] = X p(xn ) · l(xn ) xn ∈X n = X X p(xn ) · l(xn ) + (n) p(xn ) · l(xn ) (n) xn ∈A xn ∈A (n) n ≤ P r[xn ∈ A(n) ] · (n · (H(X) + ) + 2) + P r[x ∈ A ] · (n log |X | + 2) ≤ n · (H(X) + ) + n log |X | + 2 ≤ n · (H(X) + 0 ) wobei 0 = + log |X | + 2 n Satz 2 (Shannons Source-Coding-Theorem). Sei X n eine identisch, unabhängig mit p(x) verteilte Folge von Zufallsvariablen, sei > 0. Dann existiert eine Codierung, welche Folgen xn der Länge n auf binäre Strings abbildet, sodass die Codierung bijektiv ist und für hinreichend große n gilt: 1 IE[ l(X n )] ≤ H(X) + n 2.3 Kanalkapazität und Shannons Noisy-Channel-Theorem Definition 7 (Kanal). Ein diskreter, verrauschter Kanal K = (X n , p(y|x), Y n ) ist ein System bestehend aus einem Eingabealphabet X , Ausgabealphabet Y und einer Übertragungsmatrix M = (p(y|x))x∈X ,y∈Y , wobei p(y|x) = P r[Y = y|X = x] die Übertragungswahrscheinlichkeiten sind. Ein Kanal heißt gedächtnislos, falls die Verteilung der Ausgabe nur von der aktuellen Eingabe abhängt und bedingt unabhängig von vorherigen Ein- und Ausgaben ist. Definition 8 (Kanalkapazität). Die Kanalkapazität zu einem Kanal K = (X n , p(y|x), Y n ) ist definiert durch C = max I(X; Y ). p(x) 2.3.1 Beispiele von Kanälen 1. Rauschfreier Kanal 7 2. Noisy Typewriter Setze p(0) = p(1) = 12 . Dann ist I(X; Y ) = H(X) − H(X|Y ) = 1−0 = 1 Damit ist C = 1. (In der Literatur wird mit Noisy Typewriter ein anderer Ka- Anmerkung nal bezeichnet.) 3. Binärer symmetrischer Kanal I(X; Y ) = H(Y ) − H(Y |X) X = H(Y ) − p(x) · H(Y |X = x) x = H(Y ) − H(ρ) ≤ 1 − H(ρ) Es gilt C = 1 − H(ρ), denn für p(x) = ( 12 , 12 ) gilt auch p(y) = ( 12 , 21 ) und damit H(Y ) = 1. 4. Binärer Erasure-Kanal 2.3.2 Codes Definition 9 ((M, n)-Code). Ein (M, n)-Code für einen Kanal K = (X n , p(y|x), Y n ) besteht aus • einem Nachrichtenraum M = {1, . . . , M }, • einer Codierungsabbildung X n (·) : {1, . . . , M } → X n , welche Codeworte X n (1), . . . , X n (M ) liefert, und • einer Decodierabbildung g : Y n → {1, . . . , M }. 8 Definition 10 (Übertragungsfehlerwahrscheinlichkeiten). Wir definieren λi = P r[g(Y n ) 6= i|X n = X n (i)] als Übertragungsfehlerwahrscheinlichkeiten für die Nachricht i zu einem gegeben Kanal K = (X n , p(y|x), Y n ) und Code C = (M, X n , g). Definition 11 (Mittlere Fehlerwahrscheinlichkeit). Die mittlere Fehlerwahrscheinlichkeit eines (M, n)-Codes C ist definiert durch Pe(n) = M M X 1 X λi = P r[w = i]λi M i=1 i=1 wobei w gleichverteilt auf {1, . . . , M }. Definition 12 (Rate, erreichbare Rate). Die Rate R eines (M, n)-Codes ist gegeben durch log |M| . R= n Eine Rate heißt erreichbar für einen Kanal K, falls es eine Familie von (2nR , n)-Codes gibt, sodass maxi∈{1,...,M } λi → 0 für n → ∞. 2.3.3 Gemeinsam typische Folgen (n) Definition 13 (Gemeinsam typische Folge). Die Menge A der gemeinsam typischen Folgen bezüglich einer Verteilung p(x, y) ist die Menge aller (xn , y n ) ∈ X n × Y n , sodass 1 log p(xn ) − H(X)| < n 1 | − log p(y n ) − H(Y )| < n |− |− 1 log p(xn , y n ) − H(X, Y )| < n Das heißt xn , y n und (xn , y n ) sind jeweils typisch. Satz 3 (Gemeinsame AEP). Seien (X n , Y n ) identisch, unabhängig verteilte Folgen, die aus der Verteilung p(xn , y n ) gezogen werden. Dann gilt: (n) 1. P r[(xn , y n ) ∈ A ] → 1 für n → ∞ (n) 2. |A | ≤ 2n(H(X,Y )+) e n , Ye n ) ∼ p(xn )·p(y n ), sind X e n und Ye n unabhängig aber jeweils 3. Gilt (X mit den selben Marginalverteilungen wie X n und Y n verteilt, dann gilt (n) P r[(e xn , yen ) ∈ A ] ≤ 2−n·(I(X;Y )−3) 9 Beweis. 1. Folgt direkt aus der einfach AEP für (xn , y n ): P r[| − 1 log p(xn , y n ) − H(X, Y )| < ] → 1 für n → ∞ n 2. Es gilt 1 X = (xn ,y n )∈X n ×Y n X ≥ X p(xn , y n ) ≥ p(xn , y n ) (n) (xn ,y n )∈A −n(H(X,Y )+) 2−n(H(X,Y )+) = |A(n) |·2 (n) (xn ,y n )∈A n(H(X,Y )+) ⇒ |A(n) . |≤2 e n und Ye n unabhängig, aber jeweils für sich wie X n und Y n 3. Sind X verteilt, dann gilt n n P r[(e x , ye ) ∈ A(n) ] X = ≤2−n(H(X)−) n p(x ) · ≤2−n(H(Y )−) n p(y ) (n) (xn ,y n )∈A ≤ |A(n) | · 2−n(H(X)+H(Y )−2) ≤ 2−n(H(X)+H(Y )−H(X,Y )−3) = 2−n(I(X;Y )−3) 2.3.4 Das Coding-Theorem Wir werden zeigen, dass für einen Kanal K = (X n , p(y|x), Y n ) jede Rate R < C erreichbar ist. Wir wenden die gemeinsame AEP an, das heißt wir verwenden lange Codeworte und verwenden deshalb den Kanal vielfach. Ein empfangenes Signal y n decodieren wir zu einem xn , welches gemeinsam typisch mit y n ist. Wir werden zeigen, dass wenn R < C dieses xn mit hoher Wahrscheinlichkeit eindeutig ist. Satz 4 (Shannons Coding Theorem). Für jede Rate R < C existiert eine Familie von (2nR , n)-Codes, sodass max i∈{1,...,2nR } λi → 0 für n → ∞. Beweis. Wähle p(x) (wird später genauer spezifiziert). Wir ziehen nun einen (2nR , n)-Code C zufällig mit der Verteilung p(x). Das heißt wir ziehen 2nR unabhängige Codeworte X n (1), . . . , X n (2nR ). Die Wahrscheinlichkeit, dass ein bestimmter Code C gezogen wird, ist also nR P r[C] = Π2w=1 Πni=1 p(X n (w)i ) 10 Wir nehmen nun folgendes an: • Der Code C wird wie oben beschrieben zufällig gezogen und Sender und Empfänger bekannt gemacht. • Sowohl Sender als auch Empfänger kennen die Kanalübertragungswahrscheinlichkeiten p(y|x). • Eine Nachricht w wird gleichverteilt vom Sender gezogen. P r[W = w] = 2−nR für w = 1, . . . , 2nR • Das Code-Wort X n (w) wird durch den Kanal geschickt. • Der Empfänger decodiert y n zu ŵ, falls (X n (ŵ), y n ) gemeinsam typisch sind. Falls kein solches ŵ existiert oder mehrere existieren, wird ein Fehler deklariert. Außerdem tritt ein Fehler auf, wenn ŵ 6= w. Sei E das Ereignis, das w 6= ŵ. Wir berechnen nun die mittlere Fehlerwahrscheinlichkeit, gemittelt über alle Codewörter und alle Codes. X P r[E] = P r[C]Pe(n) (C) C nR = X P r[C]( C 2 1 X 2nR λw (C)) w=1 nR = 2 1 XX 2nR P r[C]λw (C) w=1 C n Da alle Codeworte P X (w) identisch verteilt zufällig gezogen wurden, hängt der Ausdruck C P r[C]λw (C) nicht von w ab. Wir fixieren o.B.d.A. w = 1. (n) Sei Ei das Ereignis, dass (X n (i), y n ) ∈ A . Die tatsächliche Ursache für y n ist X n (1). Ein Fehler passiert genau dann, wenn E1 , d.h. wenn (X n (1), y n ) nicht gemeinsam typisch sind, oder E2 ∨ . . . ∨ E2nR , d.h. wenn ein falsches Codewort gemeinsam typisch mit y n ist. P r[E] = P r[E1 ∨ (E2 ∨ . . . ∨ E2nR )] nR ≤ P r[E1 ] + 2 X P r[Ei ] i=2 Da X n (2), . . . , X n (2nR ) unabhängig von xn = X n (1) gezogen wurden, sind also X n (2), . . . , X n (2nR ) auch unabhängig von Y n . Damit gilt für i ∈ {2, . . . , 2nR } : (n) P r[Ei ] = P r[(X n (i), y n ) ∈ A ] ≤ 2−n(I(X;Y )−3) . Weiter gilt aufgrund der 11 gemeinsamen AEP, dass P r[E1 ] ≤ . Insgesamt: nR P r[E] ≤ + 2 X 2−n(I(X;Y )−3) i=2 nR = + (2 − 1)2−n(I(X;Y )−3) ≤ + 2−n(I(X;Y )−3−R) ≤ 2 falls n hinreichend groß und R < I(X; Y ) − 3. In diesem Fall ist also die mittlere Fehlerwahrscheinlichkeit über alle Codewörter und alle Codes ≤ 2. Einige Konkretisierungen: • Wir hatten p(x) bisher beliebig aber fest gewählt. Wähle p(x) nun so, dass I(X; Y ) = C. Damit wird die Erreichbarkeitsbedingung zu R < C. • Die Fehlerwahrscheinlichkeit wird bisher im Mittel über eine große Anzahl von Codes angegeben. Weil P r[E] ≤ 2 gilt, gibt es mindestens (n) einen Code C ? , für welchen Pe (C) ≤ 2 gilt. Man kann ein solches C ? beispielsweise durch vollständige Suche finden. • Vom besten Code C ? verwerfe die Hälfte aller Codewörter w, nämlich solche mit großer Fehlerwahrscheinlichkeit λw . Sortiere dazu beispielsweise die Codewörter nach ihrer Fehlerwahrscheinlichkeit und nehme f? . die untere Hälfte der Liste. Diesen neuen Code bezeichnen wir mit C (n) 1 P2nR • Es gilt Pe (C ? ) = 2nR i=1 λi ≤ 2. Das bedeutet, dass für mindestens die Hälfte aller Codewörter w (insbesondere für die Codewörter f? ) die Ungleichung λw ≤ 4 gelten muss, da ansonsten Pe(n) > 2. in C f? konstruiert, der 2nR−1 Codeworte hat. Somit Wir haben einen Code C f? die Rate R − 1 → R für n → ∞. C f? hat maximale Fehlerwahrhat C n scheinlichkeit maxw=1,...,2nR λw ≤ 4. Das zeigt, dass jede Rate unterhalb der Kapazität C erreichbar ist. 3 3.1 Codierungstheorie Block-Codes Definition 14 (Block-Code, trivialer Code, binärer Code). Mit einem BlockCode werden Blöcke fester Länge über einem Alphabet Q (hier 0 ∈ Q) als Codeworte verwendet. Codierung und Decodierung beachten keine Nachbarblöcke. Ein Code C der Länge n über Q ist eine nicht-leere Teilmenge C ⊆ Qn . Ist |C| = 1 oder C = Qn , so heißt C trivial. Ist Q = F2 , so heißt C binär. 12 Definition 15 (Hammingabstand, Hamminggewicht, Minimalabstand). Seien x, y ∈ Qn , dann heißt d(x, y) := |{i | xi 6= yi }| der Hammingabstand von x und y. Das Hamminggewicht von x ist w(x) := d(x, 0). Der Minimalabstand von C ist gegeben durch min{d(x, y) | x, y ∈ C, x 6= y} und ist ein Gütemaß für den Code C. Definition 16 (Informationsrate). Die Informationsrate R von C ist mit q = |Q|. logq |C| n Beispiel Q = {0, 1, 2, 3}, |Q| = 4 C = {(x, x, x) | x ∈ Q}, |C| = 4 R = log34 4 = 13 Der Minimalabstand von C ist 3. Definition 17 (Überdeckungsradius). Der maximale Abstand eines beliebigen Elementes aus Qn zum nächsten Codewort heißt Überdeckungsradius: max {min{d(x, c) | c ∈ C} | x ∈ Qn } Ein anderes interessantes Maß ist ρ, der maximale Radius, so dass alle Kugeln Bρ (c) mit Radius ρ um Codeworte c disjunkt sind. Ein perfekter Code erfüllt, dass der Überdeckungsradius ρ ist. Definition 18 (Perfekter Code). Ein Code C ⊆ Qn mit Minimalabstand d = 2 · e + 1 heißt perfekt, wenn für jedes x ∈ Qn genau ein c existiert mit d(c, x) ≤ e. Ein gerader Minimalabstand ist bei perfekten Codes nicht möglich. Folgende Codes sind perfekte Codes: • Triviale Codes • Binäre Wiederholungscodes ungerader Länge • Hamming-Codes • Der binäre Golay-Code G23 mit den Parametern (23, 12, 7) • Der ternäre Golay-Code G11 mit den Parametern (11, 6, 5) Satz 5 (Kugelpackungsbedingung). Für einen perfekten Code C ⊆ Qn mit Minimalabstand d = 2 · e + 1 gilt: q n = |C| · |Be (0)| e X n = |C| · (q − 1)l l l=0 13 3.2 Lineare Codes Definition 19 (Linearer Code, Generatormatrix, systematische Codierung). Es sei Q = Fq , das heißt Qn ist ein Vektorraum. Ein linearer Code C ist ein Untervektorraum von Qn der Dimension k. Wähle eine Basis von C. Die k × n-Matrix mit den k Basiselementen in den Zeilen heißt Generatormatrix G von C. Durch a · G kann ein Nachrichtenwort a ∈ Qk codiert werden. Will man den Klartext im Code “direkt sehen”, so muss G die Form 1 0 ··· ··· 0 . . . .. .. 0 . . .. . . . .. .. .. . k . . . P G= .. .. .. . . . 0 0 ··· ··· 0 1 {z } | {z } | k n−k haben. G heißt dann Matrix bei systematischer Codierung. Die Rate eines linearen Codes der Dimension k ist logq |C| n = nk . Definition 20 (Äquivalente Codes). Zwei Codes C1 , C2 heißen äquivalent, wenn sie durch Permutation der Stellen des Codes (Spalten in der Generatormatrix) auseinander hervorgehen. Jeder Code ist äquivalent zu einem Code mit systematischer Codierung. Eine systematische Generatormatrix erhält man durch Zeilenumformungen und Spaltenvertauschungen der ursprünglichen Generatormatrix. Wie kann der Minimalabstand eineslinearen Codes berechnet werden? Im Allgemeinen benötigt man dafür |C| 2 Berechnungen. Für lineare Codes gilt min d(x, y) = min d(x, 0) x,y∈C 06=x∈C Ein linearer Code der Länge n und der Dimension k (und mit Minimalabstand d) wird als [n, k]-Code ([n, k, d]-Code) bezeichnet. Definition 21 (Dualer Code, selbstdual). Es sei C ein [n, k]-Code. Dann heißt C ⊥ := {y ∈ Qn | hy, xi = 0 für alle x ∈ C} der zu C duale Code. Er ist ein [n, n − k]-Code. Falls C = C ⊥ heißt C selbstdual. Beispiel • Q = F2 , n = 3 C = {(0, 0, 0), (1, 1, 1)} ist ein [3, 1]-Code. C ⊥ ist also ein [3, 2]-Code und hat 22 Elemente. C ⊥ = {(0, 0, 0), (0, 1, 1), (1, 0, 1), (1, 1, 0)} 14 • Q = F2 , n = 4 C = {(0, 0, 0, 0), (0, 0, 1, 1), (1, 1, 0, 0), (1, 1, 1, 1)} ist ein [4, 2]-Code. C⊥ = C 3.2.1 Syndromdecodierung Sei G = (Ik |P ) Generatormatrix in systematischer Form von C. Für die Generatormatrix H des Dualcodes muss gelten ∀x ∈ Qk , y ∈ Qn−k : hx · (Ik |P ), y · Hi = 0 ⇔ ∀x ∈ Qk , y ∈ Qn−k : x · (Ik |P ) · (y · H)> = 0 ⇔ ∀x ∈ Qk , y ∈ Qn−k : x · (Ik |P ) · H > · y > = 0 ⇔ (Ik |P ) · H > = (0) ⇐ H = −P > |In−k C ⊥ hat also die Generatormatrix H der Dimensionen n − k × n. Da ∀c ∈ C : c · H > = 0 heißt H auch Prüfmatrix von C, da damit geprüft werden kann, ob c ∈ C. Für x ∈ Qn heißt x · H > das Syndrom von x. Zerlege Qn in Nebenklassen x ∼ y :⇔ x − y ∈ C. Es sei nun ein Fehler e beim Übertragen eines beliebigen Codewortes c aufgetreten. (c + e) · H > = c · H > + e · H > = e · H > , das heißt das Syndrom hängt nur vom Fehler ab. Dies nutzen wir zur Syndromdecodierung. Für jede Nebenklassen ist das Syndrom eindeutig: x ∼ y ⇔ x − y ∈ C ⇔ (x − y) · H > = 0 ⇔ x · H > = y · H > Eine Nebenklasse enthält somit alle Vektoren, die zu einem bestimmten Syndrom führen, sie haben alle denselben Fehler. Der Vektor, der das kleinste Gewicht hat, ist unter diesen der wahrscheinlichste Fehlervektor und wird als Nebenklassenanführer ausgewählt. Zum Decodieren benötigt man also eine Tabelle der Länge q n−k , die jedem möglichen Syndrom den wahrscheinlichsten Fehlervektor zuordnet. 3.2.2 Hamming-Codes Sei H eine k × n-Prüfmatrix eines Codes C über Fq , bei welcher je zwei Spalten linear unabhängig sind. Ist c ∈ C ein Codewort und e ein Fehlervektor mit w(e) = 1, dann ist das Syndrom (c + e) · H > von c + e das Vielfache einer Spalte von H. Das legt eine Spalte von H und damit die Fehlerposition eindeutig fest. Wir suchen nun zu einem gegebenen k ein maximales n. Wir unterscheiden hierbei nicht zwischen äquivalenten Codes. 15 k −1 Definition 22 (Hamming-Code). Sei n = qq−1 . Ein [n, n − k]-HammingCode über Fq ist ein Code, für welchen die Spalten seiner Prüfmatrix paarweise linear unabhängig sind, die Spalten also eine maximale Menge linear unabhängiger Vektoren sind. Das heißt, es gibt 3 Spalten der Prüfmatrix, die linear abhängig sind. Ansonsten könnte man eine weitere Spalte finden, die zu allen anderen linear unabhängig wäre, das heißt ansonsten wäre n nicht maximal. Die Minimaldistanz des Hamming-Codes ist somit 3. Satz 6. Hamming-Codes sind perfekt. Beweis. Dies kann mithilfe der Kugelpackungsbedingung gezeigt werden. Sei k −1 C ein [n, n − k]-Hamming-Code über Fq , wobei n = qq−1 . Sei c ∈ C, sei B1 (c) die 1-Hammingkugel von c, dann gilt |B1 (c)| = 1+n·(q−1) = 1+q k −1 = q k . Da C die Dimension n−k hat, gilt |C| = q n−k und damit gibt es eben so viele disjunkte Kugeln mit Radius 1 um die Codeworte. Diese Kugeln enthalten zusammen q n−k · q k = q n Worte, was bereits allen Worten in Fnq entspricht. Damit ist C perfekt. Beispiel Der binäre [7, 4]-Hamming-Code 1 0 0 0 0 0 1 0 0 1 G= 0 0 1 0 1 0 0 0 1 1 hat die Generatormatrix 1 1 0 1 1 0 1 1 und Prüfmatrix 0 1 1 1 1 0 0 H = 1 0 1 1 0 1 0 . 1 1 0 1 0 0 1 3.2.3 Majority-Logic-Decoding Definition 23 (Orthogonale Prüfgleichungen). Ein System von r Prüfgleichungen hx, y (ν) i = 0 mit 1 ≤ ν ≤ r heißt orthogonal bezüglich Position i (für den Code und y (ν) ) ∈ C ⊥ ), falls: (ν) • yi = 1 für 1 ≤ ν ≤ r (ν) • Falls j 6= i, dann gibt es höchstens ein ν, sodass yj 6= 0 Sei x ein Wort, welches t Fehler enthalte, t ≤ 2r . Dann gilt: ( ≤ t Werte von ν, falls xi korrekt hx, y (ν) i = 6 0 für ≥ r − (t − 1) Werte von ν, falls xi inkorrekt Weil r − (t − 1) > t, können wir anhand der Mehrheit der Werte von hx, y (ν) i entscheiden, ob xi korrekt ist oder nicht. 16 Beispiel Gegeben sei die Prüfmatrix eines [15, 7, 5]-Codes: 1 0 0 0 H= 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 0 1 1 1 0 0 0 0 1 0 1 1 1 0 0 0 0 1 0 1 1 1 0 0 0 0 1 0 1 1 1 Geeignete Linearkombinationen der Zeilen von H (bezeichnet mit z1 , ..., z8 ) ergeben die folgenden 4 Prüfgleichungen: z4 : 0 = x4 + x12 + x13 + x15 z2 + z6 : 0 = x2 + x6 + x14 + x15 z1 + z3 + z7 : 0 = x1 + x3 + x7 + x15 z8 : 0 = x8 + x9 + x11 + x15 Diese sind orthogonal bezüglich Position 15. Ist nur bei x15 ein Fehler aufgetreten, so liefern alle 4 Geleichungen eine 1; ist noch ein zweiter Fehler aufgetreten, dann liefern 3 Gleichungen eine 1. Wurde x15 korrekt übertragen, so liefern 0, 1 oder 2 Gleichungen eine 1, je nachdem ob 0, 1 oder 2 Fehler aufgetreten sind. Für bis zu zwei Fehler kann damit x15 per Mehrheitsentscheid mit den 4 Prüfgleichungen korrekt decodiert werden. Diese Art der Decodierung ist sehr effizient, es ist aber bei den meisten Codes schwierig oder unmöglich passende Gleichungen zu finden. Z. B. gibt es für den [7, 4]-Hamming-Code keinen Satz von orthogonalen Prüfgleichungen. 3.2.4 Weight-Enumeratives Die Minimaldistanz eines Codes legt fest, wie viele Fehler ein empfangenes Wort enthalten kann und trotzdem noch decodiert werden kann. Oftmals ist es nötig mehr Distanzinformationen über einen Code zu haben. Definition 24 (Weight-Enumerator, Gewichtsverteilung). Sei C ein linearer Code der Länge n und sei A Pi ndie Zahli der Codeworte von Gewicht i. dann heißt das Polynom A(z) = i=0 Ai · z der Weight-Enumerator von C. Die Folge (Ai )ni=0 heißt Gewichtsverteilung von C. Wir werden nun den Weight-Enumerator des binären Hammingcodes der Länge n berechnen. Dazu betrachten wir zunächst i − 1 Spalten der Prüfmatrix H. Wir unterscheiden drei Möglichkeiten für die Summe dieser Spalten: 17 • Summe der Spalten ist 0 • Summe der Spalten ergibt eine der i − 1 Spalten • Summe der Spalten ergibt eine der anderen n − (i − 1) Spalten n Es gibt i−1 Möglichkeiten i − 1 Spalten auszuwählen. Dass die Summe der Spalten den Nullvektor ergibt, entspricht der Tatsache, dass für x ∈ Qn mit w(x) = i − 1 das Produkt x · H > = 0. Da dies genau für die x ∈ Qn gilt, die Codewörter des Hammingcodes sind, tritt Möglichkeit 1 genau Ai−1 mal auf. Daraus lässt sich folgen, dass Möglichkeit 2 (n − (i − 2)) · Ai−2 mal vorkommt. Es gibt nämlich Ai−2 Möglichkeiten i − 2 Spalten auszuwählen, deren Summe 0 ist, und in jedem Fall der Ai−2 Fälle kann man eine von n − (i − 2) weiteren Spalten wählen. Möglichkeit 3 tritt i · Ai mal auf, da es Ai Möglichkeiten gibt, i Spalten mit Summe 0 auszuwählen und es i Möglichkeiten gibt, aus i Spalten i − 1 Stück auszuwählen. Deren Summe entspricht dann der verbleibenden Spalte. Somit gilt: n i · Ai = − Ai−1 − (n − i + 2) · Ai−2 i−1 Multipliziert man beide Seiten mit z i−1 und summiert über i auf, erhält man die folgende Differentialgeichung: A0 (z) = (1 + z)n − A(z) − nzA(z) + z 2 A0 (z) Mit A0 = 1 lässt sich dies zu A(z) = n−1 n+1 1 n (1 + z)n + (1 + z) 2 (1 − z) 2 n+1 n+1 lösen. Eines der grundlegendsten Ergebnisse der Codierungstheorie, benannt nach Jessi MacWilliams, gibt den Zusammenhang der Weight-Enumeratoren eines Codes C und seines Dualcodes C ⊥ an. Wir zitieren diesen Satz hier ohne Beweis: Satz 7 (MacWilliams-Identität). Sei C ein [n, k]-Code über Fq mit WeightEnumerator A(z) und sei B(z) der Weight-Enumerator von C ⊥ . Dann gilt B(z) = q −k · (1 + (q − 1) · z)n · A( 3.2.5 1−z ). 1 + (q − 1) · z Golay-Codes Es gibt viele Variante die Golay-Codes G24 bzw. den G23 zu konstruieren. Hier seien zwei verschiedene genannt. 18 1. Variante der Konstruktion des G24 • Wähle ein Wort mit Gewicht 8 • Suche (z.B. durch lexikographisches Aufzählen) ein Wort, das zu den bisher erzeugten Abstand 8 hat. • Endet mit 212 Vektoren und liefert einen [24, 12, 8]-Code. 2. Variante der Konstruktion des G24 • Betrachte den Hamming-Code mit der 1 0 0 0 0 1 0 0 G = 0 0 1 0 0 0 0 1 G0 = Matrix 1 0 1 1 1 1 1 0 G 0 1 . 1 1 1 1 0 1 ist [8, 4, 4]-Code und erweitert den Hamming-Code. • Definiere einen zu G äquivalenten Code 0 1 1 0 0 1 1 0 0 0 G = 1 1 1 0 1 1 0 1 1 0 G 0 = G 0 1 0 0 1 0 . 0 0 1 1 0 1 0 • G 0 und G generieren nur Codewörter mit Gewicht 0, 4 und 8. Der Hamming-Code hat Minimalgewicht 3, durch Ergänzen auf gerade Parität ergibt sich ein Code G 0 mit Codeworten von geradem Gewicht, also dem Minimalgewicht 4. Da 1 := (1, 1, 1, 1, 1, 1, 1, 1) ∈ G 0 kann kein anderes Codewort mit Gewicht > 4 existieren, es hätte einen Minimalabstand < 4 von 1. • Die beiden erweiterten Codes sind selbstdual, es gilt also G 0 = G 0⊥ und 0 0⊥ G =G Man kann einfach nachrechnen, dass G 0 · G 0> = 0 und k = n/2 was die 0 selbstdualtität von G 0 zeigt. Für G gilt dasselbe Argument. 19 0 • Die Schnittmenge der beiden erweiterten Codes ist trivial, d.h. G 0 ∩G = {0, 1}. Darstellen der Codeworte mit je 4 Unbestimmten und anschliessender Koeffizientenvergleich liefert die Behauptung. 0 • Verwende G 0 und G um einen anderen Code zu definieren 0 G24 := {(a + x, b + x, a + b + x)|a, b ∈ G 0 , x ∈ G } Für die Generatormatrix bedeutet das: G24 0 G 0 G0 := 0 G 0 G 0 0 0 0 G G G (12×24) Eigenschaften des G24 • G24 ist ein selbstdualer (24, 12)-Code. Die Dimension kann man z. B. über rang(G24 ) = 12 berechnen. Die > = 0 und k = n/2. Selbstdualität ergibt sich wie oben durch G24 · G24 • Die Gewichte der Codeworte von G24 sind durch 4 teilbar. Die Gewichte der 12 Basisvektoren sind durch 4 teilbar, es genügt also zu zeigen: w(c) ≡ w(d) ≡ 0 (mod 4) =⇒ w(c + d) ≡ 0 (mod 4) für c, d ∈ G24 . Definiere (c ∩ d)i = 1 : ci = di = 1 0 : sonst Dann gilt hc, di ≡ w(c ∩ d) ≡ 0 (mod 2), da G24 selbstdual ist. Das Gewicht w(c+d) = w(c)+w(d)−2·w(c∩d) ist daher Summe/Differenz von durch 4 teilbaren Zahlen also auch durch 4 teilbar. • G24 hat Minimalgewicht 8. Offensichtlich enthält G24 Worte vom Gewicht 8, es ist also nur noch zu zeigen, dass G24 kein Wort vom Gewicht 4 enthält. Annahme: c = (a + x, b + x, a + b + x) ∈ G24 hat Gewicht 4. In jeder der drei Komponenten ergänzt das 8-te Bit die anderen 7 auf gerade Parität, die drei Komponenten haben also gerades Gewicht und bei Gesamtgewicht 4 muss eine der Komponenten 0 sein. Ohne Beschränkung der Allgemeinheit sei a + x = 0 und damit a = 0 x ∈ G 0 ∩ G = {0, 1}. 20 Im Fall a = 0 hat c = (0, b, b) ein Gewicht von mindestens 8, im Fall a = 1 hat c = (0, b + 1, b) ein Gewicht von mindestens 8. (Für einen ausführlicheren Beweis, vergleiche z.B. http://www2.iwr. uni-heidelberg.de/groups/compalg/matzat/PDF/Codierungstheorie. pdf, S.43) • Es treten nur die Hamming-Gewichte 0, 8, 12, 16 und 24 auf. • G24 ist [24, 12, 8]-Code. Konstruktion des G23 • Streichen einer Spalte der Matrix G24 , liefert G23 Eigenschaften des G23 • G23 ist ein [23, 12, 7]-Code. • Es gilt 223 = 212 · (1 + 23 1 + 3.2.6 23 2 + 23 3 ) und somit ist G23 perfekt. Reed-Muller-Codes Hinführung: Die Summe von Codes Es seien zwei Codes C1 als [n, k1 , d1 ]Code und C2 als [n, k2 , d2 ]-Code gegeben. Betrachte nun den Code {(a1 , a1 + a2 )|a1 ∈ C1 , a2 ∈ C2 }. Dies ist ein [2n, k1 + k2 , dmin ]-Code mit Generatormatrix G1 G1 . G1 &G2 := 0 G2 Es gilt dmin = min{2d1 , d2 }. Beweis: • Offensichtlich ist dmin ≤ min{2d1 , d2 } • Fall 1: a2 = 0 ⇒ w(a1 , a1 ) ≥ 2d1 • Fall 2: a2 6= 0 ⇒ w(a1 , a1 + a2) = w(a1 ) + w(a1 + a2) = w(−a1 ) + w(a1 + a2) ≥ w(−a1 + a1 + a2) = w(a2) ≥ d2 Definition 25 (Reed-Muller-Code).P Sei r, m∈ N, 0 ≤ r ≤ m. RM (r, m) ist ein [n, k, d]-Code mit n = 2m , k = ri=0 mi , d = 2m−r . Er wird rekursiv definiert durch: • RM (0, m) ist ein [2m , 1, 2m ]-Wiederholungscode. • RM (m, m) ist uncodiert, das heißt, dass das Informationswort direkt ausgegeben wird. • RM (r + 1, m + 1) = RM (r + 1, m)&RM (r, m) 21 Beispiel 1 0 RM (1, 1) = , dmin = 1 0 1 1 0 1 0 RM (1, 2) = RM (1, 1)&RM (0, 1) = 0 1 0 1 , dmin = 2 0 0 1 1 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 RM (1, 3) = RM (1, 2)&RM (0, 2) = 0 0 1 1 0 0 1 1 , dmin = 4 0 0 0 0 1 1 1 1 1 0 0 0 0 1 0 0 RM (2, 2) = 0 0 1 0 , dmin = 1 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 RM (2, 3) = RM (2, 2)&RM (1, 2) = 0 0 0 1 0 0 0 1 , dmin = 2 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 Das Decodieren kann mittels einer Verallgemeinerung des Majority-LogicDecodings durchgeführt werden. 3.2.7 Schranken für Codes Wir wenden uns nun dem Problem zu, bei vorgegebener Länge n und Minimaldistanz d Codes zu finden, die möglichst hohe Rate R = nk haben. Dabei werden wir lediglich die Existenz solcher Codes behandeln. Aspekte wie Konstruktion, Codierung und Decodierung lassen wir außen vor. Wir suchen zunächst nach oberen Schranken für Codes. Ist C ein [n, k, d]Code, dann erhalten wir durch Weglassen eines redundanten Zeichens einen neuen Code C 0 . C 0 hat die Länge n − 1, Dimension k und mindestens Minimaldistanz d − 1. C 0 heißt punktierter Code. Satz 8 (Singleton-Schranke). Sei C ein [n, k, d]-Code über Fq , dann gilt k ≤ n − d + 1. Codes, welche die Singleton-Schranke exakt erfüllen, also [n, k, n − k + 1]-Codes heißen Maximum-Distance-Separable-Codes bzw. optimale Codes. Beweis. Punktiere den Code C so oft, bis der resultierende Code C 0 Minimaldistanz 1 hat. Dazu müssen wir C mindestens d − 1 mal punktieren. Bei jeder Punktierung nimmt die Länge des Codes um 1 ab. Also gilt k ≤ n − (d − 1) = n − d + 1 22 Satz 9 (Hamming-Schranke). Sei Bq (n, r) = {x ∈ Fnq |w(x) ≤ r} die Hammingkugel mit Radius r um 0. Vq (n, r) = |Bq (n, r)| sei das Volumen dieser Kugel. Sei C ein [n, k, d]-Code über Fnq , wobei d = 2r + 1. Dann gilt k ≤ n − logq Vq (n, r) (vergleiche Kugelpackungsbedingung). Beweis. Wir zählen wie viele Hammingkugeln vom Radius r wir höchstens in den Raum Fnq packen können. Für je zwei Codeworte c 6= c0 ∈ C gilt dist(c, c0 ) ≥ d genau dann wenn die Hammingkugeln um c und c0 mit Radius r disjunkt sind. Eine Schranke für die Anzahl möglicher disjunkter Hammingkugeln mit Radius r liefert also eine Schranke für die Anzahl möglicher Codeworte in C. Es gilt |Fnq | = q n . Damit können wir höchstens qn qn n k Vq (n,r) Kugeln im Fq packen, also gilt q = |C| ≤ Vq (n,r) und somit k ≤ n − logq Vq (n, r). Satz 10 (Gilbert-Varshamov-Schranke). Seien n und d mögliche Parameter eines Codes über Fq . Dann existiert ein [n, k, d]-Code C, falls k < n − logq Vq (n, d − 1). Beweis. Die Beweisidee ist, dass ein zufälliger [n, k]-Code wahrscheinlich eine Minimaldistanz ≥ d hat. Wähle G (k × n-Generatormatrix) zufällig gleichverteilt. Für ein Nachrichtenwort x 6= 0 (zufällig gewählt und fest) gilt: Vq (n, d − 1) P r[w(x · G) < d] = qn Für alle x ∈ Fkq \{0} bedeutet das: Vq (n, d − 1) qn Vq (n, d − 1) < qk · qn < 1 nach Voraussetzung P r[∃x ∈ Fkq \{0} : w(x · G) < d] ≤ (q k − 1) · Da die Wahrscheinlichkeit < 1 ist, existiert mit Wahrscheinlichkeit > 0 ein Code mit Minimalgewicht ≥ d. 3.3 Zyklische Codes Definition 26 (Zyklischer Code). Ein linearer Code heißt zyklisch, falls (c0 , . . . , cn−1 ) ∈ C ⇒ (cn−1 , c0 , . . . , cn−2 ) ∈ C Um Struktur ausnutzen zu können, betrachte den Isomorphismus Fnq → Fq [x]/(xn − 1) (c0 , . . . , cn−1 ) 7→ n−1 X i=0 23 ci xi Zyklisches Verschieben entspricht der Multiplikation mit x x· n−1 X ci xi ≡ cn−1 + c0 x + . . . i=0 Satz 11. C ist zyklisch ⇔ C ist Ideal in Fq [x]/(xn − 1) Beweis.“ ⇐ “ c ∈ C ⇒ x · c = (cn−1 , c0 , . . . , cn−2 ) ∈ C “ ⇒ “ z.z. ∀g(x) : g(x) · c(x) ∈ C, falls c(x) ∈ C x · c(x) ∈ C ⇒ ∀i : xi · c(x) ∈ C C istPlinearer Code, also c1 + c2 ∈ C (c1 , c2 ∈ C) ⇒ ( ai xi ) · c(x) ∈ C Konvention Um Sonderfälle zu vermeiden sei ab jetzt ggT(q, n) = 1. Bemerkung. Fq [x]/(xn − 1) ist Hauptidealring, das heißt jedes Ideal C hat einen Erzeuger g(x), so dass C = Fq [x] · g(x). Beweisidee. Wird eine Funktion c ∈ C dargestellt durch zwei Erzeuger c(x) = a1 (x)·g1 (x)+a2 (x)·g2 (x), dann berechne g(x) := ggT(g1 (x), g2 (x)) = d · g1 (x) + e · g2 (x) ∈ C. ⇒ c(x) =? · g(x) Definition 27 (Generatorpolynom). Jeder zyklische Code wird von einem Polynom erzeugt. Das normierte Polynom vom kleinsten Grad heißt Generatorpolynom. Bemerkung. Das Generatorpolynom g(x) von C teilt xn − 1. Beweis. Es gilt g(x) ∈ C und ebenso xn − 1 = 0 ∈ C. Wir setzen g(x) := ggT(g(x), xn − 1). Es gilt also grad(g(x)) ≤ grad(g(x)). Außerdem folgt aus der Definition von g(x), dass es sich als Linearkombination von g(x) und xn − 1 darstellen lässt und somit ebenfalls in C ist. Da g(x) ein Polynom in C von kleinstem Grad ist, folgt grad(g(x)) = grad(g(x)). Es muss also g(x) = g(x) gelten und somit g(x)|xn − 1. Damit ergibt sich: Es sei (xn − 1) = f1 (x) · . . . · ft (x) Zerlegung in irreduzible Polynome. Dann existieren 2t verschiedene Teiler von xn − 1 und damit 2t verschiedene zyklische Codes der Länge n. Beispiel. Wir betrachten Codes über F2 der Länge n = 7. Es gilt (x7 −1) = (x−1)·(x3 +x+1)·(x3 +x2 +1). Es gibt also 23 = 8 zyklische Codes. Beachte im Folgenden, dass sich im F2 die Operationen + und − nicht unterscheiden. • g(x) = 1 erzeugt C = F2 [x]/(x7 − 1). • g(x) = x7 − 1 erzeugt C = {0}. 24 • g(x) = x + 1 erzeugt C = {a(x) · (x + 1)|a(x) ∈ F2 [x]/(x7 − 1)}. Die Multiplikation von a(x) = 0, 1, x, x + 1, . . . , x5 + x4 + x3 + x2 + x + 1 mit g(x) erzeugt 26 verschiedene Polynome, die alle in C liegen. Wir zeigen, dass dies bereits alle Polynome in C sind. Es gilt x6 · (x + 1) = x7 + x6 = (x + 1) · (x5 + x4 + x3 + x2 + x + 1). Sei nun r(x) ein Polynom von Grad ≤ 5 und a(x) = x6 + r(x). Sei c = a(x) · (x + 1) = x6 · (x + 1) + r(x) · (x + 1) = (x5 + x4 + x3 + x2 + x + 1 + r(x)) · (x + 1). Das Codewort c lässt sich also bereits durch die Multiplikation eines Polynom von Grad ≤ 5, nämlich x5 + x4 + x3 + x2 + x + 1 + r(x), mit x + 1 erzeugen. Somit haben wir c bereits oben mitgezählt. Es gilt also |C| = 26 . Somit ist C ein [7, 6]-Code. Die Generatormatrix von C ist x0 1 0 G= 0 0 0 0 x1 1 1 0 0 0 0 x2 0 1 1 0 0 0 x3 0 0 1 1 0 0 x4 0 0 0 1 1 0 x5 0 0 0 0 1 1 x6 0 x0 + x1 1 2 0 x2 + x3 0 x + x 3 4 0 x + x 0 x4 + x5 1 x5 + x6 An der Generatormatrix kann man ablesen, dass jedes Wort c ∈ C gerade Parität hat. • Welchen Code erzeugt g(x) = (x3 + x + 1) · (x3 + x2 + 1) = x6 + x5 + x4 + x3 + x2 + x + 1? Es gilt, dass g(x) mit grad(g(X)) = 6 das Polynom kleinsten Grades in C ist. Es gilt x · g(x) = g(x). Somit ist für a(x) ∈ F2 [x]/(xn − 1) das Produkt a(x) · g(x) ein Vielfaches von g(x) und damit 0 oder g(x). Damit gilt C = {0, g(x)} und C ist [7, 1]-Code. • g(x) = x3 + x2 + 1 und g(x) = x3 + x + 1 erzeugen [7, 4]-Codes. • g(x) = (x3 + x2 + 1) · (x + 1) erzeugt einen [7, 3]-Code. • g(x) = (x3 + x + 1) · (x + 1) = x4 + x3 + x2 + 1 erzeugt einen [7, 3]-Code 25 mit den folgenden 23 = 8 Codeworten: 0 = (0, 0, 0, 0, 0, 0, 0) g1 = (1, 0, 1, 1, 1, 0, 0) g2 = (0, 1, 0, 1, 1, 1, 0) g3 = (0, 0, 1, 0, 1, 1, 1) g1 + g2 = (1, 1, 1, 0, 0, 1, 0) g1 + g3 = (1, 0, 0, 1, 0, 1, 1) g2 + g3 = (0, 1, 1, 1, 0, 0, 1) g1 + g2 + g3 = (1, 1, 0, 0, 1, 0, 1) Die Untersuchung aller 8 Codeworte liefert d = 4. C ist also ein [7, 3, 4]Code. Definition 28 (Maximaler zyklischer Code). Ein Code mit Generatorpolynom fi (x) (ein irreduzibler Faktor von xn − 1) heißt maximaler zyklischer Code. Dies entspricht einem maximalen Ideal. Warum zyklische Codes? Bei den linearen Codes haben wir bereits die algebraische Struktur von Untervektorräumen des Fnq ausgenutzt. Bei zyklischen Codes greifen wir auf Ideale im Restklassenring Fq [x]/(xn − 1) des Polynomrings Fq [x] zurück. Bei zyklischen Codes lassen sich Operationen wie Codieren, Parity-Check, etc. mit effizienten Polynomoperationen darstellen. Eine Polynommultiplikation kann beispielsweise in geeigneten Ringen in O(n log n) durchgeführt werden, wohingegen das Vektor-Matrix-Produkt nur in O(n2 ) berechnet werden kann. Darüber hinaus erlaubt die Ringstruktur auch eine einfache Konstruktion von Codes und diese Codes lassen sich mit gut verstanden Techniken für Ringe/Algebren untersuchen. Da der Fq [x] euklidisch ist, ist eine Polynomdivision möglich. Diese kann z.B. zur Decodierung eingesetzt werden. Da Fq [x] euklidisch ist, ist er auch ein Hauptidealring, das heißt für jedes Ideal I ≤ Fq [x] gilt ∃g(x) ∈ Fq [X] : I = hg(x)i. Da Fq [x] nullteilerfrei ist, ist er auch ein faktorieller Ring, das heißt jedes f (x) ∈ Fq [x] besitzt eindeutige Zerlegung in f (x) = f1 (x) · . . . · ft (x) mit irreduziblen Polynomen fi (x). Falls char(Fq ) 6 |n, dann zerfällt xn − 1 in paarweise verschiedene irreduzible Faktoren xn − 1 = f1 (x) · . . . · ft (x). xn − 1 ist dann also “quadratfrei”. Der Chinesische Restsatz sagt uns Fq [x]/(xn − 1) ∼ = Fq [x]/f1 (x) × . . . × Fq [x]/ft (x) Der zugehörige Isomorphismus Φ ist die Fouriertransformation. In Hauptidealringen sind Primideale maximal. Da die fi (x) irreduzibel sind, sind die Ji = hfi (x)i also maximale Ideale. Damit gilt: Fq [x]/fi (x) ∼ = Fq grad(fi ) =: Ki 26 Fq [x]/fi (x) ist also Erweiterungskörper vom Grad grad(fi ) von Fq . Da die Ki Körper sind, haben sie eine triviale Idealstruktur Ki = h1i und {0} = h0i. Ideale I in K1 × . . . × Kt haben also die Form I = I1 × . . . × It , wobei für alle j ∈ {1, . . . , t} entweder Ij = h1i oder Ij = h0i gilt. Wie sieht Φ genau aus? Sind φ1 , . . . , φt Erzeuger von K1 , . . . , Kt , also Ki = Fq [φi ], lässt sich Φ darstellen als: Φ : Fq [x]/(xn − 1) → K1 × . . . × Kt c(x) 7→ (c(φ1 ), . . . , c(φt )) Maximale zyklische Codes entsprechen genau den Idealen I = I1 × . . . × It für welche für genau ein j gilt, dass Ij = h0i und für alle anderen i 6= j gilt Ii = h1i. Generatormatrix eines zyklischen Codes Sei C = hg(x)i mit grad(g(x)) = Pk−1 n−k, sei a(x) = i=0 ai xi . Stelle c(x) = g(x)·a(x) als Matrixmultiplikation dar. B = {1, x, x2 , . . . , xn−1 } ist Vektorraumbasis von Fq [x]/(xn − 1). Sei G die Generatormatrix von C g0 · · · gn−k 0 · · · 0 .. .. .. 0 ... . . . G=. . .. .. .. .. . . 0 0 ··· 0 g0 · · · gn−k Prüfpolynom und Prüfmatrix eines zyklischen Codes Definition 29 (Prüfpolynom). Analog zur Prüfmatrix definieren wir für zyklische Codes ein Prüfpolynom h(x), sodass ∀c(x) ∈ C : h(x) · c(x) = 0. Ein solches Polynom existiert, da g(x)|xn −1 und somit g(x) in Fq [x]/(xn −1) invertierbar ist. Wir bestimmen nun die Prüfmatrix eines zyklischen Codes C mit Erzeugerpolynom g(x). Es gilt g(x)|xn − 1 und wie eben beschrieben existiert ein P Prüfpolynom h ∈ Fq [x]/(xn − 1) mit gh = xn − 1 ≡ 0. Sei h = ki=0 hi xi , dann gilt ∀i ∈ {1, . . . , n − 1} : g0 hi + g1 hi−1 + g2 hi−2 + . . . + gn−k hi−n+k = 0. Somit hat die Prüfmatrix H die folgende Form: 0 · · · 0 hk · · · · · · .. . ... ... H= . 0 ... .. hk · · · · · · · · · h0 0 27 ··· . .. . .. ··· h0 0 .. . 0 Wir werden nun noch eine alternative Darstellung der Prüfmatrix bestimmen: Der Chinesische Restsatz liefert uns, dass C ∼ = I1 × . . . × It , wobei Ii = h0i oder Ii = h1i. Seien i1 , . . . , il die Indizes mit Iij = h0i. Sei Φ : Fq [x]/(xn − 1) → K1 × . . . × Kt , f (x) 7→ (f (ξ1 ), . . . , f (ξt )) (Woher Anmerkung kommen die ξi ?) der zum Chinesischen Restsatz gehörende Isomorphismus. Dann gilt für alle c ∈ C : c(ξi1 ) = . . . = c(ξil ) = 0. Weil Φ ein Isomorphismus ist, sind diese Bedingungen hinreichend für c ∈ C. Schreiben e wir diese Gleichungen in Matrixform, so erhalten wir die Prüfmatrix H. 1 ξi1 ξi21 . . . ξin−1 1 1 ξi ξ 2 . . . ξ n−1 2 i2 i2 e H = . . .. .. .. .. . . 1 ξil ξi2l . . . ξin−1 l (Damit die Prüfmatrix die richtigen Dimensionen hat, muss jetzt Anmerkung l = n − k gelten. Wieso gilt das?) Fasst man die Körperelemente ξimj ∈ Kij = Fq [ξij ] (Verstehe ich nicht.) als Spaltenvektoren über Fq auf, so Anmerkung erhält man eine alternative Prüfmatrix. (Noch eine dritte?) Anmerkung 3.3.1 Bose-Chaudhuri-Hocquenghem-Codes (BCH-Codes) Definition 30 (BCH-Codes). Sei β eine primitive n-te Einheitswurzel in einem Erweiterungskörper von Fq . Seien weiter l, δ ∈ N mit δ ≥ 2. Sei C der zyklische Code, dessen Erzeugerpolynom g(x) das kleinste gemeinsame Vielfache der verschiedenen Minimalpolynome von β l , . . . , β l+δ−2 ist. Für c ∈ C gilt also c(β l ) = . . . = c(β l+δ−2 ) = 0. C heißt BCH-Code mit geplanter Minimaldistanz δ. Satz 12. Für die Minimaldistanz d eines BCH-Codes C mit geplanter Minimaldistanz δ gilt d ≥ δ. Beweis. Es gilt für alle c ∈ C : c(β l ) = . . . = c(β l+δ−2 ) = 0. Die ParityCheck-Matrix lässt sich also darstellen als 1 βl β 2l ··· β (n−1)l 1 β l+1 β 2(l+1) · · · β (n−1)(l+1) H = . , .. .. .. . . . . . l+δ−2 2(l+δ−2) (n−1)(l+δ−2) 1 β β ··· β wobei jeder Eintrag in dieser Matrix als Spaltenvektor der Länge m über Fq aufgefasst wird. Ein Wort c ∈ Fnq liegt in C genau dann, wenn c · H > = 0. Gilt für jedes c mit w(c) < δ, dass c · H > = 0, dann ist die Minimaldistanz von C größer oder gleich δ. Das gilt offensichtlich, wenn je δ − 1 Spalten von 28 H linear unabhängig sind. Jede Spalte von H hat die Form β il 1 β i(l+1) βi hi = = β il .. . .. . . β i(δ−2) β i(l+δ−2) Sei hi1 , . . . , hiδ−1 die Submatrix von H, die aus den Spalten von H mit Indizes i1 , . . . , iδ−1 besteht, also Hi1 ,...,iδ−1 = (hi1 , . . . , hiδ−1 ). hi1 , . . . , hiδ−1 sind genau dann linear unabhängig, wenn det(Hi1 ,...,iδ−1 ) 6= 0. Es gilt 1 · · · 1 i i δ−1 1 d−1 Y β ··· β ij l det(Hi1 ,...,iδ−1 ) = β · .. .. . . j=1 δ−2 δ−2 i β i1 · · · β d−1 Die Determinante dieser Vandermonde-Matrix lässt sich leicht berechnen und wir formen die Gleichung um zu: det(Hi1 ,...,iδ−1 ) = δ−1 X β ij l j=1 Y (β ir − β is ) 6= 0 r>s Damit sind hi1 , . . . , hiδ−1 linear unabhängig und deshalb hat C Minimaldistanz ≥ δ. 3.3.2 Reed-Solomon-Codes Definition 31 (Reed-Solomon-Code). Ein Reed-Solomon-Code ist ein primitiver BCH-Code C der Länge n = q − 1 über Fq . Das Generatorpolynom Q eines solchen Codes hat die Form g(x) = δ−1 i=1 (x − αi ), wobei αi Primitivwurzel von Fq ist und δ die geplante Minimaldistanz von C ist. (α ist genau dann Primitivwurzel von Fq , wenn ∀a ∈ Fq \{0} : ∃i ∈ N : a = αi .) Ein solcher Code hat Dimension k = n − δ + 1. Es gilt d ≥ δ, da C ein BCH-Code ist. Andererseits sagt die Singleton-Schranke d ≤ n − k + 1. Damit hat C Minimaldistanz d = δ. Weitere Materialien • http://graphics.ethz.ch/teaching/former/showOldCourse.php? page=infotheory0607&subpage=notes&title=Informationstheorie% 20(WS%2006/07) • http://www2.iwr.uni-heidelberg.de/groups/compalg/matzat/PDF/ Codierungstheorie.pdf 29