3 Codierung ... 3.3 Code-Sicherung. 3.3.1 Stellendistanz und Hamming-Distanz. 60 3 Codierung



Ähnliche Dokumente
Grundlagen Digitaler Systeme (GDS)

Prüfziffern. Man versucht, solche Fehler zu erkennen, indem man der Zahl eine weitere Ziffern, die sog. Prüfziffern, hinzufügt.

Grundlagen der Technischen Informatik. 2. Übung

Theoretische Grundlagen der Informatik WS 09/10

Binär Codierte Dezimalzahlen (BCD-Code)

Binärdarstellung von Fliesskommazahlen

Ein polyadisches Zahlensystem mit der Basis B ist ein Zahlensystem, in dem eine Zahl x nach Potenzen von B zerlegt wird.

Theoretische Informatik SS 04 Übung 1

0 Im folgenden sei die Wortlänge gleich 8 (d. h.: es wird mit Bytes gearbeitet).

Modul 114. Zahlensysteme

Anzahl Pseudotedraden: Redundanz: Weitere Eigenschaften?

Kapitel 3. Codierung von Text (ASCII-Code, Unicode)

Professionelle Seminare im Bereich MS-Office

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Zahlensysteme: Oktal- und Hexadezimalsystem

Vertiefungsstoff zum Thema Darstellung von Zahlen

Einführung in die Kodierungstheorie

LU-Zerlegung. Zusätze zum Gelben Rechenbuch. Peter Furlan. Verlag Martina Furlan. Inhaltsverzeichnis. 1 Definitionen.

4. Woche Decodierung; Maximale, Perfekte und Optimale Codes. 4. Woche: Decodierung; Maximale, Perfekte und Optimale Codes 69/ 140

Codierungstheorie Rudolf Scharlau, SoSe

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Zeichen bei Zahlen entschlüsseln

9 Codes. Hochschule für Angewandte Wissenschaften Hamburg FACHBEREICH ELEKTROTECHNIK UND INFORMATIK DIGITALTECHNIK 9-1

1 Mathematische Grundlagen

Grundlagen der Informatik

Primzahlen und RSA-Verschlüsselung

DEUTSCHE BUNDESBANK Seite 1 Z Prüfzifferberechnungsmethoden zur Prüfung von Kontonummern auf ihre Richtigkeit (Stand: September 2015)

Frank Weinhold Professur VSR Fakultät für Informatik TU Chemnitz Mai 2011

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

Ermittlung von IBAN und BIC anhand von Kontonummer und Bankleitzahl in der Sparkassen-Finanzgruppe

Englische Division. ... und allgemeine Hinweise

Einführung in die Programmierung

Lineare Gleichungssysteme

BITte ein BIT. Vom Bit zum Binärsystem. A Bit Of Magic. 1. Welche Werte kann ein Bit annehmen? 2. Wie viele Zustände können Sie mit 2 Bit darstellen?

Übungsaufgaben. - Vorgehensweise entsprechend dem Algorithmus der schriftlichen Multiplikation

2. Negative Dualzahlen darstellen

Informationsblatt Induktionsbeweis

Grundlagen der Informatik (BSc) Übung Nr. 5

Die allerwichtigsten Raid Systeme

Codierung. Codierung. EAN Europäische Artikelnummer Ziffern 1 und 2 codieren das Hersteller-Land. Ziffer 2 bis 12 codieren Händler und Ware

Single Parity check Codes (1)

11. Das RSA Verfahren und andere Verfahren

Zahlensysteme Seite -1- Zahlensysteme

2 Darstellung von Zahlen und Zeichen

Hinweise zum Ausfüllen der Zeiterfassung

Austausch- bzw. Übergangsprozesse und Gleichgewichtsverteilungen

15 Optimales Kodieren

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

SUDOKU - Strategien zur Lösung

Technische Informatik - Eine Einführung

Codierungsverfahren SS Reed-Solomon-Codes zur Mehrblock-Bündelfehler-Korrektur

A1.7: Entropie natürlicher Texte

Organisation. Was kommt zum Test? Buch Informatik Grundlagen bis inkl. Kapitel 7.4 Wissensfragen und Rechenbeispiele

Hilfe zur Urlaubsplanung und Zeiterfassung

Zahlenwinkel: Forscherkarte 1. alleine. Zahlenwinkel: Forschertipp 1

4. AUSSAGENLOGIK: SYNTAX. Der Unterschied zwischen Objektsprache und Metasprache lässt sich folgendermaßen charakterisieren:

Ohne Fehler geht es nicht Doch wie viele Fehler sind erlaubt?

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

a n auf Konvergenz. Berechnen der ersten paar Folgenglieder liefert:

Grundlagen der Technischen Informatik. Codierung und Fehlerkorrektur. Kapitel 4.2

Zahlenmauern. Dr. Maria Koth. Ausgehend von dieser einfachen Bauvorschrift ergibt sich eine Vielzahl an möglichen Aufgabenstellungen.

