Grundlagen der Informatik
| ||||||||||||||||||||||||||||||||
| 1 | 0 | 1 | 1 |
| 0 | 1 | 0 | 1 |
| Nebenklasse | Nebenklassenführer | Syndrom |
| { 0000, 1010, 1101, 0111 } | 0000 | 00 |
| { 0011, 1001, 1110, 0100 } | 0100 | 01 |
| { 0010, 1000, 1111, 0101 } | 1000 | 10 |
| { 0001, 1011, 1100, 0110 } | 0001 | 11 |
Hammingcodes
Hammingcodes sind Codes mit einer speziellen Prüfmatrix H. In einem Vektorraum V(m) ist m die Dimension und n = 2^m - 1 die Anzahl der darin enthaltenen Vektoren ohne den Nullvektor. Mit k = n - m beschreibt man einen [n, k]-Hamming-Code. Wir konstruieren die Prüfmatrix H mit m Einheitsvektoren und fügen dahinter alle verbleibenden Vektoren aus V(m) an. Die Generator-Matrix erzeugen wir aus der Prüfmatrix: H = (I(m), A) -> G = (At, I(k))
Beispiel: Sei m = 3, so ist ein [7,4]-Hamming-Code definiert durch:

Jeder Hammingcode ist ein perfekter Einzelfehlerkorrekturcode.
Decodierung von Hamming-Codes
Ordne die Spalten von H bei der Konstruktion so an, dass die i-te Spalte die Zahl i darstellt. Dann ist das errechnete Syndrom eines Codewortes zugleich die Fehlerposition in der Nachricht.
Betrachten wir lineare Codes, so können wir darin auch solche finden, die sich durch Verschiebung von Bitpsitionen nach links oder rechts darstellen lassen. Solche Codes heißen zyklisch. {110, 011, 101, 000 } wäre ein solcher zyklischer Code.
Es lässt sich zeigen, das zyklische Codes gleichzusetzen sind mit Polynomringen. Wir können dann mit den Codewörtern rechnen wie im Restklassenring von Polynomen. Dabei stellt jedes Codewort einen Rest dar. Das Null-Polynom wird zusätzlich mit aufgenommen. Der Code {110, 011, 101, 000 } ist dann gleichbedeutend mit den Polynomen { 1+x, x+x², 1+x², 0 }.
Allgemein: Für einen (n+1)-dimensionalen Vektorraum von Codewörtern suchen wir uns einen Polynomring n-ten Grades. Dazu müssen die Codewörter zyklisch sein. Das Polynom niedrigsten Grades ist unser Generatorpolynom g(x). Im obigen Beispiel 1+x.
Nachweis: Um zu prüfen, ob ein Code zyklisch ist, muss man zeigen, dass g(x) ein Teiler von X^n - 1 ist.
Ein Prüfpolynom h(x) erhalten wir, indem wir X^n - 1 durch das Generatorpolynom Teilen:
![]()
Codierung: Um ein Codewort c zu Codieren, multiplizieren wir c(x) * g(x) = y(x). Um daraus ein Syndrom zu ermitteln multiplizieren wir s(x)=h(x)*y(x) mod g(x). Wir berechnen das Syndrom also im Restklassenring modulo g(x). Ist s(x) das Nullpolynom, so war y(x) ein Codewort, ansonsten trat bei der übertragung ein Fehler auf.
Polynome als Matrizen
Wir betrachten einen
Code mit k Informationsstellen und n - k Prüfstellen. Dann sei
ein Generatorpolynom. Es lässt
sich nachweisen, das die Multipolikation von Polynomen durch eine
Matrizenmultiplikation dargestellt werden kann. Wie man Polynome
multipliziert, kann hier icht näher erläutert werden und sollte
eigentlich auch bekannt sein. Eine Generatormatrix G, die dem
Polynom g(X) entspricht, sieht so aus:

Durch Matrizenmultiplikation c(x) * G erhalten wir wie gewohnt unser zur Übertragung bereites Codewort y(x). Die Matrix hat genau so viele Spalten, wie c Stellen hat, nämlich k.
Analog erhalten wir eine Prüfmatrix H aus dem Prüfpolynom h(x) in umgekehrter Anordnung der Koeffizienten mit n - k Zeilen. Wir beginnen links oben mit hk und enden rechts unten mit h0.
|
© Gerhard Zapf
|
||||
Letzte Änderung: 11.09.2003 |
||||