Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes...

70
Kapitel 1: Codierungstheorie Inhalt: 1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes

Transcript of Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes...

Page 1: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie

Inhalt: 1.1 Einführung

1.2 Quellcodierung

1.3 Fehlererkennende Codes

1.4 Fehlerkorrigierende Codes

Kapitel 1: Codierungstheorie

Inhalt: 1.1 Einführung

1.2 Quellcodierung

1.3 Fehlererkennende Codes

1.4 Fehlerkorrigierende Codes

Page 2: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 2

1.1 Einführung1.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.

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.

Page 3: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 3

QuellcodierungQuellcodierung

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.

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.

Page 4: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 4

KanalcodierungKanalcodierung

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

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

Page 5: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 5

Kommunikationsmodell der KanalcodierungKommunikationsmodell 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.

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.

C o dierenD atens a t z d

S en der

D eco-dieren

D a te n s at z d '

E m p fä ng er

v erä nd ert eN a ch rich t x

N a chr ic h t c( C o dew ort )

Page 6: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 6

Fehlererkennung und -korrekturFehlererkennung 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, ...

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, ...

Page 7: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 7

1.2 Quellcodierung1.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 auf:

e: 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.

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 auf:

e: 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.

Page 8: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 8

Der Huffman-CodeDer 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:

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

Page 9: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 9

Beispiel zum Huffman-CodeBeispiel 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

Page 10: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 10

Die Schritte beim Huffman-CodeDie 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.

- 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.

Page 11: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 11

Die durchschnittliche CodewortlängeDie 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,22·2 + 0,2·2 + 0,18·3 + 0,15·3 + 0,1·3 + 0,08·4 + 0,05·5 + 0,02·5

= 2,8

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,22·2 + 0,2·2 + 0,18·3 + 0,15·3 + 0,1·3 + 0,08·4 + 0,05·5 + 0,02·5

= 2,8

Page 12: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 12

Wie gut ist der Huffman-Code?Wie 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.

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.

Page 13: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 13

1.3 Fehlererkennende Codes1.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.

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.

Page 14: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 14

Fehlererkennung im täglichen LebenFehlererkennung im täglichen Leben

• Namen buchstabieren („Zet-es-zeh-ha-i-e-ge-en-e-er“)

• 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.

• Namen buchstabieren („Zet-es-zeh-ha-i-e-ge-en-e-er“)

• 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.

Page 15: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 15

Die Idee: Eine Prüfziffer!Die 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.

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.

Page 16: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 16

Wie wird der Fehler erkannt?Wie 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 1+2+3+4+5=15 ist nicht durch 10

teilbar.

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 1+2+3+4+5=15 ist nicht durch 10

teilbar.

Page 17: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 17

ParitätscodesParitä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.

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.

n

i 1

Page 18: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 18

Der Paritätscode ist 1-fehlererkennendDer 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.

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.

n

i 1

Page 19: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 19

Verallgemeinerung: Paritätscodes über GruppenVerallgemeinerung: 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.

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.

Page 20: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 20

1-Fehlererkennung bei Paritätscodes über Gruppen1-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‘, gi+1, ... , gn-1, gn)

akzeptieren, so müsste gelten

g1 ... gi-1 gi‘ gi+1 ... gn-1 gn = c.

Zusammen folgt gi = gi‘. Das ist ein Widerspruch.

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‘, gi+1, ... , gn-1, gn)

akzeptieren, so müsste gelten

g1 ... gi-1 gi‘ gi+1 ... gn-1 gn = c.

Zusammen folgt gi = gi‘. Das ist ein Widerspruch.

Page 21: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 21

VertuaschungsfehlerVertuaschungsfehler

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).

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).

Page 22: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 22

Paritätscodes mit GewichtenParitä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.

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.

Page 23: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 23

1-Fehlererkennung bei Paritätscodes mit Gewichten1-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‘, zi+1, ... , zn-1, zn) ein Codewort, so müsste gelten

w1z1 + ... + wi-1zi-1 + wizi‘ + wi+1zi+1 + ... + 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.

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‘, zi+1, ... , zn-1, zn) ein Codewort, so müsste gelten

w1z1 + ... + wi-1zi-1 + wizi‘ + wi+1zi+1 + ... + 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.

Page 24: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 24

Fortsetzung des BeweisesFortsetzung des Beweises