Info zum Zusammenhang von Auflösung und Genauigkeit

Dossier: Rechnungen und Lieferscheine in Word

FH Jena Prüfungsaufgaben Prof. Giesecke FB ET/IT Binäre Rechenoperationen WS 11/12

Tipp III: Leiten Sie eine immer direkt anwendbare Formel her zur Berechnung der sogenannten "bedingten Wahrscheinlichkeit".

Einfügen von Bildern innerhalb eines Beitrages

Excel Pivot-Tabellen 2010 effektiv

Das Bundesministerium für Inneres gibt im Folgenden wie bei früheren Wahlen unvorgreiflich des Prüfungs- und Entscheidungsrechts der Sprengel-,

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Lineare Gleichungssysteme

Aufgaben zu Stellenwertsystemen

EDV-Fortbildung Kombi-Schulung Word-Excel Modul Excel. Informationen zum Programm. Die Programmoberfläche von Excel

Jede Zahl muss dabei einzeln umgerechnet werden. Beginnen wir also ganz am Anfang mit der Zahl,192.

Synchronisierung. Kommunikationstechnik, SS 08, Prof. Dr. Stefan Brunthaler 73

Zahlensysteme. Zahl Stellenwert Zahl Zahl =

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter

Wissen INFORMATIONSMATERIALIEN. Fach Mathematik/Informatik. Die Europäische Artikelnummer (EAN)

Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer

QR Code. Christina Nemecek, Jessica Machrowiak

QM: Prüfen -1- KN

OECD Programme for International Student Assessment PISA Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

EINFACHES HAUSHALT- KASSABUCH

Güte von Tests. die Wahrscheinlichkeit für den Fehler 2. Art bei der Testentscheidung, nämlich. falsch ist. Darauf haben wir bereits im Kapitel über

Die Subnetzmaske/Netzwerkmaske

9 Multiplexer und Code-Umsetzer

1. Woche Einführung in die Codierungstheorie, Definition Codes, Präfixcode, kompakte Codes

Zahlen und das Hüten von Geheimnissen (G. Wiese, 23. April 2009)

Skript und Aufgabensammlung Terme und Gleichungen Mathefritz Verlag Jörg Christmann Nur zum Privaten Gebrauch! Alle Rechte vorbehalten!

Formelsammlung. Wahrscheinlichkeit und Information

7 Rechnen mit Polynomen

Informationssysteme Gleitkommazahlen nach dem IEEE-Standard 754. Berechnung von Gleitkommazahlen aus Dezimalzahlen. HSLU T&A Informatik HS10

BSZ für Elektrotechnik Dresden. Zahlenformate. Dr.-Ing. Uwe Heiner Leichsenring

Das große ElterngeldPlus 1x1. Alles über das ElterngeldPlus. Wer kann ElterngeldPlus beantragen? ElterngeldPlus verstehen ein paar einleitende Fakten

Hinweise zum Übungsblatt Formatierung von Text:

3. LINEARE GLEICHUNGSSYSTEME

8. Quadratische Reste. Reziprozitätsgesetz

Der Zwei-Quadrate-Satz von Fermat

Bedienungsanleitung Rückabwicklungsrechner

Anwendungshinweise zur Anwendung der Soziometrie

Transkript:

60 3 Codierung 3 Codierung... 3.3 Code-Sicherung Oft wählt man absichtlich eine redundante Codierung, so dass sich die Code-Wörter zweier Zeichen (Nutzwörter) durch möglichst viele binäre Stellen von allen anderen Nutzwörtern unterscheiden. Zwischen den Nutzwörtern sind also eine Anzahl von Wörtern eingeschoben, die kein Zeichen repräsentieren und demnach nur infolge einer Störung entstehen können. Dementsprechend werden sie als Fehlerwörter bezeichnet. Ein Blick auf den in Tabelle 3.1 aufgelisteten BCD-Code, der die Ziffern 0 bis 9 mit vier binären Stellen codiert, zeigt, dass neben den zehn Nutzwörtern 6 Fehlerwörter existieren, die sog. Pseudo-Tetraden. So entspricht beispielsweise dem Code-Wort 1011 keine Ziffer, es muss demnach (möglicherweise bei der Übertragung) ein Fehler aufgetreten sein. Der richtige Code könnte also, wenn man von einem Ein-Bit-Fehler ausgeht, 0011 oder 1001 gelautet haben, die anderen beiden Möglichkeiten, 1111 und 1010 scheiden aus, da es sich dabei ebenfalls um Fehlerwörter handelt. Die redundante Codierung erlaubt daher die Erkennung und in günstigen Fällen auch die Behebung von Fehlern, die infolge von Störungen aufgetreten sind. 3.3.1 Stellendistanz und Hamming-Distanz Definition der Hamming-Distanz Ein Maß für die Störsicherheit, also für die Fehlererkennung und Fehlerkorrektur eines Codes ist die Hamming-Distanz h, die als die minimale paarweise Stellendistanz eines Codes definiert ist [Ham50]. Als Stellendistanz d(x,y) wird dabei die Anzahl der Stellen bezeichnet, in denen sich zwei gleich lange Wörter x und y unterscheiden. Für unterschiedlich lange Code-Wörter ist die Stellendistanz nicht definiert. Die Stellendistanz ist auch ein Maß für die bei einer Übertragung eines Wortes entstandenen Fehler. Wird beispielsweise ein binäres Wort x gesendet und y empfangen, so gibt d(x,y) die Anzahl der fehlerhaften Binärstellen von y an; bei korrekter Übertragung ist x=y und daher d(x,y)=0. Die Stellendistanz erfüllt alle Forderungen, die an eine Distanz (Metrik) in einem linearen Raum gestellt werden, nämlich: d(x,x) = 0 d(x,y) = d(y,x) d(x,z) < d(x,y)+d(y,z) Dreiecksungleichung Es besteht damit eine Analogie zu anderen Distanzen, z.b. zu der in der Geometrie üblicherweise verwendeten Euklid schen Distanz zwischen zwei Punkten A und B im Raum. Ein Code hat offensichtlich mindestens die Hamming-Distanz h=1, da sonst zwei Code- Wörter übereinstimmen würden. Beträgt die Hamming-Distanz h=2, so lassen sich Fehler, die ein einzelnes Bit betreffen, als Fehler erkennen, aber nicht korrigieren. Unter gewissen Bedingungen können Fehler aber nicht nur erkannt, sondern auch korrigiert werden. Bei gegebener Hamming-Distanz h gilt:

3 Codierung 61 Bedingungen für die Erkennbarkeit und Korrigierbarkeit von Fehlern: Sind maximal h-1 Bit in einem Wort fehlerhaft, so kann dies erkannt werden. Sind maximal (h-1)/2 Bit fehlerhaft, so können diese Fehler korrigiert werden. Bei h=1 können also fehlerhafte Binärstellen prinzipiell nicht erkannt werden, da solche Fehler wieder zu einem gültigen Codewort führen. Bei h=2 können 1-Bit-Fehler zwar erkannt, aber nicht korrigiert werden. Bei h=3 und h=4 können 1-Bit-Fehler korrigiert werden, bei h=5 und h=6 auch 2-Bit-Fehler, etc. Die Korrektur erfolgt dann durch Ersetzen des erkannten Fehlerworts durch dasjenige Nutzwort mit der geringsten Stellendistanz zum Fehlerwort. Beispiele zur Stellendistanz a) Gegeben seien die Ziffern 1 bis 4 in ihrer binären Codierung: 1 = 001, 2 = 010, 3 = 011, 4 = 100 Man erhält daraus folgende Stellendistanzen d von je zwei Code-Wörtern: d(010,001) = 2 d(011,001) = 1 d(011,010) = 1 d(100,001) = 2 d(100,010) = 2 d(100,011) = 3 Die Berechnung der Stellendistanzen lässt sich durch folgendes Matrix-Schema erleichtern und formalisieren: 001 010 011 100 001 - - - - 010 2 - - - 011 1 1 - - 100 2 2 3 - Die Hamming-Distanz als kleinste Stellendistanz ist in diesem Beispiel h=1. Fehler lassen sich hier nicht in jedem Fall erkennen, da es offenbar Nutzwörter gibt, zwischen denen keine Fehlerwörter liegen. b) Es ist in diesem Beispiel möglich, einen von der in Punkt a) verwendeten binären Zifferncodierung etwas abweichenden Code anzugeben, der bei gleicher Wortlänge die Hamming-Distanz h=2 aufweist und daher vom Standpunkt der Code-Sicherheit überlegen ist, da nun eine eindeutige Fehlererkennung von Ein-Bit-Fehlern möglich ist. Der modifizierte Code lautet: 1 = 000, 2 = 011, 3 = 101, 4 = 110 Man erhält daraus folgende Stellendistanzen d von je zwei Code-Wörtern: 000 011 101 110 000 - - - - 011 2 - - - 101 2 2 - - 110 2 2 2 - Die Hamming-Distanz ist also in der Tat h=2. Die obigen Beispiele verdeutlichen das sog. Code-Überdeckungsproblem, das folgendermaßen lautet: Wie kann man einen optimalen Code mit vorgegebener Hamming-Distanz generieren? Unter optimal kann z.b. verstanden werden, dass die Code-Wörter so kurz wie möglich sein sollen. Auf eine allgemeine Lösung kann hier nicht eingegangen werden, spezielle Lösungen werden weiter unten vorgestellt.

