Linearer Code
Ein Linearer Code ist in der Kodierungstheorie ein spezieller Blockcode: Man betrachtet die Blöcke als endlichdimensionale Vektorräume über einen endlichen Körper . Ein Code ist genau dann ein Linerarer Code , falls er ein Untervektorraum von ist.
Die Linearen Codes haben den Vorteil, dass Methoden der Linearen Algebra verwendet werden können. Sie sind somit einfach zu codieren und decodieren.
Die meisten wichtigen Codes sind linear: Hamming Code, Reed-Muller-Code, Hadamard-Code, alle zyklischen Codes (Damit auch BCH und Reed-Solomon Codes), Golay Codes, Goppa-Codes.
Ist die Vektorraumdimension von gleich , so nennt man einen -Code, oder bei einem Hammingabstand von auch -Code.
Eigenschaften
Da einen Untervektorraum besitzt, existiert eine Basis . Fasst man diese Basis in einer Matrix
zusammen erhält man eine Erzeugermatrix. Desweiteren besitzt der Code eine Kontrollmatrix , diese hat die Eigenschaft, dass gilt für alle Codewörter des Codes . Der Hammingabstand von ist gleich der minimalen Anzahl von linear abhängigen Spalten der Kontrollmatrix.
Permutiert man die einzelnen Koordinaten der Codewörter, dann erhält man einen äquivalenten Code. Damit und mittels linearer Algebra kann man zu jedem linearen Code eine äquivalenten finden, der eine Erzeugermatrix der Form hat, dabei ist die Einheitsmatrix, und ist eine Matrix. heißt dann eine Erzeugermatrix in reduzierter Form. Die ersten Koordinaten können dann als Informationssymbole und die letzten als Kontrollsymbole interpretiert werden. Ist eine Erzeugermatrix in reduzierter Form, kann eine Kontrollmatrix sofort gefunden werden: . Ein linearer Code ist bereits durch seine Erzeugermatrix oder seine Kontrollmatrix bestimmt.
Beispiel: der -Hammingcode besitzt folgende Erzeugermatrix in reduzierter Form, sowie die dazugehörige Konrollmatrix.
Codierung
Ein Wort aus dem Raum wird codiert, indem das Produkt gebildet wird. Soll beispielsweise das Wort mit dem -Hammingcode codiert werden, sieht das so aus:
- .
Man beachte, dass hier die Multiplikation in erfolgt, also modulo 2.
Decodierung
Als Decodierung wird in der Codierungstheorie die maximum-likehood Methode verdwendet, sprich ein empfangenes Wort wird zu dem Codewort decodiert, welches den geringsten Hammingabstand zu hat. Es sei , wird Fehlervektor genannt. In sind genau die Koordinaten ungleich Null, bei denen während der Übertragung Fehler auftraten. Nun sind alle (fehlerhaften) Wörter mit dem gleichen Fehlervektor im gleichen affinen Unterraum. Deshalb ist für solche Worte konstant.
Daraus resultiert folgende Decodierregel: Wähle für jeden möglichen Fehlervektor jeweils das Wort mit minimalem Hamminggewicht, also das mit möglichst wenigen Koordinaten ungleich Null; und damit sozusagen ein "fehlerhaftes" Nullwort. Für jedes dieser Worte berechne man und speichere diese Paare. Man kann somit für jedes den dazugehörenden Fehlervektor berechen. Um dann ein empfanges Wort zu decodieren berechnet man dann . Damit erhält man ein gültiges Codewort, ist noch in reduzierter Form, kann dann die Information einfach an den ersten Symbolen abgelesen werden (falls nicht muss eventuell noch ein lineares Gleichungssystem gelöst werden). heißt dabei Nebenklassenführer und Syndrom, die Decodieregel Syndrom-Decodierung.
Will man den -Hammingcode decodieren, trifft man zuerst die Annahme, dass nur -Bit Fehler auftreten (falls mehr Fehler auftreten ist keine Fehlerkorrektur sondern nur noch eine Fehlererkennung möglich). Die möglichen Fehlervektoren sind dann , , , , , , , Für jeden dieser Fehlervektoren wird nun das Syndrom berechnet. Damit ergibt sich
Wird dann das Wort empfangen ergibt dann . Damit ergibt sich der Fehlervektor und wird somit nach decodiert, das Klartextwort ist dann .
Anwendung
Die Codierung und Decodierung ist, so wie sie oben beschrieben ist, relativ aufwendig. Bei der Codierung muss die Erzeugermatrix im Speicher gehalten werden, was bei Systemen mit begrenzten Ressourcen (zum Beispiel mobile Endgeräte oder Weltraumsonden) problematisch ist. Bei der Decodierung wird eine - je nach Korrekturrate - große Tabelle benötigt, der Speicherverbrauch ist dementsprechend groß. Aus diesem Grund werden in der Regel zusätzliche Eigenschaften der Codes benutzt um diese effizient zu codieren und decodieren. Binäre Zyklische Codes lassen sich beispielsweise sehr einfach mittels Schieberegister und XOR Gatter realisieren.
Literatur
Werner Lütkebohmert: Codierungstheorie, Vieweg Verlag, 2003, ISBN 3-528-03197-2
J. H. van Lint: Introduction to Coding Theory, Springer Verlag, 1999, ISBN 3-540-64133-5
F. J. MacWilliams, N. J. A. Sloane: The Theory of Error-Correcting Codes, North-Holland publishing company, 1972