„“ Angenommen, wi wäre nicht aus Zm*. Dann ist t := ggT(m, wi) > 1.

Dann wird die Veränderung von zi := m/t zu zi‘ := 0 nicht erkannt!

(Denn: Sei wi = kt. Sei (z1, ..., zi, ..., zn) ein Codewort mit zi := m / t.

Dann ist c = w1z1 + ... + wizi + ... + wnzn

= w1z1 + ... + kt 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. )

„“ Angenommen, wi wäre nicht aus Zm*. Dann ist t := ggT(m, wi) > 1.

Dann wird die Veränderung von zi := m/t zu zi‘ := 0 nicht erkannt!

(Denn: Sei wi = kt. Sei (z1, ..., zi, ..., zn) ein Codewort mit zi := m / t.

Dann ist c = w1z1 + ... + wizi + ... + wnzn

= w1z1 + ... + kt 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. )

Page 25: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 25

Der EAN-CodeDer 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!

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!

Page 26: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 26

Erkennen von VertauschungsfehlernErkennen 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.

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.

Page 27: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 27

Fortsetzung des BeweisesFortsetzung 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 m1 unmöglich ist.

„“: Wenn andererseits die Zahlen m und wi– wj einen größten

gemeinsamen Teiler t > 1 haben, dann wird die Vertauschung von

zi := m/t und zj = 0 nicht erkannt.

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 m1 unmöglich ist.

„“: Wenn andererseits die Zahlen m und wi– wj einen größten

gemeinsamen Teiler t > 1 haben, dann wird die Vertauschung von

zi := m/t und zj = 0 nicht erkannt.

Page 28: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 28

Kann man Einzel- und Vertauschungsfehler erkennen?Kann 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 wi–wi+1 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.

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 wi–wi+1 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.

Page 29: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 29

Der ISBN-CodeDer 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

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

Page 30: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 30

Berechnung des ISBN-PrüfsymbolsBerechnung des ISBN-Prüfsymbols

Sei a1a2a3... a9a10 eine ISBN. Das Prüfsymbol a10 wird so bestimmt,

dass die Zahl

10a1 + 9a2 + 8a3 + 7a4 + 6a5 + 5a6 + 4a7 + 3a8 + 2a9 + 1a10

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

103 + 95 + 82 + 78 + 60 + 56 + 47 + 38 + 23 = 235.

Die nächste Elferzahl ist 242, also muss das Prüfsymbol 7 sein.

Die komplette ISBN lautet also 3-528-06783-7.

Sei a1a2a3... a9a10 eine ISBN. Das Prüfsymbol a10 wird so bestimmt,

dass die Zahl

10a1 + 9a2 + 8a3 + 7a4 + 6a5 + 5a6 + 4a7 + 3a8 + 2a9 + 1a10

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

103 + 95 + 82 + 78 + 60 + 56 + 47 + 38 + 23 = 235.

Die nächste Elferzahl ist 242, also muss das Prüfsymbol 7 sein.

Die komplette ISBN lautet also 3-528-06783-7.

Page 31: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 31

Wie gut ist der ISBN-Code?Wie 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) 10a1+ 9a2+ 8a3+ 7a4+...+ 3a8+ 2a9+ 1a10 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.

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) 10a1+ 9a2+ 8a3+ 7a4+...+ 3a8+ 2a9+ 1a10 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.

Page 32: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 32

1.4 Fehlerkorrigierende Codes1.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,1}n 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.

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,1}n 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.

Page 33: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 33

Hamming-AbstandHamming-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).

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).

Page 34: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 34

Der Hamming-Abstand als MetrikDer 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).

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).

Page 35: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 35

Nachweis der DreiecksungleichungNachweis 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).

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).

u

w

v

x x x

o o o

x x x

b

x x

o o

o o

ax x x

x x x

o o o

c

x x x x

x x x x

x x x x

Page 36: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 36

HammingkugelnHammingkugeln

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.

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.

Page 37: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 37

t-fehlerkorrigierende Codest-fehlerkorrigierende Codes

Sei t eine natürliche Zahl. Eine Teilmenge C von V = {0,1}n 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.

Sei t eine natürliche Zahl. Eine Teilmenge C von V = {0,1}n 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.

Page 38: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 38

Lemma über HammingkugelnLemma ü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).

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).

Page 39: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 39

Warum „t-fehlerkorrigierend“?Warum „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.

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.

Page 40: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 40

