Perfekter Code

Aus testwiki
Version vom 31. August 2024, 10:20 Uhr von imported>Wdwd (Formulierung)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Ein perfekter Code, oder auch dicht gepackter Code, bezeichnet in der Codierungstheorie einen Blockcode 𝒞Σn, in dem jedes Wort wΣn nur zu genau einem Codewort c𝒞 (und nicht zu mehreren) einen geringsten Hamming-Abstand dw hat, wobei dwΔ(𝒞) ist.

Bei der meist verwendeten Maximum-Likelihood-Decodierung bedeutet dies, dass jedes empfangene Wort w genau ein Codewort c hat, zu dem es den geringsten Hamming-Abstand hat und zu dem es eindeutig zugeordnet werden kann. Daraus leitet sich die Bezeichnung perfekt ab, denn es gibt keine mehrdeutigen Decodiermöglichkeiten.

Mathematische Beschreibung

Sei 𝒞Σn ein Blockcode mit |Σ|=q, wobei Σ das verwendete Alphabet darstellt. Alle Codeworte 𝒞 haben untereinander einen Mindest-Hamming-Abstand von d. Der Blockcode kann damit

t=d12

Fehler korrigieren.

Um perfekt zu sein, muss der minimale Hamming-Abstand zwischen zwei Codeworten eines Codes ungerade sein, da sonst für c1,c2𝒞:Δ(c1,c2)=d mindestens ein Wort w mit Δ(c1,w)=d2=Δ(w,c2) existiert, was im Widerspruch zur Definition perfekter Codes steht.

Da der Code t-fehlerkorrigierend ist, kann ein Wort wΣn einem Codewort cC eindeutig zugeordnet werden, wenn der Hamming-Abstand d=Δ(c,w)t ist. Umgekehrt bedeutet dies für ein bestimmtes Codewort c, dass alle Wörter w mit einem Hamming-Abstand von maximal t nach c decodiert werden. Als Menge wird dies so geschrieben:

t(c):={wΣnΔ(w,c)t}

Diese Menge wird auch als Kugel (manchmal auch Hyperwürfel) mit Radius t um c bezeichnet. Die Anzahl der Elemente von t(c) lässt sich berechnen zu:

|t(c)|=i=0t(q1)i(ni)

Für i Fehlerstellen gibt es i aus n mögliche Positionen für die Fehler. Dabei stehen pro Fehlerstelle q1 falsche Symbolwerte zur Verfügung. Es gibt |𝒞| Kugeln. Diese sind disjunkte Teilmengen des Σn. Daraus ergibt sich die Ungleichung

|Σn||𝒞|i=0t(q1)i(ni)

Aufgelöst nach 𝒞 und mit |Σn|=qn folgt:

|𝒞|qni=0t(q1)i(ni)

Diese Ungleichung für die Anzahl der Codewörter wird Hamming-Schranke oder auch Kugelpackungsschranke genannt.

Ein perfekter Code zeichnet sich dadurch aus, dass alle Wörter wΣn in genau einer der Kugeln enthalten sind (anders ausgedrückt: Die Kugeln überdecken den Raum). Deshalb gilt für die Hamming-Schranke selbst die Gleichheit.

Alternative Interpretation

Man kann sich diese Grenze auch wie folgt veranschaulichen (der Einfachheit halber nur anhand binärer Codes erläutert, d. h. für q=2):

Für einen t Fehler korrigierenden Code muss der Decoder genug Information erhalten, um alle folgenden Fälle unterscheiden zu können:

  • |𝒞|=2k verschiedene Informationswörter und jeweils
  • alle möglichen Muster von 0t Bitfehlern der n Bits eines Codewortes

Da es (ni) Möglichkeiten gibt, i Bitfehler auf n Bits zu verteilen, ergeben sich insgesamt

2ki=0t(ni)

Fälle, die mit den zur Verfügung stehenden n Bits unterschieden werden müssen, also

2n2ki=0t(ni).

Bei einem perfekten Code gilt Gleichheit, das heißt die n Bits tragen exakt die minimal benötigte Information. Diese (Un-)Gleichung entspricht der obigen allgemeinen Definition für den Fall q=2 und |𝒞|=2k.

Man ist zwar eigentlich nur an der Korrektur der k Informationsbits interessiert, wofür entsprechend weniger Zusatzinformation genügen würde – diese nk Bits Zusatzinformation müssten dann aber fehlerfrei sein, was natürlich in der Regel nicht gewährleistet ist. Daher ist eine Korrektur aller n Bits erforderlich.

Bekannte Perfekte Codes

Falls die Alphabetgröße q eine Primzahlpotenz ist, so gilt:

Ist 𝒞 ein perfekter Code mit Parametern [n,k;d,q] mit k=logq(|𝒞|), so gibt es einen Code 𝒟 mit denselben Parametern, so dass 𝒟 einer der folgenden Codes ist[1][2]:

  • Ein trivialer Code: Ein Code heißt hier trivial,
    • falls er entweder nur q0=1, d. h. ein einziges Codewort enthält: [m,0;2m+1,q] oder
    • falls er alle qm möglichen Codewörter der gegebenen Blocklänge enthält: [m,m;1,q].
  • Ein binärer Wiederholungs-Code mit ungerader Codewortlänge. Die Parameter lauten [2m+1,1;2m+1,2].
  • Ein Hamming-Code über dem endlichen Körper 𝔽q, mit Parametern [qm1q1,qm1q1m;3,q].
  • Der binäre Golay-Code 𝒢23 mit Parametern [23,12;7,2].
  • Der ternäre Golay-Code mit Parametern 𝒢11 mit [11,6;5,3].

m steht hierbei jeweils für eine positive natürliche Zahl m+.

Die Codes 𝒞 und 𝒟 haben die gleichen Parameter und können somit bei gleicher Blocklänge n gleich viele Fehler korrigieren. Die Umwandlung eines trivialen Codes in einen linearen Code mit denselben Parametern ist einfach: Falls der Code ein einziges Codewort enthält, so kann stattdessen auch der Nullvektor c0=(0,,0) als einziges Codewort dienen, und der entstandene Code ist linear. Der einzige verbleibende triviale Code ist derjenige, der sämtliche qn möglichen Wörter der gegebenen Blocklänge enthält. Dieser ist aber bereits linear. Bei den restlichen Codes aus der Liste handelt es sich bereits um lineare Codes. Es gibt für jeden perfekten Code, der im Allgemeinen kein linearer Code ist, einen linearen Code mit den gleichen Parametern – sofern die Größe des Alphabetes eine Primzahlpotenz ist.

Es ist offen, ob, und für welche Parameter es nicht triviale perfekte Codes gibt, falls die Alphabetgröße keine Primzahlpotenz ist.

Für praktische Zwecke sind die trivialen Codes uninteressant, da entweder

  • keine Information übertragen werden kann oder
  • keine Fehler erkannt oder korrigiert werden können.

Einzelnachweise

  1. F.J. MacWilliams, N.J.A. Sloane: The Theory of Error-Correcting Codes. North-Holland, Amsterdam 1977
  2. Werner Lütkebohmert: Codierungstheorie. Vieweg, Braunschweig / Wiesbaden 2003