62 3 Codierung 3.3.2 m-aus-n-codes Neben den bereits genannten Tetraden-Codes (z.b. dem BCD- und dem Stibitz-Code), bei denen die Pseudo-Tetraden als Fehler erkennbar waren, verwendet man vielfach m-aus-n- Codes. Dies sind Block-Codes mit der Wortlänge n, bei denen in jedem Code-Wort genau m Einsen und dementsprechend n-m Nullen vorkommen. Bei gegebenem m und n gibt es offenbar genau Code-Wörter. n m Da in allen Code-Wörter dieselbe Anzahl von Einsen enthalten sind, müssen sich zwei verschiedene Code-Wörter in mindestens zwei Stellen unterscheiden, so dass die Hamming- Distanz von m-aus-n-codes h=2 ist. Damit sind Ein-Bit-Fehler immer erkennbar, jedoch nicht in jedem Fall korrigierbar. Die folgende Tabelle zeigt zwei Beispiele für m-aus-n-codes. Tabelle 3.3.1: Codierung der Ziffern von 0 bis 9 mit einem 2-aus-5 und einem 1-aus-10-Code. Ziffer 2-aus-5-Code 1-aus-10-Code 0 00011 0000000001 1 00101 0000000010 2 00110 0000000100 3 01001 0000001000 4 01010 0000010000 5 01100 0000100000 6 10001 0001000000 7 10010 0010000000 8 10100 0100000000 9 11000 1000000000 3.3.3 Codes mit Paritäts-Bits Eine häufig verwendete Möglichkeit zur Fehlererkennung und Fehlerkorrektur ist die Einführung der Paritätsprüfung (Parity Check). Man fügt dazu als Paritäts-Bits bezeichnete Zusatz- Bits ein, welche die Anzahl der Einsen (oder Nullen) von Code-Wörtern auf eine gerade Anzahl (gerade Parität, even Parity) oder ungerade Anzahl (ungerade Parität, odd Parity) ergänzen. Ein-Bit-Fehler in einem Code-Wort können damit erkannt, aber nicht korrigiert werden. Die Paritäts-Bits einer Anzahl von Wörtern fasst man zu einer Prüfzeile zusammen. Prüfzeilen und Prüfspalten Mit Hilfe der in Prüfzeilen zusammengefassten Prüfbits lässt sich das Auftreten eines Ein-Bit- Fehler in einem Wort erkennen, man kann aber die Position des fehlerhaften Bits innerhalb des Wortes nicht ermitteln und daher auch nicht korrigieren. Um Ein-Bit-Fehler nicht nur erkennen, sondern auch korrigieren zu können, ergänzt man nach einer Anzahl von k Code- Wörtern (einem Block) konstanter Länge die Anzahl der Einsen (bzw. Nullen) in jeder Zeile auf eine gerade (oder ungerade) Anzahl und fasst diese Prüf-Bits in einem Längsprüfwort, der Prüfspalte zusammen. Abbildung 3.3.1 zeigt die Struktur eines übertragenen Blocks mit Paritäts-Bits in einer Prüfzeile und einer Prüfspalte. Das zusätzliche Prüfbit P in der rechten unteren Ecke des gesamten Blocks wird üblicherweise so gesetzt, dass es die Anzahl der Einsen im gesamten Datenblock auf die gewünschte Parität ergänzt.

3 Codierung 63 MSB Längsprüfwort (Prüfspalte) Block LSB Paritäts-Bits (Prüfzeile) P Abbildung 3.3.1: Prinzipieller Aufbau eines Blocks aus übertragenen Code-Wörtern mit Prüfzeile und Längsprüfwort. Bei der Erkennung und Korrektur von Ein-Bit-Fehlern können nun folgende Möglichkeiten auftreten: 1. Der Fehler tritt im Block auf, also in einem der gesendeten Code-Wörter. Es müssen dann sowohl ein Bit des Längsprüfworts als auch ein Bit des Paritäts-Prüfworts die Parität verletzen. Die Positionen dieser beiden die Parität verletzenden Bits definiert dann die Position des fehlerhaften Bits im Block. Zur Korrektur wird einfach das ermittelte Bit invertiert. Zusätzlich verletzt in diesem Fall auch das Prüfbit P die Parität. 2. Der Fehler tritt in einem der beiden Prüfwörter auf, nicht aber im Bit P. Dies zeigt sich darin, dass eine Paritätsverletzung entweder in der Prüfzeile oder in der Prüfspalte auftritt, aber nicht in beiden gleichzeitig. Da in diesem Fall ein Paritäts-Bit fehlerhaft ist, ist keine Korrektur der Daten erforderlich. 3. Der Fehler tritt in Bit P auf. Da aber weder die Parität der Prüfzeile noch die der Prüfspalte verletzt ist, muss P selbst fehlerhaft sein. Eine Korrektur der Daten ist nicht erforderlich. Durch die Paritäts-Bits wird eine Redundanz eingeführt, die von der Anzahl s der Bits pro Wort und von der Anzahl k der Worte pro Block abhängt. Die Anzahl der Bits des Blocks ist dann k s und die Anzahl der Paritäts-Bits k+s+1. Für die Redundanz ergibt sich daraus: R = (k+s+1)/k [Bit/Wort] Die Redundanz des Codes selbst ist dabei nicht berücksichtigt, sondern nur die durch die Paritätsbits darüber hinaus eingeführte zusätzliche Redundanz. Beispiel Zur binären Codierung des Wortes INFORMATIK wird der ASCII-Code (siehe Tabelle 3.1.2) benützt, wobei die Anzahl der Einsen zu einer geraden Zahl in einem Paritäts-Bit und nach jedem vierten Wort in einem Längsprüfwort ergänzt wird. Bei der Übertragung seien Ein-Bit- Fehler aufgetreten, so dass das Wort ANFORMAPIK empfangen wird. Wie oben beschrieben, lassen sich diese beiden Übertragungsfehler erkennen und korrigieren, das korrekte Wort INFORMATIK lässt sich also wieder restaurieren.

