Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Kapitel 1: Codierungstheorie Inhalt:1.1 Einführung 1.2 Quellcodierung 1.3 Fehlererkennende Codes 1.4 Fehlerkorrigierende Codes."—  Präsentation transkript:

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

2 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 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.

3 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 3 Quellcodierung 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 = , b = ,... (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 = , b = ,... (b) Die Daten sollen möglichst ökonomisch übertragen werden. Dazu sollen sie so gut wie möglich komprimiert werden.

4 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 4 Kanalcodierung 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

5 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 5 Kommunikationsmodell 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.

6 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 6 Fehlererkennung 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,...

7 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite Quellcodierung Sei {s 1, s 2,..., s n } eine Quelle mit den Quellzuständen s i, die jeweils mit der Häufigkeit oder Wahrscheinlichkeit p i 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 s 1, s 2,..., s n die verschiedenen Bytes, die in einem Computerprogramm auftreten. Dabei trete s i mit der Häufigkeit p i auf. Wir möchten dieses Programm so gut wie möglich komprimieren. Sei {s 1, s 2,..., s n } eine Quelle mit den Quellzuständen s i, die jeweils mit der Häufigkeit oder Wahrscheinlichkeit p i 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 s 1, s 2,..., s n die verschiedenen Bytes, die in einem Computerprogramm auftreten. Dabei trete s i mit der Häufigkeit p i auf. Wir möchten dieses Programm so gut wie möglich komprimieren.

8 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 8 Der 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ändes1s1 s2s2 s3s3 s4s4 s5s5 s6s6 s7s7 s8s8 Häufigkeiten0,220,200,180,150,100,080,050,02

9 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 9 Beispiel zum Huffman-Code sisi p i Code s1s1 0, ,25 010,33 000,42 10,58 0 s2s2 0, ,22 100,25 010,33 000,42 1 s3s3 0, ,20 110,22 100,25 01 s4s4 0, , ,20 11 s5s5 0, , , s6s6 0, , s7s7 0, , = s8s8 0,

10 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 10 Die 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 b 1 b 2...b m. Wenn dieser Zustand auch im Schritt k-1 vorkommt, dann erhält er dort die gleiche Codierung. Wenn der Zustand aus den Zuständen s u und s v kombiniert wurde (o.B.d.A. sei s u häufiger), dann erhält s u den Code b 1 b 2...b m 0 und s v erhält b 1 b 2...b m 1.

11 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 11 Die durchschnittliche Codewortlänge Sei S = {s 1, s 2,..., s n } eine Quelle mit den Quellzuständen s i, die jeweils mit der Wahrscheinlichkeit p i auftreten. Unter einem binären Code werde s i in c(s i ) codiert. Sei l(s i ) die Länge des Codeworts c(s i ). Wir definieren die durchschnittliche Codewortlänge l* als l* = p 1 · l(s 1 ) + p 2 · l(s 2 ) p n · l(s n ). 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 = {s 1, s 2,..., s n } eine Quelle mit den Quellzuständen s i, die jeweils mit der Wahrscheinlichkeit p i auftreten. Unter einem binären Code werde s i in c(s i ) codiert. Sei l(s i ) die Länge des Codeworts c(s i ). Wir definieren die durchschnittliche Codewortlänge l* als l* = p 1 · l(s 1 ) + p 2 · l(s 2 ) p n · l(s n ). 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

12 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 12 Wie gut ist der Huffman-Code? Der Huffman-Code ist im folgenden Sinne optimal Satz. Sei S = {s 1, s 2,..., s n } eine Quelle mit den zugehörigen Wahrscheinlichkeiten p i. 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 Satz. Sei S = {s 1, s 2,..., s n } eine Quelle mit den zugehörigen Wahrscheinlichkeiten p i. 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.

13 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 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.

14 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 14 Fehlererkennung 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.

15 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 15 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.

16 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 16 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 empfangen, so muss beim Übertragen ein Fehler aufgetreten sein, denn =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 empfangen, so muss beim Übertragen ein Fehler aufgetreten sein, denn =15 ist nicht durch 10 teilbar.

17 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 17 Paritätscodes Die Daten seien binäre Folgen der Länge n-1, D die Menge aller Daten: D = {(b 1,..., b n-1 ) | b i {0, 1}}. Wir erhalten die codierte Nachricht, indem wir ein n-tes Bit anhängen, so dass die Summe aller Bits gerade ist: M = {(b 1,..., b n-1, b n ) | b i {0, 1} und b i mod 2 = 0}. Codierung: Wenn b b n-1 gerade ist, setzt der Sender b n = 0, sonst b n = 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 = {(b 1,..., b n-1 ) | b i {0, 1}}. Wir erhalten die codierte Nachricht, indem wir ein n-tes Bit anhängen, so dass die Summe aller Bits gerade ist: M = {(b 1,..., b n-1, b n ) | b i {0, 1} und b i mod 2 = 0}. Codierung: Wenn b b n-1 gerade ist, setzt der Sender b n = 0, sonst b n = 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.

18 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 18 Der Paritätscode ist 1-fehlererkennend Die Menge M = {(b 1,..., b n-1, b n ) | b i {0, 1} und b i 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 = {(b 1,..., b n-1, b n ) | b i {0, 1} und b i 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.

19 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 19 Verallgemeinerung: Paritätscodes über Gruppen Sei G eine Gruppe und sei c ein beliebiges Element von G. Die Menge C = {(g 1,..., g n-1, g n ) | g i G und g 1... g n-1 g n = c} ist ein Paritätscode der Länge n über der Gruppe G. Wie können uns (g 1,..., g n-1 ) als Informationssymbole (Daten) und g n als Prüfsymbol vorstellen. Berechnung des Prüfsymbols: g n = g n-1 -1 g n g 1 -1 c. Beispiele: (a) G = Z 2 = {0, 1}, c = 0: Vorheriges Beispiel (Folie 17). (b) G = Z 10, c = 0: Dezimalcode von Folie 15. Sei G eine Gruppe und sei c ein beliebiges Element von G. Die Menge C = {(g 1,..., g n-1, g n ) | g i G und g 1... g n-1 g n = c} ist ein Paritätscode der Länge n über der Gruppe G. Wie können uns (g 1,..., g n-1 ) als Informationssymbole (Daten) und g n als Prüfsymbol vorstellen. Berechnung des Prüfsymbols: g n = g n-1 -1 g n g 1 -1 c. Beispiele: (a) G = Z 2 = {0, 1}, c = 0: Vorheriges Beispiel (Folie 17). (b) G = Z 10, c = 0: Dezimalcode von Folie 15.

20 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 20 1-Fehlererkennung bei Paritätscodes über Gruppen Satz. Paritätscodes über Gruppen sind 1-fehlererkennend. Beweis. Sei (g 1,..., g n-1, g n ) ein Codewort. Dann ist g 1... g n-1 g n = c. Angenommen, das i-te Symbol g i wird durch ein anderes Symbol g i ersetzt (ein Fehler an der i-ten Stelle passiert). Würde der Empfänger die Nachricht (g 1,..., g i-1, g i, g i+1,..., g n-1, g n ) akzeptieren, so müsste gelten g 1... g i-1 g i g i+1... g n-1 g n = c. Zusammen folgt g i = g i. Das ist ein Widerspruch Satz. Paritätscodes über Gruppen sind 1-fehlererkennend. Beweis. Sei (g 1,..., g n-1, g n ) ein Codewort. Dann ist g 1... g n-1 g n = c. Angenommen, das i-te Symbol g i wird durch ein anderes Symbol g i ersetzt (ein Fehler an der i-ten Stelle passiert). Würde der Empfänger die Nachricht (g 1,..., g i-1, g i, g i+1,..., g n-1, g n ) akzeptieren, so müsste gelten g 1... g i-1 g i g i+1... g n-1 g n = c. Zusammen folgt g i = g i. Das ist ein Widerspruch.

21 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 21 Vertuaschungsfehler Bisher haben wir nur Einzelfehler betrachtet: Ein Zeichen wurde durch ein anderes ersetzt. Beispiel: Statt 1357 liest man Jetzt betrachten wir Vertauschungsfehler: Zwei aufeinanderfolgende Zeichen werden vertauscht. Beispiel: Statt 1357 liest man 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 Jetzt betrachten wir Vertauschungsfehler: Zwei aufeinanderfolgende Zeichen werden vertauscht. Beispiel: Statt 1357 liest man 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).

22 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 22 Paritätscodes mit Gewichten Problem: Wie können wir benachbarte Stellen unterscheiden? Neue Idee: Wir versehen jede Stelle mit einem Gewicht! Sei G die Gruppe (Z m, +) und c Z m. Seien w 1,..., w n-1, w n Z m. Dann ist C = {(z 1,..., z n-1, z n ) | z i Z m und w 1 z w n-1 z n-1 + w n z n = c} ein Paritätscode zur Basis m mit den Gewichten w 1,..., w n. Beispiel: Wir erhalten den ursprünglichen Paritätscode (ohne Gewichte) zurück, wenn wir w 1 =... = w n = 1 setzen. Problem: Wie können wir benachbarte Stellen unterscheiden? Neue Idee: Wir versehen jede Stelle mit einem Gewicht! Sei G die Gruppe (Z m, +) und c Z m. Seien w 1,..., w n-1, w n Z m. Dann ist C = {(z 1,..., z n-1, z n ) | z i Z m und w 1 z w n-1 z n-1 + w n z n = c} ein Paritätscode zur Basis m mit den Gewichten w 1,..., w n. Beispiel: Wir erhalten den ursprünglichen Paritätscode (ohne Gewichte) zurück, wenn wir w 1 =... = w n = 1 setzen.

23 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 23 1-Fehlererkennung bei Paritätscodes mit Gewichten Satz. Obiger Paritätscode mit Gewichten ist genau dann 1-fehlererkennend, wenn gilt w 1,..., w n-1, w n Z m *. Beweis. Sei (z 1,..., z n-1, z n ) ein Codewort. Dann ist w 1 z w n-1 z n-1 + w n z n = c. Angenommen, das i-te Symbol z i wird durch z i z i ersetzt. Wäre auch (z 1,..., z i-1, z i, z i+1,..., z n-1, z n ) ein Codewort, so müsste gelten w 1 z w i-1 z i-1 + w i z i + w i+1 z i w n-1 z n-1 + w n z n = c. Subtraktion der beiden Gleichungen liefert w i z i - w i z i = w i (z i - z i ) = 0. Da w i invertierbar ist, folgt z i - z i = 0, also z i = z i : Widerspruch Satz. Obiger Paritätscode mit Gewichten ist genau dann 1-fehlererkennend, wenn gilt w 1,..., w n-1, w n Z m *. Beweis. Sei (z 1,..., z n-1, z n ) ein Codewort. Dann ist w 1 z w n-1 z n-1 + w n z n = c. Angenommen, das i-te Symbol z i wird durch z i z i ersetzt. Wäre auch (z 1,..., z i-1, z i, z i+1,..., z n-1, z n ) ein Codewort, so müsste gelten w 1 z w i-1 z i-1 + w i z i + w i+1 z i w n-1 z n-1 + w n z n = c. Subtraktion der beiden Gleichungen liefert w i z i - w i z i = w i (z i - z i ) = 0. Da w i invertierbar ist, folgt z i - z i = 0, also z i = z i : Widerspruch.

24 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 24 Fortsetzung des Beweises Angenommen, w i wäre nicht aus Z m *. Dann ist t := ggT(m, w i ) > 1. Dann wird die Veränderung von z i := m/t zu z i := 0 nicht erkannt! (Denn: Sei w i = k t. Sei (z 1,..., z i,..., z n ) ein Codewort mit z i := m / t. Dann ist c = w 1 z w i z i w n z n = w 1 z k t m/t w n z n = w 1 z w n z n (in Z m ). = w 1 z w i w n z n = w 1 z w i z i w n z n. Also ist auch (z 1,..., z i,..., z n ) ein Codewort, der Fehler an der i-ten Stelle wird nicht erkannt. )

25 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 25 Der 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 (bei 13 Stellen) bzw (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 (bei 13 Stellen) bzw (bei 8 Stellen) berechnet. Der EAN-Code erkennt alle Einzelfehler (nach 1.3.2), aber nicht alle Vertauschungsfehler!

26 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 26 Erkennen von Vertauschungsfehlern Satz. Ein Paritätscode zur Basis m mit Gewichten w 1, w 2,..., w n erkennt genau dann alle Vertauschungsfehler an den Stellen i und j, falls die Zahl w i w j teilerfremd zu m ist. Beweis. Sei (z 1, z 2,..., z n ) ein Codewort; das bedeutet, dass gilt w 1 z 1 + w 2 z w n z n = c. Nun mögen die Einträge an den Stellen i und j vertauscht werden. Dann gilt: Der Empfänger bemerkt diesen Fehler nicht w 1 z 1 + w 2 z w i z j w j z i w n z n = c w i z i + w j z j – (w i z j + w j z i ) = 0 w i (z i – z j ) + w j (z j – z i ) = 0 (w i – w j )(z i – z j ) = Satz. Ein Paritätscode zur Basis m mit Gewichten w 1, w 2,..., w n erkennt genau dann alle Vertauschungsfehler an den Stellen i und j, falls die Zahl w i w j teilerfremd zu m ist. Beweis. Sei (z 1, z 2,..., z n ) ein Codewort; das bedeutet, dass gilt w 1 z 1 + w 2 z w n z n = c. Nun mögen die Einträge an den Stellen i und j vertauscht werden. Dann gilt: Der Empfänger bemerkt diesen Fehler nicht w 1 z 1 + w 2 z w i z j w j z i w n z n = c w i z i + w j z j – (w i z j + w j z i ) = 0 w i (z i – z j ) + w j (z j – z i ) = 0 (w i – w j )(z i – z j ) = 0.

27 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 27 Fortsetzung des Beweises Das bedeutet: Der Empfänger bemerkt jede solche Vertauschung, falls keine der möglichen Zahlen (w i – w j )(z i – z j ) gleich 0 ist (in Z m ), d.h. falls keine der Zahlen (w i – w j )(z i – z j ) durch m teilbar ist. : Wenn die Zahlen m und w i – w j teilerfremd sind, dann teilt m keine der Zahlen (w i – w j )(z i – z j ). Denn m müsste dann sogar z i – z j teilen, was wegen z i – z j m 1 unmöglich ist. : Wenn andererseits die Zahlen m und w i – w j einen größten gemeinsamen Teiler t > 1 haben, dann wird die Vertauschung von z i := m/t und z j = 0 nicht erkannt. Das bedeutet: Der Empfänger bemerkt jede solche Vertauschung, falls keine der möglichen Zahlen (w i – w j )(z i – z j ) gleich 0 ist (in Z m ), d.h. falls keine der Zahlen (w i – w j )(z i – z j ) durch m teilbar ist. : Wenn die Zahlen m und w i – w j teilerfremd sind, dann teilt m keine der Zahlen (w i – w j )(z i – z j ). Denn m müsste dann sogar z i – z j teilen, was wegen z i – z j m 1 unmöglich ist. : Wenn andererseits die Zahlen m und w i – w j einen größten gemeinsamen Teiler t > 1 haben, dann wird die Vertauschung von z i := m/t und z j = 0 nicht erkannt.

28 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 28 Kann man Einzel- und Vertauschungsfehler erkennen? 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 w 1, w 2,...., w n. Wenn C alle Einzelfehler erkennt, müssen nach alle Gewichte ungerade sein, da sie sonst nicht teilerfremd zu m wären. Also sind die Differenzen w i –w i+1 alle gerade. Daher kann C nach nicht alle Vertauschungsfehler an aufeinanderfolgenden Stellen erkennen. Beispiel: Dezimale Paritätscodes (m = 10) erkennen nie alle Einzel- fehler und alle Vertauschungsfehler an aufeinanderfolgenden Stellen 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 w 1, w 2,...., w n. Wenn C alle Einzelfehler erkennt, müssen nach alle Gewichte ungerade sein, da sie sonst nicht teilerfremd zu m wären. Also sind die Differenzen w i –w i+1 alle gerade. Daher kann C nach nicht alle Vertauschungsfehler an aufeinanderfolgenden Stellen erkennen. Beispiel: Dezimale Paritätscodes (m = 10) erkennen nie alle Einzel- fehler und alle Vertauschungsfehler an aufeinanderfolgenden Stellen.

29 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 29 Der 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 ) 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 ) 4. Prüfsymbol ISBN

30 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 30 Berechnung des ISBN-Prüfsymbols Sei a 1 a 2 a 3... a 9 a 10 eine ISBN. Das Prüfsymbol a 10 wird so bestimmt, dass die Zahl 10 a a a a a a a a a a 10 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 ? berechnen wir die Zahl = 235. Die nächste Elferzahl ist 242, also muss das Prüfsymbol 7 sein. Die komplette ISBN lautet also Sei a 1 a 2 a 3... a 9 a 10 eine ISBN. Das Prüfsymbol a 10 wird so bestimmt, dass die Zahl 10 a a a a a a a a a a 10 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 ? berechnen wir die Zahl = 235. Die nächste Elferzahl ist 242, also muss das Prüfsymbol 7 sein. Die komplette ISBN lautet also

31 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 31 Wie gut ist der ISBN-Code? 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: {(a 1,..., a 10 ) 10 a a a a a a a 10 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 Z 11 * = {1, 2,..., 10} ist, liegen alle Gewichte und alle Differenzen von je zwei Gewichten in Z 11 *. Nach und werden daher alle Einzelfehler und beliebige Vertau- schungsfehler erkannt 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: {(a 1,..., a 10 ) 10 a a a a a a a 10 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 Z 11 * = {1, 2,..., 10} ist, liegen alle Gewichte und alle Differenzen von je zwei Gewichten in Z 11 *. Nach und werden daher alle Einzelfehler und beliebige Vertau- schungsfehler erkannt.

32 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 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.

33 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 33 Hamming-Abstand Der zentrale Begriff der Codierungstheorie ist der des Hamming- Abstandes. Seien v = (v 1,..., v n ), w = (w 1,..., w n ) 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 | v i w i }|. 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 = (v 1,..., v n ), w = (w 1,..., w n ) 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 | v i w i }|. Oft wird d auch als Hamming-Abstand bezeichnet (zu Ehren eines der Gründerväter der Codierungstheorie Richard W. Hamming).

34 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 34 Der Hamming-Abstand als Metrik Der Hamming-Abstand d trägt den Namen Abstand zu Recht: 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: 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).

