Codierungstheorie - Diskrete Mathematik

Werbung
Codierungstheorie
Skript zur Vorlesung im SS 2010
Diplom-und Masterstudiengang
Prof. Peter Hauck
Arbeitsbereich Diskrete Mathematik
Wilhelm-Schickard-Institut
Universität Tübingen
Inhaltsverzeichnis
Einführung
3
1 Grundbegriffe und einfache Beispiele
5
2 Grundbegriffe der Informationstheorie und der
Kanalcodierungssatz von Shannon
12
3 Lineare Codes
24
4 Reed-Muller-Codes und Majority-Logic-Decodierung
39
5 Expander-Codes und LDPC-Codes
54
6 Zyklische Codes
64
7 Reed-Solomon-Codes
73
8 Faltungcodes
79
1
Literatur
1. E. R. Berlekamp, Algebraic Coding Theory. Aegean Park Press, 1984.
2. B. Friedrichs, Kanalcodierung. Springer, 1995.
3. D. Jungnickel, Codierungstheorie. Spektrum Akademischer Verlag, 1995.
4. J. Justeson and T. Høholdt, A Course in Error-Correcting Codes. European Mathematical Society, 2004.
5. W. Lütkebohmert, Codierungstheorie. Vieweg, 2003.
6. F. MacWilliams and N. J. A. Sloane, The Theory of Error-Correcting
Codes. North Holland, 1977.
7. W. W. Peterson, Error-Correcting-Codes. John Wiley & Sons, 1962
8. V. S. Pless and W. C. Huffman (editors), Handbook of Coding Theory
I, II. Elsevier, 1998.
9. T. Richardson and R. Urbanke, Modern Coding Theory. Cambridge
University Press, 2008.
10. S. Roman, Coding and Information Theory. Springer, 1992.
11. R.-H. Schulz, Codierungstheorie. Vieweg, 2003.
12. J. van Lint, Introduction to Coding Theory. Springer, 1999.
13. S. A. Vanstone and P. C. Oorschot, An Introduction to Error-Correcting
Codes with Applications. Kluwer, 1989.
14. W. Willems, Codierungstheorie. De Gruyter, 1999.
15. W. Willems, Codierungstheorie und Kryptographie. Birkhäuser, 2008.
16. S. Xambó-Descamps, Block Error-Correcting Codes. Springer, 2003.
2
Einführung
Codierung: Sicherung von Daten und Nachrichten gegen zufällige Fehler
bei der Übertragung oder Speicherung (Kanalcodierung).
Situation (vereinfacht):
Quelle
Nachricht
Kanal−
Codierer
codiert Nachricht
Kanal
Störungen!
Decodierer
Empfänger
1. codierte Nachricht
zurückgewinnen
2. ursprüngliche Nachricht
zurückgewinnen
Ziele bei der Codierung:
1. Möglichst viele bei der Übertragung/Speicherung aufgetretene (zufällige)
Fehler sollen bei der Decodierung erkannt und ggf. sogar korrigiert werden.
2. Der Aufwand zur Codierung und Decodierung soll möglichst gering
sein.
Grundprinzip: Hinzufügen von Redundanz
Zwei Hauptaufgaben:
• Konstruktion geeigneter Codes
Anforderung: Gute Fehlererkennungs, -korrektureigenschaften mit
möglichst geringer Redundanz
• Konstruktion von Codierern, Decodierern
Anforderung: Effizienz
In der Praxis werden im wesentlichen zwei Typen von Codes unterschieden:
Blockcodes und Faltungscodes. Wir werden beide Typen in der Vorlesung
behandeln.
Prinzipien bei der Kanalcodierung:
FEC-Verfahren (Forward Error Correction)
Aufgetretene Fehler werden erkannt und korrigiert.
Vorteil: keine Verzögerung bei der Übertragung
Nachteil: ggf. große Redundanz notwendig!
3
ARQ-Verfahren (Automatic Repeat Request)
Aufgetretene Fehler sollen erkannt werden, werden aber nicht korrigiert.
Stattdessen wird eine Wiederholung der Übertragung beim Sender angefordert.
Vorteil: geringe Redundanz
Nachteil: ggf. erhebliche Verzögerung bei wiederholter Übertragung
4
1
Grundbegriffe und einfache Beispiele
Redundanz als Möglichkeit der Fehlererkennung und -korrektur kennzeichnet schon natürliche Sprachen. Wir werden jetzt einige einfache Beispiele
beschreiben, an denen schon eine Reihe wichtiger Prinzipien der Kanalcodierung sichtbar werden.
Zuvor eine Bemerkung zur Schreibweise: Wir werden Wörter der Länge n
über einem Alphabet A sowohl in der Form a1 a2 . . . an als auch als Zeilenvektoren (a1 , a2 , . . . , an ) schreiben. Darüberhinaus kommt auch die umgekehrte
Reihenfolge der Indizes oder ein Laufbereich von 0 bis n − 1 vor. Die Länge
eines Wortes w = (a1 , a2 , . . . , an ) bezeichnen wir mit ℓ(w)(= n).
1.1 Beispiele (Prüfzifferncodes).
Die Nachrichten bestehen aus Wörtern (Blöcken) der Länge n. An diese wird
zur Codierung eine Prüfziffer angefügt.
(a) Parity-Check-Code
Die Nachrichten seien z.B. 00, 01, 10, 11 über dem Alphabet A = {0, 1}.
Sie werden über demselben Alphabet auf folgende Weise codiert:
00 → 000
01 → 011
10 → 101
11 → 110
Eine Nachricht (x1 , x2 ) wird also zu (x1 , x2 , (x1 + x2 ) mod 2) codiert.
Der ASCII-Code ist von diesem Typ: 128 Zeichen werden mit 8 Bits
codiert, wobei das achte Bit ein Parity-Check-Bit ist, d.h.
x8 = (x1 + . . . + x7 ) mod 2.
(b) alter ISBN-Code
Die frühere International Standard Book Number ist ein 10-stelliger Code, der jedes Buch international erkennbar macht. Die ersten 9 Ziffern
kennzeichnen Erscheinungsland, Verlag und Buch; an diese wird eine
zehnte Prüfziffer angehängt (Redundanz).
Uncodierte Wörter sind über dem Alphabet B = {0, . . . , 9} und Codewörter sind über dem Alphabet A = {0, 1, . . . , 9, X} gebildet. X steht
für 10. Die Prüfziffer c1 wird so gewählt, dass für c10 c9 ...c1 gilt:
10
X
k=1
kck ≡ 0
5
(mod 11)
Ist dabei c1 = 10, so wird c1 = X gesetzt.
Der Code ist 1-Fehler-erkennend. Durch die gewichtete Quersumme
wird auch sichergestellt, dass die Vertauschung zweier Ziffern erkannt
wird.
(c) EAN-13-Prüfzifferncode
Die Europäische Artikelnummer ist ein 13-stelliger Code, der sich auf
vielen Produktverpackungen befindet. Nachrichten und Codewörter sind
aus dem Alphabet A = B = {0, . . . , 9}. Sei c13 ...c1 ein Codewort.
c13 ...c2 beschreibt Herstellungsland, Hersteller und Produkt. c1 wird
so gewählt, dass gilt:
c13 + 3c12 + c11 + . . . 3c2 + c1 ≡ 0
(mod 10).
Seit 1.1.07 wird statt des in (b) beschriebenen ISBN-10-Codes ISBN-13
verwendet, der mit EAN-13 kompatibel ist. Der Präfix 978 bzw. 979
Buchland“ wird der 10-stelligen ISBN-10 vorangestellt. Anschließend
”
wird die Prüfziffer gemäß EAN-13 neu berechnet.
(d) Seriennummern der EURO-Scheine
Die Seriennummer besteht aus einem führenden Buchstaben (nicht alle
Buchstaben A-Z kommen vor, A-I, O, Q nicht; X steht für Deutschland) und einer 11-stelligen Zahl. Die letzte Ziffer ist eine Prüfziffer.
Diese wird wie folgt bestimmt:
Codiere den führenden Buchstaben in eine 2-stellige Dezimalzahl entsprechend seiner Position im Alphabet. Das liefert c13 . . . c1 . c1 wird
dabei so gewählt, dass gilt:
13
X
i=1
c1 ≡ 8
(mod 9).
(Also könnte man 9 auch durch 0 ersetzten und in Z9 rechnen.) 9 ↔ 0
zeigt, dass nicht alle Einzelfehler erkannt werden. Klar: keine Vertauschungen werden erkannt.
Vorteil: Modulo-9-Rechnung entspricht (iterierte) Quersummenbildung
bis zum 1-stelligen Ergebnis.
Warum gerade 8, ist unklar.
(Seriennummern der DM-Scheine waren subtiler aufgebaut.)
6
1.2 Beispiele.
(a) 1.1(a): Angenommen 111 wird empfangen. Klar: 1 oder 3 Fehler sind
aufgetreten. Ein Fehler könnte an jeder beliebigen Stelle entstanden
sein.
(b) Codiere stattdessen:
00 → 000000
01 → 010101
10 → 101010
11 → 111111
3-facher Wiederholungscode.
Zwei verschiedene Codewörter unterscheiden sich an mindestens 3 Stellen. Tritt 1 Fehler auf, so ist das nächstgelegene Codewort das gesendete. Es handelt sich also um einen 1-Fehler-korrigierenden Code.
(c) Es geht mit weniger Redundanz als in (b):
00 → 00000
01 → 01101
10 → 10110
11 → 11011
Wieder sind zwei verschiedene Codewörter an mindestens 3 Stellen unterschiedlich, aber die Redundanz ist geringer als in (b).
Mit Fehler“ ist hier die Änderung eines Bits gemeint. Es könnte aber auch
”
sein, dass eine Stelle nicht mehr als 0 oder 1 identifiziert werden kann:
Auslöschung. (Wir betrachten zunächst nur Änderungen und keine Auslöschungen.)
In Beispiel 1.1, 1.2 wurden zur Codierung Nachrichten fester Länge k in Codewörter fester (größerer) Länge n codiert. Wichtig: Nicht alle Wörter der
Länge n sind Codewörter (das wird ausgenutzt zum Erkennen und Korrigieren von Fehlern). Das führt zu folgender Definition:
1.3 Definition.
Sei A eine endliche Menge (Alphabet), n ∈ N. Ein Blockcode C der (Block-)
Länge n über A ist eine Teilmenge von An = A
. . × A}.
| × .{z
←n→
Die Elemente von C heißen Codewörter.
Ist |A| = 2 (i. Allg. A = {0, 1}), so heißt C binärer (Block-)Code.
7
(Solange wir uns mit Blockcodes beschäftigen, sagen wir auch kurz Code“
”
statt Blockcode“).
”
Ist |C| = m, so lassen sich Alphabete B der Größe m codieren. B kann auch
aus Blöcken über einem kleineren Alphabet (z.B. {0, 1}) bestehen (wie in
den Beispielen in 1.2).
Folgen von Elementen aus B (d.h. Wörter über B) werden dann in Folgen
von Codewörtern codiert.
Die Zuordnung: Element von B 7→ Codewort“ ist die Codierungsfunktion.
”
(Sie kann auch kontextabhängig sein.)
In 1.2 hatten wir schon von Abstand gesprochen. Das präzisieren wir:
1.4 Definition.
Sei A ein endliches Alphabet, n ∈ N, a = (a1 , . . . , an ), b = (b1 , . . . , bn ) ∈ An .
d(a, b) = |{i : 1 ≤ i ≤ n, ai 6= bi }|
d(a, b) heißt Hamming-Abstand von a und b.
(Richard W. Hamming, 1915-1998; Bell Labs, Naval Postgraduate School
Monterey, USA; Mitbegründer der Codierungstheorie mit einer Arbeit aus
dem Jahre 1950.)
1.5 Satz.
Sei A ein Alphabet und a, b, c ∈ An beliebig. Dann gilt:
(1) 0 ≤ d(a, b) ≤ n
(2) d(a, b) = 0 ⇔ a = b
(3) d(a, b) = d(b, a)
(4) d(a, b) ≤ d(a, c) + d(c, b) (Dreiecksungleichung)
Also ist d eine Metrik.
Ist A eine kommutative Gruppe bezgl. + (z.B. A = Zn ), so:
(5) d(a + c, b + c) = d(a, b) (Translationsinvarianz)
Beweis. Nur (4): Ist ai 6= ci , so ist ai 6= bi oder ci 6= bi . Behauptung folgt.
Beachte:
Wird ein Wort x ∈ C gesendet und y ∈ An empfangen mit d(x, y) = k, so
sind k Fehler aufgetreten.
8
1.6 Definition.
(a) Hamming-Decodierung für einen Blockcode C ⊆ An :
Wird y ∈ An empfangen, so wird y zu einem x′ ∈ C decodiert mit
d(x′ , y) = min d(x, y).
x∈C
(x′ ist im Allgemeinen nicht eindeutig bestimmt!)
(Wann diese Decodierung sinnvoll ist, werden wir uns in Kürze überlegen.)
(b) Sei C ⊆ An ein Blockcode.
Der Minimalabstand von C ist:
d(C) = min d(x, x′ ).
x,x′ ∈C
x6=x′
(c) Ein Blockcode C heißt t-Fehler-korrigierend, falls
d(C) ≥ 2t + 1.
Ein Blockcode C heißt t-Fehler-erkennend, falls
d(C) ≥ t + 1.
Zur Bezeichnung in 1.6(c):
• Ist d(C) ≥ 2t + 1 und ist x ∈ C, so liegt in der Kugel“
”
Kt (x) = {y ∈ An : d(x, y) ≤ t}
vom Radius t um x genau ein Codewort, nämlich x (da d(C) > t).
Treten also bei der Übertragung von x höchstens t Fehler auf, so liegt
das empfangene Wort in Kt (x), aber in keiner Kugel Kt (x′ ), x′ ∈ C, x′ 6=
x, d.h. d(y, x′) > d(y, x) für alle x′ ∈ C, x′ 6= x.
Der Grund dafür ist, dass die Kugeln von Radius t um Codewörter
disjunkt sind. Angenommen y ∈ Kt (x1 ) ∩ Kt (x2 ). Dann gilt d(x1 , x2 ) ≤
d(x1 , y) + d(y, x2) ≤ 2t < d(C). Also liefert bei maximal t aufgetretenen Fehlern Hamming-Decodierung das korrekte gesendete Codewort
x. (Hamming-Decodierung kann aber inkorrekt sein, falls mehr als t
Fehler aufgetreten sind.)
9
t
t
≥ d(C)
x1
x2
Kt (x2 )
Kt (x1 )
• Ist d(C) ≥ t + 1, und sind bei der Übertragung eines Codewortes maximal t Fehler (und mindestens einer) aufgetreten, so ist das empfangene
Wort kein Codewort. Es wird erkannt, dass Fehler aufgetreten sind.
1.7 Beispiele.
(a) m-facher Wiederholungscode: Block der Länge k (fest) wird m mal
gesendet. (n = m · k) -Fehler-korrigierend.
d(C) = m. C ist m−1
2
(vgl. Beispiel 1.2; dort m = 3).
(b) Code aus Beispiel 1.2(c): d(C) = 3, n = 5. C ist 1-Fehler-korrigierend,
2-Fehler-erkennend.
(c) Sei C = {000000
| {z }, 101101
| {z }, 110110
| {z }}. Dann ist d(C) = 3. C ist also
| {z }, 011010
x1
x2
x3
x4
1-Fehler-korrigierend.
Angenommen x1 = 000000 wird gesendet und y = 000011 wird empfangen (2 Fehler).
d(xi , y) ≥ 3 für alle i = 2, 3, 4. Hamming-Decodierung liefert also x1 .
Angenommen x1 = 000000 wird gesendet und y = 100001 wird empfangen.
d(x1 , y) = d(x2 , y) = 2, d(x3 , y), d(x4 , y) ≥ 3. Hamming-Decodierung
ist also nicht eindeutig.
Angenommen x1 = 000000 wird gesendet und y = 011000 wird empfangen.
d(x2 , y) = 1. Es wird also falsch zu x2 decodiert.
1.8 Definition.
Sei C ein Blockcode in An mit |A| = q.
logq (|C|)
n
heißt Informationsrate (kurz: Rate) von C.
(1 − R wird gelegentlich Redundanz von C genannt.)
R=
10
Beachte:
logq (|An |) = n. Die Informationsrate gibt an, welcher Anteil eines Codewortes reine Information ist.
Einheit: Infosymbol/Codesymbol.
(Beachte: Ohne Codierung könnte man die |C| Codewörter jeweils mit logq (|C|)
Zeichen aus A komprimiert darstellen.)
1
kannn man auch als Verzögerungsfaktor betrachten, der durch die CodieR
rung der Infosymbole verursacht wird.
Manchmal ist es notwendig, die Rate auf Bits statt auf Symbole zu beziehen.
Das führt zur binären Rate
Rb = R · log2 (q) Infobit/Codesymbol.
1.9 Beispiele.
(a) m-facher Wiederholungscode, |A| = q, n = k · m, |C| = q k .
k
R = k·m
= m1 (q = 2: Ein Infobit auf m Bits)
(b) Code aus Beispiel 1.2(c): 4 Codewörter über {0, 1} der Länge 5.
R = 52
(c) Parity-Check-Code der Länge n: R =
n−1
.
n
Ziel der Codierungstheorie:
Finde Codes mit hoher Rate und kleiner Decodierfehlerwahrscheinlichkeit
(bei Hamming-Decodierung heißt das großer Minimalabstand).
Das geht im Prinzip: Satz von Shannon (s. folgendes Kapitel).
11
2
Grundbegriffe der Informationstheorie und
der Kanalcodierungssatz von Shannon
Quelle Q
Kanal
Empfänger E
Strings über Alphabet A
Erhält den Output des Kanals:
Zeichen über Alphabet B
Modulation
Demodulation
(i. Allg. A = B , Hard−Decision;
aber auch A 6= B kann sinnvoll sein;
z.B. zusätzlich das Zeichen ?
für Auslöschung; oder allg.
Soft−Decision−Demodulation
s. Kap. 8)
Quelle:
2.1 Voraussetzung.
Die Quelle Q gebe die Zeichen aus dem Alphabet A mit der Wahrscheinlichkeit pQ (a), a ∈ A, aus. Also:
X
0 ≤ pQ (a) ≤ 1,
pQ (a) = 1.
a∈A
(Gedächtnislose Quelle; Wahrscheinlichkeit von a ist nicht von dem vorangegangenen Zeichen abhängig. Idealisierung!)
2.2 Definition.
Der Informationsgehalt eines von Q ausgegebenen Zeichens a ∈ A ist
1
IQ (a) := log2
= − log2 (pQ (a)) ∈ R≥0 ∪ {∞}.
pQ (a)
Einheit: Bit
(Im Folgenden: log = log2 )
Interpretation:
Je größer pQ (a), desto geringer ist die Überraschung, wenn a auftritt.
Der Informationsgehalt stellt ein Maß für die Überraschung dar (Beispiel:
Erdbeben, kein Erdbeben)
12
Dass man als Maß gerade log pQ1(a) wählt, hat folgenden Grund: Man will,
dass der Informationsgehalt nur von der Wahrscheinlichkeit von a abhängt
und dass gilt:
(1) Für zwei unabhängig voneinander ausgegebene Zeichen soll sich der
Informationsgehalt addieren.
(2) Die Funktion soll stetig sein und es soll I(a) < I(b) gelten, falls pQ (a) >
pQ (b) gilt.
(3) Geeignete Normierung
Das führt auf log( pQ1(a) ).
2.3 Definition.
Die Entropie einer Quelle Q ist definiert durch
X
X
H(Q) :=
pQ (a)IQ (a) = −
pQ (a) log(pQ (a)) ≥ 0
a∈A
a∈A
(Ist pQ (a) = 0, so
definiert man pQ (a)IQ (a) = 0; das ist sinnvoll, da
1
limx→0 x · log x = 0.)
Interpretation:
Die Entropie ist der mittlere Informationsgehalt pro Zeichen einer Quelle Q.
Sie wird in Bit/Symbol gemessen.
Sie
Wieviele Bits werden im Durchschnitt
P lässt sich auch so interpretieren:
a∈A pQ (a) · l(Codewort von a) zur eindeutigen Präfixcodierung des Alphabets A mindestens benötigt.
[Shannon’s Quellcodierungssatz → Datenkompression]
2.4 Beispiele.
A = {a1 , . . . , aq }
(a) pQ (a1 ) = 1, pQ (ai ) = 0, i ≥ 2. Dann H(Q) = 0.
(b) pQ (ai ) = 1q , 1 ≤ i ≤ q. Dann IQ (ai ) = log(q), H(Q) = log(q).
(q = 2: H(Q) = 1)
(c) |A| = 8
1
• Ist pQ (ai ) = für alle i, so H(Q) = 3 nach (b).
8
Kompakteste Präfixcodierung von A benötigt 3 Bits pro Symbol.
13
• pQ (a1 ) = pQ (a2 ) = 41 , pQ (a3 ) = pQ (a4 ) =
1
pQ (a8 ) = 16
1
H(Q) = 2 · 14 · 2 + 2 · 81 · 3 + 4 · 16
· 4 = 2, 75.
Mögliche Codierung
(z.B. Huffman):
a1
a2
a3
a4
a5
a6
a7
a8
→
→
→
→
→
→
→
→
1
,
8
pQ (a5 ) = . . . =
11
10
011
010
0011
0010
0001
0000
2.5 Bemerkung.
Für alle Wahrscheinlichkeitsverteilungen pQ gilt: 0 ≤ H(Q) ≤ log(q)
(|A| = q). Das Maximum wird bei Gleichverteilung angenommen.
Kanal:
2.6 Voraussetzung.
Der Kanal sei ein diskreter gedächnisloser Kanal.
Das bedeutet: Es gibt feste Wahrscheinlichkeiten p(b|a), wobei p(b|a) die
Wahrscheinlichkeit ist, dass b ∈ B empfangen wird, falls a ∈ A gesendet
wird. p(b|a) ist nicht abhängig von zuvor gesendeten Signalen.
Die p(b|a) sind die Übergangswahrscheinlichkeiten des Kanals (bedingte Wahrscheinlichkeiten).
P
Klar: b∈B p(b|a) = 1.
2.7 Beispiele.
(a) A = B, p(b|a) =
0 , b 6= a
1,b=a
Ungestörter Kanal
(b) p(b|a1 ) = p(b|a2 ) für alle a1 , a2 ∈ A, b ∈ B
D.h. die Wahrscheinlichkeit, dass b empfangen wird, hängt nicht von
dem gesendeten a ∈ A ab.
Total gestörter Kanal
Z.B. A = B = {0, 1}, p(b|a) = 21 für alle a ∈ A, b ∈ B.
(c) A = B = {0, 1}
p(0|1) = p(1|0) = p, p(0|0) = p(1|1) = 1 − p.
Binärer symmetrischer Kanal
(für unsere Anwendungen der wichtigste Fall).
14
Empfänger:
2.8 Definition.
Die Wahrscheinlichkeitsverteilung pE beim Empfänger E (Outputverteilung)
ist gegeben durch
X
pE (b) =
p(b|a)pQ (a), b ∈ B.
a∈A
(pE (b) ist die Wahrscheinlichkeit, dass b empfangen wird, wenn ein Symbol
aus A von Q generiert und durch den Kanal geschickt wurde.)
Outputentropie:
H(E) = −
X
pE (b) log(pE (b)).
b∈B
2.9 Beispiele.
(a) A = B, ungestörter Kanal, so H(E) = H(Q), denn pE (a) = pQ (a).
(b) Total gestörter Kanal: pE (b) = p(b|a) für alle a ∈ A, b ∈ B.
Wichtige Frage:
Wieviel Information transportiert ein Kanal, der von einer Quelle Q gespeist
wird, im Mittel pro eingegebenem Zeichen?
Einfluss: Quelle und Kanal (Rauschquelle) tragen beide zu H(E) bei.
Welcher Anteil von H(E) wird durch Kanalstörungen verursacht?
2.10 Definition.
Seien a ∈ A, b ∈ B. Der bedingte Informationsgehalt von b, falls a gesendet
wurde, ist
1
= − log(p(b|a)).
I(b|a) := log
p(b|a)
Interpretation:
Wenn a gesendet wurde, erwarten wir mit Wahrscheinlichkeit p(b|a) die Ausgabe b. I(b|a) ist also ausschließlich durch den Kanal verursacht worden.
2.11 Definition.
Der mittlere bedingte Informationsgehalt bei Eingabe a (bedingte Entropie
für a) ist
X
X
1
p(b|a) log
p(b|a)I(b|a) =
H(E|a) =
.
p(b|a)
b∈B
b∈B
15
Die Streuentropie oder Irrelevanz des Kanals mit Quelle Q ist
X
XX
1
H(E|Q) =
pQ (a)H(E|a) =
pQ (a)p(b|a) log
.
p(b|a)
a∈A
a∈A b∈B
Interpretation:
H(E|Q) ist der Anteil der Entropie von E, der im Mittel (bei Sendung eines
Symbols) vom Kanal (also der Rauschquelle) beigesteuert wird.
Leicht zu sehen: H(E|Q) ≤ H(E).
2.12 Beispiele.
(a) UngestörterPKanal (A = B):
H(E|Q) = a∈A pQ (a) log(1) = 0.
(b) Total gestörter Kanal:
H(E|a) = H(E) für alle a ∈ A, also auch H(E|Q) = H(E).
(c) Binärer symmetrischer Kanal:
H(E|a) = −(1 − p) log(1 − p) − p log p = H(E|Q).
2.13 Definition.
Die mittlere Transinformation eines Kanals mit Ausgang E und Quelle Q ist
I(Q, E) := H(E) − H(E|Q).
Bemerkung.
Man kann leicht zeigen: I(Q, E) ≤ H(Q).
Interpretation:
I(Q, E) gibt an, wieviel nutzbare Information pro gesendetem Symbol im
Mittel über den Kanal transportiert werden kann (in Abhängigkeit einer
gegebenen Wahrscheinlichkeitsverteilung der Quelle Q).
2.14 Definition.
Die Kanalkapazität C eines Kanals ist definiert durch
C :=
max
alle W-Vert.
der Quelle Q
Einheit: Bit/Symbol
Bemerkung.
0≤C
Bem. nach 2.13+2.5
≤
log(q), falls |A| = q.
16
I(Q, E)
In der Regel ist C schwer zu bestimmen. Für manche Kanäle ist es einfach.
2.15 Beispiele.
(a) Sei K ein ungestörter Kanal. Dann gilt:
2.12(a)
2.9
I(Q, E) = H(E) = H(Q), also C = log(q) nach 2.5 (Q mit Gleichverteilung). (C = 1 für eine binäre Quelle)
(b) Sei K ein total gestörter Kanal. Dann gilt:
C = 0 nach 2.12(b).
2.16 Satz.
Die Kapazität eines binären symmetrischen Kanals ist
C = 1 + p log(p) + (1 − p) log(1 − p) ≤ 1 (= log(2))
(Gleichheit wird erreicht für die Gleichverteilung auf Q)
[C = 1 ⇔ p = 0 (ungestörter Kanal) oder p = 1 (jedes Bit wird umgedreht)
C = 0 ⇔ p = 21 (total gestörter Kanal)]
1
C(p)
0.5
0
0.5
1
p
Beweis:
H(E|Q) = −(1 − p) log(1 − p) − p log p nach 2.12(c).
Daher ist I(Q, E) = H(E) + (1 − p) log(1 − p) + p log p. I(Q, E) wird also
maximal, wenn H(E) maximal wird. Dies ist nach 2.5 für pE (0) = pE (1) = 21
der Fall.
Aus pE (0) = (1 − p) · pQ (0) + p · pQ (1) und pE (1) = (1 − p) · pQ (1) + p · pQ (0)
folgt dann pQ (0) = pQ (1) = 12 .
Dann ist H(Q) = H(E) = 1 und die Behauptung folgt.
17
Also: Die Kanalkapazität gibt an, wieviel nutzbare Information über einen
Kanal übertragbar ist. Sei z.B. |A| = 2 und die Datenrate des Kanals sei 106
Bit/Sekunde (physikalisch). Hat der Kanal eine Kapazität von 0, 8 Bit/Symbol
(Symbol =
b Bit, da |A| = 2), so sind im besten Fall nur 0, 8 · 106 Bit/Sekunde
nutzbare Information übertragbar.
Der Satz von Shannon wird aussagen, dass man diese Übertragbarkeit von
nutzbarer Information fast vollständig ausnutzen kann bei beliebig kleiner
Decodierfehlerwahrscheinlichkeit.
Situation:
log (C)
Code C der Länge n über A, |A| = q. R = nq Infosymbol/Codesymbol.
D.h. der Anteil R der Symbole eines Codewortes enthält Information.
Manchmal braucht man auch die binäre Rate Rb (vgl. Bemerkung nach 1.9):
Wieviele Bits pro Codesymbol sind Information. Ein Symbol in A entspricht
log2 (q) Bits. Also Rb = R · log2 (q). (q = 2, so R = Rb )
Code: Rb Bits pro Codesymbol reine Information
Kanal: überträgt maximal C Bit/Symbol an Information
Kann man einen Code finden, dessen binäre Rate möglichst nahe an der
Kapazität des Kanals liegt und der trotzdem eine beliebig kleine Decodierfehlerwahrscheinlichkeit hat?
Antwort: Ja.
Dazu: Wie decodiert man am besten?
2.17 Decodierprinzipien.
Voraussetzung: Die Codewörter werden über einen beliebigen diskreten gedächtnislosen Kanal übertragen.
Angenommen y = (y1 , . . . , yn ) ∈ B n wird empfangen. In welches x
b ∈ C soll
decodiert werden?
Bisher haben wir A = B und Hamming-Decodierung betrachtet. Ob das gut
ist, hängt natürlich von pQ ab. (Betrachte den Spezialfall, dass Q immer nur
dasselbe Codewort sendet.)
Da der Kanal gedächtnislos ist, ist die Wahrscheinlichkeit,
dass y empfangen
Qn
wird, falls x ∈ C gesendet wird: p(y|x) = i=1 p(yi |xi ).
Die Wahrscheinlichkeitsverteilung pQ auf A liefert in derselben Art eine
Wahrscheinlichkeitsverteilung pQ auf C. (Idealisierung; ansonsten wählt man
direkt eine Wahrscheinlichkeitsverteilung auf C bzw. An und fasst An als
Alphabet auf, um die vorige Begrifflichkeit anwenden zu können.)
18
(a) Die beste Decodierung ist die Maximum-Aposteriori-Decodierung (MAP):
Wähle zu empfangenem y ∈ B n dasjenige x
b ∈ C mit
pQ (b
x)p(y|b
x) ≥ pQ (x)p(y|x) für alle x ∈ C.
Damit maximiert man die Aposteriori-Wahrscheinlichkeit
p(x|y)
| {z }
=
bedingte W.-keit, dass x
gesendet wurde, falls y
empfangen wurde.
p(y|x)pQ (x)
(Bayes-Formel).
pQ (y)
| {z }
fest für geg. y
Problem: In der Regel kennt man pQ nicht.
Dann:
(b) Maximum-Likelihood-Decodierung (MLD):
Zu gegebenem y ∈ B n wird zur Decodierung ein Codewort x
b ∈ C
gewählt, so dass
p(y|b
x) ≥ p(y|x) für alle x ∈ C.
Sind alle Codewörter gleich wahrscheinlich, so entspricht dies MAP.
2.18 Decodierprinzipien bei binärem symmetrischem Kanal. (p < 12 )
(a) Bei einem binären symmetrischen Kanal ist MLD = Hamming-Decodierung.
Für jedes empfangene Wort wird nach dem nächstgelegenen Codewort
decodiert.
Dieser Bereich wird zu c 1
decodiert.
c1
( Codewort)
c2
c3
19
Hamming-Decodierung kann sehr aufwändig sein. Stattdessen gelegentlich einfacheres Verfahren:
(b) Bounded Distance Decoding (BDD):
Es wird ein festes t gewählt und um jedes Codewort wird eine Kugel
vom Radius t gelegt. Decodiert werden diejenigen Wörter, die in genau
einer Kugel liegen, die anderen nicht.
Schlechtere Decodierung als MLD, aber in gewissen Fällen einfacher.
y
t
t
c1
c3
t
c2
(c) Bounded Minimal Distance Decoding (BMD):
Um jedes Codewort wird eine Kugel vom Radius t = ⌊ d(C)−1
⌋ gelegt.
2
Dann sind die Kugeln disjunkt (siehe 1.6). Es werden nur diejenigen
Wörter decodiert, die in einer Kugel liegen. (Form von BDD)
y
t
t
c1
c3
t
c2
20
2.19 Kanalcodierungssatz von Shannon. (Claude Shannon 1916-2001;
u.a. MIT)
Gegeben sei ein diskreter gedächtnisloser Kanal mit Kapazität C, Quellenalphabet A.
Wähle ε, ε′ > 0 beliebig.
Dann existiert ein n ∈ N und ein Blockcode der Länge n über A, dessen
binäre Rate R die Bedingung
C − ε′ ≤ R < C
erfüllt und wobei die Decodierfehlerwahrscheinlichkeit bei MLD kleiner als ε
ist.
Umgekehrt:
Ist Rb > C, so kann die Decodierfehlerwahrscheinlichkeit eine gewisse Grenze
nicht unterschreiten.
Bevor wir den Beweis skizzieren, vergleichen wir die Aussage des Satzes mit
einem Code, den wir schon kennen, dem 3-fachen Wiederholungscode über
Z2 .
2.20 Beispiele.
C = 3-facher Wiederholungscode von Blöcken der Länge 2 über Z2 , R = Rb =
1
. C = {(000000), (010101), (101010), (111111)}.
3
Wir nehmen einen binären symmetrischen Kanal an.
p(0|0) = p(1|1) = 1 − p, p(1|0) = p(0|1) = p, p < 21 .
Wie groß ist die Decodierfehlerwahrscheinlichkeit bei Hamming-Decodierung
(= MLD, falls alle Codewörter gleich wahrscheinlich sind)?
• 0,1 Fehler treten auf:
Korrekte Decodierung
• 2 Fehler treten auf:
Wahrscheinlichkeit für genau 2 Fehler: p2 (1 − p)4 .
Bei 6 der 15 Möglichkeiten für die 2 Fehler wird falsch decodiert (bei
jedem Codewort).
Die Wahrscheinlichkeit für 2 Fehler und falsche Decodierung ist also
6p2 (1 − p)4 .
• 3,4,5,6 Fehler treten auf:
Es wird immer falsch decodiert.
Wahrscheinlichkeit für i Fehler: pi (1 − p)6−i . Diese könne an
auftreten, i = 3, 4, 5, 6.
21
6
i
Stellen
Die Decodierfehlerwahrscheinlichkeit ist also
6p2 (1 − p)4 + 20p3 (1 − p3 ) + 15p4 (1 − p)2 + 6p5 (1 − p) + p6 .
Angenommen p = 0, 01. Dann ist die Decodierfehlerwahrscheinlichkeit etwa
5, 96 · 10−4 < 0, 001.
Beachte: Die Kapazität des Kanals ist C = 1+p log p+(1−p log 1 − p) ≈ 0, 92.
Die Rate R ≈ 0, 33 ist deutlich kleiner.
Beweisidee des Satzes von Shannon bei binärem symmetrischen
Kanal.
Sei p < 21 .
Sei x ∈ {0, 1}n (n im Moment beliebig), x wird über den Kanal gesendet.
Das empfangene Wort enthält im Mittel
n · p Fehler.
n r
(Wahrscheinlichkeit für r Fehler ist r p (1 − p)n−r ; Binomialverteilung)
Je größer n, umso größer ist die Wahrscheinlichkeit, dass die Anzahl der Fehler nahe bei n · p liegt.
(Verhältnis
von Standardabweichung zu Erwartungswert (Variationskoeffiziq
)
ent): 1−p
np
Betrachte die
vom Radius n · p um x (bzgl. der Hamming-Distanz).
P Kugel
n
Sie enthält n·p
k=0 k Wörter.
Eine
Abschätzung (siehe z.B. Friedrichs, Anhang A.2) zeigt:
Pn·p einfache
n
nH(p)
, wobei H(p) = −p log p − (1 − p) log(1 − p) (Entropie für
k=0 k ≈ 2
2 Zeichen mit Wahrscheinlichkeit p, 1 − p).
Könnte man {0, 1}n in disjunkte Kugeln vom Radius n·p zerlegen, so erhielte
2n
man 2nH(p)
= 2n(1−H(p)) = 2nC viele Kugeln.
Wählt man die Mittelpunkte dieser Kugeln als Codewörter, so wird (bei
= C.
großem n) fast immer korrekt decodiert. Die Rate des Codes ist nC
n
Die Zerlegung von {0, 1}n in disjunkte Kugeln vom Radius np geht allerdings
nicht.
Was man aber machen kann:
Man wählt den Radius der Kugeln etwas größer als np (in von ε′ und p
abhängiger Weise).
Man wählt zufällig 2R·n (C − ε′ ≤ R < C) viele Wörtern in {0, 1}n als Codewörter.
Die MLD-Decodierung wird verschlechtert zu BDD mit Parameter t.
Man kann dann zeigen, dass selten ein Wort empfangen wird, das in keiner
Kugel liegt (denn dann müssen mehr als t Fehler aufgetreten sein) und dass
außerdem im Mittel über alle Zufallswahlen auch die Wahrscheinlichkeit klein
ist, dass es zwei Codewörter im Abstand ≤ t von einem empfangenen Wort
gibt (weil man den Radius der Kugeln nicht zu groß gewählt hat).
22
Insgesamt kann man dann zeigen, dass der Erwartungswert für einen Decodierfehler ≤ ε ist, wenn man n genügend groß wählt. Daher muss es mindestens einen solchen Code geben.
(Genauer Beweis: Friedrichs, Kapitel 2.7 (für binären symmetrischen Kanal);
Roman, Kapitel 3.4)
23
3
Lineare Codes
3.1 Definition.
Sei K ein endlicher Körper, n ∈ N. Ein linearer Code ist ein Unterraum des
K-Vektorraums K n (Zeilenvektoren); insbesondere ist K das Alphabet.
Ist dim(C) = k (≤ n) und d(C) = d, so heißt C ein [n, k] oder [n, k, d]-Code
über K. |C| = q k .
Ist |K| = q, so verwendet man auch die Schreibweise [n, k, d]q -Code.
Rate: nk .
3.2. Endliche Körper
• Zp ist bzgl. der Addition und Multiplikation modulo p ein endlicher
Körper, falls p eine Primzahl ist.
• Ist K ein endlicher Körper, so ist |K| = pm für eine Primzahl p und
ein m ∈ N.
• Zu jeder Primzahlpotenz pm gibt es (bis auf Isomorphie) genau einen
endlichen Körper K mit |K| = pm .
• Konstruktion endlicher Körper der Ordnung pm , m > 1:
Sei f ein irreduzibles Polynom vom Grad m in Zp [t].
Zp [t]m−1 ist die Menge der Polynome vom Grad ≤ m − 1 über Zp .
Bezgl. der normalen Addition von Polynomen und der Multiplikation
g ⊙h = g ·h mod f (Rest bei Division durch f ) ist Zp [t]m−1 ein Körper
der Ordnung pm .
Beispiel: Körper der Ordnung 4
Z2 = {0, 1}, f = t2 + t + 1 ist irreduzibel.
K = {0, 1, t, t + 1}.
Es ist t2 mod f = t + 1, t2 + t mod f = 1 und (t + 1)(t + 1) mod f =
t2 + 1 mod f = t.
Damit erhält man folgende Multiplikationstabelle:
⊙
0
1
t
t+1
0
0
0
0
0
1
0
1
t
t+1
t
0
t
t+1
1
t+1 0 t+1
1
t
24
3.3 Beispiele.
(a) n-facher Wiederholungscode über Zp (jedes Symbol wird n-mal wiederholt):
C = {(0, ..., 0), (1, ..., 1), ..., (p − 1, ..., p − 1)} ist ein linearer [n, 1]-Code
über Zp ; C = h(1, . . . , 1)i.
P
(b) C = {(u1, ..., un−1 , un ) : ui ∈ Zp , ni=1 ui = 0 in Zp } ist ein [n, n − 1]Code über Zp ( Parity-Check-Code“);
”
C = h(1, 0, . . . , 0, p − 1), . . . , (0, . . . , 0, 1, p − 1)i.
(c) C = {(0, 0, 0, 0, 0), (0, 1, 1, 0, 1), (1, 0, 1, 1, 0), (1, 1, 0, 1, 1)} aus 1.2 (c) ist
ein linearer [5, 2]-Code über Z2 ; C = h(1, 0, 1, 1, 0), (0, 1, 1, 0, 1)i.
3.4 Definition.
Sei K ein endlicher Körper.
(a) Sei x ∈ K n . wt(x) = d(x, 0) = |{i | xi 6= 0}| heißt das Gewicht von x.
(b) Ist {0} =
6 C ⊆ K n , so heißt wt(C) = min06=x∈C wt(x) das Minimalgewicht von C.
3.5 Satz.
Ist C =
6 {0} ein linearer Code über K, so ist d(C) = wt(C).
Beweis.
Da C linear ist (x, x′ ∈ C ⇒ x − x′ ∈ C) und der Hamming-Abstand translationsinvariant ist (1.5), gilt:
d(C) =
=
=
=
min{d(x, x′ ) : x, x′ ∈ C, x 6= x′ }
min{d(x − x′ , 0) : x, x′ ∈ C, x 6= x′ }
min{d(y, 0) : y ∈ C, y 6= 0}
wt(C).
3.6 Definition.
Sei C ein [n, k]-Code über K und g1 = (g11 , . . . , g1n ), . . . , gk = (gk1 , . . . , gkn )
eine Basis von C. Dann heißt die k × n-Matrix
  

g1
g11 · · · g1n
  
.. 
G =  ...  =  ...
. 
gk
gk1 · · · gkn
Erzeugermatrix (oder Generatormatrix ) von C.
25
3.7 Satz.
Sei C ein [n, k]-Code über K und G eine k × n-Matrix über K.
Dann gilt:
G ist eine Erzeugermatrix von C ⇔ C = {uG : u ∈ K k }.
↑
Zeilenvektor
Beweis:


g1


⇒: uG = (u1 , . . . , uk )  ...  = (u1 g1 + . . . + uk gk ).
gk
k
Also: {uG : u ∈ K } besteht aus allen Linearkombinationen von g1 , ..., gk .
Behauptung folgt.


g1


⇐: Sei C = {uG : u ∈ K k }, G =  ... .
gk
Wie oben: Alle Linearkombinationen der Zeilen von G bilden C.
dim(C) = k ⇒ g1 , ..., gk sind linear unabhängig, bilden also eine Basis von C.
3.8 Bemerkung.
(a) G beschreibt eine injektive lineare Abbildung K k → K n ; C ist das
Bild. Durch Multiplikation mit G wird eine Codierungsmöglichkeit von
Infowörtern in K k auf Codewörter in K n angegeben.
(b) Führt man elementare Zeilenoperationen an G durch, so erhält man
wieder eine Erzeugermatrix von C .
(c) Gibt es eine Erzeugermatrix

1 0 ...
0 1 . . .

G = (Ik | A) =  ..
..
.
.
0 0 ...
0 ∗ ...
0 ∗ ...
..
. ∗ ...
1 ∗ ...

∗
∗

,
∗
∗
so ist für ein Infowort u = (u1 , . . . , uk ) das zugeordnete Codewort
uG = (u1 , . . . , uk , ∗ . . . ∗).
Eine solche Erzeugermatrix heißt von Standardform (oder in systematischer Form; obige Codierung heißt dann systematische Codierung).
Nicht jeder Code besitzt eine Erzeugermatrix in Standardform. Doch
durch elementare Zeilenumformungen und Spaltenvertauschungen kann
man einen äquivalenten“ Code erhalten mit Erzeugermatrix in Stan”
dardform.
26
Beispiel. C aus 3.3 (c)
1 0 1 1 0
in Standardform
Erzeugermatrix G =
0 1 1 0 1
1 1 0 1 1
G′ =
ist ebenfalls eine Erzeugermatrix von C, aber nicht in
0 1 1 0 1
Standardform.
Unterräume kann man auch als Lösungsräume homogener linearer Gleichungssysteme beschreiben. Dies führt zum Begriff der Erzeugermatrix eines Codes:
3.9 Satz und Definition.
Sei C ein [n, k]-Code über K. Dann existiert eine (n − k) × n-Matrix H, so
dass gilt:
Ist x ∈ K n , so:
x ∈ C ⇔ Hxt = 0 .
↑
(n−k)×1
(äquivalent: xH t = 0 )
↑
1×(n−k)
H heißt Kontrollmatrix von C . Es ist rg(H) = n − k (d.h. die Zeilen von H
sind linear unabhängig).
(Dann gilt auch: HGt = 0, falls G Erzeugermatrix des Codes C ist.)
Beweis.
 
g1
 .. 
Sei g1 , . . . , gk eine Basis von C und G =  . , gi = (gi1 , . . . , gin ).
gk
Betrachte das lineare Gleichungssystem:
g11 t1 + . . . + g1n tn = 0
..
..
.. ..
.
.
. .
gk1 t1 + . . . + gkn tn = 0.
 
t1
 .. 
Das heißt G ·  .  = 0, bzw. (t1 , . . . , tn ) · Gt = 0
tn
Da die Koeffizientenmatrix G den Rang k hat, ist die Dimension des Lösungsraumes
n − k. Sei h1 = (h11 , . . . , h1n ), . . . , hn−k = (hn−k,1, . . . , hn−k,n ) eine Basis des
Lösungsraumes.




h1
h1 · git




..
Setze H =  ... . Dann gilt Hgit = 
 = 0 für alle i = 1, . . . , k
.
t
hn−k
hn−k · gi
27
(hi . . . , hn−k erfüllen die i-te Gleichung oben).
Also: Hxt = 0 für alle x ∈ C.
Aus rg(H)= n − k folgt dim(Lösungsraum von Hxt = 0) = k, das heißt C ist
der Lösungsraum von Hxt = 0.
3.10 Bemerkung.
(a) Der Beweis von 3.9 gibt ein Verfahren an für:
Erzeugermatrix → Kontrollmatrix.
• Löse das LGS Gxt = 0.
• Wähle eine
toren).

