Title: Kapitel 1: Codierungstheorie Inhalt:1.1 Einf
1 Kapitel 1 Codierungstheorie Inhalt 1.1
Einführung 1.2 Quellcodierung 1.3
Fehlererkennende Codes 1.4 Fehlerkorrigierende
Codes
21.1 Einführung
- In der Codierungstheorie unterscheidet man
Quellcodierung und Kanalcodierung. - 1. Die Quellcodierung hat zum Ziel, Daten so zu
transformieren, dass sie gut übertragen werden
können. - 2. Die Kanalcodierung hat zum Ziel, Daten so zu
transformieren, dass bei der Übertragung
auftretende Fehler erkannt und evtl. sogar
korrigiert werden können.
3Quellcodierung
- Bei der Quellcodierung sind zwei Aspekte wichtig
- (a) Oft treten Daten in einer Form auf, die sich
nicht zur Übermittlung eignet. Diese Quelldaten
müssen codiert werden, damit sie überhaupt
übertragen werden können. Beispiele-
Flaggencode- Digitalisierung von Sprache,
Bildern, ...- Morse-Code a , b
, ...- ASCII-Code a 10000010, b
10000100, ... - (b) Die Daten sollen möglichst ökonomisch
übertragen werden. Dazu sollen sie so gut wie
möglich komprimiert werden.
4Kanalcodierung
- Der Kanalcodierung liegt folgende Situation
zugrunde - Ein Sender will einem Empfänger gewisse Daten
über einen Kanal übermitteln. Dabei können
zufällige Fehler vorkommen. Diese Fehler treten
in der Regel aus physikalischen Gründen auf. - Beispiele- Tippfehler bei Eingaben über eine
Tastatur- Kratzer auf einer CD- Atmospherische
Störungen (Rauschen) bei einer Funkübertragung
5Kommunikationsmodell der Kanalcodierung
- Der Sender codiert einen Datensatz d zu einer
Nachricht c (Codewort) diese wird über den
Kanal geschickt. Der Empfänger versucht durch
Decodieren zu erkennen, ob Fehler aufgetreten
sind, und evtl. den Datensatz wieder zu
rekonstruieren.
6Fehlererkennung und -korrektur
- Bei fehlererkennenden Codes wird wenn ein
Fehler passiert angezeigt, dass etwas nicht
stimmt. Die Übertragung muss daraufhin
wiederholt werden. Für viele Anwendungen ist das
ausreichend. - Beispiele Kontonummern, Buchnummern,
Artikelnummern, ... - Manchmal ist eine wiederholte Übertragung aber
sehr aufwendig oder überhaupt nicht möglich. Dann
benötigt man fehlerkorrigierende Codes. - Beispiele CD-Player, Datenfernübertragung
zwischen Computern (Internet), Übertragung von
Planetenfotos von Satelliten zur Erde, ...
71.2 Quellcodierung
- Sei s1, s2, ..., sn eine Quelle mit den
Quellzuständen si, die jeweils mit der
Häufigkeit oder Wahrscheinlichkeit pi
auftreten. - Beispiele(a) Im Deutschen treten die Buchstaben
des Alphabets mit folgenden Wahrscheinlichkeiten
aufe 17,4 , n 9,78 , i 7,55 , s 7,27
, r 7,00 , a 6,51 , ... - (b) Seien s1, s2, ..., sn die verschiedenen
Bytes, die in einem Computerprogramm auftreten.
Dabei trete si mit der Häufigkeit pi auf. Wir
möchten dieses Programm so gut wie möglich
komprimieren.
8Der Huffman-Code
- Wir wollen uns im Folgenden auf binäre Codierung
beschränken. - Der wichtigste Code zur Datenkomprimierung ist
der Huffman-Code. - Er beruht auf der Idee, häufig vorkommende
Zeichen in möglichst kurze Codewörter zu
transformieren. - Beispiel Wir betrachten folgende 8
Quellzustände und Häufigkeiten
Quellzustände s1 s2 s3 s4 s5 s6 s7 s8
Häufigkeiten 0,22 0,20 0,18 0,15 0,10 0,08 0,05 0,02
9Beispiel zum Huffman-Code
si pi Code pi Code pi Code pi Code pi Code pi Code pi Code
s1 0,22 10 0,22 10 0,22 10 0,25 01 0,33 00 0,42 1 0,58 0
s2 0,20 11 0,20 11 0,20 11 0,22 10 0,25 01 0,33 00 0,42 1
s3 0,18 000 0,18 000 0,18 000 0,20 11 0,22 10 0,25 01
s4 0,15 001 0,15 001 0,15 001 0,18 000 0,20 11
s5 0,10 011 0,10 011 0,15 010 0,15 001
s6 0,08 0100 0,08 0100 0,10 011
s7 0,05 01010 0,07 0101
s8 0,02 01011
10Die Schritte beim Huffman-Code
- In jedem Schritt werden die Quellzustände mit
den kleinsten Häufig-keiten zu einem neuen
Quellzustand kombiniert, dessen Häufigkeit die
Summe der alten Häufigkeiten ist (
).Dies wird solange
durchgeführt bis nur noch zwei Zustände übrig
sind.- Von diesen beiden Quellzuständen erhält
der häufigere eine 0, der seltenere eine 1 als
Code.- Jetzt geht es rückwärts Der Code eines
Quellzustands im Schritt k sei b1b2...bm. Wenn
dieser Zustand auch im Schritt k-1 vorkommt,
dann erhält er dort die gleiche Codierung. Wenn
der Zustand aus den Zuständen su und sv
kombiniert wurde (o.B.d.A. sei su häufiger),
dann erhält su den Code b1b2...bm0 und sv
erhält b1b2...bm1.
11Die durchschnittliche Codewortlänge
- Sei S s1, s2, ..., sn eine Quelle mit den
Quellzuständen si, die jeweils mit der
Wahrscheinlichkeit pi auftreten. - Unter einem binären Code werde si in c(si)
codiert. Sei l(si) die Länge des Codeworts
c(si). - Wir definieren die durchschnittliche
Codewortlänge l als - l p1 l(s1) p2 l(s2) ... pn l(sn) .
- Beispiel Im obigen Beispiel gilt
- l 0,222 0,22 0,183 0,153 0,13
0,084 0,055 0,025 2,8
12Wie gut ist der Huffman-Code?
- Der Huffman-Code ist im folgenden Sinne
optimal. - 1.2.1 Satz. Sei S s1, s2, ..., sn eine
Quelle mit den zugehörigen Wahrscheinlichkeiten
pi. Dann gilt es keinen Code, der eine kleinere
durchschnittliche Codewortlänge als der
Huffman-Code hat. - Beweis durch Induktion nach n. Wenn der Code in
einem Schritt k optimal ist, dann liefert das
Vorgehen beim Huffman-Code auch im Schritt k-1
einen optimalen Code. ? - Bemerkung. Man kann zeigen, dass der Huffman-Code
eindeutig decodierbar ist.
131.3 Fehlererkennende Codes
- Schon die alten Römer wussten es Errare humanum
est. - Wir betrachten Fehler beim Übertragen von Daten,
die durch zufällige Störungen hervorgerufen
werden. - Folgen falsche Geldüberweisungen,
Artikellieferungen ,... - Die Fehler, die wir behandeln, sind Veränderungen
von Zeichen. Keine Fehler in diesem Sinne sind
also Verlust oder Hinzufügen von Zeichen. - Mit Hilfe fehlererkennender Codes soll der
Empfänger entscheiden können, ob die empfangene
Nachricht Fehler enthält oder nicht.
14Fehlererkennung im täglichen Leben
- Namen buchstabieren (Zet-es-zeh-ha-i-e-ge-en-e-e
r) - Buchstabieralphabete (A wie Anton, B wie Berta,
...) - Sprachen sind so redundant (haben so viel
überschüssige Informa-tion), dass man alls
vrsteht, auc wnn einge Bchstbn fhln. Selpst wen
groppe recktscreib Felr auftren ged dr ßinn nich
färlohn. - Grundidee Man fügt der Nachricht etwas hinzu -
eine Kontrollinforma-tion, die nur dazu dient,
eventuelle Übertragungsfehler zu erkennen.
15Die Idee Eine Prüfziffer!
Das Szenario Als Daten wollen wir 4-stellige
Zahlen übermitteln. Der Empfänger soll merken,
ob die Daten korrekt sind oder nicht. Die Idee
Wir fügen eine Ziffer hinzu, und zwar so, dass
die Quersumme dieser (5-stelligen) Zahl durch 10
teilbar ist! Diese hinzugefügte Ziffer heißt
Prüfziffer. Beispiele (a) Der Datensatz 1234
hat die Prüfziffer 0.(b) Der Datensatz 4813
hat die Prüfziffer 4.
16Wie wird der Fehler erkannt?
Woran merkt der Empfänger, dass ein Fehler
aufgetreten ist? Der Empfänger bildet die
Quersumme der empfangenen (5-stelligen) Zahl.-
Wenn diese durch 10 teilbar ist, so akzeptiert er
die Nachricht und nimmt die ersten vier Stellen
als Daten.- Wenn die Quersumme nicht durch 10
teilbar ist, so weiß er, dass ein Fehler passiert
ist und fordert die Nachricht erneut
an. Beispiel Wird die Zahl 12345 empfangen, so
muss beim Übertragen ein Fehler aufgetreten sein,
denn 1234515 ist nicht durch 10 teilbar.
17Paritätscodes
- Die Daten seien binäre Folgen der Länge n-1, D
die Menge aller Daten - D (b1, ..., bn-1) bi ? 0, 1.
- Wir erhalten die codierte Nachricht, indem wir
ein n-tes Bit anhängen, so dass die Summe aller
Bits gerade ist - M (b1, ..., bn-1, bn) bi ? 0, 1 und
bi mod 2 0. - Codierung Wenn b1 ... bn-1 gerade ist,
setzt der Sender bn 0, sonst bn
1.Decodierung Der Empfänger überprüft, ob die
Summe der Bits in der empfangenen Nachricht
gerade ist. Falls ja, akzeptiert es die
Nachricht falls nein, akzeptiert es sie nicht.
18Der Paritätscode ist 1-fehlererkennend
- Die Menge
- M (b1, ..., bn-1, bn) bi ? 0, 1 und
bi mod 2 0. - heißt Paritätscode der Länge n zur Basis 2.
- Die Elemente von M heißen Codewörter.
- Beobachtung Der Paritätscode ist ein
1-fehlerekennender Code. Das heißt, wenn
höchstens ein Fehler passiert, wird dieser
entdeckt. - Bemerkung Wenn 2 (oder eine gerade Anzahl)
Fehler passieren, akzeptiert der Empfänger die
Nachricht, obwohl sie Fehler enthält.
19Verallgemeinerung Paritätscodes über Gruppen
- Sei G eine Gruppe und sei c ein beliebiges
Element von G. Die Menge - C (g1, ..., gn-1, gn) gi ? G und g1? ... ?
gn-1? gn c - ist ein Paritätscode der Länge n über der
Gruppe G. - Wie können uns (g1, ..., gn-1) als
Informationssymbole (Daten) und gn als
Prüfsymbol vorstellen. - Berechnung des Prüfsymbols gn gn-1-1 ? gn-2-1
? ... ? g1-1 ? c. - Beispiele (a) G Z2 0, 1, c 0
Vorheriges Beispiel (Folie 17). (b) G
Z10, c 0 Dezimalcode von Folie 15.
201-Fehlererkennung bei Paritätscodes über Gruppen
- 1.3.1 Satz. Paritätscodes über Gruppen sind
1-fehlererkennend. - Beweis. Sei (g1, ..., gn-1, gn) ein Codewort.
Dann ist - g1? ... ? gn-1? gn c.
- Angenommen, das i-te Symbol gi wird durch ein
anderes Symbol gi ersetzt (ein Fehler an der
i-ten Stelle passiert). Würde der Empfänger die
Nachricht (g1, ..., gi-1, gi, gi1, ... , gn-1,
gn) akzeptieren, so müsste gelten - g1? ... ? gi-1 ? gi ? gi1 ? ... ? gn-1? gn c.
- Zusammen folgt gi gi. Das ist ein
Widerspruch. ?
21Vertuaschungsfehler
- Bisher haben wir nur Einzelfehler betrachtet Ein
Zeichen wurde durch ein anderes ersetzt.
Beispiel Statt 1357 liest man 1857. - Jetzt betrachten wir Vertauschungsfehler Zwei
aufeinanderfolgende Zeichen werden vertauscht.
Beispiel Statt 1357 liest man 1375. - Paritätscodes erkennen Vertauschungsfehler im
Allgemeinen nicht.Wenn G eine abelsche Gruppe
ist, wird kein Vertauschungsfehler erkannt. Wenn
G nichtabelsch ist, werden manche
Vertauschungs-fehler erkannt, aber niemals alle
(denn jedes Element ist stets mit seinem Inversen
und mit dem neutralen Element vertauschbar).
22Paritätscodes mit Gewichten
- Problem Wie können wir benachbarte Stellen
unterscheiden? Neue Idee Wir versehen jede
Stelle mit einem Gewicht! - Sei G die Gruppe (Zm, ) und c ? Zm. Seien
w1, ..., wn-1, wn ? Zm. Dann ist - C (z1, ..., zn-1, zn) zi ? Zm und w1z1
... wn-1zn-1 wnzn c - ein Paritätscode zur Basis m mit den Gewichten
w1, ..., wn. - Beispiel Wir erhalten den ursprünglichen
Paritätscode (ohne Gewichte) zurück, wenn wir w1
... wn 1 setzen.
231-Fehlererkennung bei Paritätscodes mit Gewichten
- 1.3.2 Satz. Obiger Paritätscode mit Gewichten ist
genau dann 1-fehlererkennend, wenn gilt w1,
..., wn-1, wn ? Zm. - Beweis. ? Sei (z1, ..., zn-1, zn) ein
Codewort. Dann ist - w1z1 ... wn-1zn-1 wnzn c.
- Angenommen, das i-te Symbol zi wird durch zi
? zi ersetzt. Wäre auch (z1, ..., zi-1, zi,
zi1, ... , zn-1, zn) ein Codewort, so müsste
gelten - w1z1 ... wi-1zi-1 wizi wi1zi1 ...
wn-1zn-1 wnzn c. - Subtraktion der beiden Gleichungen liefert wizi
- wizi wi(zi - zi) 0. Da wi invertierbar
ist, folgt zi - zi 0, also zi zi
Widerspruch.
24Fortsetzung des Beweises
- ? Angenommen, wi wäre nicht aus Zm. Dann ist
t ggT(m, wi) gt 1. Dann wird die Veränderung
von zi m/t zu zi 0 nicht
erkannt!(Denn Sei wi k?t. Sei (z1, ...,
zi, ..., zn) ein Codewort mit zi m / t.
Dann ist c w1z1 ... wizi ... wnzn
w1z1 ... k?t ? m/t ... wnzn
w1z1 ... 0 ... wnzn (in
Zm). w1z1 ... wi ? 0 ... wnzn
w1z1 ... wi ? zi ... wnzn . Also ist
auch (z1, ..., zi, ..., zn) ein Codewort, der
Fehler an der i-ten Stelle wird nicht erkannt.
) ?
25Der EAN-Code
Fast jedes käufliche Produkt besitzt eine EAN
(Europäische Artikel-Nummer) mit zugehörigem
Strichcode. Die EAN ist entweder 13- oder
8-stellig. An letzter Stelle steht die
Prüfziffer. Sie wird nach einem Paritätscode zur
Basis 10 mit den Gewichten 1-3-1-...-1 (bei 13
Stellen) bzw. 3-1-3-...-1 (bei 8 Stellen)
berechnet. Der EAN-Code erkennt alle
Einzelfehler (nach 1.3.2), aber nicht alle
Vertauschungsfehler!
26Erkennen von Vertauschungsfehlern
- 1.3.3 Satz. Ein Paritätscode zur Basis m mit
Gewichten w1, w2, ..., wn erkennt genau dann
alle Vertauschungsfehler an den Stellen i und
j, falls die Zahl wi ? wj teilerfremd zu m
ist. - Beweis. Sei (z1, z2, ..., zn) ein Codewort das
bedeutet, dass gilt
w1z1 w2z2 ... wnzn c.Nun mögen
die Einträge an den Stellen i und j
vertauscht werden. Dann gilt Der Empfänger
bemerkt diesen Fehler nicht? w1z1 w2z2 ...
wizj ... wjzi ... wnzn c ? wizi
wjzj (wizj wjzi) 0 ? wi(zi zj) wj(zj
zi) 0 ? (wi wj)(zi zj) 0.
27Fortsetzung des Beweises
- Das bedeutet Der Empfänger bemerkt jede solche
Vertauschung, falls keine der möglichen Zahlen
(wi wj)(zi zj) gleich 0 ist (in Zm), d.h.
falls keine der Zahlen (wi wj)(zi zj) durch
m teilbar ist. - ? Wenn die Zahlen m und wi wj teilerfremd
sind, dann teilt m keine der Zahlen (wi
wj)(zi zj). Denn m müsste dann sogar zi zj
teilen, was wegen ?zi zj? ? m?1 unmöglich
ist. - ? Wenn andererseits die Zahlen m und wi wj
einen größten gemeinsamen Teiler t gt 1 haben,
dann wird die Vertauschung von zi m/t und
zj 0 nicht erkannt. ?
28Kann man Einzel- und Vertauschungsfehler erkennen?
- 1.3.4 Korollar. Für gerades m gibt es keinen
Paritätscode zur Basis m, der alle Einzelfehler
und alle Vertauschungsfehler an
aufeinander-folgenden Stellen erkennt. - Beweis. Sei C ein Paritätscode der Länge n zu
einer geraden Basis m mit den Gewichten w1, w2,
...., wn.Wenn C alle Einzelfehler erkennt,
müssen nach 1.3.2 alle Gewichte ungerade sein, da
sie sonst nicht teilerfremd zu m wären. Also
sind die Differenzen wiwi1 alle gerade. Daher
kann C nach 1.3.3 nicht alle Vertauschungsfehler
an aufeinanderfolgenden Stellen erkennen. ? - Beispiel Dezimale Paritätscodes (m 10)
erkennen nie alle Einzel-fehler und alle
Vertauschungsfehler an aufeinanderfolgenden
Stellen.
29Der ISBN-Code
Einer der besten Codes ist der ISBN-Code. Jedes
Buch hat eine ISBN (International Standard Book
Number). Diese hat 10 Stellen, in 4 Gruppen
eingeteilt 1. Sprachraum (z.B. 3 deutsch) 2.
Verlag (z.B. 528 Verlag Vieweg) 3. Nummer des
Buches (z.B. 06783) 4. Prüfsymbol
ISBN 3-528-06783-7
30Berechnung des ISBN-Prüfsymbols
Sei a1a2a3... a9a10 eine ISBN. Das Prüfsymbol
a10 wird so bestimmt, dass die Zahl 10?a1 9?a2
8?a3 7?a4 6?a5 5?a6 4?a7 3?a8 2?a9
1?a10 eine Elferzahl ist. Das Prüfsymbol kann
gleich 0, 1, 2, ..., 9 oder 10 sein. Wenn sich
10 ergibt, so schreibt man X (römische Zehn).
Beispiel Für die ISBN 3-528-06783-? berechnen
wir die Zahl 10?3 9?5 8?2 7?8 6?0
5?6 4?7 3?8 2?3 235. Die nächste
Elferzahl ist 242, also muss das Prüfsymbol 7
sein.Die komplette ISBN lautet also
3-528-06783-7.
31Wie gut ist der ISBN-Code?
1.3.5 Satz. (a) Der ISBN-Code erkennt alle
Einzelfehler.(b) Der ISBN-Code erkennt alle
Vertauschungsfehler sogar an belie-bigen
Stellen. Beweis. Formal kann der ISBN-Code wie
folgt beschrieben werden (a1, ..., a10) ?
10?a1 9?a2 8?a3 7?a4... 3?a8 2?a9 1?a10
mod 11 0. Der ISBN-Code ist also ein
Paritätscode zur Basis m 11 mit den Gewichten
10, 9, ..., 1 und c 0. Da Z11 1, 2,
..., 10 ist, liegen alle Gewichte und alle
Differenzen von je zwei Gewichten in Z11. Nach
1.3.2 und 1.3.3 werden daher alle Einzelfehler
und beliebige Vertau-schungsfehler erkannt.
?
321.4 Fehlerkorrigierende Codes
- Unser erstes Ziel ist es, die Eigenschaft, Fehler
korrigieren zu können, zu präzisieren. - Im Folgenden sei eine Nachricht stets ein binäres
n-Tupel, also ein Element der Menge V 0,1n
bzw. des Vektorraums GF(2)n. - Problemstellung Der Kanal addiert zu dem
gesendeten Vektor c (der Nachricht) einen
Fehlervektor e. Der Empfänger erhält den Vektor
- x c e.
- Die Aufgabe des Empfängers ist es dann, c aus x
zu bestimmen.
33Hamming-Abstand
- Der zentrale Begriff der Codierungstheorie ist
der des Hamming-Abstandes. - Seien v (v1, . . ., vn), w (w1, . . ., wn) Î
V. Der Abstand d(v, w) von v und w ist die
Anzahl der Stellen, an denen sich v und w
unter-scheiden - d(v, w) i vi ¹ wi.
- Oft wird d auch als Hamming-Abstand bezeichnet
(zu Ehren eines der Gründerväter der
Codierungstheorie Richard W. Hamming).
34Der Hamming-Abstand als Metrik
- Der Hamming-Abstand d trägt den Namen Abstand
zu Recht - 1.4.1 Lemma. Die Funktion d ist eine Metrik auf
V. - Beweis. Nachweis der Eigenschaften einer Metrik
(1) Da d(v, w) eine Anzahl ist, ist d(v, w)
³ 0 ferner gilt d(v, w) 0 genau dann, wenn
sich v und w an keiner Stelle unterscheiden,
also wenn sie gleich sind.(2) Symmetrie
Offenbar gilt d(v, w) d(w, v). (3) (3) Die
Dreiecksungleichung nachzuweisen, ist etwas
kniffliger Seien u, v, w Î V es ist zu zeigen
d(u, w) d(u, v) d(v, w).
35Nachweis der Dreiecksungleichung
- Wir können o.B.d.A. annehmen, dass sich u und
w genau an den ersten a d(u, w) Stellen
unterscheiden. Unter diesen a Stellen mögen b
sein, an denen sich v und w unterscheiden
(also u und v übereinstimmen) ferner gebe es
c Stellen außerhalb der ersten a Stellen, an
denen sich v von w unterscheidet. Natürlich
ist dann d(v, w) b c. - Daraus erkennt man d(u, v) a b c. Es
ergibt sich d(u, v) d(v, w) a b c b
c a 2c ³ a d(u, w). ?
36Hammingkugeln
- Zur Beschreibung von Codes werden später die
Kugeln bezüglich der Hamming-Metrik von Nutzen
sein. - Sei v Î V, und sei r eine nichtnegative ganze
Zahl. Dann heißt - Sr(v) x Î V d(x, v) r
- die Kugel vom Radius r um den Mittelpunkt v.
- Man spricht dabei auch von Hammingkugeln.
37t-fehlerkorrigierende Codes
- Sei t eine natürliche Zahl. Eine Teilmenge C
von V 0,1n heißt ein t-fehlerkorrigierender
Code, falls für je zwei verschiedene Elemente
v, w Î C gilt - d(v, w) ³ 2t 1.
- Mit anderen Worten C Í V ist ein
t-fehlerkorrigierender Code, wenn der
Minimalabstand - d(C) min d(c, c') c, c' Î C, c ¹ c'
- von C mindestens 2t 1 ist. Wir nennen die
Elemente eines Codes auch Codewörter.
38Lemma über Hammingkugeln
- 1.4.2 Lemma. Sei C ein t-fehlerkorrigierender
Code. Dann gilt(a) Zu jedem Vektor v Î V gibt
es höchstens ein c Î C mit d(v, c) t.(b)
Die Kugeln St(c) mit c Î C sind paarweise
disjunkt. - Beweis. (a) Angenommen, es gäbe zwei
verschiedene Elemente c, c' Î C und einen
Vektor v Î V mit d(v, c) t und d(v, c')
t. Wegen der Dreiecksungleichung folgte daraus - d(c, c') d(c, v) d(v, c') 2t,im
Widerspruch zu d(C) ³ 2t 1.(b) Angenommen, es
gibt ein v Î V in St(c) ? St(c') mit c, c' Î
C, c ¹ c. Dann ist d(v, c) t und d(v, c')
t Widerspruch zu (a). ?
39Warum t-fehlerkorrigierend?
- Als gesendete Nachrichten werden nur Codewörter
zugelassen. Wenn während der Übertragung eines
Codewortes c höchstens t Fehler auftreten, so
hat der empfangene Vektor x höchstens den
Abstand t zu c. Nach dem Lemma über
Hammingkugeln gibt es nur ein Code-wort, das
einen Abstand t zu x hat. Der Empfänger
decodiert x zu c. Hier ist die Vorstellung der
Kugeln besonders hilfreich Die Tatsache, dass
bei der Übertragung von c höchstens t Fehler
auftreten, bedeutet, dass der empfangene Vektor
jedenfalls noch in St(c) liegt. Da nach obigem
Lemma je zwei Kugeln um Codewörter disjunkt sind,
kann der empfangene Vektor decodiert werden, und
zwar zu dem Codewort, welches der Mittelpunkt der
Kugel ist, in der x liegt.
40Das Ziel der Codierungstheorie
- Bemerkung. Wenn pro Codewort mehr als t Fehler
auftreten, so wird der empfangene Vektor im
allgemeinen nicht korrekt decodiert. In der
Praxis wird man so vorgehen, dass man zunächst
abschätzt, wie fehleranfällig der Kanal ist, dann
die Zahl t entsprechend wählt und schließlich
einen t-fehlerkorrigierenden Code konstruiert. - Das Ziel der Codierungstheorie ist es, Codes zu
konstruieren, die einen großen Minimalabstand
(und damit gute Fehlerkorrektureigen-schaften)
haben und für die es einen effizienten
Decodieralgorithmus gibt.
41Beispiel
- Die folgenden 16 Vektoren aus V 0,17 bilden
einen 1-fehlerkorri-gierenden Code - 0000000 1111111 1110000 0001111
1001100 01100111000011
01111000101010 10101010100101
10110100011001 11001100010110
1101001
42Lineare Codes
- Der bisherige Ansatz ist unpraktikabel, denn -
Speichern des Codes (man muss jedes Codewort
abspeichern), - Bestimmung des Minimalabstands
(man muss je zwei Codewörter vergleichen, hat
also quadratischen Aufwand in C)-
Decodieralgorithmen (bei jedem empfangenen Vektor
muss man alle Codewörter untersuchen). - Für praktische Anwendungen besser Lineare
Codes. Ein Code C Í V heißt linear, falls C
ein Unterraum des Vektorraums V (und nicht nur
eine Teilmenge der Menge V) ist. Die Dimension
von C wird oft mit k bezeichnet und wir
nennen dann C einen linearen n, k-Code.
43Generatormatrix
- Erster Vorteil linearer Codes Man braucht nur
eine Basis von C zu kennen. Statt alle 2k
Vektoren von C zu speichern, genügt es, die k
Basisvektoren zu speichern. - Sei c1, . . ., ck eine Basis eines linearen n,
k-Codes C. Dann heißt die kn-Matrix G, deren
i-te Zeile der Basisvektor ci ist, eine
Generatormatrix von C. - Beispiel. Eine Generatormatrix des obigen
Beispielcodes (Folie 41) ist
G
44Minimalgewicht
- Das Gewicht w(x) eines Vektors x Î V ist die
Anzahl der von 0 verschiedenen Stellen von x - w(x) d(x, 0).
- Das Minimalgewicht w(C) des Codes C ist
definiert als - w(C) min w(c) c Î C, c ¹ 0.
- 1.4.3 Lemma. Sei C ein linearer Code. Dann gilt
d(C) w(C). - Zweiter Vorteil linearer Codes Um den
Minimalabstand und damit die Fehlerkorrekturqualit
ät von C zu bestimmen, muss man also nur das
Minimalgewicht ausrechnen dazu braucht man
höchstens C Schritte.
45Beweis des Lemmas
- Beweis. Für jeden Code, der den Nullvektor
enthält, gilt - d(C) mind(c, c') c, c' Î C, c ¹ c'
mind(c, 0) c Î C, c ¹ 0 w(C). - Noch z.z. Es gibt ein Codewort c0 vom Gewicht
d(C). Seien c, c' Î C mit d(c, c') d(C).
Dann gilt - w(cc') d(cc', 0) d(cc' c'c') d(c, c')
d(C). - Da C linear ist, ist c0 cc' Î C. Damit ist
alles gezeigt. ?
46Dualer Code
- Dritter Vorteil linearer Codes Sie erlauben
effizientes Decodieren. Dazu müssen wir etwas
ausholen. - Sei C Í V ein Code. Der zu C duale Code C
ist wie folgt definiert - C v Î V c?v 0 für alle c Î C
- dabei ist das innere Produkt c?v der Vektoren
c (c1, . . ., cn) und v (v1, . . ., vn)
erklärt durch - c?v c1v1 c2v2 . . . cnvn.
- Wenn c?v 0 ist, so sagt man auch, dass c
und v orthogonal sind.
47Dimensionsformel für den dualen Code
- 1.4.4 Satz. Ist C ein linearer n, k-Code der
Dimension k, so ist C ein linearer Code der
Dimension nk. - Beweis. Unabhängig davon, ob C linear ist oder
nicht, ist C ein Unterraum von V. Noch z.z.
dim C nk. Dazu betrachten wir eine
Generatormatrix G mit den Zeilen c1, . . , ck
von C. Dann gilt C v Î V ci?v 0, i
1, . . ., k, d.h. C besteht aus den Lösungen
v (v1, . . ., vn) Î V des homogenen
Gleichungs-systems mit der Koeffizientenmatrix
G. Die Dimension des Lösungs-raums ist gleich
nRang(G). Da die Zeilen von G eine Basis von
C bilden, hat G den Rang k. Also gilt
dim(C) nk. ?
48Satz vom Bidualcode
- 1.4.5 Satz. Sei C ein linearer Code. Dann ist
- C C.
- Beweis. Zunächst zeigen wir C Í C Die Menge
C besteht aus all den Vektoren, die orthogonal
zu allen Vektoren aus C sind dazu gehören
aber bestimmt die Vektoren aus C, da C ja die
Menge derjenigen Vektoren ist, die orthogonal zu
jedem Vektor aus C sind. Wenn wir die
Dimensionsformel auf C anwenden, erhalten wir - dim(C) n dim(C) n (nk) k dim(C).
- Zusammen folgt C C. ?
49Kontrollmatrix und Syndrom
- Sei C Í V ein linearer Code. Eine Matrix H,
deren Zeilen eine Basis des dualen Codes C
bilden, heißt eine Kontrollmatrix von C. - Da C die Dimension nk hat, ist H eine
(nk)?n-Matrix. - Für das effiziente Decodieren ist der Begriff des
Syndroms wichtig. Für jeden Vektor v Î V
definieren wir sein Syndrom als - s(v) v?HT,
- wobei HT die zur Kontrollmatrix H
transponierte Matrix ist. Ein Syndrom ist also
ein binärer Vektor der Länge nk.
50Satz über die Kontrollmatrix
- 1.4.6 Satz. Ist C ein linearer Code mit
Kontrollmatrix H, so gilt - C v Î V s(v) 0.
- Beweis. Sei v Î V beliebig. Dann gilt
- s(v) 0
- Û v?HT 0
- Û v ist orthogonal zu allen Vektoren einer
Basis von C - Û v Î C
- Û v Î C wegen C C. ?
51Das Syndrom hängt nur von der Nebenklasse ab
- 1.4.7 Lemma. Sei H eine Kontrollmatrix eines
linearen Codes C Í V. Für alle Vektoren v, w Î
V gilt - s(v) s(w) Û v C w C.
- Beweis. Sei v, w Î V beliebig. Dann gilt
- s(v) s(w)
- Û v?HT w?HT
- Û v?HT w?HT 0
- Û (v w)?HT 0
- Û v w Î C (nach 1.4.6)
- Û v C w C (Kriterium für Gleichheit von
Nebenklassen). ?
52Eindeutigkeit der Nebenklassenanführer
- Sei C Í V ein linearer Code. Ein Vektor heißt
Anführer einer Neben-klasse von C, wenn er unter
allen Vektoren dieser Nebenklasse minimales
Gewicht hat. - Im allgemeinen sind Nebenklassenanführer nicht
eindeutig bestimmt. - 1.4.8 Satz. Sei C Í V ein linearer
t-fehlerkorrigierender Code. Dann (a) Jeder
Vektor von V vom Gewicht t ist Anführer
einer Neben-klasse.(b) Die Anführer von
Nebenklassen, die einen Vektor vom Gewicht t
enthalten, sind eindeutig bestimmt.
53Beweis
- Wir beweisen (a) und (b) gemeinsam. Sei v ein
Vektor vom Gewicht t. Betrachte einen
beliebigen Vektor v' Î v C mit v' ¹ v. Es
ist zu zeigen, dass v' mindestens das Gewicht
t 1 hat.Da v und v' in derselben
Nebenklasse von C sind, ist v v' Î C. Da v
¹ v' ist, gilt v v' ¹ 0, also w(v v')
d(v v' 0) ³ 2t 1 nach Definition eines
t-fehlerkorrigierenden Codes. Daraus folgt - 2t 1 w(v v') d(v v',0) d(v, v')
- d(v, 0) d(0, v') w(v) w(v') t
w(v'), - also w(v') ³ t 1. ?
54Decodieralgorithmus
- Der Empfänger empfängt einen Vektor x. Wenn ?
t Fehler aufgetreten sind, ist x c e mit c
? C und w(e) ? t. Wegen x e c ? C, liegen
x und e in der gleichen Nebenklasse. - Der Empfänger bestimmt zunächst die Nebenklasse,
in der x liegt. Dann bestimmt er den Anführer
dieser Nebenklasse. Da diese Nebenklasse einen
Vektor mit Gewicht ? t enthält (nämlich e),
ist ihr Anführer eindeutig bestimmt (nach 1.4.8),
es ist e. Schließlich berechnet der Empfänger
das Codewort x e c. - Problem Bestimmung der Nebenklasse von x.
- Verbesserung des Algorithmus Syndrom-Decodierung
.
55Syndrom-Decodierung
- Sei C Í V ein t-fehlerkorrigierender linearer
Code. Man erstellt eine Liste der
Nebenklassenanführer und der zugehörigen
Syndrome. Für einen empfangenen Vektor x
berechnet man das Syndrom s(x), sucht dies in
der Liste der Syndrome, stellt den zugehörigen
Nebenklassenanführer e fest und decodiert x
zu x e c. - Bemerkung. Die Eindeutigkeit der
Nebenklassenanführer garantiert, dass mit der
Syndrom-Decodierung richtig decodiert wird, wenn
höchstens t Fehler auftreten.
56Beispiel zur Syndrom-Decodierung
- Wir betrachten den 1-fehlerkorrigierenden
Beispielcode mit 16 Code-wörtern (Folie 41).Er
hat die Kontrollmatrix H .Die
Nebenklassenanführer sind die Vektoren mit
Gewicht ? 1, also die Vektoren 0000000,
0000001, 0000010, . . . - Zu allen acht Nebenklassenanführern v bestimmen
wir die Syndrome s(v) v?HT und stellen
folgende Liste auf.
57Beispiel (Fortsetzung)
- Nebenklassenanführer Syndrom
- 0000000 000 0000001
111 0000010 011 0000100
101 0001000 110 0010000
001 0100000 010 1000000 100 - Wird z.B. x 0010001 empfangen, so berechnet
man s(x) 110. Danach bestimmt man aus der
Liste den Fehlervektor e 0001000 als Codewort
ergibt sich c x e 0010001 0001000
0011001.
58Hamming-Codes
- Sei r ? N. Sei H eine binäre
r(2r 1)-Matrix, deren Spalten sämt-liche von
0 verschiedenen binären r-Tupel sind. Sei n
2r 1. Der Hamming-Code der Länge n ist
definiert als - Ham(r) c (c1, . . ., cn) Î 0, 1n
c?HT o, - das heißt, genau diejenigen Vektoren c sind
Codewörter von Ham(r), für die c?HT der
Nullvektor der Länge r ist. - Beispiel Der Code von Folie 41 ist der
Hamming-Code Ham(3). - Da H den Rang r hat, hat Ham(r) die
Dimension 2r 1 r. Ham(r) ist also ein
linearer 2r 1, 2r 1 r-Code.
59Hamming-Codes sind 1-fehlerkorrigierend
- 1.4.9 Satz. Die Hamming-Codes sind
1-fehlerkorrigierende Codes. - Beweis. Z.z d(Ham(r)) ? 3. Angenommen, Ham(r)
enthielte einen Vektor c vom Gewicht 1 c
möge an der i-ten Stelle eine 1 haben. Nach
Definition von Ham(r) ist dann c?HT o. Dann
muss die i-te Spalte von H gleich Null sein
Widerspruch. Also ist d(Ham(r)) ? 1.Angenommen,
Ham(r) enthielte einen Vektor, der nur an der
i-ten und an der j-ten Stelle eine 1 hat. Dann
müsste die Summe der i-ten und der j-ten Spalte
von H gleich Null sein also wäre die i-te
Spalte gleich der j-ten Spalte Widerspruch.
Also ist d(Ham(r)) ? 2. ?
60Perfekte Codes
- Hamming-Codes sind in gewissen Sinne die besten
Codes, die es gibt, nämlich die, die am
dichtesten gepackt sind. - Ein t-fehlerkorrigierender Code C Í V heißt
perfekt, falls jeder Vektor aus V einen Abstand
t zu (genau) einem Codewort hat. - Anders ausgedrückt C ist perfekt, falls
- St(c) V
- ist wenn also die Kugeln mit Radius t um die
Codewörter den Vektorraum V lückenlos
auffüllen. - Wir werden zeigen, dass die Hamming-Codes perfekt
sind.
61Kugelpackungsgrenze
- 1.4.10 Lemma. Sei C Í V 0, 1n ein
1-fehlerkorrigierender Code. Dann gilt - C
- mit Gleichheit genau dann, wenn C perfekt ist.
- 1.4.11 Korollar. Jeder perfekte
1-fehlerkorrigierende Code C Í 0, 1n hat eine
Länge n der Form n 2r 1. - Beweis des Korollars. Aus C?(n 1) 2n
folgt, dass n 1 ein Teiler von 2n sein
muss. ?
62Beweis des Lemmas
- In einer Kugel S1(c) um ein Codewort c liegen
c selbst und alle Vek-toren, die Abstand 1
von c haben. Da c genau n Stellen hat, gibt
es genau n Vektoren vom Abstand 1 von c.
Also ist S1(c) 1 n. - Da C ein 1-fehlerkorrigierender Code ist, sind
die Kugeln S1(c) um die Codewörter c
paarweise disjunkt. Daher überdecken die Kugeln
vom Radius 1 um die Codewörter genau
C?(n 1) Vektoren von V. - Da V genau 2n Vektoren hat, gilt offenbar
C?(n 1) 2n. - Gleichheit gilt genau dann, wenn jeder Vektor aus
V in einer Kugel vom Radius 1 um ein Codewort
liegt, also wenn C perfekt ist. ?
63Hamming-Codes sind perfekt
- 1.4.12 Satz. Die Hamming-Codes sind perfekte
1-fehlerkorrigierende Codes. - Beweis. Da dim(Ham(r)) 2r 1 r ist, gilt
- Ham(r) .
- Daraus ergibt sich mit n 2r 1
- Ham(r)?(n 1) ? 2r
2n. - Nach 1.4.10 ist Ham(r) also perfekt. ?
64Syndrom-Decodierung mit Hamming-Codes
- Nun ordnen wir die Spalten der Matrix H Wir
interpretieren die Spalten von H als binäre
Darstellung der Zahlen 1, . . ., 2r 1 und
ordnen die Spalten so an, dass die i-te Spalte
si die Zahl i darstellt. - 1.4.13 Satz. Sei der Code Ham(r) mit der nach
obiger Vorschrift geordneten Matrix H
konstruiert. Dann gilt Für jeden Vektor
v Î V\C ist s(v) die binäre Darstellung der
Zahl i, so dass v ei Î C ist. (Dabei ist ei
der Vektor, der nur an der i-ten Stelle eine
Eins hat.) M.a.W. Das Syndrom eines mit Fehler
behafteten Vektors gibt die Stelle an, an welcher
der Fehler auftrat.
65Decodieralgorithmus
- Beweis. Da Ham(r) perfekt ist, hat jeder Vektor
v Î V\C die Form v c ei für ein
geeignetes Codewort c. Damit ergibt sich - s(v) v?HT (c ei)?HT c?HT ei?HT ei?HT
i-te Spalte von H. - Da die i-te Spalte von H der Zahl i
entspricht, kann damit der Fehler lokalisiert
werden. ? - Der Decodieralgorithmus ist damit äußerst
einfach Für einen empfangenen Vektor x muss
man nur s(x) berechnen, dieses r-Tupel als
Zahl i interpretieren und erhält das zugehörige
Codewort als ei x c.
66Erweiterter Hamming-Code
- Aus einem Hamming-Code Ham(r) erhalten wir den
erweiterten Hamming-Code Ham(r), indem wir
jedes Codewort aus Ham(r) um eine Stelle so
verlängern, dass die Gesamtzahl der Einsen in
jedem Codewort gerade ist. 00000000 11111111
Beispiel Ham(3) besteht 11100001 00011110au
s nebenstehenden 16 10011001 01100110Codewörter
n der Länge 8 10000111 01111000 01010101
10101010 01001011 10110100 00110011 11
001100 00101101 11010010
67 Eigenschaften des erweiterten Hamming-Codes
- 1.4.14 Satz. Ham(r) ist ein linearer
2r, 2r 1 r-Code mit Minimal-abstand 4. - Beweis. 1.) Ham(r) ist ein Unterraum von
V GF Seien c1, c2 ? Ham(r), und
seien c1 und c2 die entsprechenden Codewörter
aus Ham(r). Da c1 c2 in den ersten 2r 1
Stellen mit c1 c2 übereinstimmt, müssen wir
nur folgendes zeigen die letzte Stelle von
c1 c2 ist 1 wenn w(c1 c2) ungerade ist
und 0 sonst.Wenn c1 c2 ungerades Gewicht
hat, dann können wir o.B.d.A. annehmen, dass c1
ungerades Gewicht hat und c2 gerades Gewicht.
Daher ist die letzte Stelle von c1 gleich 1
und die letzte Stelle von c2 gleich 0. Also
ist die letzte Stelle von c1 c2 gleich 1.
68Beweis (Fortsetzung)
- Wenn c1 c2 gerades Gewicht hat, dann haben
entweder c1 und c2 beide gerades oder beide
ungerades Gewicht. In jedem Fall haben c1 und
c2 den gleichen letzten Eintrag und daher ist
die letzte Stelle von c1 c2 gleich 0. Also
ist in beiden Fällen c1 c2 ein Codewort und
damit ist Ham(r) ein Vektorraum.2.) Ham(r)
hat die gleiche Dimension wie Ham(r) Klar, denn
beide Vektorräume haben dieselbe Anzahl von
Elementen. 3.) Ham(r) hat das Minimalgewicht
4 Da w(Ham(r)) 3 ist, muss w(Ham(r)) ³ 3
sein. Wäre w(Ham(r)) 3, so gäbe es einen
Vektor c aus Ham(r) vom Gewicht 3 dies
ist jedoch nicht möglich, da jeder Vektor aus
Ham(r) gerades Gewicht hat. ?
69Kontrollmatrix des erweiterten Hamming-Codes
- 1.4.15 Satz. Man erhält aus einer Kontrollmatrix
H von Ham(r) eine Kontrollmatrix H von
Ham(r), indem man jede Zeile von H durch
eine Stelle ergänzt in der Null steht, eine
zusätzliche Zeile aus lauter Einsen hinzufügt. - Beispiel Ham(3) hat die Kontrollmatrix
- H
70Beweis
- Der zu Ham(r) duale Code ist nach 1.4.4 ein
2r, r 1-Code seine Kontrollmatrix ist also
eine (r 1)2r-Matrix. Z.z. Die Zeilen von H
sind linear unabhängig und Codewörter des zu
Ham(r) dualen Codes.Da H eine Kontrollmatrix
ist, sind ihre Zeilen linear unabhängig. Also
sind auch die ersten r Zeilen von H linear
unabhängig. Da in der letzten Spalte von H in
den ersten r Zeilen 0 steht und in der letzten
Zeile 1, sind alle Zeilen von H linear
unabhängig. Die Zeilen von H sind Codewörter
des zu Ham(r) dualen Codes, also sind nach
Konstruktion auch die ersten r Zeilen von H
orthogonal zu allen Codewörtern von Ham(r).
Nach Definition hat jedes Codewort von Ham(r)
gerades Gewicht daher ist das Produkt eines
Codeworts mit der letzten Zeile von H
ebenfalls gleich Null. ?