Prof. Dr. Gerhard Berendt Mathematische Grundlagen der Codierung / Endliche Strukturen SS 2005 Tutorial 1: Erste Überlegungen zu Fehler-erkennenden Codierungen / S. 1 von 4 Fehlertypen bei Nachrichtenübertragungen. Codierungen können zur Erkennung und ggf. Korrektur von Fehlern bei der Übertragung von Nachrichten benutzt werden. Als Fehlertypen können z.B. auftreten (die angegebenen relativen Häufigkeiten wurden empirisch ermittelt): Fehlertyp relative Häufigkeit in % Verwechslung einer Ziffer (Einzelfehler) 79 Transpositionen (Vertauschung benachbarter Ziffern) 10,2 Sprungtranspositionen (Vertauschung über eine Ziffer hinweg) 0,8 Zwillingsfehler (aa → bb) 0,6 phonetische Fehler (abhängig von der verwendeten Sprache) 0,5 Sprung-Zwillingsfehler (aca → bcb) 0,3 übrige Fehler (zufällige Fehler, Fehlerbüschel) 8,6 Bei jeder Fehlererkennung (und erst recht Fehlerkorrektur) muß die Nachricht durch Erhöhung der Redundanz erweitert werden. Dabei muß der Grad an gewonnener Sicherheit gegenüber dem erhöhten Aufwand abgewogen werden. Je nach dem vermuteten Fehlertyp bieten sich mehr oder weniger komplexe Verfahren zur Fehlerkontrolle an. In diesem Tutorial werden nur Verfahren diskutiert, die einfache Eigenschaften von Restklassen der ganzen Zahlen verwenden. Fehlererkennung durch Prüfziffer. Ein einfaches Verfahren zur Erkennung von Fehlern in einem Ziffernblock a1 ... an besteht darin, dem Block eine Prüfziffer an+1 derart hinzuzufügen, dass für den verlängerten Block eine Relation des Typs n 1 wi ai 0 mod m i 1 für einen geeigneten Modul m und vorgegebene Gewichte wi gilt. Damit das Auftreten eines Fehlers in den ai erkannt werden kann, dürfen die wi keine Nullteiler Prof. Dr. Gerhard Berendt Mathematische Grundlagen der Codierung / Endliche Strukturen SS 2005 Tutorial 1: Erste Überlegungen zu Fehler-erkennenden Codierungen / S. 2 von 4 in der Restklasse Z / mZ und die ai und wi müssen sämtlich kleiner als m sein. Verwendet man einen Primzahlmodul (wie z.B. beim ISBN-Code), dann ist die Bedingung fehlender Nullteiler automatisch erfüllt. Drei Beispiele: ISBN, EAN und der geometrische Modulo 11 - Code. Die zu besprechenden Beispiele sind Prüfziffer-basiert: Der Nachricht (einer Folge von Ziffern) wird eine Prüfziffer hinzugefügt, die sich eindeutig aus den eigentlichen Ziffern der Nachricht ergibt. Weicht diese Prüfziffer beim Empfänger von der ursprünglichen Prüfziffer ab, dann ist bei der Übertragung ein Fehler aufgetreten. Je nach Konstruktion der Prüfziffer und verwendetem Zahlenbereich kann ggf. noch festgestellt werden, wo der (und ggf. welcher) Fehler entstanden ist. 1. Der ISBN-Code (International Standard Book Number). Aus dem ISBN-Code eines Buches lassen sich Land, Verlag und Buch identifizieren. Er hat die Form ISBN a1 – a2 a3 a4 – a5 a6 a7 a8 a9 – a10 . Die Ziffern a1 bis a9 können die Werte 0 bis 9 annehmen; sie haben die folgende Bedeutung: a1 : Land , a2 a3 a4 : Verlag, a5 a6 a7 a8 a9 : Buchnummer; a10 kann als Prüfziffer ebenfalls diese Werte besitzen, kann jedoch (s.u.) auch den Wert 10 annehmen und wird dann als 'X ' geschrieben. a10 wird wie folgt bestimmt: 9 a10 k ak mod 11. k 1 Das ist gleichbedeutend damit, dass 10 k ak 0 mod 11 k 1 für den vollständigen Code gelten muß. Beispiel: Der Code "3 – 540 – 05303" wird ergänzt durch die Ziffer Prof. Dr. Gerhard Berendt Mathematische Grundlagen der Codierung / Endliche Strukturen SS 2005 Tutorial 1: Erste Überlegungen zu Fehler-erkennenden Codierungen / S. 3 von 4 a10 = 3 + 25 + 34 + 40 +50 + 65 +73 + 80 + 93 = 103 mod 11 4 mod 11 . (Läge etwa der Code "3 – 540 – 06303" vor, dann wäre die Prüfziffer a10 = 109 mod 11 10 mod 11, und würde als X geschrieben.) Würde der ISBN-Code "3 – 540 – 05303 – 4" also z.B. als "3 – 540 – 06303 – 4" übermittelt, dann weist dies auf einen Fehler in der Nummer hin. Satz: Der ISBN-Code entdeckt a) einen Einzelfehler und b) einen Doppelfehler, der durch die Vertauschung zweier Ziffern entsteht. (Der Code entdeckt mithin nach der empirischen Tabelle 90% aller auftretenden Fehler.) Beweis: a) Sei x = x1 ...x10 das gesendete Codewort, und sei y = y1 ...y10 das gleiche Wort wie x , mit Ausnahme dessen, dass die Ziffer xj als xj + a mit a 0 empfangen wurde. Dann ist 10 10 k 1 k 1 k yk k xk j a 0 mod 11 j a mod 11 j a mod 11 0 mod11 , da j und a nicht gleich Null sind. b) Sei nun y das gleiche Wort wie x , mit Ausnahme dessen, dass xj und xi vertauscht sind. Dann ist 10 10 k 1 k 1 k yk k xk ( j i) xi (i j ) x j ( j i)( xi x j ) 0 mod 11, falls i j und xi xj . Bemerkung: Zu beachten ist, dass hier beim Beweis wesentlich verwendet wurde, dass der Restklassenring modulo 11 ein Körper ist (11 ist Primzahl!), und daher in diesem Körper keine Nullteiler existieren. 2. Der EAN-Code (Europäische Artikel Nummer). Hier besteht jeder Code aus 13 Ziffern, von denen die letzte eine Prüfziffer ist: 6 a13 ( (3 a2 k a2 k 1 ) mod 10 . k 1 Prof. Dr. Gerhard Berendt Mathematische Grundlagen der Codierung / Endliche Strukturen SS 2005 Tutorial 1: Erste Überlegungen zu Fehler-erkennenden Codierungen / S. 4 von 4 Beispiel: Ein Artikel hat die EAN "4 – 008400 – 141527" . Die Prüfziffer ergibt sich zu - (1 4 + 30 + 10 + 38 + 14 + 30 + 10 + 31+ 14 + 31 + 15 + 32) 7 mod 10 . Satz: Der EAN-Code erkennt einen Einfach-Fehler. Beweis: als Übung. Angenommen, der Scanner liefert die EAN "4 – 08400 – 142527". Die daraus berechnete Prüfziffer wäre - (1 4 + 30 + 10 + 38 + 14 + 30 + 10 + 31+ 14 + 32 + 15 + 32) 0 mod 10 im Gegensatz zur gemessenen Ziffer 7. Also liegt ein Einfach-Fehler vor. Bemerkung: Damit der Fehler bemerkt wird (s.o), ist es erforderlich, dass die auftretenden, von 1 verschiedenen Gewichte, mit denen die einzelnen Ziffern versehen werden (hier also die 3), teilerfremd zum Modul 10 sind (die Restklasse modulo 10 ist kein Körper, enthält also Nullteiler!). 3. Der geometrische Modulo 11- Code. Dieser Code benutzt als Gewichte für die Nachrichtenziffern a1 bis an die Potenzen modulo 11 eines Elements aus der Restklasse Z / 11 Z, z.B. die Potenzen von 2: n 1 2n 1 k ak 0 mod 11 . k 1 Da die Potenzen von 2 modulo 11 alle Elemente der Restklasse durchlaufen, lassen sich damit (Beweis!) alle in der eingangs angeführten Tabelle angegebenen Fehler außer den zufälligen Fehlern erkennen.