Hamming-Code und Hamming-Abstand
Im Rahmen meiner Vorbereitungen auf die Klausur habe ich mich etwas länger als gewünscht mit der Berechnung des Hamming-Codes und des Hamming-Abstands herumschlagen müssen. Der Hamming-Code kann dazu benutzt werden, einfache Fehler in Worten zu finden und zu korrigieren. Wir definieren hier mal zunächst den Hamming-Abstand wie im Skript:
Hamming-Abstand (hd) zwischen zwei Worten ist die Anzahl der der Bitstellen, an denen sich zwei Worte unterscheiden.
Hamming-Abstand (HD) des gesamten Codes ist der Mindestabstand zwischen den einzelnen Worten. D. h. haben wir Worte , und , so berechnen wir zunächst die Abstände , , und wählen davon den kleinsten.
Beispiel: , und . Unser Codewort ist:
, da sich und an Stellen 2 und 3 unterscheiden.
, da sich und an Stellen 1, 2 und 3 unterscheiden.
, da sich und nur an Stelle 1 unterscheidet.
Damit ist der Hamming-Abstand des gesamten Codes
Berechnung des Hamming-Codes
Wie berechnen wir nun den Hamming-Code eines gegebenen Datenworts? Das ist ebenfalls nicht schwer, lädt aber dazu ein, sich zu verrechnen.
Beispiel: Hamming-Code für
1. Festlegeung wie viele Prüfbits benötigt werden: Jedes Bit an Stelle einer Zweierpotenz wird ein Prüfbit. Wir haben 8 Stellen in unserem Datenwort und brauchen daher 4 Prüfbits. Macht also insg. 12 Bits in unserem neuen Codewort.
2. Damit sieht unser "Platzhalter-Codewort" wie folgt aus:
_ _ 0 _ 1 0 0 _ 1 1 0 1
mit Platzhaltern für Prüfbits und .
3. Nun schauen wir, was der Inhalt der Prüfbits wird, denn nicht jedes Datenbit geht in die Berechnung eines jeden Prüfbits ein. Wir legen folgendes fest (und das wird nun ein komischer Satz, aber keine Sorge, er wird gleich erklärt): Ein Bit aus dem Datenwort auf Postion wird nur dann in die Berechnung des Prüfbits einbezogen, wenn die binäre Darstellung von an Position eine hat. Puh!
Aber keine Sorge, das entschlüsseln wir gleich. Frage ist: Welche Datenbits aus unserem Datenwort gehen in die Berechnung von und ein? Dazu gehen wir wie folgt vor:
3a. Wir nummerieren die 12 Bits / Stellen unseres "Platzhalter-Codeworts" von links nach rechts:
1 2 3 4 5 6 7 8 9 10 11 12 _ _ 0 _ 1 0 0 _ 1 1 0 1
Z. B. Für Prüfbit muss lt. Definition an Stelle der binären Darstellung der Position im "Platzhalter-Codeworts" eine stehen, wenn der Wert von der Position aus dem "Platzhalter-Codeworts" in die Berechnung von einfließen darf. Die Werte für sind die Positionen der Datenbits (die Prüfbits gehen ja nicht in die Berechnung ein), d. h. und . Wir stellen also Positionen 3, 5, 6, 7, 9, 10, 11, 12 zunächst in binär dar.
Da wir nun für alle Codeworte prüfen müssen, ob an der betreffenden Stelle eine steht, nummerieren wir diese Auflistung der Übersichtlichkeit halber (nicht vergessen: hier gilt von rechts nach links):
Binär 8 4 2 1 -------------------- Position 03: 0 0 1 1 Position 05: 0 1 0 1 Position 06: 0 1 1 0 Position 07: 0 1 1 1 Position 09: 1 0 0 1 Position 10: 1 0 1 0 Position 11: 1 0 1 1 Position 12: 1 1 0 0 -------------------- Stelle 3 2 1 0
- Wir prüfen für alle Positionen nun für , ob an Stelle eine steht: bei Position 3, 5, 7, 9, 11 steht das. Also gehen Positionen 3, 5, 7, 9 und 11 des "Platzhalter-Codeworts" in die Berechnung von ein.
- Nun ist dran. Die zu prüfende Stelle ist . Positiv für Position: 3,6,7,10,11.
- Für : Die zu prüfende Stelle ist . Positiv für Position: 5,6,7,12.
- : Die zu prüfende Stelle ist . Positiv für Position: 9,10,11,12.
Ist die Summer der Positionen gerade, so ist . Ist sie ungerade, so ist . Hier noch einmal unser "Platzhalter-Codewort" mit nummerierten Stellen:
1 2 3 4 5 6 7 8 9 10 11 12 _ _ 0 _ 1 0 0 _ 1 1 0 1
Wir berechnen nun die Prüfbits.
- , da (gerade)
- , da (ungerade)
- , da (gerade)
- , da (ungerade)
4. Nun haben wir unsere Prüfbits berechnet uns setzen sie an entsprechender Stelle in unser "Platzhalter-Codewort" (Prüfbits sind fett):
1 2 3 4 5 6 7 8 9 10 11 12 0 1 0 0 1 0 0 1 1 1 0 1
Damit ist unser gesuchtes Hamming-Codewort:
Beispiel 2: Versucht es mal selbst mit
Und wieder zurück
Stellt sich die Frage, wie wir eingeschlichene Fehler wieder beseitigt bekommen. Wir bleiben bei unserem ersten Beispiel und nehmen an, das obige Codewort sei falsch übertragen worden:
1 2 3 4 5 6 7 8 9 10 11 12
0 1 0 0 1 0 0 1 1 1 0 1 (korrektes Codewort)
0 1 0 0 1 0 0 1 0 1 0 1 (falsch übertragenes Codewort, Fehler rot markiert)
1. Wir empfangen das fehlerhafte Codewort und schreiben uns zunächst die Prüfbits und die zugehörigen Bitpositionen zum Prüfbit raus:
- , es ist aber (ungerade) - Fehler!
- , es ist (ungerade) - OK!
- , es ist (gerade) - OK!
- , es ist aber (gerade) - Fehler!
2. Wir haben damit in und einen Fehler. . Der Fehler im Codewort ist also auf in Bit 9!
Gar nicht so schwer, oder?