StartseiteAlgorithmen & KIHamming-Codes

⚙️ Hamming-Codes

Visualisieren Sie, wie Hamming-Codes Einzelbitfehler erkennen und korrigieren. Die Grundlage moderner Datenspeicherung und -übertragung.

Algorithmen & KI2DEinfach60 FPS
hamming-codes ↗ Eigenständig öffnen

Über Hamming-Codes SECDED

Hamming-Codes sind eine Familie linearer, fehlerkorrigierender Codes, die 1950 von Richard Hamming bei Bell Labs erfunden wurden. Ein Hamming(7,4)-Code codiert 4 Datenbits in 7 Codewortbits, indem 3 Paritätsbits an Zweierpotenz-Positionen (1, 2, 4) hinzugefügt werden; jedes Paritätsbit deckt eine bestimmte Teilmenge von Datenbitpositionen ab, die durch die Spalten der Paritätsprüfmatrix H definiert wird. Diese Anordnung verleiht dem Code einen minimalen Hamming-Abstand von 3, wodurch garantiert wird, dass er jeden Einzelbitfehler korrigieren und jeden Zweibitfehler erkennen kann. Fügt man ein zusätzliches Gesamtparitätsbit hinzu, entsteht der SECDED-Code (Single-Error Correcting, Double-Error Detecting) Hamming(8,4), der in ECC-RAM verwendet wird, wo ein gekipptes Speicherbit bei jedem Lesevorgang automatisch korrigiert wird.

Der Simulator erlaubt es Ihnen, 4-Bit-Datenwörter einzugeben, dabei zuzusehen, wie die Paritätsprüfmatrix sie in 7- oder 8-Bit-Codewörter codiert, einzelne oder doppelte Bitkipper einzufügen und die Syndrom-Decodierung zu beobachten: Der Syndromvektor s = H·r (mod 2) zeigt direkt auf die Position des fehlerhaften Bits und ermöglicht so eine automatische Korrektur in einem Schritt.

Häufig gestellte Fragen

Wie lokalisiert die Syndrom-Decodierung einen Einzelbitfehler?

Nach Empfang eines Codeworts r berechnet der Decoder das Syndrom s = H·r (mod 2), wobei H die Paritätsprüfmatrix ist. Ist s = 0, wird kein Fehler erkannt. Ist s ≠ 0, entspricht es einer der Spalten von H; die Position dieser Spalte identifiziert das zu invertierende Bit. Bei Hamming(7,4) ist das Syndrom eine 3-Bit-Binärzahl, die direkt dem 1-basierten Index des fehlerhaften Bits entspricht, was die Korrektur in Hardware trivial schnell macht.

Was ist der Hamming-Abstand und warum ist er wichtig?

Der Hamming-Abstand zwischen zwei Codewörtern ist die Anzahl der Bitpositionen, in denen sie sich unterscheiden. Ein Code mit minimalem Hamming-Abstand d_min kann bis zu d_min − 1 Fehler erkennen und bis zu ⌊(d_min − 1)/2⌋ Fehler korrigieren. Hamming(7,4) hat d_min = 3, korrigiert also 1 Fehler und erkennt 2. Um t Fehler zu korrigieren, benötigt man d_min ≥ 2t + 1; die minimale Codewortlänge dafür wächst gemäß der Hamming-Schranke (Kugelpackungsschranke) als O(t log n).

Was ist ECC-RAM und wie nutzt es Hamming-Codes?

Error-Correcting-Code-RAM verwendet ein Hamming-SECDED-Schema für jedes 64-Bit-Speicherwort und fügt 8 Prüfbits hinzu (72 gespeicherte Bits pro Wort). Bei jedem Lesevorgang eines Wortes wird das Syndrom in Hardware berechnet; ein Einzelbitfehler wird transparent in einem Speicherzyklus (~60 ns bei DDR5) ohne Softwarebeteiligung korrigiert. ECC-RAM ist Standard in Servern und Workstations, bei denen stille Datenkorruption finanzielle, medizinische oder wissenschaftliche Berechnungen gefährden könnte.

Warum werden Paritätsbits an Zweierpotenz-Positionen platziert?

In Hammings Konstruktion deckt das Paritätsbit an Position 2ᵏ alle Bitpositionen ab, deren Binärdarstellung im k-ten Bit eine 1 hat. Zum Beispiel deckt Paritätsbit 1 (Position 001₂) die Positionen 1, 3, 5, 7 ab (alle Positionen mit gesetztem Bit 0). Dies stellt sicher, dass jede Datenposition von einer eindeutigen, nicht leeren Teilmenge von Paritätsbits abgedeckt wird, sodass das Syndrom jede Einzelfehlerposition eindeutig identifiziert. Die Platzierung an Zweierpotenzen macht diese Teilmengenstruktur elegant und effizient.