Das Ziel der CodierungstheorieDas 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.

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.

Page 41: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 41

BeispielBeispiel

Die folgenden 16 Vektoren aus V = {0,1}7 bilden einen 1-fehlerkorri-

gierenden Code:

0000000 1111111

1110000 0001111

1001100 0110011

1000011 0111100

0101010 1010101

0100101 1011010

0011001 1100110

0010110 1101001

Die folgenden 16 Vektoren aus V = {0,1}7 bilden einen 1-fehlerkorri-

gierenden Code:

0000000 1111111

1110000 0001111

1001100 0110011

1000011 0111100

0101010 1010101

0100101 1011010

0011001 1100110

0010110 1101001

Page 42: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 42

Lineare CodesLineare 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.

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.

Page 43: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 43

GeneratormatrixGeneratormatrix

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 k×n-Matrix G, deren i-te Zeile der Basisvektor ci ist, eine

Generatormatrix von C.

Beispiel. Eine Generatormatrix des obigen Beispielcodes (Folie 41) ist

G =

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 k×n-Matrix G, deren i-te Zeile der Basisvektor ci ist, eine

Generatormatrix von C.

Beispiel. Eine Generatormatrix des obigen Beispielcodes (Folie 41) ist

G =

0111000

1110100

1010010

1100001

Page 44: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 44

MinimalgewichtMinimalgewicht

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.

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.

Page 45: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 45

Beweis des LemmasBeweis des Lemmas

Beweis. Für jeden Code, der den Nullvektor enthält, gilt

d(C) = min{d(c, c') | c, c' C, c c'} min{d(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(c–c') = d(c–c', 0) = d(c–c'‚ c'–c') = d(c, c') = d(C).

Da C linear ist, ist c0 := c–c' C. Damit ist alles gezeigt.

Beweis. Für jeden Code, der den Nullvektor enthält, gilt

d(C) = min{d(c, c') | c, c' C, c c'} min{d(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(c–c') = d(c–c', 0) = d(c–c'‚ c'–c') = d(c, c') = d(C).

Da C linear ist, ist c0 := c–c' C. Damit ist alles gezeigt.

Page 46: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 46

Dualer CodeDualer 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 | cv = 0 für alle c C};

dabei ist das innere Produkt cv der Vektoren c = (c1, . . ., cn) und

v = (v1, . . ., vn) erklärt durch

cv = c1v1 + c2v2 + . . . + cnvn.

Wenn cv = 0 ist, so sagt man auch, dass c und v orthogonal sind.

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 | cv = 0 für alle c C};

dabei ist das innere Produkt cv der Vektoren c = (c1, . . ., cn) und

v = (v1, . . ., vn) erklärt durch

cv = c1v1 + c2v2 + . . . + cnvn.

Wenn cv = 0 ist, so sagt man auch, dass c und v orthogonal sind.

Page 47: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 47

Dimensionsformel für den dualen CodeDimensionsformel 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 n–k.

Beweis. Unabhängig davon, ob C linear ist oder nicht, ist C ein

Unterraum von V. Noch z.z.: dim C = n–k.

Dazu betrachten wir eine Generatormatrix G mit den Zeilen c1, . . , ck

von C. Dann gilt: C = {v V | civ = 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 n–Rang(G). Da die Zeilen von G eine Basis von C

bilden, hat G den Rang k. Also gilt dim(C) = n–k.

1.4.4 Satz. Ist C ein linearer [n, k]-Code der Dimension k, so ist C

ein linearer Code der Dimension n–k.

Beweis. Unabhängig davon, ob C linear ist oder nicht, ist C ein

Unterraum von V. Noch z.z.: dim C = n–k.

Dazu betrachten wir eine Generatormatrix G mit den Zeilen c1, . . , ck

von C. Dann gilt: C = {v V | civ = 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 n–Rang(G). Da die Zeilen von G eine Basis von C

bilden, hat G den Rang k. Also gilt dim(C) = n–k.

Page 48: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 48

Satz vom „Bidualcode“Satz 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 – (n–k) = k = dim(C).

Zusammen folgt C = C.

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 – (n–k) = k = dim(C).

Zusammen folgt C = C.

Page 49: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 49

Kontrollmatrix und SyndromKontrollmatrix 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 n–k hat, ist H eine (n–k)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) := vHT,

wobei HT die zur Kontrollmatrix H transponierte Matrix ist.

Ein Syndrom ist also ein binärer Vektor der Länge n–k.

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 n–k hat, ist H eine (n–k)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) := vHT,

wobei HT die zur Kontrollmatrix H transponierte Matrix ist.

Ein Syndrom ist also ein binärer Vektor der Länge n–k.

Page 50: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 50

Satz über die KontrollmatrixSatz ü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

vHT = 0

v ist orthogonal zu allen Vektoren einer Basis von C

v C

v C wegen C = C.

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

vHT = 0

v ist orthogonal zu allen Vektoren einer Basis von C

v C

v C wegen C = C.

Page 51: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 51

Das Syndrom hängt nur von der Nebenklasse abDas 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)

vHT = wHT

vHT – wHT = 0

(v – w)HT = 0

v – w C (nach 1.4.6)

v + C = w + C (Kriterium für Gleichheit von Nebenklassen).

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)