64 3 Codierung Tabelle 3.3.2: Das im ASCII-Zeichensatz codierte Wort INFORMATIK wird mit Paritätsbits und Längsprüfwörtern in gerader Parität seriell übertragen. Die Übertragung erfolgte in Blocks, wobei die beiden ersten Blocks je vier und der dritte Block nur noch zwei Zeichen enthält, er wurde daher mit 0en zur vollen Länge von vier Zeichen aufgefüllt. Es sind zwei Fehler (A statt I in Byte 1 und P statt T in Byte 9) aufgetreten. Diese lassen sich lokalisieren und korrigieren. Die zur Fehleridentifikation führenden Paritäts-Bits sowie die entsprechenden Bits der Längsprüfworte sind durch Pfeile markiert, die fehlerhaft übertragenen Bits sind grau unterlegt. empfangene Längs- empfangene Längs- empfangene Längs- Daten prüfwort Daten prüfwort Daten prüfwort MSB 1 1 1 1 0 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 0 1 1 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 1 0 1 0 0 0 1 LSB 1 0 0 1 0 1 1 1 0 1 1 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 1 1 0 0 0 0 Paritäts-Bits Man findet A N für FO derartige Codes wegen RMAP des rechteckigen Übertragungsschemas I K empfangener in der Literatur auch die Bezeichnung Rechteck-Codes. Text Tetraden I mit drei Paritäts-Bits T Korrekturen Es liegt nun nahe, das Konzept der Paritäts-Bits so zu erweitern, dass man für ein Code- Wort mehr als ein Paritäts-Bit zur Verfügung stellt. Dies hat den Vorteil, dass jedes Wort für sich geprüft werden kann. Als ein Beispiel dafür werden Tetraden mit drei Paritäts-Bits betrachtet: Tabelle 3.3.3: Direkter binärer Tetraden-Code der Ziffern von 0 bis 9 mit drei Paritäts-Bits. Ziffer Code Ziffer Code 0 0000111 5 0101010 1 0001100 6 0110100 2 0010010 7 0111111 3 0011001 8 1000000 4 0100001 9 1001011 In dem oben tabellierten Code sind die vier höherwertigen Bits b6, b5, b4 und b3 direkt binär codierte Ziffern (Tetraden). Die niederwertigen Bits b2, b1, und b0 sind Paritäts-Bits, die nach folgender Regel gebildet werden: b2=1 wenn die Anzahl der Einsen in b6, b5, b4 gerade ist b1=1 wenn die Anzahl der Einsen in b6, b5, b3 gerade ist b0=1 wenn die Anzahl der Einsen in b6, b4, b3 gerade ist Da drei Paritäts-Bits zur Verfügung stehen, können 2 3 =8 Zustände unterschieden werden, nämlich zwischen dem richtigen Code-Wort und Fehlern in den 7 Stellen unterscheiden. Im Falle eines 7-Bit-Codes können demnach Ein-Bit-Fehler erkannt und korrigiert werden. Unter der Annahme, dass alle zehn Ziffern mit derselben Wahrscheinlichkeit w=1/10 auftreten, hat die Entropie den Wert H=ld(1/w)=ld(10) 3.322. Für die Redundanz dieses Codes folgt damit: R = L - H = 7-3.322 = 3.678 [Bit/Zeichen]