Was ist der Unterschied zwischen Hamming(7,4) und Hamming(8,4) SECDED?

Hamming(7,4) verwendet 3 Paritätsbits über 4 Datenbits und korrigiert 1 Fehler (d_min = 3). Fügt man ein viertes Gesamtparitätsbit hinzu (XOR aller 7 Bits), entsteht Hamming(8,4), das Doppelfehler erkennt, indem es feststellt, wann das Syndrom ungleich null ist, die Gesamtparität aber stimmt — ein Signal für ein 2-Bit-Fehlermuster. Diese SECDED-Eigenschaft ist entscheidend für Speichersysteme, bei denen zwei Fehler selten, aber möglich sind, etwa bei kosmischer Strahlung oder Mehrzellen-Umkippungen.

Was sind Reed-Solomon-Codes und wie schneiden sie im Vergleich ab?

Reed-Solomon-Codes arbeiten über größeren Alphabeten (Symbole aus k Bits statt einzelnen Bits) und können mehrere Symbolfehler korrigieren. Ein Reed-Solomon(255,223)-Code (verwendet in CDs, DVDs, QR-Codes und der Kommunikation im tiefen Weltraum) korrigiert bis zu 16 Symbolfehler pro 255-Symbol-Block. Während Hamming-Codes optimal für die Korrektur von Einzelbitfehlern mit minimaler Redundanz sind, ist Reed-Solomon für Bündelfehler weitaus leistungsfähiger und wird bei Speicherung und Satellitenkommunikation bevorzugt.

Was ist die Hamming-Schranke (Kugelpackungsschranke)?

Die Hamming-Schranke besagt, dass für einen binären Code der Länge n, der t Fehler korrigiert, die Anzahl der Codewörter M die Bedingung M · Σᵢ₌₀ᵗ C(n,i) ≤ 2ⁿ erfüllt. Codes, die Gleichheit erreichen, heißen perfekte Codes; Hamming-Codes sind perfekt (ihre Fehlerkugeln mit Radius 1 zerlegen den gesamten n-Bit-Raum ohne Lücken). Die einzigen anderen binären perfekten Codes sind der triviale Wiederholungscode und der Golay(23,12)-Code.

Wie werden Hamming-Codes über RAM hinaus eingesetzt?

Hamming-Codes finden sich in der Satellitentelemetrie (Schutz von Befehls-Uplinks), in NAND-Flash-ECC (obwohl BCH-Codes für Mehrbitkorrektur üblicher sind), in frühen Datenübertragungsmodems, Magnetbändern und Netzwerkprotokoll-Headern. Hamming(7,4) ist zudem ein klassisches Lehrbeispiel in Kursen zur Informationstheorie und algebraischen Codierungstheorie, das die Kraft der linearen Algebra über GF(2) veranschaulicht.

Was passiert bei zwei gleichzeitigen Bitfehlern in Hamming(7,4)?

Mit nur Einzelfehlerkorrektur (kein Gesamtparitätsbit) erzeugt ein 2-Bit-Fehler ein von null verschiedenes Syndrom, das einer Spalte von H entspricht — aber der falschen. Der Decoder „korrigiert" das falsche Bit und führt so stillschweigend einen dritten Fehler ein, der die Daten verfälscht. SECDED (8,4) verhindert dies: Das Gesamtparitätsbit unterscheidet 1-Bit-Fehler (ungerade Paritätsabweichung + von null verschiedenes Syndrom) von 2-Bit-Fehlern (gerade Paritätsabweichung + von null verschiedenes Syndrom) und markiert Letztere, statt sie falsch zu korrigieren.

Häufig gestellte Fragen

