Fehlerkorrektur

Erkennt der Empfänger einen Übertragungsfehler, zum Beispiel mithilfe von Prüfbits, kann er den Sender um eine erneute Übertragung der Daten bitten. Bei der Vorwärtsfehlerkorrektur ist dagegen häufig keine Neuübertragung erforderlich. Dazu werden den Nutzdaten zusätzliche Informationen hinzugefügt, zum Beispiel mehrere Prüfbits. Damit kann der Empfänger unter bestimmten Voraussetzungen nicht nur erkennen, dass ein Fehler aufgetreten ist, sondern auch bestimmen, welches Bit fehlerhaft ist, und dieses korrigieren. Im Englischen wird dieses Verfahren als Forward Error Correction (FEC) bezeichnet.

Wie das im Detail funktionieren kann, zeigt die nebenstehende Vertiefung am Beispiel eines Hamming-Codes. Das genaue Verfahren ist nicht prüfungsrelevant.

AE413: Sie verwenden ein Datenübertragungsverfahren ohne Vorwärtsfehlerkorrektur. Wodurch können Datenpakete trotz Prüfsummenfehlern korrigiert werden?
AE414: Was ist die Voraussetzung für Vorwärtsfehlerkorrektur (FEC)?

Der Hamming-Code ist ein Fehlerkorrekturverfahren, das mehrere Paritätsbits verwendet. Nehmen wir an, wir wollen die folgenden $\num{11}$ Datenbits übertragen:

Dieser Alt-Text wurde noch nicht überprüft.

1) Kurze Zusammenfassung: Eine waagerechte Reihe von elf nebeneinanderliegenden, schwarz umrahmten Kästchen, in denen abwechselnd die Ziffern 0 und 1 stehen.

2) Detaillierte Beschreibung: Die Kästchen sind rechteckig, gleich groß und auf weißem Grund dargestellt, jeweils mit einer einzelnen Ziffer zentriert. Von links nach rechts lauten die Ziffern: 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1. Es sind keine Achsen, Pfeile oder zusätzlichen Beschriftungen vorhanden.
Abbildung NEA-16.25.1:

Damit ein einzelner Bitfehler nicht nur erkannt, sondern auch korrigiert werden kann, müssen wir feststellen können, an welcher Stelle der Fehler aufgetreten ist. Dazu betrachten wir zunächst die Positionen der einzelnen Bits und benennen sie alphabetisch:

Dieser Alt-Text wurde noch nicht überprüft.

1) Kurzbeschreibung: Eine waagerechte Reihe aus elf gleich großen, umrahmten Kästchen, jeweils mit den Kleinbuchstaben „a“ bis „k“ beschriftet.

2) Detaillierte Beschreibung: Von links nach rechts sind elf rechteckige Felder mit dünnem schwarzen Rahmen zu sehen, durch senkrechte Linien voneinander getrennt. In jedem Feld steht zentriert ein einzelner Kleinbuchstabe, in Reihenfolge: „a“, „b“, „c“, „d“, „e“, „f“, „g“, „h“, „i“, „j“, „k“. Weitere Beschriftungen, Achsen oder Symbole sind nicht vorhanden; Hintergrund und Felder sind hell.
Abbildung NEA-16.25.2:

Nun ordnen wir die Datenbits etwas anders an und fügen vier zusätzliche Paritätsbits $p_1$ bis $p_4$ hinzu:

Dieser Alt-Text wurde noch nicht überprüft.

1. Kurzzusammenfassung: Ein 4×4-Raster mit schwarzen Gitterlinien; einige Felder enthalten schwarze Kleinbuchstaben von a bis k.

2. Detaillierte Beschreibung: Weißer Hintergrund, dicke schwarze Linien bilden ein 4 Spalten × 4 Zeilen großes Quadratgitter. Die Buchstaben stehen mittig in bestimmten Zellen. Bezeichnung der Positionen (Zeilen von oben nach unten 1–4, Spalten von links nach rechts 1–4): Zeile 1: Spalte 1–3 leer, Spalte 4 „a“. Zeile 2: Spalte 1 leer, Spalte 2 „b“, Spalte 3 „c“, Spalte 4 „d“. Zeile 3: Spalte 1 leer, Spalte 2 „e“, Spalte 3 „f“, Spalte 4 „g“. Zeile 4: Spalte 1 „h“, Spalte 2 „i“, Spalte 3 „j“, Spalte 4 „k“. Alle Buchstaben sind schwarz und in Kleinbuchstaben dargestellt.
Abbildung NEA-16.25.3:

Die vier Paritätsbits überprüfen unterschiedliche, sich überlappende Gruppen von Bits:

Dieser Alt-Text wurde noch nicht überprüft.

Kurzbeschreibung: Ein 4×4-Raster mit dicken schwarzen Linien; die Zellen enthalten teils die Zeichen p1–p4 und die Buchstaben a–k, eine Zelle ist leer.