3 Codierung 65 Die Hamming-Distanz der Tetraden alleine ist offenbar h=1. Zusammen mit den drei Prüf-Bits wird die Hamming-Distanz des Codes jedoch h=3. Damit können 1-Bit-Fehler erkannt und korrigiert werden, 2-Bit-Fehler können nur erkannt, aber nicht korrigiert werden. Das Schema für die Ermittlung der fehlerhaften Stelle aus den Prüfbits lautet: Tabelle 3.3.4: Zur Lokalisierung des Fehlers mit Hilfe der Prüf-Bits. Aus den ersten drei Zeilen der Tabelle geht hervor: Verletzt nur ein Prüf-Bit die Parität, so ist dieses Prüf-Bit selbst fehlerhaft. In der Tabelle steht r für richtig und f für falsch. Fehlerhaftes Bit b2 b1 b0 0 r r f 1 r f r 2 f r r 3 r f f 4 f r f 5 f f r 6 f f f Eine Weiterentwicklung dieses Konzepts führt auf lineare Codes, die in Kapitel 3.3.5 besprochen werden. 3.3.4 Fehlertolerante Codes Gray-Codes Bei der Erzeugung fehlertoleranter Codes geht man bisweilen einen anderen Weg. Insbesondere bei der Erzeugung von Zifferncodes versucht man, benachbarte Zahlen so zu codieren, dass sie sich in möglichst wenigen Bits, im Idealfall nur durch ein einziges Bit, unterscheiden. Man hat damit erreicht, dass Ein-Bit-Fehler zwar zu fehlerhaften Code-Wörtern führen können, jedoch bei der Interpretation in vielen technischen Anwendungen, insbesondere bei der Digitalisierung analoger Daten (etwa bei einem Plotter) keine schwer wiegenden Fehler verursachen, da man ja (im Fall von Ziffern-Codes) eine benachbarte Zahl erhält. Diesem Prinzip gehorchende Ziffern-Codes bezeichnet man als Gray-Codes. Ein Beispiel für einen Gray-Code dazu ist in der Tabelle 3.3.5 und Abbildung 3.3.2 gegeben. Dieser Code ist darüber hinaus ein einschrittiger Code (progressiver Code) in dem Sinne, dass sich aufeinander folgende Code-Wörter nur in einem Bit unterscheiden. Beispiel: einfacher Gray-Code Tabelle 3.3.5: Ein vierstelliger Gray-Code für die Ziffern von 0 bis 9. dezimal: 0 1 2 3 4 5 6 7 8 9 Direkt Binär: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 Gray: 0000 0001 0011 0010 0110 1110 1111 1101 1100 1000 00 01 11 10 00 0 1 2 3 01 11 10 0000 0001 0011 0010 8 9 4 7 6 5 1100 1101 1111 1110 1000 Abbildung 3.3.2: Erzeugung eines Gray-Codes durch ein Tableau, das einem Karnaugh-Veitch-Diagramm (vgl. Kapitel 4.2.4) ähnelt. Von einem Eintrag der Tabelle gelangt man zu einem horizontal oder vertikal benachbarten Eintrag durch Änderung genau eines Bits. Der Code ergibt sich durch Zusammensetzen des der Zeile zugeordneten Wortes mit dem der Spalte zugeordneten Teil. Für die Codierung der Ziffer 7 findet man damit das Code-Wort 1101.

66 3 Codierung Ein Gray-Code ist so konstruiert, dass ein Ein-Bit-Fehler mit hoher Wahrscheinlichkeit das Code-Wort eines unmittelbar benachbarten Zahlenwerts erzeugt (im obigen Beispiel also z.b. 7 oder 9 aus dem Code-Wort für 8), oder aber ein Fehlerwort. Nur mit geringer Wahrscheinlichkeit wird ein Ein-Bit-Fehler das Code-Wort einer wesentlich verschiedenen Ziffer ergeben. Solche wesentlichen Änderungen treten für das in Abbildung 3.3.2 dargestellte Beispiel bei den durch Ein-Bit-Fehler möglichen Umwandlungen von 9 in 0, von 5 in 8 und von 3 in 0 auf. Entsteht ein Fehlerwort, so ist die günstigste Strategie zur Fehlerbehandlung die Korrektur auf das nächstliegende Nutzwort korrigiert. Beispiel Durch Ein-Bit-Fehler können beispielsweise aus dem nach dem Gray-Code erzeugten Code- Wort 1111 für die Ziffer 6 die folgenden Wörter entstehen: 0111 Fehlerwort, wird auf 6, 4 oder 2 korrigiert 1011 Fehlerwort, wird auf 6 oder 2 korrigiert 1101 7 1110 5 Bei der Behandlung von Störungen wird meist davon ausgegangen, dass eine Störung ein statistischer Prozess ist, der mit gleicher Wahrscheinlichkeit die Übergänge 0 1 und 1 0 verursacht (symmetrische Störung). Dies ist jedoch nicht immer garantiert, da auch technisch bedingte asymmetrische Störungen auftreten können. Bei Annahme einer symmetrischen Störung lässt sich die im obigen Beispiel betrachtete fehlerhaft übertragene Ziffer 6 mit einer Wahrscheinlichkeit von 17/24=70.833...% auf den korrekten oder wenigstens einen unmittelbar benachbarten Wert (5 oder 7) korrigieren. Bei Zweideutigkeiten wird auch oft die dem zeitlich vorhergegangenen Wert näher liegende Korrektur verwendet. Bei dem oben dargestellten Beispiel für einen Gray-Code wurden von den 16 möglichen Code-Worten nur 10 als Nutzworte verwendet und die verbleibenden 6 als Fehlerworte. Möchte man bei gegebener Stellenzahl s alle 2 s Code-Worte ausnützen und keine Fehlerworte zulassen, so wird sich nur bei 2 der s möglichen 1-Bit-Fehler ein unmittelbar benachbartes Code- Wort ergeben; für die verbleibenden s-2 möglichen 1-Bit-Fehler werden durchaus auch größere Differenzen auftreten. Nimmt man dies in Kauf, so ergibt sich eine einfache Vorschrift zur Erzeugung von derartigen Gray-Codes. Sie lautet folgendermaßen: Konstruktionsmethode für Gray-Codes Man geht von einer frei wählbaren Binärzahl als Startwert aus. Die von links gerechnet erste 1 des zugehörigen Wortes im Gray-Codes steht dann an derselben Stelle wie die erste 1 des entsprechenden Wortes im Binär-Code. Danach wird nach rechts fortschreitend eine 1 eingetragen, wenn sich die korrespondierende Binärziffer des aktuellen Binär-Wortes von der links von ihr stehenden Ziffer unterscheidet, sonst eine 0. Das folgende Beispiel verdeutlicht dieses Verfahren: Tabelle 3.3.6: Umwandlung eines 5-stelligen Binär-Codes in einen Gray-Code. Dezimal Binär Gray Dezimal Binär Gray Dezimal Binär Gray 0 00000 00000 11 01011 01110 22 10110 11101 1 00001 00001 12 01100 01010 23 10111 11100 2 00010 00011 13 01101 01011 24 11000 10100 3 00011 00010 14 01110 01001 25 11001 10101 4 00100 00110 15 01111 01000 26 11010 10111 5 00101 00111 16 10000 11000 27 11011 10110 6 00110 00101 17 10001 11001 28 11100 10010 7 00111 00100 18 10010 11011 29 11101 10011 8 01000 01100 19 10011 11010 30 11110 10001 9 01001 01101 20 10100 11110 31 11111 10000 10 01010 01111 21 10101 11111