35 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 35 Nachweis 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).

36 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 36 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 S r (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 S r (v) := {x V | d(x, v) r} die Kugel vom Radius r um den Mittelpunkt v. Man spricht dabei auch von Hammingkugeln.

37 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 37 t-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.

38 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 38 Lemma über Hammingkugeln 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 S t (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 S t (c) S t (c') mit c, c' C, c c. Dann ist d(v, c) t und d(v, c') t: Widerspruch zu (a) 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 S t (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 S t (c) S t (c') mit c, c' C, c c. Dann ist d(v, c) t und d(v, c') t: Widerspruch zu (a).

39 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 39 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 S t (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.

40 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 40 Das 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.

41 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 41 Beispiel Die folgenden 16 Vektoren aus V = {0,1} 7 bilden einen 1-fehlerkorri- gierenden Code: Die folgenden 16 Vektoren aus V = {0,1} 7 bilden einen 1-fehlerkorri- gierenden Code:

42 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 42 Lineare 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.

43 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 43 Generatormatrix Erster Vorteil linearer Codes: Man braucht nur eine Basis von C zu kennen. Statt alle 2 k Vektoren von C zu speichern, genügt es, die k Basisvektoren zu speichern. Sei c 1,..., c k eine Basis eines linearen [n, k]-Codes C. Dann heißt die k×n-Matrix G, deren i-te Zeile der Basisvektor c i 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 2 k Vektoren von C zu speichern, genügt es, die k Basisvektoren zu speichern. Sei c 1,..., c k eine Basis eines linearen [n, k]-Codes C. Dann heißt die k×n-Matrix G, deren i-te Zeile der Basisvektor c i ist, eine Generatormatrix von C. Beispiel. Eine Generatormatrix des obigen Beispielcodes (Folie 41) ist G =

44 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 44 Minimalgewicht 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} 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} 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.

45 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 45 Beweis 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 c 0 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 c 0 := 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 c 0 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 c 0 := c–c' C. Damit ist alles gezeigt.

46 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 46 Dualer 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 = (c 1,..., c n ) und v = (v 1,..., v n ) erklärt durch c v = c 1 v 1 + c 2 v c n v n. Wenn c v = 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 | c v = 0 für alle c C}; dabei ist das innere Produkt c v der Vektoren c = (c 1,..., c n ) und v = (v 1,..., v n ) erklärt durch c v = c 1 v 1 + c 2 v c n v n. Wenn c v = 0 ist, so sagt man auch, dass c und v orthogonal sind.