vHT = wHT

vHT – wHT = 0

(v – w)HT = 0

v – w C (nach 1.4.6)

v + C = w + C (Kriterium für Gleichheit von Nebenklassen).

Page 52: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 52

Eindeutigkeit der NebenklassenanführerEindeutigkeit 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.

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.

Page 53: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 53

BeweisBeweis

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.

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.

Page 54: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 54

DecodieralgorithmusDecodieralgorithmus

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“.

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“.

Page 55: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 55

Syndrom-DecodierungSyndrom-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.

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.

Page 56: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 56

Beispiel zur Syndrom-DecodierungBeispiel 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) = vHT und stellen folgende Liste auf.

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) = vHT und stellen folgende Liste auf.

1110100

1101010

1011001

Page 57: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 57

Beispiel (Fortsetzung)Beispiel (Fortsetzung)

Nebenklassenanführer Syndrom

0000000 0000000001 1110000010 0110000100 1010001000 1100010000 0010100000 0101000000 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.

Nebenklassenanführer Syndrom

0000000 0000000001 1110000010 0110000100 1010001000 1100010000 0010100000 0101000000 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.

Page 58: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 58

Hamming-CodesHamming-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, 1}n | cHT = o}, 

das heißt, genau diejenigen Vektoren c sind Codewörter von Ham(r),

für die cHT 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.

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, 1}n | cHT = o}, 

das heißt, genau diejenigen Vektoren c sind Codewörter von Ham(r),

für die cHT 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.

Page 59: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 59

Hamming-Codes sind 1-fehlerkorrigierendHamming-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 cHT = 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.

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 cHT = 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.

Page 60: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 60

Perfekte CodesPerfekte 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.

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.

Cc

Page 61: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 61

KugelpackungsgrenzeKugelpackungsgrenze

1.4.10 Lemma. Sei C  V = {0, 1}n 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, 1}n

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.

1.4.10 Lemma. Sei C  V = {0, 1}n 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, 1}n

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.

1

2

+n

n

Page 62: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 62

Beweis des LemmasBeweis 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.

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.

Page 63: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 63

Hamming-Codes sind perfektHamming-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.

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.

rr 122

rr 122 122 r

Page 64: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 64

Syndrom-Decodierung mit Hamming-CodesSyndrom-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.

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.

Page 65: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 65

DecodieralgorithmusDecodieralgorithmus

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) = vHT = (c + ei)HT = cHT + eiHT = eiHT = 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.

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) = vHT = (c + ei)HT = cHT + eiHT = eiHT = 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.

Page 66: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 66

Erweiterter Hamming-CodeErweiterter 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 00011110

aus nebenstehenden 16 10011001 01100110

Codewörtern der Länge 8: 10000111 01111000

01010101 10101010

01001011 10110100

00110011 11001100

00101101 11010010

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 00011110

aus nebenstehenden 16 10011001 01100110

Codewörtern der Länge 8: 10000111 01111000

01010101 10101010

01001011 10110100

00110011 11001100

00101101 11010010

Page 67: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 67

Eigenschaften des erweiterten Hamming-Codes 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.

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.

r

)( 22

Page 68: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 68

Beweis (Fortsetzung)Beweis (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.

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.

Page 69: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 69

Kontrollmatrix des erweiterten Hamming-CodesKontrollmatrix 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* = 

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* = 

11111111

01110100

01101010

01011001

Page 70: Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes.

Kapitel 1: Codierungstheorie © Zschiegner

April 2002Seite 70

BeweisBeweis

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.

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.