Was ist ein Hamming-Code?
Ein Hamming-Code ist ein linearer, fehlerkorrigierender Code, der 1950 von Richard Hamming erfunden wurde. Er fügt einem Datenwort redundante Paritätsbits hinzu, sodass jeder Einzelbitfehler erkannt und korrigiert werden kann. Hamming(7,4) codiert 4 Datenbits in ein 7-Bit-Codewort mithilfe von 3 Paritätsbits, die an Zweierpotenz-Positionen platziert sind.
Wie funktioniert die Syndrom-Decodierung?
Nach Empfang eines Codeworts multipliziert der Decoder es mit der Paritätsprüfmatrix H, um einen Syndromvektor s = H·r mod 2 zu erzeugen. Ist s = 0, liegen keine Fehler vor. Ist s ungleich null, gibt sein Binärwert direkt die Position des fehlerhaften Bits an, das dann zur Korrektur invertiert wird.
Was ist SECDED und warum ist es wichtig?
SECDED steht für Single Error Correct, Double Error Detect. Es erweitert Hamming(7,4) zu Hamming(8,4), indem ein zusätzliches Gesamtparitätsbit hinzugefügt wird. Das zusätzliche Bit erhöht den minimalen Hamming-Abstand von 3 auf 4 und ermöglicht es dem Code, jeden Einzelbitfehler zu korrigieren und gleichzeitig jeden Doppelbitfehler zu erkennen (aber nicht zu korrigieren). ECC-RAM in Servern nutzt SECDED, um sich gegen Bitkipper durch kosmische Strahlung oder Spannungsschwankungen zu schützen.
Wo werden Hamming-Codes in der Praxis eingesetzt?
Hamming-Codes werden in ECC-RAM in Servern und Workstations, in Satellitenkommunikationsverbindungen, in DRAM-Speichercontrollern, in manchen NAND-Flash-Speichersystemen und historisch in der Telekommunikation verwendet. Sie sind die konzeptionelle Grundlage für fortgeschrittenere Codes wie Reed-Solomon und Turbocodes.
Warum werden Paritätsbits an Zweierpotenz-Positionen platziert?
Die Positionen 1, 2, 4, 8, … (Zweierpotenzen) werden gewählt, damit jedes Paritätsbit eine eindeutige Teilmenge von Datenpositionen abdeckt, die durch das entsprechende Bit der binären Positionsnummer definiert wird. Dies stellt sicher, dass das Syndrom jedes Einzelbitfehlers die Fehlerposition direkt binär codiert, was die Korrektur ohne Nachschlagetabelle einfach macht.
Was ist der Hamming-Abstand?
Der Hamming-Abstand zwischen zwei Binärstrings ist die Anzahl der Positionen, an denen sie sich unterscheiden. Der minimale Hamming-Abstand d_min eines Codes bestimmt seine Fehlerkorrekturfähigkeit: Ein Code kann bis zu floor((d_min-1)/2) Fehler korrigieren und bis zu d_min-1 Fehler erkennen. Hamming(7,4) hat d_min = 3, korrigiert also 1 Fehler; SECDED hat d_min = 4, korrigiert 1 und erkennt 2.
Wie hoch ist die Coderate von Hamming(7,4)?
Die Coderate ist das Verhältnis von Datenbits zu gesamten Codewortbits. Für Hamming(7,4) beträgt die Rate 4/7 ≈ 0,571, was bedeutet, dass etwa 57 % der übertragenen Bits Informationen tragen und 43 % Redundanz sind. Mit wachsender Blockgröße werden Hamming-Codes effizienter: Hamming(15,11) hat eine Rate von 11/15 ≈ 0,733.
Können Hamming-Codes mehr als einen Bitfehler korrigieren?
Standard-Hamming(7,4) kann nur Einzelbitfehler korrigieren. Werden zwei Bits gekippt, zeigt das Syndrom auf eine falsche Position, und der Decoder verschlimmert die Sache, statt sie zu verbessern. SECDED kann Doppelbitfehler erkennen (aber nicht korrigieren). Zur Korrektur mehrerer Fehler werden stärkere Codes wie Reed-Solomon, LDPC oder Turbocodes verwendet.
Wie wird die Paritätsprüfmatrix H konstruiert?
Für Hamming(7,4) ist jede Spalte von H die Binärdarstellung der Spaltenposition (1 bis 7). Spalte 1 = 001, Spalte 2 = 010, Spalte 3 = 011 und so weiter. Die Zeilen entsprechen den Paritätsprüfungen s1, s2, s4. Das Syndrom s = H·r isoliert die Fehlerposition, da jede Bitposition eine eindeutige binäre Codierung als Spalte von H besitzt.
Was ist der Unterschied zwischen Fehlererkennung und Fehlerkorrektur?
Fehlererkennung bedeutet, dass der Empfänger feststellen kann, dass etwas schiefgelaufen ist (und eine erneute Übertragung anfordern kann), es aber nicht beheben kann. Fehlerkorrektur bedeutet, dass der Empfänger genügend Redundanz besitzt, um die Originaldaten ohne erneute Übertragung zu rekonstruieren. Hamming-Codes bieten beides: Sie erkennen bis zu 2 Fehler und korrigieren 1, was sie ideal für Kanäle macht, bei denen eine erneute Übertragung unpraktisch ist, wie etwa bei der Kommunikation im tiefen Weltraum oder bei RAM.
⚙ Unter der Haube

Kippen Sie ein Bit in einem Hamming-codierten Wort und beobachten Sie, wie die Paritätsprüfungen ein Syndrom erzeugen, das direkt auf die Position des Fehlers zeigt.

Hamming-CodeFehlerkorrekturSECDEDParitätsprüfungSyndrom-DecodierungCodierungstheorie

2D · HTML5 Canvas 2D · Ziel 60 FPS · läuft vollständig clientseitig, keine Installation nötig

Was haben Sie gefunden?

Schritte zur Reproduktion hinzufügen (optional)