3 Codierung 67 Sicherung nicht-binärer Codes Die Code-Sicherung ist natürlich nicht nur auf binäre Codes beschränkt. Manche Fehler in der Übertragung natürlicher Sprache lassen sich auf Grund der Redundanz ohne weiteres erkennen und korrigieren, d.h. die Korrektur ist aus dem Zusammenhang des Textes ersichtlich. Manchmal ergeben sich jedoch auch Zweideutigkeiten und manche Fehler führen zu gültigen Worten, sind also nicht als Fehler erkennbar. Eine Korrektur von Fehlern in Übereinstimmung mit den gültigen Rechtschreibregeln ist in professionellen Textverarbeitungsprogrammen Standard, beispielsweise unter Verwendung von Wortdistanzen, z.b. die in Kapitel 11.2.4 beschriebene Levenshtein-Distanz. Tabelle 3.3.7 zeigt dazu einige Beispiele. Tabelle 3.3.7: Beispiele für erkennbare und ggf. korrigierbare Fehler in natürlicher Sprache. Empfangener Text Korrigierter Text Bemerkung Vorlesunk Vorlesung eindeutig korrigierbar Vorlosung Verlosung / Vorlesung? zweideutig Der Memsch denkt Der Mensch denkt eindeutig korrigierbar? Der Mensch lenkt Der Mensch denkt / lenkt? nicht erkennbar Gegen Fehleingabe gesicherte Ziffern-Codes Bei Eingabe von Dezimalziffern, beispielsweise Bestellnummern, eingegeben werden müssen, ist mit Fehlern zu rechnen. Die meisten Methoden zur Aufdeckung von Fehleingaben arbeiten mit Prüfziffern. Auf einfachste Weise kann man Zahlenreihen durch Bildung der Quersumme (die Summe der die betreffende Zahlenreihe bildenden Ziffern) absichern. Zur Reduktion auf eine Dezimalstelle wird die Quersumme dazu Modulo 10 dividiert, das Ergebnis (also der Divisionsrest) wird dann als Prüfziffer an das Ende der Zahlenreihe angefügt. Die Eingabe einer falschen Ziffer wird nach diesem Verfahren durch Vergleich der resultierenden Prüfziffer mit der erwarteten Prüfziffer in vielen Fällen erkannt. Das bei Eingaben über eine Tastatur häufig auftretende Vertauschen zweier Ziffern wird auf diese Weise jedoch nicht erfasst. Es sind daher verschiedene Systeme zur Gewichtung der Ziffern bei der Quersummenberechnung in Gebrauch, die dann auch auf Vertauschungsfehler sensitiv sind. Exemplarisch werden die 10-stelligen ISBN-Buchnummern der Art ISBN = a 1 - a 2 a 3 a 4 - a 5 a 6 a 7 a 8 a 9 - p betrachtet. Dabei ist a 1 die Ländergruppennummer (3 steht für Deutschland, Österreich und die Schweiz), a 2 a 3 a 4 die Verlagsnummer und a 5 a 6 a 7 a 8 a 9 die Titelnummer für das Buch des betreffenden Verlags. Die letzte Ziffer p ist die Prüfziffer. Zu ihrer Ermittlung berechnet man zunächst: 10 a 1 + 9 a 2 + 8 a 3 + 7 a 4 + 6 a 5 + 5 a 6 + 4 a 7 + 3 a 8 + 2 a 9 Anschließend bestimmt man p so, dass die obige Summe durch Addition von p auf eine ohne Rest durch 11 teilbare Zahl ergänzt wird und fügt p als letzte Stelle an die ISBN-Nummer an. Da hierbei 0 < p < 10 gilt, kann auch die zweistellige Prüfziffer 10 auftreten; diese wird dann durch das Einzelzeichen X ersetzt. Für eine korrekte ISBN-Nummer gilt also: (10 a 1 + 9 a 2 + 8 a 3 + 7 a 4 + 6 a 5 + 5 a 6 + 4 a 7 + 3 a 8 + 2 a 9 + p) mod 11 = 0 Damit sind falsch eingegebene einzelne Ziffern und die Vertauschung von zwei Ziffern immer als Fehler erkennbar. In den meisten Fällen wird auch die falsche Eingabe von zwei Ziffern sowie das Vertauschen von mehr als zwei Ziffern erkannt. Beispiel Für die ISBN-Nummer 3-528-25717-2 berechnet man zur Ermittlung der Prüfziffer p=2 im ersten Schritt die gewichtete Quersumme