47 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 47 Dimensionsformel für den dualen Code 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 c 1,.., c k von C. Dann gilt: C = {v V | c i v = 0, i = 1,..., k}, d.h. C besteht aus den Lösungen v = (v 1,..., v n ) 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 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 c 1,.., c k von C. Dann gilt: C = {v V | c i v = 0, i = 1,..., k}, d.h. C besteht aus den Lösungen v = (v 1,..., v n ) 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.

48 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 48 Satz vom Bidualcode 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 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.

49 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 49 Kontrollmatrix 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) := v H T, wobei H T 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) := v H T, wobei H T die zur Kontrollmatrix H transponierte Matrix ist. Ein Syndrom ist also ein binärer Vektor der Länge n–k.

50 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 50 Satz über die Kontrollmatrix 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 H T = 0 v ist orthogonal zu allen Vektoren einer Basis von C v C v C wegen C = C 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 H T = 0 v ist orthogonal zu allen Vektoren einer Basis von C v C v C wegen C = C.

51 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 51 Das Syndrom hängt nur von der Nebenklasse ab 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 H T = w H T v H T – w H T = 0 (v – w) H T = 0 v – w C (nach 1.4.6) v + C = w + C (Kriterium für Gleichheit von Nebenklassen) 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 H T = w H T v H T – w H T = 0 (v – w) H T = 0 v – w C (nach 1.4.6) v + C = w + C (Kriterium für Gleichheit von Nebenklassen).