h1
 ..
• H :=  .
Basis des Lösungsraumes ht1 , . . . , htn−k (hi Zeilenvek-
hn−k


 ist eine Kontrollmatrix.
(b) Umgekehrt: Kontrollmatrix → Erzeugermatrix
Bilde eine Basis des Lösungsraumes von Hxt = 0.
3.11 Beispiele.
P
(a) Parity-Check-Code C = {(u1 , ..., un ) : ni=1 ui = 0} über Z2 :


1 0 ... ... 0 1
 0 1 0 . . . 0 1
.
.. .. 

. ...
. .  Erzeugermatrix
G = .

.
..
 ..
.
0 1
0 ... ... ... 1 1
H = (1, 1, ..., 1) Kontrollmatrix
1 0 1 1 0
(b) C aus 1.2(c), Erzeugermatrix G =
0 1 1 0 1
Bestimmung der Kontrollmatrix:
Lösung von Gxt = 0: x3 , x4 , x5 beliebig und x2 = x3 + x5 , x1 = x3 + x4 .


1 1 1 0 0
Das liefert H = 1 0 0 1 0.
0 1 0 0 1
An der Kontrollmatrix kann man den Minimalabstand des linearen Codes
ablesen:
28
3.12 Satz.
Sei C =
6 {0} ein [n, k]-Code über K mit Kontrollmatrix H. Dann gilt:
d(C) = wt(C)
= min {r ∈ N : es gibt r linear abhängige Spalten in H }
= max {r ∈ N : je r − 1 Spalten in H sind linear unabhängig}
Beweis.
Seien s1 , . . . , sn die Spalten von H.
Da C =
6 {0} ist, sind s1 . . . , sn linear abhängig (als Vektoren in K n−k ). Sei w ∈
N minimal, so dass es wP
linear abhängige Spalten gibt, etwa si1 , . . . , siw . Dann
existieren cj ∈PK mit nj=1 cj sj = 0 und cj 6= 0 genau für j ∈ {i1 , . . . , iw }.
Also ist auch nj=1 cj stj = 0. Setzte c = (c1 , . . . , cn ). Dann ist
 
st1
n
  X t
cH t = (c1 , ..., cn )  ...  =
ci si = 0. (∗)
t
i=1
sn
Damit ist Hct = 0.
Also ist c ∈ C und wt(c) = w und damit wt(C) ≤ w.
Angenommen es gibt ein 0 6= c ∈ C mit w = wt(c) < w. Dann folgt aus
cH t = 0 wie in (∗), dass es w linear abhängige Spalten in H gibt. Dies ist
ein Widerspruch zur Wahl von w. Also wt(C) = w.
2. Gleichheit klar.
3.13 Beispiel.
Beispiel

  aus
 3.11(c).
  Je zwei Spalten von H sind linear unabhängig, aber
1
1
0
1 , 0 , 1 sind linear abhängig. Also ist d(C) = 3.
0
0
0
3.14 Korollar (Singleton-Schranke).
Ist C =
6 {0} ein linearer [n, k]-Code über K mit d(C) = d, so ist d ≤ n−k +1.
Beweis:
Nach der 2. Gleichheit in 3.12 gilt: d ≤ rg(H) + 1 = n − k + 1
(H Kontrollmatrix von C ).
3.15 Bemerkung und Definition.
(a) Beachte: k = logq (|C|).
Man kann auch für beliebige Codes C über A, |A| = q, zeigen, dass
d ≤ n − logq (|C|) + 1, d.h. logq (|C|) ≤ n − d + 1 (|C| ≤ q n−d+1 ) gilt.
Codes, für die Gleichheit gilt in 3.14 (bzw. 3.15) heißen MDS-Codes
(maximum distance separable).
29
(b) Über Z2 gibt es nur triviale Beispiele von MDS-Codes. Man kann zeigen, dass
C = {(0, . . . , 0), (1, . . . , 1)}
(n = d, k = 1),
C = Zn2
(n = k, d = 1) und
n
C = {c ∈ Z2 : wt(c) gerade} (k = n − 1, d = 2)
die einzigen MDS-Codes über Z2 sind.
Später (Kap. 7) werden wir nicht triviale Beispiele von MDS-Codes
über anderen Körpern angeben.
Wir beweisen jetzt eine weitere Schranke, die auch für beliebige Codes gilt.
Wir benötigen das folgende Lemma, das wir für q = 2 schon implizit im
Beweis des Satzes von Shannon verwendet haben.
3.16 Lemma.
Sei |A| = q, x ∈ An ,Pt ∈ N0, Kt (x) = {y ∈ An : d(x, y) ≤ t}.
Dann ist |Kt (x)| = ti=0 ni (q − 1)i .
Beweis.
Abstand i zu x: i Positionen
von x auswählen:
n
Möglichkeiten.
i
An jeder Position Eintrag von x ändern:
je (q − 1) Möglichkeiten.
Insgesamt: ni (q − 1)i Wörter y mit d(x, y) = i.
Behauptung folgt.
3.17 Satz (Hamming-Schranke, Kugelpackungsschranke).
Sei C ein Code der Länge n über A, |C| > 1, |A| = q.
Sei t ∈ N0 maximal mit d(C) ≥ 2t + 1, d.h. t = ⌊ d(C)−1
⌋. Dann gilt
2
|C| ≤ Pt
i=0
qn
.
n
(q − 1)i
i
Beweis.
Kugeln von Radius t um Codewörter sind disjunkt (siehe Bemerkung nach
Definition 1.6).P
Mit 3.16: |C| · ti=0 ni (q − 1)i ≤ |An | = q n .
3.18 Definition.
Ein Code heißt perfekt, falls in 3.17 Gleichheit gilt.
·
·
S
S
Äquivalent: x∈C Kt (x) = An . ( bezeichnet die disjunkte Vereinigung.)
30
3.19 Bemerkung.
Ist C perfekt, |C| > 1, t wie in 3.17, so ist d(C) = 2t + 1 (d.h. perfekte Codes
haben ungeraden Minimalabstand).
Beweis.
Es ist d(C) ≥ 2t + 1 nach Wahl von t.
Wähle x ∈ C und ändere x an t+1 Stellen ab. Das liefert z mit d(x, z) = t+1.
Also x ∈
/ Kt (x). Perfektheit: ∃ x′ ∈ C mit d(x′ , z) ≤ t. d(x, x′ ) ≤ d(x, z) +
′
d(x , z) ≤ 2t + 1.
Also: d(C) = 2t + 1.
Wir konstruieren nun mit Hilfe der Kontollmatrix eine Serie linearer perfekter
Codes (mit d = 3), die Hamming-Codes.
3.20 Hamming-Codes.
Sei q eine Primzahlpotenz und K ein Körper mit |K| = q.
ℓ −1
, k = n − ℓ.
Sei ℓ ∈ N beliebig, n = qq−1
Dann existiert ein perfekter [n, k]-Code C über K mit d(C) = 3, der HammingCode.
Konstruktion.
ℓ −1
1-dimensionale Un|K ℓ \ {0}| = q ℓ − 1. Also enthält K ℓ genau n = qq−1
terräume. Wähle aus jedem einen Vektor 6= 0 aus und bilde aus den entsprechenden Spaltenvektoren eine ℓ × n-Matrix H.
Es ist rg(H) = ℓ, denn H enthält ℓ linear unabhängige Spalten.
Sei C der Code mit Kontrollmatrix H,
C = {x ∈ K n : Hxt = 0} Hamming-Code.
dim(C) = n − ℓ = k, |C| = q k .
Je zwei Spalten in H sind linear unabhängig, aber es gibt drei linear abhängige
Spalten. 3.12: d(C) = 3.
Perfektheit: (t=1)
P1
i=0
qn
qn
qn
=
=
= q n−ℓ = q k = |C|.
n
ℓ
i
1
+
n(q
−
1)
q
(q
−
1)
i
Beachte: Es gibt mehrere Möglichkeiten für einen [n, k]-Hamming-Code, je
nach Auswahl und Anordnung der Spaltenvektoren. Sie haben aber alle (bei
festen q, ℓ) die gleichen Parameter.
31
3.21 Beispiele.
3
−1
(a) q = 2 und ℓ = 3. Dann ist n = 22−1

1 0 0

H= 0 1 0
0 0 1
= 7.

1 0 1 1
1 1 0 1
0 1 1 1
liefert einen [7, 4]-Hamming-Code über Z2
Also: C = {(x1 , . . . , x7 ) : x1 + x4 + x6 + x7 = 0, x2 + x4 + x5 + x7 = 0,
x3 + x5 + x6 + x7 = 0}
Erzeugermatrix

1 1 0
0 1 1
G=
1 0 1
1 1 1
für C:
1
0
0
0
0
1
0
0
0
0
1
0

0
0

0
1
(b) q = 3 und ℓ = 3. Dann ist n =
33 −1
3−1
= 13.


1 0 0 1 2 0 0 1 2 1 2 1 1
H= 0 1 0 1 1 1 2 0 0 1 1 2 1 
0 0 1 0 0 1 1 1 1 1 1 1 2
[13, 10]-Hamming-Code über Z3 . |C| = 310 = 59.049.
Toto 13’er Wette:
Fülle 59.049 Toto-Tipps aus mit den Codewörtern des [13, 10]-HammingCodes über Z3 .
Jeder Vektor ∈ Z13
3 hat höchstens Abstand 1 von einem Codewort. D.h.
man hat mindestens 12 Richtige. (Vgl. Anzahl aller Tipps = 313 =
1.594.323)
Ergebnis
 vom
 1./2.5.2010: (1 2 0 0 0 1 2 1 0 0 0 2 1) = y
2
t

Hy = 0, also y ∈
/ C.
2
 
 
1
2



(Wenn man in H statt der Spalte 0 die Spalte 0 gewählt hätte,
1
2
wäre y ∈ C.)
Also hat man nur 1 × 12 Richtige und mehrmals 10 bzw. 11 Richtige.
Einsatz: 29.525, 50 + 4921 × 0, 35 = 31.246, 85
{z
}
|
Bearbeitungsgebühr
32
Gewinn bei 12 Richtigen: 13.625,90 (bei 13 Richtigen: 81.755,80)
Was ist das nächstgelegene Codewort zu y (Decodierung)?
Es gibt x ∈ C mit d(x, y) = 1. Alle Elemente von C zu testen wäre zu
langsam. Schneller:
x unterscheidet sich von y an einer Stelle i, statt yi steht dort
(yi + a)
 
 mod
 3, a = 1 oder 2.
h1i
2
Also 0 = Hy t = H(xt + (0, . . . , 0, a , 0, . . . , 0)t ) = a · h2i ,
↑
h3i
2
i
a = 1, 2.
 
2

Suche also in H die Spalte, die ein Vielfaches von 0 ist:
2
Die
gesuchte
Spalte
steht
an
8.
Stelle,
d.h.
i
=
8.
 
 
2
1
0 = a · 0 liefert a = 2.
2
1
Ersetze nun die i-te Stelle von y durch yi − a, also in unserem Fall y8
durch y8 − 2 = y8 + 1 = 1 + 1 = 2.
Das liefert die Decodierung
y → x = (1 2 0 0 0 1 2 2 0 0 0 2 1). Das war der Tipp.
↓
Hannover-Gladbach 6:1
Dies geht allgemein:
3.22 Schnelles Verfahren zur Hamming-Decodierung von Hamming–
Codes.
Empfängt man y und ist Hy t = 0, so ist y ∈ C.
Gilt Hy t 6= 0, so suche in H diejenige Spalte s mit Hy t = a · s, a ∈ K \ {0}.
Ist dies die i-te Spalte von H, so ändere yi in yi − a (mod q). Dies liefert
x ∈ C, zu dem y decodiert wird.
(Im binären Fall vereinfacht sich das Verfahren, da a = 1; ändere das Bit an
der i-ten Stelle.)
Wir befassen uns jetzt mit der Hamming-Decodierung beliebiger linearer
[n, k]q -Codes.
Wurde y empfangen, so könnte man alle q k Codewörter testen, welches minimalen Abstand zu y hat. Das kann sehr aufwändig sein.
Bei Codes mit 2k > n gibt es ein effizienteres Verfahren: die SyndromDecodierung. Dazu benötigt man den Begriff der Nebenklassen eines Unterraums:
33
3.23 Bemerkung (Nebenklassen von Unterräumen in Vektorräumen).
Sei C ein Unterraum des Vektorraums V . Für jedes v ∈ V heißt
v + C := {v + x : x ∈ C}
die Nebenklasse von C zu v. (Beachte: v = v + 0 ∈ v + C.)
(a) Für v1 , v2 ∈ V gilt entweder v1 +C = v2 +C oder (v1 +C)∩(v2 +C) = ∅.
Beweis: Angenommen, (v1 + C) ∩ (v2 + C) 6= ∅. Dann gibt es ein y ∈
(v1 + C) ∩ (v2 + C) mit y = v1 + x1 = v2 + x2 für x1 , x2 ∈ C. Daraus
folgt: v1 = v2 + (x2 − x1 ) ∈ v2 + C.
Für ein beliebiges x ∈ C gilt v1 + x = v2 + (x2 − x1 ) + x ∈ v2 + C. D.h.
v1 + C ⊆ v2 + C. Analog erhält man die andere Inklusion.
Insgesamt gilt v1 + C = v2 + C.
(b) v1 + C = v2 + C ⇔ v1 − v2 ∈ C ⇔ v1 ∈ v2 + C
(Insbesondere: v1 + C = C(= 0 + C) ⇔ v1 ∈ C)
Beweis: 1. Äquivalenz:
⇒“: v1 = v1 + 0 = v2 + x für ein x ∈ C ⇒ v1 − v2 = x ∈ C.
”
(a)
⇐“: v1 − v2 = x ∈ C ⇒ v1 + 0 = v2 + x ∈ (v1 + C) ∩ (v2 + C) ⇒
”
v1 + C = v2 + C.
2. Äquivalenz klar.
(c) Wähle aus jeder Nebenklasse von C einen Vertreter vi . Dann:
V =
[
˙
i
vi + C
(disjunkte Vereinigung)
(d) Sei V ein Vektorraum über einem endlichen Körper K. Dann gilt |C| =
|v + C| für alle v∈ V :
C → v+C
Die Abbildung
ist bijektiv.
x 7→ v + x
(e) Aus (c) und (d) folgt: Ist C ein [n, k]-Code über K, |K| = q, so hat C
genau q n−k verschiedene Nebenklassen in K n .
3.24 Syndrom-Decodierung linearer Codes.
Sei C ein linearer [n, k]-Code über K, |K| = q, mit Kontrollmatrix H; also
ist H eine (n − k) × n−Matrix.
Ist y ∈ K n , so heißt Hy t ∈ K n−k das Syndrom von y.
(a) x ∈ C ⇔ Hxt = 0 ⇔ x hat Syndrom 0 (kein Krankheitsbild“).
”
34
(b) y1 , y2 liegen in derselben Nebenklasse bezüglich C (d.h. y1 + C = y2 + C)
⇔ Hy1t = Hy2t (d.h. y1 , y2 haben das gleiche Syndrom.)
(a)
[y1 + C = y2 + C ⇔ y1 − y2 ∈ C ⇔ 0 = H(y1 − y2 )t = Hy1t − Hy2t ]
(c) Jedes z ∈ K n−k tritt als Syndrom auf (klar nach (b) und 3.23(e)).
Daher: Wird x ∈ C gesendet und y = x + f empfangen (f =Fehlervektor), so
haben y und f das gleiche Syndrom.
Hamming-Decodierung: Bestimme in der Nebenklasse von y einen Vektor e
von minimalem Gewicht, einen sogenannten Nebenklassenführer (im Allgemeinen nicht eindeutig).
Decodierung: y → y − e.
Dazu: Ordne die Nebenklassenführer in lexikographischer Ordnung ihrer Syndrome (definiere dazu eine Ordnung auf K). Z.B. im binären Fall: Das Syndrom gibt die Stelle (0, ..., 2n−k − 1) des gesuchten Nebenklassenführers an
(0 < 1).
Das kann immer noch sehr aufwändig sein, z.B. bei einem [70, 50]-Code über
Z2 . C hat dann 220 Nebenklassen, jeder Nebenklassenführer hat 70 Bit.
Speicherplatzbedarf: 70 · 220 Bit = 8, 75 Megabyte (Allgemein: q n−k · n · log q
Bits)
Speichert man hingegen alle 250 Codewörter, so hat man einen Speicherplatzbedarf von 70 · 250 Bit ≈ 9.000 Terabyte.
3.25 Definition.
Sei K ein endlicher Körper. Die Abbildung < , >: K n × K n → K ist definiert
durch
< u, v >:=
n
X
i=1
ui vi = uv t ∈ K, wobei u = (u1 , . . . , un ), v = (v1 , . . . , un ).
(Vgl. Euklidsches Skalarprodukt im Rn .)
3.26 Bemerkung.
(a) < u + v, w > = < u, w > + < v, w >







für alle u, v, w ∈ K n ,

λ∈K





(b) < λu, v > = λ < u, v >
(c) < u, v > = < v, u >
(a)-(c) besagen, dass < , > eine symmetrische Bilinearform ist.
(d) < 0, v > = < v, 0 > = 0 für alle v ∈ K n
(e) Ist u ∈ K n mit < u, v >= 0 für alle v ∈ K n , so ist u = 0.
35
Beweis. (e) Sei v = ei . Dann gilt 0 =< u, ei >= ui . Dies gilt für i = 1, . . . , n,
also u = 0.
Beachte: Aus < v, v >= 0 folgt im Allgemeinen nicht v = 0.
Z.B. gilt in K = Z2 : < v, v >= 0 ⇔ v hat eine gerade Anzahl an Einsen.
3.27 Definition (Dualer Code).
Sei C ⊆ K n (C braucht kein Unterraum zu sein). Dann heißt
C ⊥ = {y ∈ K n : < y, x > = 0 für alle x ∈ C}
der duale (oder orthogonale) Code zu C .
C ⊥ ist immer ein Unterraum, also ein linearer Code, selbst wenn C nicht
linear ist. C ⊥ = (hCiK )⊥ .
3.28 Satz.
Sei C ein [n, k]-Code über K.
(a) C ⊥ ist ein [n, n − k]-Code.
(b) (C ⊥ )⊥ = C
(c) G ist Erzeugermatrix von C ⇔ G ist Kontrollmatrix von C ⊥
H ist Kontrollmatrix von C ⇔ H ist Erzeugermatrix von C ⊥
(d) Ist (Ik | A) eine Erzeugermatrix von C (in Standardform), so ist
(−At | In−k ) eine Erzeugermatrix von C ⊥ , also Kontrollmatrix von C .
Beweis.
 
x1
 .. 
n
(a) Sei G Erzeugermatrix von C , y ∈ K , G =  . , {xi }ki=1 Basis von
xk
C.
y ∈ C ⊥ ⇔ < x, y > = 0 für alle x ∈ C
⇔ < xi , y > = 0 i = 1, . . . , k
⇔ Gy t = 0
Damit ist G Kontrollmatrix von C ⊥ , dim(C ⊥ ) = n − rg(G) = n − k.
(b) C ⊆ (C ⊥ )⊥ ist klar. Die Gleichheit folgt aus Dimensionsgründen nach
(a).
36
⊥
(c) G Erzeugermatrix von C ⇒ G Kontrollmatrix 
von C
 (siehe (a)).
x1


Sei umgekehrt G Kontrollmatrix von C ⊥ , G =  ... .
xk
t
⊥
Dann gilt Gy = 0 für alle y ∈ C , d.h. < xi , y >= 0 für alle i = 1, . . . , k
und alle y ∈ C ⊥ .
⊥ (b)
⇒ x1 , . . . , xk ∈ C ⊥ = C.
Zeilen von G linear unabhängig, dim(C) = k ⇒ G Erzeugermatrix von
C.
Die zweite Äquivalenz folgt aus (b).
(d) Es gilt:
Ik
= −At Ik +In−k At = 0.
(− |{z}
A | In−k )(Ik | |{z}
A ) = (−A | In−k )
{z
} At
|
(n − k) × n
k × (n − k)
| {z }
(n − k) × n
t
t
t
n×k
Daraus folgt, dass (−At | In−k ) eine Kontrollmatrix von C ist und damit
nach (c) eine Erzeugermatrix von C ⊥ .
3.29 Beispiel.
Duale Codes zu den Hamming-Codes:
i
h ℓ
q −1
Der Hamming-Code H ist ein q−1 , n − ℓ -Code über K, |K| = q.
|{z}
=n
Die Kontrollmatrix H enthält aus jedem 1-dimensionalen Unterraum von K ℓ
einen Vektor 6= 0.
Sei C = H⊥ .
i
h ℓ
−1
, ℓ -Code. Er
Nach 3.28(c) ist H Erzeugermatrix von C. C ist also ein qq−1
heißt Simplex-Code. Es gilt:
Jedes Codewort 6= 0 in C hat Gewicht q ℓ−1 , d.h. der Abstand zwischen
zwei verschiedenen Codewörtern ist immer konstant q ℓ−1 ; insbesondere ist
d(C) = q ℓ−1 :
Seien z1 , . . . , zl die Zeilen von H, 0 6= x = (x1 , . . . , xn ) ∈ C.
Da die Zeilen von H eine Basis von C bilden, gibt es ai ∈ K mit
P
P
x = ℓi=1 ai zi = ℓi=1 ai · (zi1 , . . . , zin ).
Setze a = (a1 , . . . , aℓ ) ∈ K ℓ . Beachte: a 6= 0.
37
Es gilt: xj = 0 ⇔
Pℓ
i=1
ai zij = 0 ⇔
 
z1j
 .. 
 . 
zjℓ
| {z }
∈ hai⊥ .
j-te Spalte von H
⊥
hai hat Dimension ℓ − 1 nach 3.28(a).
ℓ−1
hai⊥ enthält also q q−1−1 der Spalten hj von H.
q ℓ−1 −1
viele Komponenten
q−1
ℓ−1
q
(q−1)
= q ℓ−1 .
q−1
Damit sind in x genau
q ℓ−1 −1
xj = 0.
wt(x) = n − q−1 =
Der Simplex-Code ist nicht perfekt, von kleiner Dimension, hat aber großen
Minimalabstand.
Speziell: Dualer Code zum [7, 4]-Hamming-Code über Z2 :
Simplex-Code C: [7, 3]-Code mit Minimalabstand d(C) = 4


1 0 0 1 0 1 1
Erzeugermatrix = 0 1 0 1 1 0 1
0 0 1 0 1 1 1
C = {(0000000), (1001011), (0101101), (0010111),
(1100110), (1011100), (0111010), (1110001)}
38
4
Reed-Muller-Codes und
Majority-Logic-Decodierung
4.1 Definition und Bemerkung.
(a) Eine Boole’sche Funktion ist eine Abbildung f : Zm
2 → Z2 .
Ordne die Elemente von Z2 lexikographisch:
v0 = (0, . . . , 0), v1 = (0, . . . , 0, 1), . . . , v2m −1 = (1, . . . , 1).
(D.h. vi entspricht
dem Koeffizientenvektor der Binärdarstellung von i,
P
j−1
also i = m
x
2
, falls vi = (xm , . . . , x1 ).)
j=1 j
f → f = (f (v0 ), . . . , f (v2m −1 ))
liefert eine bijektive Abbildung von der Menge der Boole’schen Funk2m
2m
tionen Zm
Boole’sche Funktionen
2 → Z2 auf Z2 . Also gibt es 2
m
Z2 → Z2 . Sie bilden einen Z2 -Vektorraum und einen kommutativen
Ring mit Eins.
(b) Sei J = {j1 , . . . , jr } ⊆ {1, . . . , m}, j1 < . . . < jr .
Definiere die Boole’sche Monomfunktion fJ durch fJ (xm , . . . , x1 ) =
xj1 · . . . · xjr (Multiplikation in Z2 ) für (xm , . . . , x1 ) ∈ Zm
2 .
(Also fJ (xm , . . . , x1 ) = 1 ⇔ xj1 = . . . = xjr = 1.)
Es gibt 2m Boole’sche Monomfunktionen fJ . J = ∅, so fJ = 1.
(c) Die Boole’schen Monomfunktionen fJ : Z2m → Z2 sind linear unabhängig
über Z2 :
P
Sei J⊆{1,...,m} cJ fJ = 0.
Einsetzen von (0, . . . , 0) liefert: c∅ = 0.
Einsetzen von (0, . . . , 0, 1), . . . , (1, 0, . . . , 0) liefert: ci = 0, i = 1, . . . , m.
So fortfahrend erhält man cJ = 0 für |J| = 2, 3, . . . , m.
(d) Eine Boole’sche Polynomfunktion ist eine Z2 -Linearkombination von
m
Boole’schen Monomfunktionen. Nach (b), (c) gibt es davon 22 .
Nach (a): Jede Boole’sche Funktion ist eine Boole’sche Polynomfunktion.
Grad(f ) = maximaler Grad der auftretenden Monome.
Grad(0) = −∞.
Das Produkt von zwei Boole’schen Polynomfunktionen erhält man durch
distributives Ausmultiplizieren. Beachte dabei, dass xi xj = xj xi und
x2i = xi (als Funktionen) gilt.
39
Beispiel:
f (x3 , x2 , x1 ) = 1 + x2 + x1 x3 + x2 x3 (Summe und Produkt über Z2 ).
Dann ist f = (1, 1, 0, 0, 1, 0, 1, 0).
[Jedes Polynom in n Variablen x1 , . . . , xn liefert auch eine Funktion
e
Zm
2 → Z2 ; da aber xi und xi denselben Wert für xi = 1, 0 liefern,
braucht man nur Polynome, wo in den Monomen kein xi mit Potenz
≥ 2 auftritt.]
4.2 Bemerkung.
Gegeben sei eine Boole’sche Funktion f durch ihren Wertevektor“ f . Wie
”
findet man die Darstellung von f als Polynomfunktion?
Die Summe entspricht XOR und das Produkt entspricht ∧.
Es ist leicht, jede Boole’sche Funktion mit ∧, ∨, − (und, oder, Negation)
darzustellen:


_
^
^

xk  .
f=
xj ∧
{a=(am ,...,a1 )∈Zm
2 :f (a)=1}
{j:aj =1}
{k:ak =0}
Benutze jetzt
·=∧
1 + g = ḡ
f + g + fg = f ∨ g
g+g =0
g·g =g
g · ḡ = 0
g + ḡ = 1.
Beispiel:
f = (00011000), d.h. f (011) = 1 = f (100), Rest 0.
f = x1 x2 x3 ∨ x1 x2 x3
= x1 x2 (1 + x3 ) ∨ (1 + x1 )(1 + x2 )x3
= x1 x2 (1 + x3 ) + (1 + x1 )(1 + x2 )x3 + x1 x2 (1 + x3 )(1 + x1 )(1 + x2 )x3
{z
}
|
=0
= x1 x2 + x1 x2 x3 + x3 + x1 x3 + x2 x3 + x1 x2 x3
= x1 x2 + x1 x3 + x2 x3 + x3 .
4.3 Definition.
Sei 0 ≤ r ≤ m. Definiere den binären Reed-Muller-Code RM(r, m) durch
m
RM(r, m) = {f ∈ Z22 : f : Zm
2 → Z2 Boole’sche Polynomfunktion vom Grad ≤ r}.
40
Muller,1954, Reed, 1954 (Majority-Logic-Decodierung für RM-Codes)
(Reed-Muller-Codes sind sogenannte Auswertungscodes“, denn die Codewörter
”
entstehen durch die Auswertung gewisser Funktionen an allen Punkten des
Zm
2 .)
Per Konstruktion gilt also RM(0, m) ⊆ RM(1, m) ⊆ . . . ⊆ RM(m, m).
4.4 Beispiel.
m = 3, r = 2, f (x3 , x2 , x1 ) = x1 + x2 x3 + 1
x3
x2
x1
f
0
0
0
1
0
0
1
0
0
1
0
1
0
1
1
0
1
0
0
1
1
0
1
0
1
1
0
0
1
1
,
1
1
d.h. (10101001) ∈ RM(2, 3).
4.5 Satz.
Sei 0 ≤ r P
≤ m. Dann
Code der Länge 2m , Dimen ist RM(r, m) ein linearer
r
m
m−r
.
sion k = i=0 i und Minimalabstand d = 2
Beweis.
Länge 2m ist
klar.
Es gibt mi Boole’sche Funktionen vom Grad i. Damit folgt die Behauptung
über die Dimension aus 4.1(c).
Per Induktion nach m zeigen wir nun d = d (RM(r, m)) = 2√m−r :
m = 0 (also auch r = 0): RM(0,
= {(0), (1)} und d = 1.
0) m−r
Sei m > 0. Es ist wt x1 . . . xr = 2
, also d ≤ 2m−r .
Sei f 6= 0 eine Polynomfunktion vom Grad ≤ r.
0 6= f (xm , . . . , x1 ) = g(xm−1 , . . . , x1 ) + xm h(xm−1 , . . . , x1 ).
Wir müssen zeigen, dass wt(f ) ≥ 2m−r , d.h. dass mindestens 2m−r Vektoren
v ∈ Zm
2 existieren mit f (v) 6= 0.
Beachte: Grad(h) ≤ r − 1.
Ist h = 0, so ist r ≤ m − 1. Per Induktion ist wt(g) ≥ 2m−r−1 , wobei g als
Funktion Z2m−1 → Z2 betrachtet wird. Für jedes a = (am−1 , . . . , a1 ) ∈ Z2m−1
mit g(a) 6= 0 ist dann f (0, a√
m−1 , . . . , a1 ) = f (1, am−1 , . . . , a1 ) 6= 0. Damit ist
wt(f) ≥ 2 · 2m−r−1 = 2m−r .
Sei h 6= 0. Ist g 6= 0, so existieren per Induktion mindestens 2m−r−1 Vektoren
a ∈ Z2m−1 mit g(a) 6= 0. Damit ist auch f (0, a) 6= 0.
Ist zusätzlich g + h 6= 0, so existieren mindestens 2m−r−1 Vektoren b ∈ Z2m−1
mit (g + h)(b) 6= 0, also ist f (1, b) 6= 0.
√
Dies liefert 2m−r Vektoren v ∈ Zm
2 mit f (v) 6= 0.
41
Ist g = 0, so ist Grad(h) ≤ r−1, und es existieren per Induktion√2(m−1)−(r−1) =
2m−r Vektoren c ∈ Z2m−1 mit h(c) 6= 0, also auch f (1, c) 6= 0.
Ist g + h = 0, so ist Grad(g)=Grad(h), also Grad(g) ≤ r − 1. Dann existieren
per Induktion 2(m−1)−(r−1) = 2m−r Vektoren w ∈ Z2m−1 mit g(w) 6= 0, also
√
f (0, w) 6= 0.
4.6 Beispiele.
(a) (1, . . . , 1) ∈ RM(r, m) für alle 0 ≤ r ≤ m, denn (1, . . . , 1) ist der Wert
| {z }
2m
der Funktion 1.
(b) RM(0, m) ist der [2m , 1]-Wiederholungscode {(0, . . . , 0), (1, . . . , 1)}.
| {z } | {z }
2m
2m
m
(c) RM(m, m) = (Z2 )2
(d) C = RM(1, m) ist ein [2m , m + 1]-Code mit d(C) = 2m−1 .
Speziell RM(1, 5) ist ein [32, 6]-Code mit d(C) = 16.
Er wurde bei den Mariner Expeditionen 6, 7 und 9 zum Mars (1969
- 1972) für die Bildübertragung zur Erde eingesetzt. Die 26 = 64 Codewörter entsprachen der Helligkeit (Grautöne) eines Bildpunktes. Wegen 7 ≤ d(C)−1
= 15
ist RM(1, 5) ein 7 Fehler-korrigierender Code der
2
2
Länge 32. Ein Bild wurde in ein 600 × 600 Gitterpunkte zerlegt und
jeder dieser 360.000 Punkte in ein Codewort codiert. 1
m
(e) RM(m − 1, m) = {x ∈ (Z2 )2 : wt(x) ist ungerade}.
(Das kann man mit der Methode aus dem Beweis von Satz 4.5 beweisen.) Insbesondere haben alle Wörter in jedem RM(r, m), r ≤ m − 1,
gerades Gewicht.
4.7 Satz.
Für 0 ≤ r ≤ m − 1 ist
RM(r, m)⊥ = RM(m − r − 1, m).
(Insbesondere ist RM(r, 2r − 1) ein selbstdualer Code der Dimension 22r und
der Länge 22r+1 .)
1
vgl. www.jpl.nasa.gov bzw. www.nasa.gov
42
Beweis.
Sei f ∈ RM(r, m) und g ∈ RM(m − r − 1, m).
Dann ist grad(f · g) ≤ r + m − r − 1 = m − 1 ⇒ f · g ∈ RM(m − 1, m).
Nach 4.6(e) hat f · g gerades Gewicht.
Sei f = (f (v0 ), . . . , f (v2m −1 )) = (c0 , . . . , c2m −1 ) und g = (g(v0 ), . . . , g(v2m −1 )) =
(d0 , . . . , d2m −1 ). Dann hat f · g = (c0 d0 , ..., c2m −1 d2m −1 ) gerades Gewicht.
P2m −1
⇒ f, g = i=0
ci di = 0 (in Z2 ).
Also: RM(m − r − 1, m) ⊆ RM(r, m)⊥ .
m−r−1
X m
.
dim(RM(m − r − 1, m)) =
i
i=0
r X
m
3.28
⊥
m
dim(RM(r − m) ) = 2 −
i
i=0
r m X
X
m
m
−
=
i
i
i=0
i=0
m
m
X
X
m
m
−
=
j
i
j=m−r
i=0
m−r−1
X m
.
=
i
i=0
Aufgrund der Gleichheit der Dimensionen gilt Gleichheit.
4.8 Bemerkung.
Es gibt eine 1-1-Beziehung zwischen Boole’schen Funktionen Zm
2 → Z2 und
m
Teilmengen des Z2 . Betrachte dazu die beiden injektiven Abbildungen
f 7→ Tr(f ) = {x ∈ Zm
2 : f (x) = 1} (Träger von f ) und
1 x∈M
M 7→ χM : χM (x) =
(charakteristische Funktion von f ).
0 x∈
/M
Es gilt χTr(f ) = f und Tr(χM ) = M (inverse Operationen).
(Also: Jede Boole’sche Funktion ist von der Form χM .)
Frage: Für welche M ⊆ Zm
2 ist χM ∈ RM(r, m)?
Eine hinreichende Bedingung liefert der folgende Satz:
4.9 Satz.
Sei M ein t-dimensionaler Unterraum von Zm
2 , t ≥ m − r.
Dann ist χM ∈ RM(r, m).
43
Beweis.
Als t-dimensionaler Unterraum von Zm
2 ist M Lösungsraum eines homogenen LGS in m Unbekannten mit m − t Gleichungen (Koeffizientenmatrix =
Kontrollmatrix von M):
a1,1 x1 + ... + a1,m xm = 0
..
..
.
.
am−t,1 x1 + ... + am−t,m xm = 0
Setze pi (x1 , ..., xm ) = ai,1 x1 +...+ai,m xm +1 (Boole’sches Polynom vom Grad
1).
m−t
Sei p(x1 , ..., xm ) = Πi=1
pi (x1 , ..., xm ). Dann ist p ein Boole’sches Polynom
vom Grad m − t ≤ r, d.h. p ∈ RM(r, m).
Nun gilt für (y1 , ..., ym ) ∈ Zm
2 :
p(y1 , ..., ym ) = 1 ⇔ pi (y1 , ..., ym ) = 1, i = 1, ..., m − t
⇔ ai,1 y1 + ... + ai,m ym = 0 i = 1, ..., m − t
⇔ (y1 , ..., ym ) ∈ M.
Also: χM = p ∈ RM(r, m).
4.10 Bemerkung.
(a) Ein t-dimensionaler affiner Unterraum des Zm
2 ist eine Nebenklasse eines
t-dimensionalen (linearen) Unterraums des Zm
2 .
Die Elemente jedes t-dimensionalen affinen Unterraumes des Zm
2 lassen
sich als Lösungen eines inhomogenen LGS in m Unbekannten mit m−t
Gleichungen beschreiben.
Indem man im obigen Beweis die Definition der pi modifiziert (+1 nur,
wenn in der entsprechenden Gleichung auf der rechten Seite eine 0
steht), lässt sich genauso zeigen:
Ist M ein t-dimensionaler affiner Unterraum des Zm
2 , t ≥ m − r, so ist
χM ∈ RM(r, m).
(b) Man kann zeigen:
m
RM(r, m) = hχM ∈ Z22 : M t-dim. affiner UR von Zm
2 , t ≥ m − ri.
Beweis: MacWilliams, Sloane, Chapter 13, §6.
4.11 Beispiel.
m = 3, r = 1.
M = {(000), (101), (011), (110)} (2-dimensionaler Unterraum von Z32 )
χM = (10010110)
44
Kontrollmatrix für M:
 
1

(a11 , a12 , a13 ) 0 = 0
1
 
0

(a11 , a12 , a13 ) 1 = 0
1
Es gilt also:
a11 +
a13 = 0
a12 + a13 = 0
Der Lösungsraum dieses LGS wird erzeugt von (1, 1, 1), also ist (a11 , a12 , a13 ) =
(1, 1, 1).
4.9: Für p(x3 , x2 , x1 ) = x1 + x2 + x3 + 1 ist p = χM ∈ RM(1, 3).
(Man hätte p natürlich auch mit der Methode von 4.2 aus χM berechnen
können.)
Für Reed-Muller-Codes gibt es ein effizientes Decodierverfahren (das aber
nicht auf Reed-Muller-Codes beschränkt ist): Majority-Logic-Decodierung.
Dazu benötigen wir zunächst folgende Definition:
4.12 Definition.
Seien y (1) , . . . , y (ℓ) ∈ K n , K ein endlicher Körper, 1 ≤ i1 < i2 < . . . < is ≤ n.
y (1) , . . . , y (ℓ) heißen orthogonal bezüglich der Positionen i1 , . . . , is , falls gilt:
Tr(y (i) ) ∩ Tr(y (j)) = {i1 , . . . , is } für alle i, j = 1, . . . , ℓ, i 6= j.
(Tr(x1 , . . . , xn ) = {i : xi 6= 0})
D.h.
(j)
(j)
(1) yi1 = . . . = yis = 1 für alle j = 1, . . . , ℓ.
(j ′ )
(2) Ist a ∈ {1, . . . , n} \ {i1 , . . . , is }, so ist ya 6= 0 für höchstens ein
j ′ ∈ {1, . . . , ℓ}. (D.h. außerhalb der Positionen i1 , . . . , is sind die y (j)
orthogonal“ zueinander.)
”
(Wichtiger Fall: orthogonal bezüglich einer Position)
Wir betrachten im Folgenden nur den Fall K = Z2 .
Grundlage für die Majority-Logic-Decodierung ist der folgende Satz:
45
4.13 Satz.
Sei C ein [n, k]-Code über Z2 , y (1) , . . . , y (ℓ) ∈ Zn2 orthogonal bezüglich der
Positionen i1 , . . . , is .
Angenommen x ∈ C wird gesendet und z ∈ Zn2 wird empfangen, und es sind
maximal t ≤ 12 ℓ Fehler aufgetreten. Dann gilt:
Die Anzahl der Fehler in z an den Stellen i1 , . . . , is ist ungerade
⇔ |{j : Anzahl der Fehler an den Positionen von Tr(y (j) ) ist ungerade}| >
|{j : Anzahl der Fehler an den Positionen von Tr(y (j)) ist gerade}|.
Beweis.
Von den t fehlerhaften Positionen in z seien u ≥ 0 innerhalb von i1 , . . . , is ,
o.B.d.A. i1 , . . . , iu , und t − u außerhalb von i1 , . . . , is .
Für jede der t−u fehlerhaften Stellen außerhalb von i1 , . . . , is gibt es maximal
′
ein y (j ) , das an der Stelle Eintrag 6= 0 hat (Bedingung (2) aus 4.12).
Also: Mindestens ℓ − (t − u) der y (j) haben an sämtlichen fehlerhaften Stellen
außerhalb von i1 , . . . , is eine Null. Seien dies bei geeigneter Nummerierung
y (1) , . . . , y (v) , v ≥ ℓ − (t − u). Es ist v ≥ ℓ − t ≥ 2ℓ , da t ≤ 2ℓ .
⇒“:
”
Es ist u ungerade, also u ≥ 1. Daher v ≥ ℓ − (t − u) ≥ ℓ − (t − 1) ≥ 2ℓ + 1.
Da die fehlerhaften Positionen in Tr(y (j) ) für j = 1, . . . , v sämtlich in i1 , . . . , is
liegen, ist die Anzahl der fehlerhaften Positionen dieser Tr(y (j) ) gerade u, also
ungerade.
Daher:
|{j : Anzahl der Fehler an den Positionen von Tr(y (j) ) ist ungerade}| ≥ v ≥
ℓ
+ 1. Also hat die Mehrzahl der y (j) , j = 1, . . . , ℓ eine ungerade Anzahl von
2
Fehlern an den Positionen ihrer Träger.
⇐“:
”
Angenommen, u ist gerade. Dann haben alle y (j) , i = 1, . . . , v, eine gerade
Anzahl von Fehlern an den Positionen von Tr(y (j) ). Aus v ≥ 2ℓ folgt somit
|{j : Anzahl der Fehler an den Positionen von Tr(y (j)) ist ungerade}| ≤
|{j : Anzahl der Fehler an den Positionen von Tr(y (j)) ist gerade}|.
Als Korollar erhalten wir jetzt eine Aussage, falls die Vektoren y (1) , . . . , y (ℓ)
aus 4.13 zusätzlich in C ⊥ liegen.
4.14 Korollar.
Sei C ein [n, k]-Code über Z2 , y (1) , . . . , y (ℓ) ∈ C ⊥ orthogonal bezüglich der
Positionen i1 , . . . , is .
Angenommen x ∈ C wird gesendet und z ∈ Zn2 wird empfangen, und es sind
maximal t ≤ 21 ℓ Fehler aufgetreten. Dann gilt:
46
Anzahl der
Fehler
in z an den
Stellen
i1 , . . . , is ist ungerade
⇔ |{j : y (j), z = 1}| > |{j : y (j) , z = 0}|.
Ist s = 1, so lässt sich auf diese Weise feststellen, ob Position i1 in z fehlerhaft ist oder nicht. Diese lässt sich dann korrigieren (K = Z2 ): (Einfache)
Majority-Logic-Decodierung (Majoritäts-Decodierung).
(Will man alle Positionen korrigieren, so braucht man für jede Position geeignete ℓ Vektoren aus C ⊥ .)
Beweis.
Wir behaupten,
dass gilt:
(j) |{j : y , z = 1}| =
|{j : Anzahl der Fehler an
den Positionen von Tr(y (j)) ist ungerade}|.
(j)
Für alle j = 1, . . . , ℓ ist y , x = 0, da y (1) , . . . , y (ℓ) ∈ C ⊥ .
Sei j ∈ {1, . . . , ℓ}, u die Anzahl der Fehler von z an den Positionen von
Tr(y (j)). Dann gilt:
(j) y , z = y (j) , z − y (j) , x
n
n
X
X
(j)
(j)
yi xi
yi zi −
=
i=1
=
X
i∈Tr(y (j) )
=
X
i∈Tr(y (j) )
i=1
(j)
yi (zi −
xi )
(
1 u ungerade
zi − xi =
0 u gerade
(Beachte, dass die Summen in Z2 gebildet werden.)
Damit ist die Eingangsbehauptung bewiesen und 4.14 folgt aus 4.13.
4.15 Beispiel.
Sei C der [7,3]-Simplex-Code über Z2 (der duale Code zum binären [7,4]Hamming-Code, vgl. 3.29).
[Beachte: d(C) = 4, 1-Fehler-korrigierend]
Erzeugermatrix von C ⊥ = Erzeugermatrix des Hamming-Codes
(=Kontrollmatrix von C )


1 1 0 1 0 0 0
 0 1 1 0 1 0 0 

H̃ = 
 1 0 1 0 0 1 0  (vgl. 3.21(a))
1 1 1 0 0 0 1
Wähle
47
y (1) = erste Zeile von H̃
= (1101000)
(2)
y
= dritte Zeile von H̃
= (1010010)
(3)
y
= Summe der zweiten und vierten Zeile = (1000101)
y (1) , y (2) , y (3) ∈ C ⊥ sind orthogonal bezüglich Position 1.
Angenommen z = (0100110) wird empfangen, maximal 1 Fehler sei aufgetreten.
hy (1) , zi = 1, hy (2) , zi = 1, hy (3) , zi = 1.
Mit 4.14 folgt: Stelle z1 ist fehlerhaft.
Decodierung zu x = (1100110).
Tatsächlich gilt x ∈ C, da H̃x = 0. Wäre dies nicht der Fall (wenn also mehr
als ein Fehler aufgetreten ist), so würde man nicht decodieren.
Angenommen z̃ = (0110010) wird empfangen, maximal 1 Fehler sei aufgetreten.
hy (1) , zi = 1, hy (2) , zi = 0, hy (3) , zi = 0.
4.14: z1 korrekt.
(Über die übrigen Stellen lässt sich mit y (1) , y (2) , y (3) nichts aussagen!)
4.16. Prinzip der mehrstufigen Majority-Logic-Decodierung
⌋
Sei C ein [n, k]-Code über Z2 , d = d(C), t ≤ ⌊ d(C)−1
2
d(C)−1
(im besten Fall t = ⌊ 2 ⌋).
Sei x ∈ C gesendet und z ∈ Zn2 empfangen worden. Es seien maximal t Fehler
aufgetreten. Sei ℓ = 2t.
48
s-stufige Majority-Logic-Decodierung (der Position i)
Position i in z
korrekt/fehlerhaft
Majoritätsentscheidung
i
4.13
Anzahl Fehler von z
in Tr(y (i1 ) )
gerade/ungerade
Majoritätsentscheidung
y (1)
...
..............................
4.13
...
4.13
orthogonal
bzgl. Tr(y (i1 ) )
...
y (i1 ,...,is−2 )
...
...
Anzahl Fehler von z
in Tr(y (i1 ,...,is−1 ) )
gerade/ungerade
Majoritätsentscheidung
orthogonal
bzgl. i
...
y (i1 ,i2 )
Anzahl Fehler von z
in Tr(y (i1 ,...,is−2 ) )
gerade/ungerade
Majoritätsentscheidung
y (ℓ)
y (i1 )
y (i1 ,...,is−2 ,is−1 )
orthogonal
bzgl. Tr(y (i1 ,...,is−2 ) )
4.14
Bilinearformen
mit z bilden
...
...
y (i1 ,...,is−1 ,1)
y (i1 ,...,is−1 ,ℓ) ∈ C ⊥
orthogonal
bzgl. Tr(y (i1 ,...,is−1 ) )
Ps−1 j
s −1
ℓ = ℓℓ−1
Insgesamt: maximal ℓs Berechnungen von Bilinearformen und j=0
Majoritätsbestimmungen. Dabei muss s so gewählt werden, dass man in der
untersten Stufe jeweils genügend viele, nämlich ℓ, orthogonale Vektoren in
C ⊥ zur Verfügung hat.
[ℓ ist jeweils die Mindestanzahl der benötigten Vektoren; das Verfahren funktioniert auch, wenn in einzelnen Schritten mehr als ℓ orthogonale Vektoren
verwendet werden. Das kann von Vorteil sein, wenn man gleichzeitig mehrere
Positionen von z korrigieren möchte, wie man bei den Reed-Muller-Codes
sehen wird.]
49
Anwendung auf Reed-Muller-Codes:
4.17 Lemma.
Sei M ein p-dimensionaler Unterraum des Zm
2 , p < m.
m−p
Dann gibt es genau 2
− 1 (p + 1)-dimensionale Unterräume von Zm
2 , die
M enthalten.
Sind M1 und M2 zwei solche Unterräume, M1 6= M2 , so ist M1 ∩ M2 = M.
Beweis.
|M| = 2p . Für jedes v ∈ Zm
2 \ M ist hM ∪ vi ein (p + 1)-dimensionaler
Unterraum, der M enthält. Er enthält 2p+1 − 2p = 2p Vektoren, die nicht
in M liegen. Jeder dieser Vektoren spannt mit M also den gleichen (p + 1)dimensionalen Unterraum auf.
m
p
=
Wegen |Z2m \ M| = 2m − 2p ist die Anzahl der gesuchten Unterräume 2 2−2
p
m−p
2
− 1.
Die zweite Aussage folgt aus Dimensionsgründen.
4.18. Mehrstufige Majority-Logic-Decodierung für Reed-Muller-Codes
Gegeben: C = RM(r, m), r < m, d(C) = 2m−r , also (2m−r−1 − 1)-Fehlerkorrigierend.
m
Voraussetzungen: x ∈ RM(r, m) wird gesendet, z ∈ Z22 wird empfangen,
maximal t = 2m−r−1 − 1 Fehler seien aufgetreten.
(Dann ist ℓ ≥ 2m−r − 2, vgl. 4.16 und Bem. nach 4.16.)
1. Schritt:
m−r
Sei M ein r-dimensionaler Unterraum von Zm
− 1 (r + 1)2 . Dann gibt es 2
m
dimensionale Unterräume von Z2 , die M enthalten (4.17). Wähle 2m−r − 2
von diesen, M1 , . . . , M2m−r −2 .
Da RM(r, m)⊥ = RM(m − r − 1, m) (4.7) und m − (m − r − 1) = r + 1, ist
χMj ∈ RM(r, m)⊥ nach 4.9.
E
D
Bestimme χMj , z , j = 1, . . . , 2m−r − 2.
Die χMj sind orthogonal bezüglich Tr(χM ), da Mi ∩ Mj = M.
E
D
Stelle fest, ob die Mehrzahl der χMj , z = 1 ist oder nicht.
4.14: Es ist bekannt, ob die Anzahl der Fehler von z an den Positionen von
Tr(χMj ) ungerade oder gerade ist.
Führe diese Untersuchung für alle r-dimensionalen Unterräume durch.
2. Schritt:
Wähle einen (r − 1)-dimensionalen Unterraum N von Zm
2 .
Nach 4.17 gibt es 2m−r+1 − 1 > 2m−r − 2 r-dimensionale Unterräume, die N
enthalten. Wähle 2m−r − 2 von diesen, N1 , N2 , . . . N2m−r −2 .
50
Nach dem 1. Schritt ist bekannt, ob an den Positionen von Tr(χNj ) eine ungerade oder eine gerade Anzahl von Fehlern von z vorliegt.
4.13: Stelle durch Majoritätsentscheidung fest, ob an den Positionen von
Tr(χNj ) eine ungerade oder eine gerade Anzahl von Fehlern von z vorliegt.
Führe dies für alle (r − 1)-dimensionalen Unterräume durch.
3. Schritt:
Führe den 2. Schritt für alle (r−2), . . . , 1, 0-dimensionalen Unterräume durch.
0-dimensionaler Fall: {0} = {v0 }. (Anzahl der Fehler ungerade = z0 fehlerhaft.) Wir wissen daher, ob Position z0 fehlerhaft ist oder nicht.
Da wir auch wissen, ob die Anzahl der Fehler von z an den Positionen {0, i},
i = 1, . . . , 2m − 1 gerade oder ungerade ist (denn {v0 , vi } ist 1-dimensionaler
Unterraum), wissen wir auch, ob zi fehlerhaft ist oder nicht.
4.19 Beispiel (Mehrstufige Majority-Logic-Decodierung von RM(1, 4)).
n = 2m = 16, k = 1 + 4 = 5, d = 23 = 8, t = ⌊ d−1
⌋ = 3 (ℓ = 6)
2
Wir wählen folgende Bezeichnungen für die Elemente des F42 :
v0
v1
v2
v3
= (0000)
= (0001)
= (0010)
= (0011)
v4
v5
v6
v7
= (0100) v8
= (0101) v9
= (0110) v10
= (0111) v11
= (1000)
= (1001)
= (1010)
= (1011)
v12
v13
v14
v15
= (1100)
= (1101)
= (1110)
= (1111)
Angenommen, ein Wort x = (x0 , . . . , x15 ) ∈ R(1, 4) wird gesendet und
z = (1011010001001010) wird empfangen. Bei der Übertragung seien maximal 3 Fehler aufgetreten.
Wir nehmen an, dass maximal drei Fehler aufgetreten sind und wollen z mit
Multistep Majority-Logic decodieren.
r = 1:
Betrachte alle 1-dimensionaen Unterräume, also {v0 , vi }, i = 1, . . . , 15. (Beachte: v0 ist der Nullvektor.)
Bestimme, ob die Anzahl der Fehler an den zugehörigen Positionen 0, i gerade oder ungerade ist. Beginne mit {v0 , v1 } =: M.
Teste für alle 2-dimensionalen Unterräume Mj ⊇ M, ob hz, χM i gleich 0
j
oder 1 ist.
Es gibt sieben solcher Unterräume, nämlich
M1
M2
M3
M4
= {v0 , v1 , v2 , v3 } M5 = {v0 , v1 , v10 , v11 }
= {v0 , v1 , v4 , v5 } M6 = {v0 , v1 , v12 , v13 }
= {v0 , v1 , v6 , v7 } M7 = {v0 , v1 , v14 , v15 }
= {v0 , v1 , v8 , v9 }
Für hz, χM i, i = 1, . . . , 7 gilt:
1
51
j
hz, χM i
j
1 2 3 4 5 6 7
1 0 1 0 1 0 0
Da die Mehrzahl der Werte von hz, χM i gleich 0 ist, hat z an den Positionen
j
0,1 eine gerade Anzahl von Fehlern.
Diese Rechnung haben wir jetzt für alle M = {v0 , vi } durchzuführen. Die
Ergebnisse für v2 , v3 sind in folgender Tabelle zusammengefasst:
M
{v0 , v2 }
Mj
{v0 , v2 , v1 , v3 }
{v0 , v2 , v4 , v6 }
{v0 , v2 , v5 , v7 }
{v0 , v2 , v8 , v10 }
{v0 , v2 , v9 , v11 }
{v0 , v2 , v12 , v14 }
{v0 , v2 , v13 , v15 }
{v0 , v3 } {v0 , v3 , v1 , v2 }
{v0 , v3 , v4 , v7 }
{v0 , v3 , v5 , v6 }
{v0 , v3 , v8 , v11 }
{v0 , v3 , v9 , v10 }
{v0 , v3 , v12 , v15 }
{v0 , v3 , v13 , v14 }
hz, χM i
j
1
0
1
0
1
0
0
1
0
1
0
1
1
1
Anzahl Nullen
>
Anzahl Einsen
Daher:
Anzahl der Fehler
an den Positionen 0,2
gerade
Anzahl Nullen
<
Anzahl Einsen
Daher:
Anzahl der Fehler
an den Positionen 0,3
ungerade
Analog ergeben sich die übrigen Fälle. Man erhält
52
M
Position Anzahl der Fehler
{v0 , v1 }
0, 1
gerade
{v0 , v2 }
0, 2
gerade
{v0 , v3 }
0, 3
ungerade
{v0 , v4 }
0, 4
gerade
{v0 , v5 }
0, 5
gerade
{v0 , v6 }
0, 6
gerade
{v0 , v7 }
0, 7
ungerade
{v0 , v8 }
0, 8
gerade
{v0 , v9 }
0, 9
gerade
{v0 , v10 }
0, 10
gerade
{v0 , v11 }
0, 11
ungerade
{v0 , v12 }
0, 12
gerade
{v0 , v13 }
0, 13
gerade
{v0 , v14 }
0, 14
gerade
{v0 , v15 }
0, 15
gerade
Die Mehrzahl der Anzahl der Fehler ist also gerade. Daher ist Position 0 von
z korrekt. Die Positionen 3,7,11 von z müssen also fehlerhaft sein.
z wird daher zum Codewort x = (1010010101011010) decodiert.
Bemerkung.
Die erste Beschreibung der Majority-Logic-Decodierung stammt von Reed
(1954).
Es gibt Modifikationen und effizientere Verfahren der Majority-Logic-Decodierung.
z.B. -Mehrfachnutzung der y (i1 ,...,ij )
-Weniger Stufen
Chen (1971/72):
RM(r, m) kann für r ≤ m2 mit 2-stufiger Majority-Logic decodiert werden:
Zu jeder Position i gibt es 2m−r −2 r-dimensionale affine Unterräume M1 , . . . , M2m−r −2
mit χMj orthogonal bezüglich i.
Zu jedem Mi gibt es 2m−r −2 (r +1)-dimensionale affine Unterräume Nij , j =
1, . . . , 2m−r − 2, mit χNij orthogonal bezüglich Tr(χMi ); χNij ∈ RM(r, m)⊥ .
Literatur: Mac Williams, Sloane (Chap. 10)
Roman (6.2)
van Lint (4.5)
Lin, Costello (4.3, 4.4, 8.)
53
5
Expander-Codes und LDPC-Codes
5.1. Vorüberlegung
(a) Gegeben sei ein binärer symmetrischer Kanal mit Fehlerwahrscheinlichkeit p. Bei einem Code der Länge n sind dann pro Codewort n · p
Fehler zu erwarten.
Damit diese korrigierbar sind, sollte der Minimalabstand d des Codes
die Bedingung d > 2np + 1 erfüllen.
Der sogenannte relative Minimalabstand nd muss daher größer als 2p
sein.
Wenn man nun nicht nur einen Code betrachtet, sondern eine Familie
von (linearen) Codes Ci , i ∈ N, der Länge ni mit dim(Ci+1 ) > dim(Ci )
(z.B. um eine Wahl für die Anzahl der benötigten Codewörter zu haben), so sollten die relativen Minimalabstände ndii durch eine positive
Konstante nach unten beschränkt sein, so dass alle Codes für genügend
kleine p die erwartete Anzahl von Fehlern pro Codewort korrigieren
können.
i)
Gleichzeitig sollte die Rate dim(C
der Codes nicht gegen Null gehen.
ni
Also:
Konstruiere eine Familie von [ni , ki, di ]-Codes, i ∈ N, so dass Konstanten R0 > 0 und M0 > 0 existieren mit nkii ≥ R0 und ndii ≥ M0 .
Solche Familien gibt es natürlich nach Shannons Satz (und er besagt
sogar noch mehr), aber eine explizite Konstruktion, die nicht auf probabilistischen Argumenten beruht, wurde erst in den 70er Jahren gefunden. Diese sogenannten Expander-Codes sind spezielle LDPC-Codes
(Low-Density-Parity-Check-Codes) und besitzen auch schnelle Decodierverfahren. Darauf wollen wir im Folgenden eingehen.
(b) Zunächst betracheten wir uns bekannte Familien von Codes, nämlich
Hamming-Codes und Reed-Muller-Codes.
• Bei (binären) Hamming-Codes ist der Minimalabstand 3, Länge
2ℓ − 1, ℓ ∈ N.
Der relative Minimalabstand geht also gegen Null.
ℓ
Die Rate 2 2−1−ℓ
geht dagegen gegen 1.
ℓ −1
• Bei Reed-Muller-Codes RM(r, m) ist der relative Minimalabstand
2m−r
= 21r . Soll dieser nicht gegen Null gehen, darf r nicht beliebig
2m
wachsen. Wir könnten alsoPein
festes
r wählen und m wachsen
m
r
i=0 ( i )
. Der Zähler ist ein Polynom
lassen. Dann ist die Rate
2m
in m vom Grad r. Daher geht die Rate mit wachsendem m (und
festem r) gegen Null.
54
5.2 Bemerkung.
Ist C ein [n, k]-Code, so besitzt C eine (n − k) × n-Kontrollmatrix H vom
Rang n − k. Die Zeilen sind also linear unabhängig. (H ist nicht eindeutig
bestimmt.)
Fügt man weitere Zeilen hinzu, die Linearkombinationen der Zeilen von H
sind, so erhält man eine Matrix H̃, für die ebenfalls gilt:
x ∈ C ⇔ H̃xt = 0.
H̃ ist also eine Kontrollmatrix in einem allgemeineren Sinne.
In diesem Kapitel werden wir auch solche allgemeinen Kontrollmatrizen betrachten, deren Rang kleiner als die Anzahl der Zeilen sein kann. Wir werden
diese auch als Kontrollmatrizen von C bezeichnen.
5.3 Definition.
Sei H = (hi,j )i = 1, . . . , m eine Kontrollmatrix des binären [n, k]-Codes C , also
j = 1, . . . , n
rg(H) = n − k, m ≥ n − k.
Definiere den Tannergraphen Γ(H) zu H (manchmal Γ(C), obwohl er durch
C nicht eindeutig bestimmt ist) als bipartiten Graphen mit einer (linken)
Eckenmenge L = {x1 , . . . , xn } (Variablen) und einer (rechten) Eckenmenge
R = {y1 , . . . , ym } (Nebenbedingungen), und den Kanten (xi , yj ) ∈ V × W ,
falls hj,i = 1.
5.4 Beispiel.


1 0 0 1 1 0 1
Sei C der [7, 4]-Hamming-Code, H = 0 1 0 1 0 1 1.
0 0 1 0 1 1 1
Dann ist Γ(H) der folgende Graph:
55
L
x1
x2
R
y1 (= x1 + x4 + x5 + x7 )
x3
Variablen
y2 (= x2 + x4 + x6 + x7 )
x4
Nebenbedingungen
x5
y3 (= x3 + x5 + x6 + x7 )
x6
x7
Also (x1 , . . . , x7 ) ∈ C ⇔ alle Nebenbedingungen sind 0.
5.5 Bemerkung.
Jeder bipartite Graph bestimmt umgekehrt eine Matrix (nämlich seine Inzidenzmatrix, wenn die Zeilen mit R und die Spalten mit L indiziert sind), die
als Kontrollmatrix einen Code bestimmt.
(Hier benötigt man die allgemeine Definition der Kontrollmatrix.)
Wir betracheten spezielle bipartite Graphen:
5.6 Definition.
Ein bipartiter Graph mit Eckenmengen L, R heißt
• links-ℓ-regulär, falls jede Ecke in L Grad ℓ hat
• rechts-r-regulär, falls jede Ecke in R Grad r hat
• (ℓ, r)-regulär, falls er links-ℓ-regulär und rechts-r-regulär ist.
Der Graph in 5.4 ist rechts 4-regulär, aber nicht beidseitig regulär.
5.7 Bemerkung.
Ist Γ ein bipartiter Graph mit |L| = n, |R| = m, so gilt:
• Ist Γ links-ℓ-regulär, so ist die Anzahl der Kanten n · ℓ.
56
• Ist Γ rechts-r-regulär, so ist die Anzahl der Kanten m · r.
• Ist Γ (ℓ, r)-regulär, so ist n · ℓ = m · r.
Beachte: Hat man eine Familie (ℓ, r)-regulärer bipartiter Graphen (ℓ fest)
mit wachsendem n (und damit auch wachsendem m), so sind die Kontrollmatrizen immer dünner besetzt:
Anzahl aller Einträge: m · n;
Anzahl der Einsen = Anzahl der Kanten = m · r = n · ℓ;
Verhältnis: nr = mℓ → 0.
5.8 Definition.
(a) Ein links-ℓ-regulärer Graph Γ mit den Eckenmengen L, R, |L| = n,
|R| = m heißt ein (n, ℓ, α, δ)-Expander, wobei α, δ > 0, falls gilt:
Ist ∅ 6= U ⊆ L mit |U| ≤ αn, so ist |∂U| > δ|U|.
Dabei bezeichnet ∂U die Nachbarschaft von U. d.h.
∂U = {y ∈ R : ∃x ∈ U, (x, y) ist Kante in Γ}.
Man nennt δ den Ausdehnungsfaktor des Expanders (bezüglich Teilmengen der Größe ≤ αn in L).
(b) Ist Γ (ℓ, r)-regulär und erfüllt (a), so spricht man von einem (n, ℓ, r, α, δ)Expander.
(c) Ein binärer linearer Code, der eine Kontrollmatrix besitzt, die durch
einen Expander definiert wird, wird Expander-Code C(Γ) genannt.
5.9 Bemerkung.
Bezeichnungen wie in 5.8(a), αn ≥ 1.
(a) δ < ℓ
ℓ
ℓ
(b) Ist 0 < ε < αn
, so kann man stets δ = αn
− ε wählen.
(Man möchte zu gegebenem α natürlich δ möglichst groß wählen.)
Beweis.
(a) Ist |U| = 1, so |∂U| = ℓ, also δ <
(b) Für alle U 6= ∅ ist |∂U| ≥ ℓ.
|
ℓ
Ist also |U| ≤ αn, so |∂U
≥ αn
>
|U |
|∂U |
|U |
ℓ
αn
= ℓ.
− ε.
5.10 Beispiel. (nach Willems, Codierungstheorie und Kryptographie)
Wir geben ein Beispiel für einen (9, 2, 3, 29 , δ)-Expander an, wobei man für δ
jede positive reelle Zahl < 32 wählen kann.
(Beachte: Es gilt dann m = n·ℓ
= 9·2
= 6.)
r
3
57
Γ
x1
x2
y1 (= x1 + x2 + x3 )
x3
y2 (= x4 + x5 + x6 )
x4
y3 (= x7 + x8 + x9 )
x5
y4 (= x1 + x4 + x7 )
x6
y5 (= x2 + x5 + x8 )
x7
y6 (= x3 + x6 + x9 )
x8
x9
Klar: Γ ist (2, 3)-regulär.
α = 29 . D.h. wir haben Eckenmengen U mit |U| = 1, 2 zu betrachten.
|U| = 1 ⇒ |∂U| = 2
|
= 32 .
|U| = 2 ⇒ |∂U| = 3 oder 4. Also min|U |≤2 |∂U
|U |
ℓ
Jedes 0 < δ < 23 ist also wählbar. (Beachte: αn
= 1.)
5.11 Lemma.
Sei Γ ein (n, ℓ, α, δ)-Expander mit δ ≥ 2ℓ . Sei ∅ 6= U ⊆ L, |U| ≤ αn.
Dann existiert ein y ∈ ∂U, in dem genau eine Kante aus U endet (d.h.
|∂(y) ∩ U| = 1 für ∂(y) := {x ∈ L : (x, y) ist Kante}).
Beweis.
In U beginnen ℓ|U| Kanten. Expander-Eigenschaft:
Diese Kanten enden in |∂U| > δ|U| ≥ 2ℓ Ecken in R. In jeder dieser Ecken
können nicht 2 oder mehr Kanten aus U enden, denn sonst würden die ℓ|U|
Kanten aus U in höchstens 2ℓ |U| Ecken enden. Also existiert mindestens eine
Ecke in ∂U, in der weniger als 2, also genau eine Kante aus U endet.
58
5.12 Satz (Sipser, Spielman; 1996).
(a) Sei Γ ein (n, ℓ, α, δ)-Expander mit δ ≥ 2ℓ .
Dann hat der zugehörige Expander-Code C(Γ) Minimalabstand d > αn.
(Also relativen Minimalabstand > α)
(b) Ist Γ ein (n, ℓ, r, α, δ)-Expander, so hat C(Γ) Rate R ≥ 1 − rℓ .
Beweis.
(a) Angenommen d = d(C(Γ)) ≤ αn. Dann existiert ein 0 6= v ∈ C(Γ)
mit wt(v) ≤ αn. Sei U die Menge der xi , die in v mit dem Wert 1
vorkommen (entspricht Tr(v)). Dann ist |U| = wt(v) ≤ αn.
Nach 5.11 existiert eine Nebenbedingung in ∂U, die mit genau einer
Variablen aus U verbunden ist. Für diese Nebenbedingung hat v den
Wert 1, also v ∈
/ C(Γ). Widerspruch.
Gleichungen beschrieben, d.h. der Rang n − k
(b) C(Γ) wird durch m = n·ℓ
r
der Kontrollmatrix ist höchstens n·ℓ
, also k ≥ n − n·ℓ
(k = dim(C(Γ))).
r
r
k
ℓ
Dann R = n ≥ 1 − r
5.13 Beispiel.
Wir betrachten wieder das Beispiel 5.10.
Aus 5.12 folgt, dass die Rate von C(Γ) ≥ 1 − 23 = 13 ist. Also ist dim(C(Γ)) ≥
3. Außerdem besagt 5.12, dass der Minimalabstand > αn = 2 ist, also
d(C(Γ)) ≥ 3.
Man kann nachrechnen, dass die Kontrollmatrix zu Γ Rang 5 hat, also
dim(C(Γ)) = 9 − 5 = 4. Ferner kann man zeigen, dass d(C(Γ)) = 4 gilt.
5.14. Iterative Decodierung (Flipping Algorithmus, Gallager, 1962)
Sei C = C(Γ) ein Expander-Code zum (n, ℓ, α, δ)-Expander Γ.
Ist z = (z1 , . . . , zn ) ∈ Zn2 , so sagen wir, dass eine Nebenbedingung für z erfüllt
ist, falls sie für z den Wert 0 hat. Ansonsten nennen wir sie inkorrekt.
Algorithmus:
Sei z ∈ Zn2 das empfangene Wort.
Schritt 1: Berechne alle Nebenbedingungen für z.
Schritt 2: Suche eine Variable xi , die in mehr inkorrekten Nebenbedingungen
vorkommt als in korrekten. Gibt es keine solche Variable, so stop.
Schritt 3: Ändere den Wert dieser Variablen in z.
Schritt 4: Gehe zu Schritt 1.
59
5.15 Beispiel.
Betrachte den Expander-Code C aus Beispiel 5.10.
Sei z = (110111011) empfangen worden.
Nebenbedingungen für z:
y1
y2
y3
y4
y5
y6
=0
=1
=0
=0
=1
=0
x5 kommt nur in inkorrekten Nebenbedingungen vor, nicht in korrekten.
Ändere x5 von 1 zu 0. Das liefert das Wort (110101011). Jetzt sind alle
Nebenbedingungen = 0. Das Wort liegt also in C . Da C 1-Fehler-korrigierend
ist (5.13), wurde korrekt decodiert, falls genau ein Fehler aufgetreten ist.
Frage: Wann decodiert der Flipping-Algorithmus korrekt?
5.16 Satz (Sipser, Spielman; 1996).
Sei C(Γ) ein Expander-Code zum (n, ℓ, α, δ)-Expander Γ.
Ist δ ≥ 43 ℓ, so decodiert der Flipping-Algorithmus 5.14 korrekt, falls maximal
⌊ αn
⌋ Fehler aufgetreten sind.
2
Beweis.
⌋ Stellen
Sei z = (z1 , . . . , zn ) ∈ Zn2 ein Wort, welches sich an höchstens ⌊ αn
2
von einem x ∈ C unterscheidet (beachte: x ist nach 5.12 eindeutig bestimmt,
da d(C) > αn).
Wir nennen die Variablen, in denen sich z von x unterscheidet schlecht, die
anderen gut.
Zu Beginn der i-ten Iteration, i = 1, 2, . . ., sei
ti
fi
ki
=
=
=
Anzahl der schlechten Variablen
Anzahl der inkorrekten Nebenbedingungen
Anzahl der korrekten Nebenbedingungen, in denen schlechte
Variablen vorkommen.
Beachte: t1 ≤ ⌊ αn
⌋.
2
Ist t1 = 0, so ist z korrekt und der Algorithmus terminiert.
Angenommen, zu Beginn der i-ten Iteration ist ti ≤ αn = α|L| und ti 6= 0.
Die Menge Ui 6= ∅ der schlechten Variablen hat mehr als δti Nachbarn (Expandereigenschaft, ti ≤ αn).
60
Jede dieser Nebenbedingungen ist entweder inkorrekt oder korrekt mit schlechten Variablen. Also:
3
ℓti ≤ δti < |∂Ui | = fi + ki . (1)
4
In einer korrekten Nebenbedingung, die schlechte Variablen enthält, müssen
mindestens 2 schlechte Variablen vorkommen, in einer inkorrekten Nebenbedingung mindestens eine. Also:
ℓti ≥ fi + 2ki. (2)
∂Ui
Ui
fi + ki
ti
In jeder korrekten
Nebenbedingung in
∂Ui enden mindestens
zwei Kanten;
in jeder inkorrekten
mindestens eine.
ℓti
Kanten
(1) und (2) liefern:
3
1
1
(1)
ℓti ≥ fi + ki + ki > ℓti + ki ⇒ ki < ℓti ⇒ fi > ℓti
4
4
2
(3)
Dies besagt, dass eine schlechte Variable existiert, für die mehr als die Hälfte
der Kanten in inkorrekten Nebenbedingungen landet.
In Schritt 2 des Algorithmus wird also eine Variable gefunden (nicht notwendig eine schlechte), die in mehr inkorrekten als korrekten Nebenbedingungen
auftritt. Flippen dieser Variablen verringert den Wert von fi , d.h. fi+1 < fi .
Wir zeigen jetzt, dass auch weiterhin ti+1 ≤ αn gilt.
Beachte: ti+1 = ti ± 1 (Nur eine Stelle wird verändert).
Ist ti+1 = t1 − 1, so ist ti+1 ≤ αn erfüllt. Sei also ti+1 = t1 + 1. Angenommen,
ti + 1 > αn ≥ ti , d.h. ⌊αn⌋ = ti . (∗)
(2)
V or.
(∗)
(3)
= ℓt2i < fi . Widerspruch.
⌋ ≤ ℓ ⌊αn⌋
Beachte: fi ≤ f1 ≤ ℓt1 ≤ ℓ⌊ αn
2
2
Also gilt auch ti+1 ≤ αn.
Da fi+1 < fi für alle i, terminiert der Algorithmus (und zwar in einem Codewort).
61
5.17 Bemerkung.
(a) Der Algorithmus in 5.14 erfordert maximal m Iterationsschritte, da
f1 ≤ m und fi+1 < fi für alle i. Zu jedem Iterationsschritt werden
m Bilinearformen (Nebenbedingungen) berechnet und maximal n · m
Vergleiche durchgeführt.
(b) Das iterative Decodierverfahren aus 5.14 ist ein BDD (vergleiche 2.18
⌋
(b)) nach 5.16. Er decodiert garantiert korrekt, wenn maximal ⌊ αn
2
d−1
Fehler aufgetreten sind. Diese Zahl kann kleiner als ⌊ 2 ⌋ sein (vergleiche Beispiel 5.13, dort αn = 2, d = 4; dennoch gilt hier ⌊ αn
⌋ = ⌊ d−1
⌋=
2
2
1.)
(c) Die Bedingung δ ≥ 43 ℓ aus 5.14 ist bei unserem Beispiel 5.15 (Code aus
5.10) nicht erfüllt. Dort ist δ < 23 = 34 · 2. Dennoch wird in 5.15 korrekt
decodiert.
(d) Die Bedingung in Schritt 2 des Algorithmus 5.14, wann zi geändert
wird, ist äquivalent zu der Bedingung
wt H(z + ei )t <
wt Hz t
|
{z
}
| {z }
Anzahl der inkorrekten
Nebenbed. in z + ei
Anzahl der inkorrekten
Nebenbed. in z
(e) Der Algorithmus 5.14 ist ein Spezialfall von Verfahren, die man BeliefPropagation-Algorithmus nennt (sie spielen auch in KI und anderen
Bereichen eine wichtige Rolle): In jedem Iterationsschritt wird derjenige
Eintrag geändert, von dem man am stärksten glaubt, dass er falsch ist.
5.18 Bemerkung.
(a) Nach 5.12 und 5.14 benötigt man Familien von Expander-Codes mit
großem δ (δ ≥ 34 ℓ), damit das Decodierverfahren funktioniert, und nicht
zu kleinem α, damit möglichst viele Fehler korrigiert werden können.
Es gibt Möglichkeiten solche Codes mit nach unten beschränktem α
und wachsendem n zu konstruieren.
Sie stammen z.B. von Margulis (1982), Lubotzky, Phillips, Sarnak (1988),
u.a.
Die Beschreibung ist relativ einfach, aber der Nachweis der ExpanderEigenschaft kompliziert.
(b) Der Decodier-Algorithmus 5.14 ist umso schneller, je kleiner ℓ ist, denn
dann hat man nur zu kontrollieren, ob eine der in den inkorrekten Nebenbedingungen auftretenden Variablen dort mehr als 2ℓ mal auftaucht.
62
Also sind Familien von Expander-Codes mit wachsendem n und konstantem ℓ gut. Das ist bei obiger Familie der Fall.
Dann: Das Verhältnis von Einsen in der Konrollmatrix zu allen Einträgen n·ℓ
= nℓ geht für n → ∞ gegen 0.
n2
Dünn besetzte Kontrollmatrix: LDPC-Codes.
Dies ist ein echter Hinweis auf die Nützlichkeit von LDPC-Codes für
die Decodiergeschwindigkeit.
Gallager (1962) hat dies als erster entdeckt; auf ihn gehen MessagePassing-Algorithmen für LDPC-Codes zurück, die wir aber hier nicht
behandeln werden.
Literatur:
Lin, Costello, Error Control Coding (Kap. 17) (LDPC)
Willems, Codierungstheorie und Kryptographie (Kap. 4)
T. Richardson, R. Urbanke, Modern Coding Theory (Kap. 8) (viel über
LDPC-Codes)
Übersichtsartikel über Expander-Graphen:
S. Hoory, N. Linial, A. Wigderson, Bulletin American Math. Society 43, 2006,
439-561
63
6
Zyklische Codes
6.1 Definition.
Ein linearer Code C der Länge n über einem endlichen Körper K heißt
zyklisch, falls gilt:
(c0 , . . . , cn−1 ) ∈ C ⇒ σ(c0 , . . . , cn−1 ) := (cn−1 , c0 , c1 , . . . , cn−2 ) ∈ C.
(Dann auch σ i (c0 , . . . , cn−1 ) = (cn−i , . . . , cn−1 , c0 , . . . , cn−1−i) ∈ C.)
6.2 Beispiele.
(a) Sei C der

1

H= 0
0

1
0
G=
1
1
[7, 4]-Hamming-Codes über Z2 mit der Kontrollmatrix

0 0 1 0 1 1
1 0 1 1 0 1 und der Erzeugermatrix
0 1 0 1 1 1

1 0 1 0 0 0
1 1 0 1 0 0
.
0 1 0 0 1 0
1 1 0 0 0 1
C ist nicht zyklisch:
(0110100) ∈ C (2. Zeile von G). Angenommen, x = (0011010) ∈ C.
y = (1010010) ∈ C (3. Zeile von G). Aber: d(x, y) = 2. Das steht im
Widerspruch zu d(C) = 3.
(b) Man nennt zwei binäre Codes C1 , C2 äquivalent, wenn C2 aus C1 durch
eine Permutation der Positionen hervorgeht (entspricht einer Permutation der Spalten der Erzeugermatrix).
[Alle Parameter eines Codes bleiben bei Äquivalenz erhalten.]
Tatsächlich gibt es zu jedem binären Hamming-Code einen äquivalenten
Code, der zyklisch ist. Im obigen Beispiel:




1 1 0 1 0 0 0
1 0 0 1 0 1 1
0 1 1 0 1 0 0

H̃ = 0 1 0 1 1 1 0 G̃ = 
1 0 1 0 0 0 1
0 0 1 0 1 1 1
1 1 1 0 0 1 0
Zyklische
Zyklische
Zyklische
Zyklische
Vertauschung
Vertauschung
Vertauschung
Vertauschung
von
von
von
von
Zeile
Zeile
Zeile
Zeile
64
1
2
3
4
von
von
von
von
G̃
G̃
G̃
G̃
=
=
=
=
Zeile
Zeile
Zeile
Zeile
2
1 + Zeile 4
1
1 + Zeile 3
(Das gilt für jeden Hamming-Code; bei |K| > 2 muss der Äquivalenzbegriff
erweitert werden: Die Spalten der Erzeugermatrix dürfen auch mit Skalaren 6= 0 multipliziert werden.)
Erste gute Eigenschaft zyklischer Codes:
6.3 Bemerkung.
Sei C ein zyklischer Code.
(a) C ⊥ ist zyklisch.
(b) Sind y (1) , . . . , y (ℓ) ∈ C ⊥ orthogonal bezüglich Position i, so sind
σ(y (1) ), . . . , σ(y (ℓ) ) ∈ C ⊥ orthogonal bezüglich i + 1 (mod n).
(Positionen 0, . . . , n − 1)
Beweis.
(a) y = (y0 , . . . , yn−1 ) ∈ C ⊥ , (c0 , . . . , cn−1) ∈ C.
Dann σ n−1 (c) = (c1 , . . . , cn−1 , c0 ) ∈ C.
0 = hσ n−1 (c), yi = c1 y0 + . . . + cn−1 yn−2 + c0 yn−1 = hc, σ(y)i
⇒ σ(y) ∈ C ⊥ .
(b) folgt aus (a).
Zyklische Codes lassen sich besonders gut beschreiben, wenn man Polynomdarstellung verwendet. Betrachte dazu den Vektorraumisomorphismus
K n → K[x]n = {f ∈ K[x] : grad(f ) < n}
n−1
X
ai xi .
a = (a0 , . . . , an−1 ) 7→ a(x) =
i=0
6.4 Bemerkung.
(a) Zur Erinnerung: In K[x] hat man Division mit Rest.
Seien f, g ∈ K[x], g 6= 0. Dann gibt es eindeutig bestimmte r, h ∈ K[x]
mit grad(r) < grad(g) so dass f = h · g + r gilt.
Schreibe dann r = f mod g.
Beispiel: K = Z2 . Bestimme x4 + x3 + 1 mod x2 + 1.
65
x4 + x3 + 1 : x2 + 1 = x2 + x + 1
x4 + x2
x3 + x2 + 1
x3 + x
x2 + x + 1
x2 + 1
x
Daher ist x4 + x3 + 1 mod x2 + 1 = x.
Es gilt: f1 +· f2 mod g = (f1 mod g +· f2 mod g) mod g.
Pn−1
(b) a = (a0 , . . . , an−1 ) ∈ K n ↔ a(x) = i=0
ai xi
Dann:
σ(a) = (an−1 , a0 , . . . , an−2 ) ↔ x · a(x) mod xn − 1.
Beweis.
x·a(x) = a0 x+. . .+an−1 xn = an−1 +a0 x+. . .+an−2 xn−1 +an−1 (xn −1)
Also: x · a(x) mod xn − 1 = an−1 + a0 x + . . . + an−2 xn−1 ↔ σ(a).
(modulo xn − 1 Rechnen bedeutet: Ersetze xn durch 1.)
6.5 Satz.
Sei C ein Code der Länge n über K. Sei C˜ = {c(x) : c ∈ C} ⊆ K[x]n
(entsprechend obiger Bemerkung). Dann gilt:
˜
C ist zyklisch ⇔ f (x)c(x) mod xn − 1 ∈ C˜ für alle f (x) ∈ K[x], c(x) ∈ C.
Beweis.
⇐“:
”
˜ Daher gilt σ(c) ∈ C
Insbesondere gilt x·c(x) mod xn −1 ∈ C˜ für alle c(x) ∈ C.
für alle c ∈ C nach 6.4.(b). C ist also zyklisch.
⇒“:
”
6.4(b): x · c(x) mod xn − 1 ∈ C˜ für alle c(x) ∈ C˜
⇒ xi · c(x) mod xn − 1 ∈ C˜ für alle c(x) ∈ C˜
⇒ Behauptung, da C linear.
Sei C =
6 {0} ein zyklischer Code der Länge n.
Wähle in C˜ ein normiertes Polynom g(x) 6= 0 von minimalem Grad.
Angenommen es gibt ein weiteres normiertes g1 (x) ∈ C˜ mit grad(g1 ) =
˜ grad(g − g1 ) < grad(g), also g − g1 = 0,
grad(g). Dann ist g(x) − g1 (x) ∈ C,
g = g1 .
g ist also eindeutig bestimmt.
Wir behaupten, dass g ein Teiler von xn − 1 ist.
xn − 1 = h(x)g(x) + r(x), grad(r(x)) < grad(g(x))
66
h(x)g(x) mod xn − 1 = −r(x) mod (xn − 1) = −r(x)
˜ Ist r(x) 6= 0, so ergibt sich ein Widerspruch zur
Nach 6.5 folgt r(x) ∈ C.
Wahl von g.
Also: xn − 1 = g(x)h(x). h(x) ist normiert und eindeutig bestimmt.
Damit haben wir die ersten beiden Teile des folgenden Satzes bewiesen:
6.6 Satz.
Sei C ein zyklischer Code der Länge n über K. Sei 0 6= g(x) ∈ C˜ normiert
˜ Sei grad(g(x)) = ℓ (also ℓ < n).
und von minimalem Grad in C.
(a) g(x) ist eindeutig bestimmt
(b) xn −1 = g(x)h(x), h(x) ist normiert und eindeutig bestimmt, grad(h(x)) =
n−ℓ
(c) C˜ = {f (x)g(x) : f (x) ∈ K[x], grad(f (x)) < n − ℓ}
˜ = n − ℓ, d.h. grad (g(x)) = n − k, k = dim(C).
(d) dim(C) = dim(C)
(e) c(x) ∈ Ce ⇔ c(x) · h(x) = 0 mod xn − 1
Beweis.
(a),(b) siehe oben
(c) Nach 6.5 gilt ⊇“, da grad(f (x) · g(x)) < n.
”
˜ Division mit Rest: c(x) = k(x) · g(x) + r(x),
Sei 0 6= c(x) ∈ C.
grad(r(x)) < grad(g(x)) = ℓ.
r(x) = c(x) − k(x) · g(x) ∈ C˜ =⇒ r(x) = 0.
| {z }
Wahl von
g
grad(c(x)) ≤ n − 1,
also ∈ C̃ nach 6.5
grad(k(x))+grad(g(x)) = grad(c(x)) ≤ n−1 ⇒ grad(k(x)) ≤ n−ℓ−1.
Also gilt auch ⊆“.
”
˜ Die
(d) Wegen (c) ist g(x), x · g(x), . . . , xn−ℓ−1 · g(x) eine Basis von C.
Behauptung folgt.
(e) Folgt aus xn − 1 = g(x) · h(x) und c(x) ∈ C ⇔ g(x)|c(x).
6.7 Definition.
Sei C =
6 {0} ein zyklischer Code.
Dann heißen die eindeutig bestimmten normierten Polynome g(x), h(x) aus
6.6 Erzeugerpolynom (Generatorpolynom) bzw. Kontrollpolynom von C .
67
6.8 Satz.
Pn−k
gi xi das ErzeugerpolySei C =
6 {0} ein zyklischer [n, k]-Code, g(x) = i=0
Pk
nom und h(x) = i=0 hi xi das Kontrollpolynom von C .
(a) Die k × n-Matrix


g0 g1 . . . gn−k
 0 g0 . . . . . . gn−k
0 


G =  ..

..
..
.

.
.
0 ... 0
g0
. . . . . . gn−k
ist eine Erzeugermatrix von C .
(gn−k = 1)
(b) Die (n − k) × n-Matrix


hk hk−1 . . . h0
0
hk . . . . . . h0
0


H =  ..

..
..
.

.
.
0 ...
0 hk . . . . . . h0
ist eine Kontrollmatrix von C .
(hk = 1)
Beweis.
(a) folgt aus 6.6 (d).
Pn Pn−k
i
(b) x − 1 = g(x) · h(x) = i=0
j=0 gi hi−j x (alle nicht definierten
Koeffizienten gleich 0 setzen)
Koeffizientenvergleich liefert:
Pn−k
(∗)
j=0 gi hi−j = 0 für i = 1, . . . , n − 1
n
(∗∗) g0 h0 = −1
(∗) bedeutet gerade GH t = 0.
Wegen (∗∗) ist rg(H) = n − k. Also ist H Kontrollmatrix von C .
68
6.9 Bemerkung.
Sei C =
6 {0} ein zyklischer [n, k]-Code über K. Nach 3.28 (c) ist H aus 6.8 (b)
eine Erzeugermatrix von C ⊥ , C ⊥ ist zyklisch nach 6.3 (a). Dann ist auch h−1
0 H
⊥
⊥
eine Erzeugermatrix von C und das Erzeugerpolynom von C ist gerade
h1 k−1
hk−1
hk
1
k
−1 k
.
x + x
+ ...+
x+
= h0 x h
h0
h0
h0
x
| {z }
=: duales Poynom zu h
6.10 Korollar.
Es gibt genauso viele zyklische Codes der Länge n über K wie es (normierte)
Teiler von xn − 1 gibt.
Beweis.
Ist C zyklisch, so gehört zu C nach 6.6 ein eindeutig bestimmtes Erzeugerpolynom g(x), g(x)|xn − 1.
Umgekehrt kann man zu jedem Teiler g(x) von xn − 1 den Code
Ce = {f (x) · g(x) : f (x) ∈ K[x], grad(f (x)) < n − grad(g(x))} bilden. Dies
ist ein zyklischer Code mit Erzeugerpolynom g(x).
(Ist C = {0}, so ist g(x) = xn − 1.)
6.11 Beispiel.
n = 4, K = Z2 . Es gibt die folgenden zyklischen Codes der Länge 4 über Z2 :
Teiler von x4 − 1 = (x − 1)4 in K[x]
zugehöriger zyklischer Code
1
C1 = Z42

1 1 0 0
Erzeugermatrix 0 1 1 0,
0 0 1 1
dim C2 = 3 (Parity-Check-Code)
(x − 1)
2
2
(x − 1) = x − 1
Erzeugermatrix
dim C3 = 2

1 0 1 0
,
0 1 0 1
(x − 1)3 = x3 + x2 + x + 1
Erzeugermatrix (1111),
dim C4 = 1
(x − 1)4 = x4 − 1
C5 = {0}
69
6.12 Definition.
(a) Ein Vektor v = (0, . . . , 0, vi , . . . , vi+b−1 , 0, . . . , 0) ∈ K n mit vi 6= 0,
vi+b−1 6= 0 heißt Bündel der Länge b.
(Beachte: Nicht alle vj , 2 ≤ j ≤ i + b − 2, müssen 6= 0 sein.)
(b) Sei C ein Code über K, x ∈ C gesendet und z ∈ K n empfangen. Sei
z = x+f , wobei f ein Bündel der Länge b ist (Fehlerbündel), so spricht
man von einem Bündelfehler der Länge b.
(Beachte: Bei einem Bündelfehler der Länge b können auch weniger als b
Fehler aufgetreten sein.)
6.13 Satz.
Sei C ein zyklischer [n, k]-Code. Dann enthält C keine Bündel der Länge
≤ n − k.
Insbesondere entdeckt ein zyklischer [n, k]-Code Fehlerbündel der Länge ≤
n − k.
Beweis.
Angenommen (0, . . . , 0, vi, . . . , vi+b−1 , 0, . . . , 0) ∈ C, vi , vi+b−1 6= 0, b ≤ n − k.
Dann ist auch v = (vi , . . . , vi+b−1 , 0, . . . , 0) ∈ C.
| {z }
≥k
Die b-te Zeile der Kontrollmatrix aus 6.8 (b) ist
h = (0, . . . , 0, hk , . . . , h0 , 0, . . . , 0) (b − 1 + (k + 1) ≤ n)
| {z } | {z }
b−1
k+1
hv t = hk · vi+b−1 6= 0, also Hv t 6= 0. Widerspruch.
Ist z = x + f , f Fehlerbündel der Länge ≤ n − k, so gilt Hz t = Hf t 6= 0, da
f∈
/ C.
6.14 Bemerkung.
Für einen linearen [n, k, d]-Code gilt nach 3.14 (Singleton-Schranke)
d − 1 ≤ n − k.
Also kann ein linearer Code maximal n − k Fehler erkennen (Schranke wird
für MDS-Codes angenommen).
Demgegenüber erkennt jeder zyklische Code Fehlerbündel der Länge n − k,
gleichgültig, wie groß d ist.
70
Die Erzeugermatrix G aus 6.8 (b) ist nicht in Standardform. Bildet man
Codewörter durch uG, u ∈ K k , so lässt sich u aus uG nicht direkt ablesen.
Es gibt eine andere Form der Codierung bei zyklischen Codes, wo das möglich
ist.
6.15. CRC-Codierung (CRC=Cyclic Redundancy Check)
Sei C ein zyklischer [n, k]-Code über K mit Erzeugerpolynom vom Grad n−k.
Infoblöcke der Länge k (über K) werden als Polynome vom Grad ≤ k − 1
geschrieben:
k−1
X
m = m0 . . . mk−1 ↔ m(x) =
mi xi
i=0
xn−k m(x) ↔ (0, . . . , 0, m0 , . . . , mk−1 )
| {z }
n−k
Codiere m(x) in c(x) = xn−k m(x) − xn−k m(x) mod g(x) (das ist ein Vielfaches von g(x)).
Also: c(x) ∈ C nach 6.6 (c).
Ist xn−k m(x) mod g(x) = b0 + b1 x + . . . + bn−k−1 xn−k−1 , so
c(x) ↔ (−b0 , −b1 , . . . , −bn−k−1 , m0 , . . . , mk ).
|
{z
} | {z }
Infosymbole
Kontrollsymbole
Beispiel: n = 4, k = 3, g(x) = x + 1
m = (m0 , m1 , m2 ) = (1, 1, 1) ↔ m(x) = x2 + x + 1
xm(x) = x3 + x2 + x x3 + x2 + x : x + 1 = x2 + 1
x3 + x2
x
x+1
1
xm(x) mod g(x) = 1
c(x) = 1 + x + x2 + x3 ↔ (1, 1, 1, 1)


1 1 0 0
Beachte: Erzeugermatrix nach 6.8 (b): G = 0 1 1 0, mG = (1001).
0 0 1 1
Erhält der Empfänger das Wort v bzw. v(x) mit g(x) ∤ v(x), so sind nach 6.6
(c) Fehler aufgetreten.
Ist kein Fehler aufgetreten, so kann er die Nachricht direkt an den letzten k
Symbolen ablesen.
Die Berechnung von xn−k m(x) mod g(x) geht sehr schnell, z.B. mit linearen
Schieberegistern.
71
CRC-Codierung wird in Computer-Netzen verwendet, wenn es nur auf Fehlererkennung ankommt (ARQ-Verfahren). Dort werden häufig Polynome der
Form g(x) = (x + 1)p(x), p(x) 6= x irreduzibel, verwendet. Z.B.
g(x) = x16 + x12 + x5 + 1 oder g(x) = x16 + x15 + x2 + 1
|
{z
}
{z
}
|
CRC−CCIT T −P olynom
CRC−16−P olynom
(CCITT=Comité Consultativ International de Télégraphique et Téléphonique;
Vorläufer von ITU)
Mit solchen Erzeugerpolynomen werden neben Fehlerbündeln der Länge ≤
grad(g(x)) (6.13) auch eine ungerade Anzahl von Fehlern erkannt und häufig
auch 2 Fehler.
72
7
Reed-Solomon-Codes
7.1 Definition (Allgemeine Reed-Solomon-Codes).
Sei K ein Körper, |K| = q, 1 ≤ d ≤ n ≤ q.
Wähle M = {a1 , . . . , an } ⊆ K, |M| = n (d.h. ai 6= aj für i 6= j).
Setze C = CM = {f (a1 ), . . . , f (an ) : f ∈ K[x]n−d+1 } ⊆ K n , wobei K[x]n−d+1 =
{g ∈ K[x] : grad(g) ≤ n − d}.
C heißt Allgemeiner Reed-Solomon-Code. (C ist ein Auswertungscode.)
7.2 Satz.
Verwende die Bezeichnungen aus 7.1 und setze k = n − d + 1.
(a) C ist ein [n, k]-Code mit d(C) = d, also ein MDS-Code.


1
...
1
 a1 . . . an 


(b) G =  ..
..  ist Erzeugermatrix von C.
 .
. 
k−1
k−1
a1
. . . an
Beweis.
(
K[x] → C
.
(a) Sei α :
f
7→ (f (a1 ), . . . , f (an ))
α ist eine surjektive K-lineare Abbildung.
Angenommen f ∈ Kern(α), d.h. f (a1 ) = . . . = f (an ) = 0.
Da grad(f ) ≤ k − 1 < n, kann f aber nicht n verschiedene Nullstellen
haben, falls f 6= 0. Damit ist f = 0.
Also ist f bijektiv. Daher gilt dim C = dim K[x]k = k.
Jedes f 6= 0, f ∈ K[X]k , hat höchstens k − 1 Nullstellen in K, also
sind in jedem Codewort 6= 0 mindestens n − (k − 1) = d Einträge 6= 0.
Nach der Singleton-Schranke (3.14): d(C) ≤ n − k + 1 = d. Es gilt also
Gleichheit.
(b) 1, x, . . . , xk−1 ist eine Basis von K[x]k . Daher ist α(1) , . . . , α(xk−1)
| {z }
|{z}
1. Zeile
von G
eine Basis von C.
Wir betrachten nun einen Spezialfall von 7.1. Dazu:
73
k. Zeile
von G
7.3 Bemerkung.
Sei K ein endlicher Körper, |K| = q. Dann ist die multiplikative Gruppe
K ∗ = K \ {0} zyklisch, d,h, es existiert ein α ∈ K ∗ mit
K ∗ = {α0 = 1, α1 , α2 , . . . , αq−2}
(αq−1 = 1). Die Potenzen von α werden durch die Multiplikation in K gebildet.
7.4 Definition.
Sei K ein endlicher Körper, |K| = q, q ≥ 3, n = q − 1.
Sei d ∈ N mit 2 ≤ d ≤ n − 1.
Setze M = K ∗ = {α0 , α1, . . . , αq−2 } (geordnet).
Dann heißt
CM = { f (α0 ), . . . , f (αq−2) : f ∈ K[x]n−d+1 = K[x]q−d }
Reed-Solomon-Code RSq (d).
(d = 1, d = n liefern triviale Codes; daher werden sie hier ausgeschlossen.)
7.5 Satz.
C = RSq (d) ist ein zyklischer [n, n − d + 1]-Code mit d(C) = d.
g(x) = (x − α) Q
· . . . · (x − αd−1 ) ist das Erzeugerpolynom und
n−1
(x − αj ) ist das Kontrollpolynom von C.
h(x) = (x − 1) j=d


1 α
α2
...
αn−1
1 α2
α4
...
α(n−1)·2 


6
(n−1)·3 
1 α3
α
.
.
.
α
H = 
 ist eine Kontrollmatrix von C.

 ..
..
..
..

.
.
.
.
d−1
2(d−1)
(n−1)·(d−1)
1 α
α
... α
(Das ist nicht die Kontrollmatrix zu h(x) aus 6.8 (b).)
Beweis.
Dass C ein [n, n−d+1, d]-Code ist, folgt aus 7.2 (setze k = n−d+1 = dim(C)).
Sei f ∈ K[x]k . Dann ist (f (α0 ), . . . , f (αq−2)) ∈ C.
(f (αq−2 ), f (α0), . . . , f (αq−3)) = (h(α0 ), . . . , h(αq−2 )) mit h(x) = f (α−1x) ∈
K[x]k (α−1 = αq−2 ). Also ist C zyklisch.
Allgemein gilt:
n
q−1
x −1 =x
q−2
Y
(x − αj ).
−1=
(∗)
j=0
q−1
j
(Denn jedes αj ist wegen (αj )
= (αq−1 ) = 1 eine Nullstelle von xq−1 − 1.)
Sei Ce ein zyklischer Code mit Erzeugerpolynom g(x). Beachte: g(x)|xn − 1.
74
˜ = n − (d − 1) = k = dim(C).
Grad g(x) = d − 1, also dim(C)
Pn−1 i
j
e
Nun gilt c(x) =
i=0 ci x ∈ C ⇔ g(x)|c(x) ⇔ x − α |c(x) für alle j =
i
j
j(n−1)
1, . . . , d−1 ⇔
c(α ) = c0 +c1 α +. . .+cn−1
= 0 für alle j = 1, . . . , d−1.
α
2
n−1
1 α α ... α
1 α2 α4 . . . α(n−1)·2 


˜
Also ist H =  .. ..
..
..  eine Kontrollmatrix von C.
. .
.
. 
1 α2 α4 . . . α(n−1)·2
Wir zeigen nun: H ist auch eine Kontrollmatrix von C. Dann ist nämlich
Ce = C und wir sind fertig.
Pn−d
Sei c = (f (1), f (α), . . . , f (αn−1)) ∈ C (n − 1 = q − 2) für f (x) = j=0
aj xj .
Multipliziere die i-te Zeile von H mit ct . Das liefert:
n−1
X
s
f (α )α
is
=
s=0
n−d
X
j=0
=
n−d
X
aj +
n−d
X
aj α
j+i
+
j=0
n−d
X
j=0
aj α
2(j+i)
+ ...+
n−d
X
aj α(n−1)(j+i)
j=0
aj [1 + αj+i + α2(j+i) + . . . + α(n−1)(j+i) )]
j=0
Nun ist αj+i 6= 1, da 0 ≤ j ≤ n − d und 1 ≤ i ≤ d − 1, also 1 ≤ j + i ≤
n − 1 = q − 2.
q−1
j+1
(αj+1 )
= (αq−1 )
= 1.
Also ist αj+i eine Nullstelle des Polynoms xq−1 − 1 ∈ K[x].
xq−1 − 1 = (x − 1)(xq−2 + xq−3 + . . . + 1) = (x − 1)(xn−1 + xn−2 + . . . + 1).
Wegen αj+i 6= 1, muss αj+i eine Nullstelle von (xn−1 + xn−2 + . . . + 1) sein,
d.h. 1 + αj+i + α2(j+1) + . . . + α(n−1)(j+i) = 0.
Damit gilt H · ct = 0.
Qn−1
(x − αi ) (vgl. (∗)) folgt aus
Wegen xn − 1 = g(x)h(x) und xn − 1 = i=0
xn −1
h(x) = g(x) die Behauptung über h(x).
7.6 Beispiel.
Sei q = 5, also n = 4 und d = 3. Dann ist k = 2.
Z∗5 = {1, 2, 3, 4}; α = 2 oder α = 3 sind möglich. Wähle α = 2.
2
Erzeugerpolynom von RS5 (3) nach
7.5: g(x)
= (x − 2)(x − 4) = x + 4x + 3
3 4 1 0
Erzeugermatrix nach 6.8: G =
0 3 4 1
1 2 4 3
Kontrollmatrix nach 7.5: H =
1 4 1 4
Kontrollpolynom nach 7.5: h(x) = (x − 1)(x − 3) = x2 + x + 3
75
e=
Kontrollmatrix nach 6.8: H
Beachte: |RS5 (3)| = 25.
1 1 3 0
0 1 1 3
7.7 Bemerkung.
Reed-Muller-Codes werden häufig eingesetzt.
(a) Z.B. Deep Space Missions, etwa Voyager zu Jupiter (1979), Saturn
(1981), Uranus und Neptun (Start 1977).
(Mehr unter http://www.nasa.gov/)
Hier wurde zur Übertragung ein RS28 (223) eingesetzt (in Kombination
mit einem Faltungscode; die Konstruktion beruht auf einem Produktcode. Auf Faltungscodes und Produktcodes werden wir später genauer
eingehen).
(b) Auch für die Audio-CD- oder DVD-Codierung werden Reed-SolomonCodes verwendet. Wir werden hier nur die Grundidee skizzieren. (Einzelheiten s. Skript WS 05/06)
Ein wesentlicher Fehlertyp bei CD’s und DVD’s sind Bündelfehler ( bursts“),
”
die auch Auslöschungen beinhalten können (d.h. es ist an der betreffenden
Stelle kein Bit mehr zu identifizieren). Es ist nicht schwer zu zeigen: Ein
[n, k, d]-Code kann bis zu d − 1 Auslöschungen korrigieren, wenn keine weiteren Fehler aufgetreten sind. Die Technik zur Korrektur solcher Bündelfehler
ist das sogenannte Interleaving (Spreizung) in der Form von Produktcodes.
Wie funktioniert das?
Gegeben seien zwei Codes C1 und C2 vom Typ [ni , ki ], i = 1, 2, mit Erzeugermatrizen in Standardform.
Die Originaldaten werden mit dem sogenannten äußeren Code C2 codiert.
Dann werden k1 aufeinander folgende Codewörter c1 , . . . , ck1 ∈ C2 ⊆ K n2
gesammelt. Schreibe sie spaltenweise:
c11
..
.
cn 2 1
c12 . . .
..
.
cn 2 2 . . .
c1k1
..
.
.
cn 2 k 1
(Die Originaldaten stehen jeweils an den Positionen c1i , . . . , ck2 i , i = 1, . . . , k1 .)
Codiere die Zeilen mit der Erzeugermatrix (Ek1 , A) von C1 zu Codewörtern
von C1 (dem inneren Code).
76
Originaldaten
տ
c11
..

.


 ck 2 1
 .
 ..
cn 2 1
| {z }
∈ C2
c12
..
.
...

∗
.. 
.  ∈ C1

. . . ∗  ∈ C1
.. 
.  ∈ C1
c1k1
..
.
∗ ...
..
.
ck 2 2 . . . ck 2 k 1
∗
..
..
..
.
.
.
∗ ... ∗
cn 2 2 . . . cn 2 k 1
| {z }
| {z } | {z } | {z }
∈ C2
∈ C2 ∈ C2 ∈ C2

c11
 ..
(Wegen der Multiplikation von  .
...

c1k1
..  mit (E , A) sind die letzk1
. 
cn 2 1 . . . cn 2 k 1
ten n1 − k1 Spalten Linearkombinationen der ersten k1 Spalten, liegen also
auch in C2 .)
Jetzt liest man zeilenweise aus. (Produktcode, Crossinterleaving)
Angenommen ein Bündelfehler von Auslöschungen der Länge b entsteht,
b ≤ (d2 − 1)n1 . (d2 = d (C2 ))
n1
C1 erkennt, dass Fehler in der Zeile aufgetreten sind. In jeder Spalte sind
dann maximal d2 − 1 Auslöschungen aufgetreten, die von C2 korrigiert werden können.
(Bei auftretenden Einzelfehlern in einer Zeile korrigiert C1 selbst, ansonsten
wird die gesamte Zeile als gelöscht markiert, und dann von C2 wieder korrigiert.)
Nachteil: Man muss immer erst eine gesamte Matrix aufbauen, bevor man
auslesen kann (entsprechend bei Decodierung). Daher werden andere Auslesetechniken verwendet mit denen die Spreizung der Fehler in den Codewörtern
aus C2 sogar noch größer werden kann. Damit kann man Burst-Auslöschungen
der Länge (d2 − 1) · t · n1 (t ∈ N fest, frei wählbar) korrigieren. Bei CD’s wird
t = 4 gewählt.
77
Bei Audio-CD-Codierung wird als Ausgangscode RS28 (5) gewählt, der dann
um 233 bzw. 227 Stellen verkürzt wird. Das liefert MDS-Codes C1 vom Typ
[32, 28, 5] und C2 vom Typ [28, 24, 5] die als innere bzw. äußere Codes verwendet werden.
bi , wobei
(Verkürzung eines Codes C an der Stelle i liefert den Code C
bi := {(c1 , . . . , ci−1 , ci+1 , . . . , cn ) : (c1 , . . . , ci−1 , 0, ci+1 , . . . , cn ) ∈ C}.)
C
(CIRC: Cross-Interleaved-Reed-Solomon-Codes)
Mit zusätzlichen Techniken, Interpolationen, etc. lassen sich dann Bursts bis
zu 7 mm Länge korrigieren.
Einzelheiten: Skript Codierungstheorie WS 05/06
oder Willems, Codierungstheorie
DVD’s werden mit Produktcodes aus C1 und C2 codiert, wobei C1 ein [172, 162, 11]
und C2 ein [208, 192, 17]-Code über F28 ist. Sie entstehen durch Verkürzung
aus RS28 (11) und RS28 (17).
7.8 Bemerkung.
Für Reed-Solomon-Codes (oder allgemeiner für sogenannte BCH-Codes, Bose, Ray-Chandhuri (1960), Hocquenghem (1959)) gibt es mehrere schnelle
Decodierungsverfahren, z.B. beruhend auf dem Euklidischen Algorithmus in
K[x].
Wir können hierauf hier nicht eingehen und verweisen auf das oben zitierte
Buch von Willems, Kapitel 9.
78
8
Faltungcodes
Faltungscodes (Convolutional Codes): D. Elias, 1955
Vorteil: Soft-Decision-Decoding
Nach der Codierung wird das diskrete Signal durch einen Modulator in ein
kontinuierliches Signal umgewandelt (Aufprägung auf Welle). Der Demodulator kann nach Störung im Kanal oft nur mit einer gewissen Wahrscheinlichkeit sagen, welches Bit (oder welche Folge von Bits, die einem Inputsymbol
entspricht) er empfangen hat.
Hard-Decision:
Soft-Decision:
Der Demodulator muss eine Entscheidung treffen. Dann
wird decodiert.
Der Demodulator kann dem Decodierer zusätzliche Informationen geben, z.B. mit welcher Wahrscheinlichkeit
0 oder 1 empfangen wurde. Z.B. 3-Bit-Quantifizierung:
Inputalphabet {0, 1}, Outputalphabet {0, 1, ?}.
Bei Faltungscodes wird der Datenstrom (über Z2 ) in kleine Infoblöcke unterteilt, diese werden codiert, wobei die Codierung von den vorangegangenen
Infoblöcken abhängt.
8.1 Definition.
Sei K = Z2 . Ein Faltungscode der Rate nk wird durch einen Codierer mit
Gedächtnis beschrieben:
Ein Datenstrom wird in Infoblöcke der Länge k unterteilt: u0 , u1 , u2 , . . ..
Jeder Infoblock wird in ein Codewort der Länge n codiert: c0 , c1 , c2 , . . ..
Dabei existieren k × n-Matrizen G0 , . . . , Gm über Z2 mit
cr = ur G0 + ur−1 G1 + . . . + ur−m Gm
für alle r = 0, 1, 2, . . . (u−1 = . . . = u−m = 0)
(d.h. die Codierung ist linear.)
m heißt Gedächtnislänge, m + 1 Einflusslänge des Faltungscodes (m = 0:
normale Blockcodierung).
Üblicherweise sind k und n klein, z.B. k = 1 und n = 2 oder 3.
Besonders wichtig sind n1 -Faltungscodes. Hier gilt
G0 = (g10 , . . . , gn0) , . . . , Gm = (g1m , . . . , gnm ) .
Seien die Bits ur , . . . , ur−m gegeben. Dann wird das Bit ur zu cr = (cr1 , . . . , crn )
codiert, wobei
cri = gi0 ur + gi1 ur−1 + . . . + gim ur−m (i = 1, . . . , n).
79
Das ist eine Faltung.
 
G0
 .. 
(Setzt man G =  . , so ist cr = (ur , . . . , ur−m ) · G.)
Gm (m+1)×n
Voraussetzung:
Gm 6= (0, . . . , 0) (sonst ist die Gedächtnislänge m de facto
kleiner) und G0 6= (0, . . . , 0) (sonst hängt die Codierung
von ur nicht von ur ab)
8.2 Beispiele.
1
-Faltungscode mit m = 2:
2
cr,1 = ur + ur−1 + ur−2
cr,2 = ur + ur−2


1 1
d.h. G = 1 0
1 1
Die Codierung ist durch das folgende lineare Schieberegister (LSR) realisierbar:
⊕
⊕
ur
ur−1
ur−2
cr,2
⊕
cr,2
Im nächsten Takt werden die Registerinhalte nach rechts verschoben, ur−2
fällt raus, statt ur wird ur+1 in das linke Register geladen.
11 |{z}
01 |{z}
01 |{z}
00 |{z}
10
0 0 1 1 0 1 0 → |{z}
u−2 u−1 u0 u1 u2 u3 u4
c0
c1
c2
c3
c4
Bei Faltungscodes ist die Codiervorschrift einfach zu verstehen. Dagegen ist
die Menge aller erzeugten Codebitfolgen in der Regel schwer zu bestimmen.
(Unterschied zu Blockcodes: Algebraische Beschreibung der Codewörter zuerst; dann Codierer!)
80
Wir betrachten ab jetzt nur n1 -Faltungscodes.
Aus c0 , c1 , . . . lassen sich die u0 , u1 , . . . wie folgt zurückgewinnen:
Da G0 6= (0, . . . , 0), existiert ein i mit gi0 6= 0, d.h. gi0 = 1. Also
ur = cri − gi1 ur−1 − . . . − gim ur−m .
Faltungscodes können beliebig lange Infobitfolgen codieren. Zur Verhinderung von Fehlerfortpflanzungen bei der Decodierung werden häufig sogenannte terminierte Faltungscodes eingesetzt:
8.3 Definition.
Bei einem terminierten Faltungscode mit Gedächtnislänge m werden nach
jeweils L Infobits m Nullen in den Datenstrom eingefügt (tail bits).
Nach Verarbeitung dieser L + m Bits sind wieder alle Register mit Null
besetzt, wie zu Beginn.
Das entspricht einem Blockcode, der L Infobits auf (L + m) · n Codebits
L
abbildet, er hat also Rate L+m
· n1 (< n1 ). Für große L ist der Verlust in der
Rate vernachlässigbar.
Wir geben jetzt eine Beschreibung von Faltungscodes an, die sich für die Decodierung als vorteilhaft erweisen wird: Trellisdiagramme (trellis = Spalier),
Fornay, 1973.
8.4 Definition.
Das Trellisdiagramm eines
gendermaßen erstellt:
1
-Faltungscodes
n
mit Gedächtnislänge wird fol-
(a) Jedes binäre m-Tupel (ur−1, . . . , ur−m ) wird als Zustand bezeichnet.
Die 2m möglichen Zustände werden mit ξ1 , . . . , ξ2m bezeichnet (Anordnung siehe (b)), ξ1 = (0, . . . , 0) ist der Nullzustand.
Zum Zeitpunkt r befindet sich im LSR im linken Register das momentane Infobit ur , und die übrigen Register bilden einen Zustand
(ur−1 , . . . , ur−m) = zr ∈ {ξ1 , . . . , ξ2m }. Für r = 0 ist z0 = ξ1 .
(b) Ein (vollständiges) Trellissegment besteht aus zwei vertikal angeordneten Punktreihen, jeweils mit 2m Punkten, die allen möglichen Zuständen
entsprechen.
Sie werden von oben nach unten in der lexikographischen Ordnung
(0 < 1) angeordnet, aber von rechts nach links gelesen.
(m = 2: (0, 0) < (1, 0) < (0, 1) < (1, 1))
Also steht (0, ur−2, . . . , ur−m) immer oberhalb von (1, ur−2, . . . , ur−m ).
Von jedem Zustand (ur−1, . . . , ur−m ) der ersten vertikalen Punktreihe gehen immer 2 Kanten zu den Zuständen (0, ur−1, . . . , ur−m−1 ) und
81
(1, ur−1, . . . , ur−m−1 ).
Diese Kanten sind beschriftet mit dem Codewort, das sich ergibt, wenn
die letzten m Infobits gerade ur−1 , . . . , ur−m waren und dann ur = 0
bzw. ur = 1 das nächste Infobit ist. Die Kante mit ur = 0 geht also
immer zu einem höheren Punkt als die mit ur = 1.
(Das Trellissegment beschreibt den Übergang von Zeitpunkt r zu Zeitpunkt r + 1).
(c) Das Trellisdiagramm ist die Hintereinanderreihung der Trellissegmente
zu den Zeitpunkten r = 0, 1, . . ..
Zu Beginn hat man noch keine vollständigen Trellissegmente, da die
ersten Kanten nur vom Nullzustand ausgehen.
Bei terminierten Faltungscodes gibt es einen entsprechenden Endeffekt,
da die Kanten wieder auf den Nullzustand zurückgehen.
(d) Im Trellisdiagramm enden (außer im Anfangsbereich und bei terminierten Faltungscodes im Endbereich) bei jedem Zustand je zwei Kanten:
In (ur , ur−1 , . . . , ur−m−1 ) kommen Kanten von (ur−1 , . . . , ur−m−1 , 0) und
(ur−1 , . . . , ur−m−1, 1).
Jeder Pfad im Trellisdiagramm entspricht einer Inputfolge (obere Kante 0, untere Kante 1) und der zugehörigen Codewortfolge (ablesbar an
den Kanten). Trellissegmente außerhalb der Anfangs- und Endbereiche
sind identisch.
82
(0,0)
u1
z1
u2
z2
00
00
00
11
11
11
(1,0)
10
u3
z3
00
11
11
z6
00
11
11
10
u6
z7
00
11
10
11
10
00
00
u5
z5
00
11
10
u4
z4
00
(0,1)
01
01
01
01
83
01
01
01
01
(1,1)
r=0
r=1
10
10
Ab
r=2
r=3
10
r=4
identisch
Eb
r=5
r=6
r=7
8.5 Beispiel.
Trellisdiagramm für das Beispiel 8.2. zi = Zustand zur Zeit i.
u0
z0
8.6. Viterbi-Decodierung
(Viterbi, 1967) Gegeben sei ein n1 -Faltungscode.
(a) Der Viterbi-Algorithmus ist ein Maximum-Likelihood-Decodierer, das
heißt zu einem empfangenen Wort v = (v0 , . . . , vt ), vi ∈ Zn2 , wird eine
Codewortfolge c = (c0 , . . . , ct ), ci ∈ Zn2 , bestimmt, so dass p(v|c) maximal wird. (vgl. 2.17 ML-Decodierung)
(Mit c ist dann die Infobitfolge eindeutig bestimmt.)
[Falls alle Quellensymbole gleich wahrscheinlich sind, minimiert MLDecodierung die Wahrscheinlichkeit, in eine falsche Codewortfolge zu
codieren.
Anderer Ansatz: Minimiere die Bit-Fehlerwahrscheinlichkeit in der InfobitFolge z.B. mit dem BCJR-Algorithmus (Bahl, Cocke, Jelinek, Raviv);
vgl. z.B. Lin, Costello, Error Control Coding]
Ist vi = (vi1 , . . . vin ), ci = (ci1 , . . . , cin ), so ist
p(v|c) =
t
Y
i=0
p(vi |ci ) =
t Y
n
Y
i=0 j=1
p(vij |cij )
| {z }
W-keit, dass vij
empfangen wird, falls
cij gesendet wird
(Übergangswahrscheinlichkeiten
des Kanals)
(Diskreter gedächtnisloser Kanal)
Häufig arbeitet man mit log p(v|c) anstelle von p(v|c)
(sogenannte Maximum-Log-Likelihood-Decodierung). Da log eine monoton wachsende Funktion ist, ist dies äquivalent zur Max-LikelihoodDecodierung und bedeutet die Maximierung von
log p(v|c)
| {z }
=:M (v|c)
Metrik zur Codewortfolge c
(Pfad in Trellisdiagramm)
Viterbi-Metrik
=
t
X
i=0
log p(vi |ci)
| {z }
=
i=0 j=1
=:M (vi |ci )
Kantenmetrik, denn
entspr. Kante in
Trellisdiagramm
t X
n
X
ci
log p(vij |cij )
|
{z
}
=:M (vij |cij )
Bitmetrik
Kennt man die Übergangswahrscheinlichkeiten des Kanals, so kann
man für jeden Weg über t + 1 Segmente des Trellisdiagramms, also
für jede Codewortfolge c, M(v|c) bestimmen. Derjenige mit maximaler
Metrik wird dann zur Decodierung verwendet.
84
Bei einem binär symmetrischen Kanal kann man zeigen:
M(v|c) maximal ⇔
t X
n
X
i=0 j=1
vij · cij =: v · c ∈ N0 maximal
(Summieren in Z, nicht in Z2 .)
Also wählt man dort als Metrik gerade v · c.
ML-Decodierung bedeutet dann d(v, c) zu minimieren (wie bei Blockcodes).
(b) Der Viterbi-Algorithmus vereinfacht nun die Bestimmung von c in der
Weise, dass nicht mehr für alle Pfade im Trellis-Diagramm M(v|c) zu
bestimmen ist. Deren Anzahl ist exponentiell in t (Verdoppelung nach
jedem Segment). Im Viterbi-Algorithmus ist der Aufwand linear in t,
da nur bestimmte Pfade betrachtet werden müssen.
Viterbi-Algorithmus für terminierte Faltungscodes
1. Starte bei s = m.
Für jeden Zustand (in der vertikalen Reihe m im Trellis-Diagramm)
berechne die Metrik aller eintreffenden Pfade.
2. s := s + 1
Für jeden Zustand ξk (in der vertikalen Reihe s des Trellis-Diagramms)
wird folgende Berechnung durchgefhrt:
Bei ξk enden 2 Kanten von Zuständen ξk1 , ξk2 der
vorangegangenen Reihe.
Berechne: Metrik Survivor-Pfad bei ξki + Kantenξ k1
metrik ξki ξk , i = 1, 2. Speichere die größere der
ξk beiden Summen und den entsprechenden Pfad als
Survivor-Pfad (bei Mehrdeutigkeiten wähle einen der
ξ k2
beiden aus).
3. Falls s < L + m wiederhole 2., sonst stop.
8.7 Satz.
Der letzte Survivor-Pfad (entsprechend c = (c0 , . . . , cL+m−1 )) des ViterbiAlgorithmus für terminierte Faltungscodes ist der Maximum-Likelihood-Pfad
(ML-Pfad), das heißt M(v|c) ≥ M(v|c′ ) für alle Pfade c′ = (c′0 , . . . , c′L+m−1 ).
85
Beweis.
Angenommen der ML-Pfad wurde zum Zeitpunkt s < L + m eliminiert.
ML−Pfad
ML−Pfad
ξ0
P1
ξk
Survivor−Pfad
P2
Dann: Metrik von P1 + Metrik von P1 ξk < Metrik von P2 + Metrik von P2 ξk
(nach Vorgehen Viterbi).
Also: Metrik ML-Pfad < Metrik Survivor-Pfad. Das ist ein Widerspruch.
86
00
(0, 0) ξ1
00
0
0
11
11
(1, 0) ξ2
z3
00
4
11
2
0
z4
00
11
2
10
11
87
Empfangene
Folge v
Surviviorpfad c
Infofolge u
8
z7
8
11
10
6
01
01
3 10
11
10
01
01
2 10
00
00
4
3
01
5
10
01
(1, 1) ξ4
11
5
00
10
2
5
z6
00
11
00
(0, 1) ξ3
4
11
z5
00
8.8 Beispiel.
z2
z1
z0
6
01
01
3
5
10
11
00
11
01
10
11
00
11
10
11
11
10
11
00
1
0
0
1
0
0
0
Viterbi−Decodierung für den Code aus Beispiel 8.2.
d(v, c) = 2
8.9 Bemerkung.
(a) Der Viterbi-Algorithmus verwendet Technik des dynamischen Programmierens
(b) Er kann auch für Soft-Decoding verwendet werden, d.h. die vi sind aus
einem größeren Alphabet als die ci (siehe Skript WS 05/06).
(c) Er kann auch für nicht-terminierte Faltungscodes verwendet werden
(siehe Skript WS 05/06).
88
Herunterladen