68 3 Codierung 10 3 + 9 5 + 8 2 + 7 8 + 6 2 + 5 5 + 4 7 + 3 1 +2 7 = 229 Anschließend bestimmt man die kleinste durch 11 teilbare Zahl, die größer als 229 ist, sie lautet offenbar 231. Man muss also 2 zu 229 addieren, um 231 zu erhalten. Die gesuchte Prüfziffer lautet also in der Tat p=2. Nach demselben Muster sind mit (2 a 1 + 3 a 2 + 4 a 3 + 5 a 4 + 6 a 5 + 7 a 6 + p) mod 11 = 0 auch die 7- stelligen Pharmazentralnummern a 1 a 2 a 3 a 4 a 5 a 6 p gesichert. Tritt dabei p=10 auf, so wird die entsprechende Nummer nicht verwendet. Ein weiteres Beispiel ist das einheitliche Kontonummernsystem (EKONS) der Banken. Es verwendet zur Sicherung der maximal zehnstelligen Kontonummern ein etwas einfacheres System, da für Kontonummern das nichtnumerische Zeichen X nicht verwendet werden kann. Man ergänzt dort die Summe 2 a 1 + a 2 + 2 a 3 + a 4 + 2 a 5 + a 6 + 2 a 7 + a 8 + 2 a 9 durch Addition einer Prüfziffer p auf eine durch 10 teilbare Zahl. Hier werden fast alle Fehler durch falsche Ziffern und Vertauschungen aufgedeckt. Ein ähnliches System, das ebenfalls mit dem Modulus 10 arbeitet, aber den Faktor 3 anstelle von 2 verwendet, dient zur Sicherung der 8-stelligen oder 13-stelligen Europäischen Artikelnummern (EAN), die als Ziffern- und als Strich-Codes (siehe Abb. 3.3.3) gebräuchlich sind [CCG02]. Der Strich-Code besteht aus senkrechten dunklen Streifen sowie aus hellen Zwischenräumen. Dabei können Streifen lückenlos aneinander anschließen, so dass sich entsprechend breitere Streifen ergeben; dasselbe gilt auch für die hellen Zwischenräume. Jedes Zeichen besteht aus 11 Elementen einfacher Breite. Da sowohl die Striche als auch die Zwischenräume Information tragen, erhält man eine seht hohe Informationsdichte. Optische Zeichenerkennung Bei der Konstruktion genormter, maschinenlesbarer Balkenschriften wird ebenfalls eine redundante und fehlertolerante Codierung verwendet: je zwei Zeichen unterscheiden sich durch mindestens zwei Balken. Beispiele dafür sind die zahlreichen Varianten maschinenlesbarer OCR-Normschriften (OCR = Optical Character Recognition). Auch bei nur teilweise sichtbaren Zeichen (beispielsweise in Folge von Abnutzung oder Verschmutzung) ist mit Methoden der digitalen Bildverarbeitung und Mustererkennung noch eine robuste Erkennbarkeit gewährleistet (siehe Kapitel 13.3.3). Abbildung 3.3.3: Links: Zeichensatz der fehlertoleranten, maschinenlesbaren Schrift OCR-A. Rechts: Beispiel für einen 8-stelligen EAN-Strich-Code und die Entsprechung als Ziffernfolge [CCG02].