52 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 52 Eindeutigkeit 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 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 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.

53 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 53 Beweis 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.

54 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 54 Decodieralgorithmus 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.

55 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 55 Syndrom-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.

56 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 56 Beispiel 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 , , ,... Zu allen acht Nebenklassenanführern v bestimmen wir die Syndrome s(v) = v H T 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 , , ,... Zu allen acht Nebenklassenanführern v bestimmen wir die Syndrome s(v) = v H T und stellen folgende Liste auf.

57 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 57 Beispiel (Fortsetzung) NebenklassenanführerSyndrom Wird z.B. x = empfangen, so berechnet man s(x) = 110. Danach bestimmt man aus der Liste den Fehlervektor e = ; als Codewort ergibt sich c = x + e = = NebenklassenanführerSyndrom Wird z.B. x = empfangen, so berechnet man s(x) = 110. Danach bestimmt man aus der Liste den Fehlervektor e = ; als Codewort ergibt sich c = x + e = =

58 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 58 Hamming-Codes Sei r N. Sei H eine binäre r×(2 r – 1)-Matrix, deren Spalten sämt- liche von 0 verschiedenen binären r-Tupel sind. Sei n := 2 r – 1. Der Hamming-Code der Länge n ist definiert als Ham(r) := {c = (c 1,..., c n ) {0, 1} n | c H T = o}, das heißt, genau diejenigen Vektoren c sind Codewörter von Ham(r), für die c H T 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 2 r – 1 – r. Ham(r) ist also ein linearer [2 r – 1, 2 r – 1 – r]-Code. Sei r N. Sei H eine binäre r×(2 r – 1)-Matrix, deren Spalten sämt- liche von 0 verschiedenen binären r-Tupel sind. Sei n := 2 r – 1. Der Hamming-Code der Länge n ist definiert als Ham(r) := {c = (c 1,..., c n ) {0, 1} n | c H T = o}, das heißt, genau diejenigen Vektoren c sind Codewörter von Ham(r), für die c H T 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 2 r – 1 – r. Ham(r) ist also ein linearer [2 r – 1, 2 r – 1 – r]-Code.