Detailbeschreibung: Das Raster hat vier Zeilen und vier Spalten. Von oben nach unten, jeweils von links nach rechts gelesen:
- Zeile 1: Zelle 1 leer; Zelle 2 „p1“ (kursiv); Zelle 3 „p2“ (kursiv); Zelle 4 „a“.
- Zeile 2: Zelle 1 „p3“ (kursiv); Zelle 2 „b“; Zelle 3 „c“; Zelle 4 „d“.
- Zeile 3: Zelle 1 „p4“ (kursiv); Zelle 2 „e“; Zelle 3 „f“; Zelle 4 „g“.
- Zeile 4: Zelle 1 „h“; Zelle 2 „i“; Zelle 3 „j“; Zelle 4 „k“.
Die Buchstaben a–k sind in normaler, aufrechter Schrift gesetzt.
Abbildung NEA-16.25.4:

Jedes Paritätsbit sichert dabei eine bestimmte Gruppe ab:

Dieser Alt-Text wurde noch nicht überprüft.

1) Kurze Zusammenfassung: Eine 4-zeilige, 16-spaltige Gittergrafik mit abwechselnd grau und weiß hinterlegten Zellen, die in vier identische 4-Spalten-Blöcke mit den Beschriftungen p1, p2, a, p3, b, c, d, p4, e, f, g, h, i, j, k unterteilt sind.

2) Detaillierte Beschreibung: Das Gitter besteht aus vier Zeilen und sechzehn Spalten, visuell in vier gleich breite Blöcke zu je vier Spalten gegliedert. In jedem Block wiederholt sich dieselbe Anordnung der Zelltexte. Zeile 1 eines Blocks zeigt (von links nach rechts): „p1“, „p2“, „a“ und eine leere Zelle. Zeile 2 zeigt: „p3“, „b“, „c“, „d“. Zeile 3 zeigt: „p4“, „e“, „f“, „g“. Zeile 4 zeigt: „h“, „i“, „j“, „k“. Viele Zellen sind grau hinterlegt, andere weiß; die Grau-/Weißflächen wechseln feldweise und das Wechselmuster wiederholt sich blockweise über die gesamte Breite. Es sind nur die genannten Buchstaben und Zeichenfolgen „p1“, „p2“, „p3“, „p4“ sichtbar; weitere Achsen, Pfeile oder Legenden sind nicht vorhanden.
Abbildung NEA-16.25.5:

Für jede dieser Gruppen berechnen wir nun das zugehörige Paritätsbit mit Even Parity:

Dieser Alt-Text wurde noch nicht überprüft.

Kurzfassung: Ein 4×4-Raster mit dicken schwarzen Linien zeigt Ziffern 0 und 1, einige Felder sind grau hinterlegt, mehrere Einträge haben kleine tiefgestellte Buchstaben; das Feld oben links ist leer.

Detaillierte Beschreibung:
- Rahmen: Schwarzer Rand, Raster mit dicken schwarzen Linien.
- Zeile 1 (von links nach rechts): 
  1) weiß, leer; 2) grau, „1“; 3) grau, „0“; 4) weiß, „1_a“ (a klein, tiefgestellt rechts unten).
- Zeile 2:
  1) grau, „0“; 2) weiß, „1_b“; 3) weiß, „0_c“; 4) weiß, „0_d“.
- Zeile 3:
  1) grau, „1“; 2) weiß, „1_e“; 3) weiß, „0_f“; 4) weiß, „1_g“.
- Zeile 4:
  1) weiß, „1_h“; 2) weiß, „0_i“; 3) weiß, „1_j“; 4) weiß, „1_k“.
Abbildung NEA-16.25.6:

Tritt bei der Übertragung ein einzelner Bitfehler auf, schlagen bestimmte Paritätsprüfungen fehl. Aus der Kombination der fehlgeschlagenen Prüfungen lässt sich bestimmen, an welcher Position der Fehler aufgetreten ist. Das fehlerhafte Bit kann anschließend umgekehrt und damit korrigiert werden.

Wird zum Beispiel das Bit $k$ bei der Übertragung zu einer $\num{0}$, schlagen alle vier Paritätsprüfungen $p_1$ bis $p_4$ fehl. Nur Bit $k$ gehört zu allen vier überprüften Gruppen. Der Fehler muss daher bei Bit $k$ liegen.

Tritt dagegen ein Fehler im Bit $a$ auf, schlagen nur die Paritätsprüfungen von $p_1$ und $p_2$ fehl, während die Prüfungen von $p_3$ und $p_4$ erfolgreich sind. Aus diesem Muster kann der Empfänger erkennen, dass Bit $a$ fehlerhaft ist.

Auch ein Fehler in einem Paritätsbit selbst kann erkannt und korrigiert werden. Ist beispielsweise $p_1$ fehlerhaft, schlägt nur die zu $p_1$ gehörende Paritätsprüfung fehl, während die Prüfungen von $p_2$, $p_3$ und $p_4$ erfolgreich sind. Der Fehler muss daher bei $p_1$ liegen.

Der hier gezeigte Hamming-Code ist für die Korrektur eines einzelnen Bitfehlers ausgelegt. Treten mehrere Bitfehler gleichzeitig auf, kann aus den Paritätsprüfungen nicht mehr zuverlässig auf die tatsächliche Fehlerposition geschlossen werden. Erweiterte Hamming-Codes können zusätzlich beispielsweise zwei gleichzeitig auftretende Bitfehler sicher erkennen.


Weiter zum nächsten Abschnitt: Sende- und Empfangsketten