59 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 59 Hamming-Codes sind 1-fehlerkorrigierend 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 H T = 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)) 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 H T = 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.

60 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 60 Perfekte 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 S t (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 S t (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.

61 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 61 Kugelpackungsgrenze Lemma. Sei C V = {0, 1} n ein 1-fehlerkorrigierender Code. Dann gilt |C| mit Gleichheit genau dann, wenn C perfekt ist Korollar. Jeder perfekte 1-fehlerkorrigierende Code C {0, 1} n hat eine Länge n der Form n = 2 r – 1. Beweis des Korollars. Aus |C| (n + 1) = 2 n folgt, dass n + 1 ein Teiler von 2 n sein muss Lemma. Sei C V = {0, 1} n ein 1-fehlerkorrigierender Code. Dann gilt |C| mit Gleichheit genau dann, wenn C perfekt ist Korollar. Jeder perfekte 1-fehlerkorrigierende Code C {0, 1} n hat eine Länge n der Form n = 2 r – 1. Beweis des Korollars. Aus |C| (n + 1) = 2 n folgt, dass n + 1 ein Teiler von 2 n sein muss.

62 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 62 Beweis des Lemmas In einer Kugel S 1 (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 |S 1 (c)| = 1 + n. Da C ein 1-fehlerkorrigierender Code ist, sind die Kugeln S 1 (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 2 n Vektoren hat, gilt offenbar |C| (n + 1) 2 n. 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 S 1 (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 |S 1 (c)| = 1 + n. Da C ein 1-fehlerkorrigierender Code ist, sind die Kugeln S 1 (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 2 n Vektoren hat, gilt offenbar |C| (n + 1) 2 n. Gleichheit gilt genau dann, wenn jeder Vektor aus V in einer Kugel vom Radius 1 um ein Codewort liegt, also wenn C perfekt ist.

63 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 63 Hamming-Codes sind perfekt Satz. Die Hamming-Codes sind perfekte 1-fehlerkorrigierende Codes. Beweis. Da dim(Ham(r)) = 2 r – 1 – r ist, gilt |Ham(r)| =. Daraus ergibt sich mit n = 2 r – 1: |Ham(r)| (n + 1) = 2 r = = 2 n. Nach ist Ham(r) also perfekt Satz. Die Hamming-Codes sind perfekte 1-fehlerkorrigierende Codes. Beweis. Da dim(Ham(r)) = 2 r – 1 – r ist, gilt |Ham(r)| =. Daraus ergibt sich mit n = 2 r – 1: |Ham(r)| (n + 1) = 2 r = = 2 n. Nach ist Ham(r) also perfekt.

64 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 64 Syndrom-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,..., 2 r – 1 und ordnen die Spalten so an, dass die i-te Spalte s i die Zahl i darstellt 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 – e i C ist. (Dabei ist e i 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,..., 2 r – 1 und ordnen die Spalten so an, dass die i-te Spalte s i die Zahl i darstellt 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 – e i C ist. (Dabei ist e i 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.

65 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 65 Decodieralgorithmus Beweis. Da Ham(r) perfekt ist, hat jeder Vektor v V\C die Form v = c + e i für ein geeignetes Codewort c. Damit ergibt sich s(v) = v H T = (c + e i ) H T = c H T + e i H T = e i H T = 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 e i + x = c. Beweis. Da Ham(r) perfekt ist, hat jeder Vektor v V\C die Form v = c + e i für ein geeignetes Codewort c. Damit ergibt sich s(v) = v H T = (c + e i ) H T = c H T + e i H T = e i H T = 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 e i + x = c.

66 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 66 Erweiterter 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 Beispiel: Ham(3)* besteht aus nebenstehenden Codewörtern der Länge 8:

67 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 67 Eigenschaften des erweiterten Hamming-Codes Satz. Ham(r)* ist ein linearer [2 r, 2 r – 1 – r]-Code mit Minimal- abstand 4. Beweis. 1.) Ham(r)* ist ein Unterraum von V* = GF : Seien c 1 *, c 2 * Ham(r)*, und seien c 1 und c 2 die entsprechenden Codewörter aus Ham(r). Da c 1 * + c 2 * in den ersten 2 r – 1 Stellen mit c 1 + c 2 übereinstimmt, müssen wir nur folgendes zeigen: die letzte Stelle von c 1 * + c 2 * ist 1 wenn w(c 1 + c 2 ) ungerade ist und 0 sonst. Wenn c 1 + c 2 ungerades Gewicht hat, dann können wir o.B.d.A. annehmen, dass c 1 ungerades Gewicht hat und c 2 gerades Gewicht. Daher ist die letzte Stelle von c 1 * gleich 1 und die letzte Stelle von c 2 * gleich 0. Also ist die letzte Stelle von c 1 * + c 2 * gleich Satz. Ham(r)* ist ein linearer [2 r, 2 r – 1 – r]-Code mit Minimal- abstand 4. Beweis. 1.) Ham(r)* ist ein Unterraum von V* = GF : Seien c 1 *, c 2 * Ham(r)*, und seien c 1 und c 2 die entsprechenden Codewörter aus Ham(r). Da c 1 * + c 2 * in den ersten 2 r – 1 Stellen mit c 1 + c 2 übereinstimmt, müssen wir nur folgendes zeigen: die letzte Stelle von c 1 * + c 2 * ist 1 wenn w(c 1 + c 2 ) ungerade ist und 0 sonst. Wenn c 1 + c 2 ungerades Gewicht hat, dann können wir o.B.d.A. annehmen, dass c 1 ungerades Gewicht hat und c 2 gerades Gewicht. Daher ist die letzte Stelle von c 1 * gleich 1 und die letzte Stelle von c 2 * gleich 0. Also ist die letzte Stelle von c 1 * + c 2 * gleich 1.

68 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 68 Beweis (Fortsetzung) Wenn c 1 + c 2 gerades Gewicht hat, dann haben entweder c 1 und c 2 beide gerades oder beide ungerades Gewicht. In jedem Fall haben c 1 * und c 2 * den gleichen letzten Eintrag und daher ist die letzte Stelle von c 1 * + c 2 * gleich 0. Also ist in beiden Fällen c 1 * + c 2 * 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.

69 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 69 Kontrollmatrix des erweiterten Hamming-Codes 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* = 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* =

70 Kapitel 1: Codierungstheorie © Zschiegner April 2002 Seite 70 Beweis Der zu Ham(r)* duale Code ist nach ein [2 r, r + 1]-Code; seine Kontrollmatrix ist also eine (r + 1)×2 r -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.


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

Ähnliche Präsentationen


Google-Anzeigen