2. Zahlendarstellung und Codierungstechniken 2.1 Maschineninterne Darstellung von Zahlen und Zeichen 2.2 Fehlererkennende Codes 2.3 Fehlerkorrigierende Codes Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2.1 Maschineninterne Darstellung von Zahlen und Zeichen Alle Daten, die ein Digitalrechner speichert und verarbeitet, werden intern in Form von Bits dargestellt. Frage: Wie werden die Datentypen aus den höheren Programmiersprachen in Bitmuster abgebildet? 2-1 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-2 Analoge Darstellung Probleme der analogen Darstellung In der analogen Darstellung repräsentiert der technische Parameter (z. B. eine Spannung) direkt den Wert aus der Anwendung. Analoge Werte sind im Allgemeinen reelle Zahlen (Gleitkommawerte). Beispiel: Die Spannung 1 V entspricht DM 1,00, die Spannung 2,4 V entspricht DM 2,40. Analoge Größen können innerhalb eines vorgegebenen Bereiches jeden beliebigen Wert annehmen. 20 30 • • • Genauigkeit der analogen Größe Definitionsbereich der analogen Größe Arithmetische Operationen auf analogen Größen Wichtige Anwendungsbeispiele • Audio im Telefonnetz und in der Unterhaltungselektronik • Fernseh- und Videotechnik 40 10 Analogiegröße 0 α α Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-3 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-4 Digitale Darstellung Darstellung von Zahlen im Rechner Die Darstellung von Werten erfolgt in Form von Zahlen (lateinisch: “digitus“: der Finger; Abzählen mit den Fingern). Alle modernen Rechner arbeiten mit Dualzahlen (im binären Zahlensystem). Beispiel: der chinesiche Abakus (Rechenrahmen) Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-5 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-6 2.1.1 Logische Werte 2.1.2 Ganze Zahlen Daten vom Typ “boolean“ (logische Daten) können nur die Werte true oder false annehmen. Daher genügt im Prinzip ein Bit. Häufig erfolgt aber eine Darstellung als ein Byte, da das Byte die kleinste adressierbare und damit direkt zugreifbare Einheit im Rechner ist. Positive ganze Zahlen Positive ganze Zahlen sind ein sehr häufiger Datentyp in Anwendungsprogrammen (z. B. als Feldindex, Laufvariable in Schleifen), aber auch maschinenintern als Speicheradresse usw. Eine weitverbreitete Konvention ist, dass ein Byte mit nur 0-Bits den Wert false darstellt, während ein Byte mit mindestens einem 1-Bit dem Wert true entspricht. Besonders häufig wird dabei das erste Bit im Byte interpretiert, da der Prozessor dieses besonders leicht auf 0 oder 1 prüfen kann. Die Darstellung erfolgt als Dualzahl (Zahl zur Zahlenbasis 2). Dabei entspricht jede Ziffernposition einer Zweierpotenz (wie bei Dezimalzahlen jede Ziffernposition einer Zehnerpotenz entspricht). Datentyp Bitstring Manche höhere Programmiersprachen unterstützen den Datentyp Bitstring. Dieser wird direkt auf eine Folge von Bits im Speicher abgebildet. Dazu gibt es dann eine semantische Erweiterung der Operatoren der Aussagenlogik (¬, ∧, ∨, ...) auf Bitmuster, die dann bitweise verknüpft werden. Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-7 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-8 Positive ganze Zahlen Rechnen mit Dualzahlen Arithmetische Operationen (Addition, Subtraktion, Multiplikation, Division) werden im Dualsystem analog zum Dezimalsystem ausgeführt. Merke Eine Multiplikation mit 2 entspricht einem "Linksshift" der Dualzahl, eine Division durch 2 einem Rechtsshift. Beispiel 1510 = 11112 Konvertierung Dual → Dezimal: Dezimal → Dual: Ausmultiplizieren fortgesetzte Division durch 2 und Notieren der Reste Beispiel für ganze Zahlen im Hauptspeicher Beispiel 3010 als Dualzahl 30:2 15:2 7:2 3:2 1:2 = = = = = 15 Rest 0 7 Rest 1 3 Rest 1 1 Rest 1 0 Rest 1 → 3010 = 111102 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-9 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-10 Oktalzahlen Hexadezimalzahlen (Sedezimalzahlen) (1) Das Aufschreiben von langen Bitsrtings braucht viel Platz und ist unübersichtlich. Deshalb wählt man häufig eine Darstellung in Form von Oktalzahlen oder Hexadezimalzahlen (Sedezimalzahlen). Dabei ergeben jeweils drei bzw. vier Bits eine Ziffer. Bitstring 000 001 010 011 100 101 110 111 Oktalziffer 08 18 28 38 48 58 68 78 Beispiel = 18110 = = 2. Zahlendarstellung und Codierung Da wir aus dem Dezimalsystem nur zehn Ziffern kennen, müssen weitere sechs Ziffernbezeichner dazu erfunden werden. Man wählt dazu die Großbuchstaben A bis F. Bitstring Hexadezimalziffer 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0101101012 2 6 58 2*64 + 6*8 + 5 Praktische Informatik II © Prof. Dr. W. Effelsberg Jeweils vier Bits ergeben eine Hexadezimalziffer. 2-11 016 116 216 316 416 516 616 716 816 916 A B C D E F Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-12 Hexadezimalzahlen (Sedezimalzahlen) (2) Negative ganze Zahlen Beispiel 18110 = = = Erste Idee Wir wählen n-1 Bits für den Betrag als ganze Zahl und ein Bit für das Vorzeichen. 1011 01012 B Nachteile • Die Null gibt es zweimal (+0, -0). • Die Arithmetik wird durch Fallunterscheidungen komplizierter. 516 11*16 + 5 Die oktale und hexadezimale Darstellung ist nicht nur für Ganzzahlen, sondern auch für beliebige andere Bitstrings gebräuchlich, z.B. zur Definition von BitstringKonstanten: ALL-ONE LEFT-HALF DC DC Zweite Idee Einerkomplement Eine negative Zahl wird durch Invertieren aller Bits der positiven Zahl desselben Betrages gebildet. Nachteile Immer noch zwei Nullen, immer noch komplizierte Arithmetik X'FF' X'F0' Dritte Idee Zweierkomplement Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-13 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-14 Zweierkomplement (1) Zweierkomplement (2) Berechnung Zweierkomplement = Einerkomplement +1 Die Darstellung auf dem Zahlenkreis veranschaulicht die Ähnlichkeit von Addition und Subtraktion. Beispiel für 3-Bit Zahlen: 210 = 0102 -210 = 1012 + 1 = 1102 Vorteile • Vorzeichen immer noch am ersten Bit erkennbar • Die Addition negativer Zahlen geschieht wie die Addition positiver Zahlen! (beim Überschreiten der Null geht der Übertrag verloren). Deshalb braucht man nur noch eine Hardware-Schaltung! • Subtraktion i - j durch Bildung des Zweierkomplements von j und Addition! i - j = i + (-j) Sehr einfach in Hardware zu bauen! Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-15 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-16 2.1.3 Gleitkommazahlen Festkomma-Darstellung (fixed-point number) Reelle Zahlen (Gleitkommazahlen, floating point numbers) kann man auf zwei Weisen darstellen: durch Festlegen einer Konvention, wo im Maschinenwort man sich die Kommastelle denkt (Festkommazahl, fixedpoint number) oder durch eine Repräsentation in Form von Mantisse und Exponent. • • Darstellung reeller Zahlen ohne Exponent Festlegung einer festen Anzahl von Stellen vor und nach dem Komma durch Konvention VZ Vorkomma- Nachkommastellen Beispiel Darstellung und Addition: 19,125 =0 010011,001000 7,625 =0 000111,101000 + 26,75 =0 011010,110000 Umrechnung Dezimal x10 → Dual x2 für x10 < 1: 0,375 *2 0,750 *2 1,500 *2 1,000 (alle Nachkommastellen = 0 → Ende) Ergebnis 0,37510 = 0,0112 (durch Ablesen von oben nach unten) Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-17 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-18 Gleitkommazahlen Beispiele für Gleitkommazahlen Eine Gleitkommazahl werde in einem 32-Bit-Wort dargestellt mit 8 Bits für e und 24 Bits für m Repräsentation der rellen Zahl in Form von Mantisse und Exponent: e z=m* ge m , m Mantisse, e Exponent. m ist eine ganze Zahl mit gedachtem Komma vor der ersten Stelle. Man überlege sich, wie die arithmetischen Operationen +, -, *, / in der obigen Gleitkomma-Darstellung ausgeführt werden! e ist ganze Zahl. Anmerkung 1 Beim Rechnen mit Gleitkommazahlen ist die Genauigkeit beschränkt, da die Länge der Mantisse beschränkt ist. Es treten Rundungsfehler auf. g ist die Basis. Sie gilt als implizit vereinbart und wird nicht explizit dargestellt. Gebräuchlich sind g = 2 oder g = 16. (IBM-Großrechner: g = 16) Merke m < 0: e < 0: Anmerkung 2 Sehr kleine Prozessoren unterstützen manchmal Gleitkommazahlen nicht in Hardware. Ihre Darstellung und Operationen darauf müssen dann in Software durch Unterprogramme des Laufzeitsystems realisiert werden. Üblich ist auch die Erweiterung des Rechners um einen zusätzlichen Gleitkommaprozessor, die wesentlich zur Beschleunigung der Ausführung numerischer Anwendungsprogramme beitragen kann. negative reelle Zahl reelle Zahl mit Betrag zwischen 0 und 1 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-19 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-20 Darstellung der Mantisse Versetzte Darstellung des Exponenten Problem: 0,510 lässt sich darstellen als 0,12 * 20 1 oder als 0,012* 2 etc. • • Lösung: Eindeutigkeit der Darstellung durch normalisierte Mantisse (Basis g = 2), 0 z.B.: ½ ≤ m < 1, d.h. 0,510 = 0,12 * 2 -1 1 ≤ m < 2, d.h. 0,510 = 1,02 * 2 Diese Darstellung wird auch als Biased- oder Excess-Darstellung bezeichnet Zum tatsächlichen Exponenten wird ein bestimmter Wert (Bias) hinzuaddiert. Hat der Exponent n Bits, n-1 so beträgt dieser Wert 2 . Beispiel: Basis g = 2, Exponent e mit 6 Bits in ExcessDarstellung, normalisierte Mantisse m (1 ≤ m < 2) mit 6 Bits,Verwendung des hidden bit. Werden normalisierte Mantissen vorausgesetzt, dann ist das erste Bit immer gleich 0 bzw. 1 und braucht nicht abgespeichert zu werden (sogenanntes “hidden bit“). 0 2 7,7510 = 111,1102 = (-1) *1,1111002 * 2 Zu speichernder Exponent E = 2 + 2 Beispiel: Basis g = 2, Exponent e mit 6 Bits, normalisierte Mantisse m (1 ≤ m < 2) mit 6 Bits, hidden bit. 0 0 0 0 0 1 0 Exponent Praktische Informatik II © Prof. Dr. W. Effelsberg 2 Beispiel -1 a = 0,510 = 1,02 * 2 = 0 011111 000000 2 b = 410 = 1,02 * 2 = 0 100010 000000 Ohne Excess-Darstellung wäre der Exponent von a 1111112 und von b 0000102 (Zweierkomplement). 1 1 1 1 0 0 Mantisse 2. Zahlendarstellung und Codierung = 1000102 Vorteil dieser Darstellung: Falls für zwei Gleitkommazahlen a ≤ b gilt, so gilt das Gleiche für die (gewöhnliche) Dualdarstellung von a und b. 7,7510 = 111,1102 = (-1) *1,1111002 * 2 0 VZ 6-1 2-21 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-22 Das IEEE-Gleitkommaformat (IEEE 754) Genauigkeit single precision Vorzeichen (bits) 2.1.4 Zeichen (characters) double precision 1 (0 = positiv, 1 = negativ) Exponent (bits) 8 11 Fraction (= Mantisse ohne hidden bit) (bits) 23 (hidden bit) 52 (hidden bit) Gesamtbreite (bits) 32 64 Excess 127 1023 Exponent -126 ... +127 -1022 ... +1023 Darstellung in fester Länge Die Zuordnung von Bitmustern zu den darzustellenden Zeichen nennt man einen Zeichencode. Zur Darstellung von Zeichen des Alphabets (Textzeichen, Sonderzeichen) gibt es internationale Standards. Diese verwendet eine feste Anzahl von Bits für jedes Zeichen. ASCII Spezielle Werte (für einfache Genauigkeit, single): Exponent e Fraction f Bedeutung -127 (0...02) 0...02 ±0 -127 (0...02) ≠ 0...02 0,... * 2 (denormale Zahlen) -126 ≤ e ≤ 127 f 1,f * 2 -128 (1...12) 0...02 ±∞ -128 (1...12) ≠ 0...02 NaN (not a number) Praktische Informatik II © Prof. Dr. W. Effelsberg EBCDIC -128 American Standard Code for Information Interchange. Ursprünglich ein 7-BitCode, inzwischen als 8-Bit-Code gebräuchlich, damit auch internationale Zeichen (z. B. deutsche Umlaute) aufgenommen werden können (IA5 = International Alphabet Number 5). Extended Binary Coded Decimal Interchange Code. Ein 8-Bit-Code, der auf Großrechnern sehr weit verbreitet ist, vor allem bei IBM e 2. Zahlendarstellung und Codierung 2-23 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-24 Darstellung von Zeichen (1) ASCII-Codetabelle (7-Bit-Code) Beide Codes enthalten • druckbare Zeichen – Ziffern – Kleinbuchstaben – Großbuchstaben – Sonderzeichen (!, ?, $, ...) • nicht druckbare Zeichen (Steuerzeichen) – Wagenrücklauf, Zeilenvorschub, Tabulator, Klingeln, etc. • Gerätesteuerzeichen und Übertragungssteuerzeichen. Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung Erste 3 Bits x 0 1 0 nul dle 1 s oh dc1 2 s fx 3 2 3 4 5 6 7 0 @ P ` p ! 1 A Q ` q dc2 " 2 B R b r e tx dc3 # 3 C S c s 4 e ot dc4 $ 4 D T d t 5 e nq na k % 5 E U e u 6 a ck s yn & 6 F V f v 7 be l e tb ' 7 G W g w 8 bs can ( 8 H X h x 9 ht em ) 9 I Y i y A lf s ub * : J Z j z B vt esc + ; K [ k { C ff fs , < L \ l | D cr qs - = M ] m } E so rs . > N ^ n ¬ F si us / ? O _ o de l y 2-25 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-26 ASCII: Bedeutung der Steuerzeichen EBCDIC-Codetabelle Abk. Funktion Funktion (Bede utung de s Ze iche ns ) NUL S OH S TX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1-3 DC4 NAK S YN ETB CAN EM SS ES C FS GS RS US SP DEL Null S ta rt of he ading S ta rt of te xt End of te xt End of tra ns mis s ion Enquiry Acknowledge me nt Audible s ignal Backs pa ce Horizontal ta bulation Line fe ed Vertica l ta bula tion Form fee d Ca rrie r re turn S hift out S hift in Da ta link e s ca pe De vice control De vice s top Ne ga tive acknowle dgement S ynchronous idle End of tra ns mis s ion block Ca nce l End of medium S ta rt of s pe cial s e quence Es cape File s epara tor Group s e pa rator Re cord s epara tor Unit s e pa ra tor S pa ce De lete /Idle Nichtige s (ungültige s ) Zeichen Beginn de s Kopfe s (Tite ls ) Te xta nfa ng Te xte nde Ende de r Übe rtra gung Anfra ge Empfa ngs be s tä tigung Akus tis che s S igna l Rücks e tze n Horizontale Eins tellung (Ta bula tor) Ze ile nvors chub Vertika le Eins te llung (Tabula tor) Formularvors chub S chre ibkopfrückla uf Ums chaltung a us (Kle ins chre ibung) Ums chaltung e in (Großs chreibung) Ums chaltung von Te xt a uf S te ue rzeiche n Einheite ns teuerung Einheite nhalt Ne ga tive Empfangs bes tätigung S ynchronis ie rzeichen (Le e rlauf) Ende eine s Übertra gungs blocke s Aufhe bung Ende für e in Me dium (Gerä t) Beginn einer s pezie lle n Folge Aus wa hl, Tre nnung, Ums cha ltung Da te itre nnzeichen Gruppe ntrennze iche n S atztrennze iche n Tre nnzeichen für e ine Informa tions einhe it Zwis chenra um Lös che n/ Le e rlauf Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-27 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-28 Beispiel für einen Code mit variabler Bitlänge (1) Zeichencodes mit variabler Bitlänge Zeichencodes mit einer festen Anzahl von Bits haben den gravierenden Nachteil, dass sie nicht optimal sind, wenn die Häufigkeit der Zeichen in einem Text nicht gleich verteilt ist. Man kann sich dann Codes überlegen, bei denen Zeichen je nach ihrer Häufigkeit mit einer unterschiedlichen Anzahl von Bits dargestellt werden. Die Codetabelle wird gemäß den Zeichenhäufigkeiten anwendungsabhängig gewählt Vorteil Im Mittel weniger Bits zur Darstellung der Anwendungsdaten. Verringert den Speicherbedarf und beschleunigt den Datentransfer. Nachteil Zusatzaufwand zum Kodieren/Dekodieren zwischen gebräuchlichen Darstellungen und dem Code mit variabler Bitlänge. Parsing (Zerlegung der Zeichenkette in die einzelnen Zeichen) wird komplizierter. Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-29 Zeichen Häufigkeit (%) Code Anzahl der Bits 0 1 2 8 3 A 5 6 4 9 7 F B [leer] D E Z P N u C 55.5 6.7 4.5 3.5 3.3 3.2 3.0 2.7 2.7 2.2 1.9 1.5 1.2 1.1 1.0 0.9 0.7 0.6 0.5 0.4 0.4 0 1000 1100 10010 10100 10101 10110 11100 11101 11110 100110 101110 111110 110110 110100 110101 1011110 1111110 1101110 10011110 10011100 1 4 4 5 5 5 5 5 5 5 6 6 6 6 6 6 7 7 7 8 8 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-30 Beispiel für einen Code mit variabler Bitlänge (2) H R M L S I T K Y X G J O Q V W . ? & / + < ) ( % 0.4 0.3 0.3 0.3 0.25 0.20 0.15 0.15 0.13 0.12 0.10 0.10 0.06 0.03 0.03 0.03 0.01 unter 0.001 Praktische Informatik II © Prof. Dr. W. Effelsberg 10011101 10111110 11111110 11111111 11011110 100111110 110111110 110111111 1001111110 1001111111 1011111100 1011111101 10111111100 10111111101 10111111110 101111111110 1011111111110000 1011111111110001 1011111111110010 1011111111110011 1011111111110100 1011111111110101 1011111111110110 1011111111110111 1011111111111000 1011111111111001 8 8 8 8 8 9 9 9 10 10 10 10 11 11 11 12 16 16 16 16 16 16 16 16 16 16 2. Zahlendarstellung und Codierung Beispiel für einen Code mit variabler Bitlänge (3) = # ? , @ 1011111111111010 1011111111111011 1011111111111100 1011111111111101 1011111111111110 1011111111111111 16 16 16 16 16 16 Mittlere Zeichenlänge im Code 0.555 * 1 + 0.112 * 4 + 0.206 * 5 + 0.76 * 6 + 0.018 * 7 + 0.24 * 8 + 0.005 * 9 + 0.0045 * 10 + 0.0017 * 11 + 0.0003 * 12 + 0.0001 x 16 = 2.91 Bits pro Zeichen Wesentlich weniger als die üblichen 8 Bits pro Zeichen! 2-31 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-32 Der Huffman-Code Huffman-Code: Beispiel David Huffman hat einen Algorithmus zur Konstruktion von optimalen Codes mit variabler Bitlänge angegeben. Mit diesem Algorithmus konstruierte Codes bezeichnet man als Huffman-Codes. Wahrscheinlichkeiten der Zeichen: p(A) = 0.3; p(B) = 0.3; p(C) = 0.1; p(D) = 0.15; p(E) = 0.15 1. Bestimme die Auftrittshäufigkeiten der Zeichen und schreibe sie an die Blattknoten eines aufzubauenden Binärbaums an. 2. Nimm die bisher unerledigten zwei Knoten mit den geringsten Häufigkeiten und berechne deren Summe. 3. Erzeuge einen Elternknoten für diese beiden und beschrifte ihn mit der Summe. Markiere die Verzweigung zum linken Sohn mit 0, die zum rechten Sohn mit 1. 4. Markiere die beiden bearbeiteten Knoten als erledigt. Wenn es nur noch einen nicht erledigten Knoten gibt, sind wir fertig. Sonst weiter mit Schritt 2. Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung Wahrscheinlichkeit Kodierbaum Algorithmus Erzeuge-Huffman-Code 2-33 1 1 Zeichen Code 30% A 11 30% B 10 10% C 011 15% D 010 15% E 00 60 0 100 1 1 25 40 0 0 0 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-34 Huffman-Code: Optimalität Beweisidee Die Zeichen mit großen Häufigkeiten sind näher an der Wurzel des Baumes und haben somit eine kürzere Codewortlänge; deshalb ist es ein guter Code. Es ist sogar der bestmögliche Code! Mit Hilfe des gleichen Prozesses kann ein beliebiger anderer Binärbaum konstruiert werden, doch ohne bei jedem Schritt unbedingt die zwei Knoten mit dem kleinsten Gewicht auszuwählen. Mittels Induktion lässt sich beweisen, dass keine Strategie zu einem besseren Ergebnis führen kann als die, bei der jeweils zuerst die beiden kleinsten Gewichte ausgewählt werden. Denn: Die Länge einer kodierten Zeichenfolge ist gleich der gewichteten äußeren Pfadlänge des Huffman-Baumes. Die “gewichtete äußere Pfadlänge” eines Baumes ist gleich der über alle äußeren Knoten gebildeten Summe der Produkte des “Gewichts” (zugehöriger Häufigkeitszähler) mit der Entfernung von der Wurzel. Dies ist offensichtlich eine Möglichkeit, die Länge der kodierten Zeichenfolge zu berechnen; sie ist äquivalent zu der über alle Buchstaben gebildeten Summe der Produkte der Häufigkeit des Auftretens eines Buchstaben mit der Anzahl der Bits bei jedem Auftreten. Kein Baum mit den gleichen Häufigkeiten bei den äußeren Knoten hat eine kleinere gewichtete äußere Pfadlänge als der Huffman-Baum. Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-35 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-36 Dekodieren von Huffman-Codes (1) Decodieren von Huffman-Codes (2) Nahe liegend ist eine Dekodierung unter Verwendung des Tries (eines speziellen Binärbaumes): Als Alternative bietet sich die Verwendung einer Dekodiertabelle an. 1. Lies den Eingabestrom sequenziell und traversiere den Trie, bis ein Blattknoten erreicht ist. 2. Gib bei Erreichen des Blattknotens das erkannte Zeichen aus. Erzeugung der Tabelle Beobachtung Die Eingabe-Bitrate ist konstant, aber die AusgabeZeichenrate ist variabel! Hat das längste Codewort L Bits, so hat die Tabelle 2L Einträge. Sei ci das Codewort für Zeichen si. ci habe li Bits. Wir erzeugen 2L-li Einträge in der Tabelle, bei denen jeweils die ersten li Bits = ci sind und die verbleibenden L-li Bits alle möglichen Kombinationen annehmen. An all diesen Adressen wird si als erkanntes Zeichen eingetragen, zugleich wird li als Codewortlänge vermerkt. Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-37 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-38 Decodieren von Huffman-Codes (3) Huffman-Code: Kommentare Einsatz der Tabelle zur Dekodierung 1. Lies L Bits aus dem Eingabestrom in einen Puffer. 2. Benutze den Puffer als Adresse in der Tabelle und gib das erkannte Zeichen si aus. 3. Entferne die ersten li Bits aus dem Puffer und ziehe weitere li Bits aus dem Eingabestrom nach. 4. Weiter mit Schritt 2. Beobachtung Das Tabellenverfahren ist schnell. • • • • Ein sehr guter Code für viele praktische Zwecke. Allerdings nur geeignet, wenn die Häufigkeiten der Zeichen a priori bekannt und immer gleich (oder ähnlich) sind. Variante: Ermittle die Häufigkeiten für jeden gegebenen Text neu und speichere/übertrage den Code mit den Daten. Ein (durchaus berechenbarer) Verlust entsteht dadurch, dass jedes Zeichen mit einer ganzen Zahl von Bits kodiert werden muss und somit die Codelänge den Häufigkeiten nicht ganz (theoretisch optimal) angepasst werden kann. Verbesserung: arithmetische Kodierung (auf die wir hier nicht näher eingehen). Die Ausgabe-Zeichenrate ist konstant, aber die Eingabe-Bitrate ist variabel! Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-39 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-40 Fehlererkennung (1) 2.2 Fehlererkennende Codes Definition “Fehler“: Die empfangene Information entspricht nicht der gesendeten. Ein fehlererkennender Code ermöglicht dem Empfänger einer Nachricht festzustellen, dass es einen Übertragungsfehler gegeben hat. Beispiel für Fehlererkennung: das Paritätsbit. Zu vier Datenbits wird ein Paritätsbit hinzu gefügt. Bei gerader Parität ist die Gesamtzahl der 1-Bits gerade, bei unge. rader Parität ungerade Beispiel: Gerade Parität Ein fehlererkorrigierender Code ermöglicht dem Empfänger einer Nachricht festzustellen, wo in der Nachricht es einen Übertragungsfehler gegeben hat; der Empfänger kann den Fehler ohne erneute Übertragung reparieren. Fehlererkennung und Fehlerkorrektur erfordern Redundanz. Wieviel Redundanz man braucht und wie man die redundanten Bits am besten generiert, ist Gegenstand der Codierungstheorie. Man vermutet schon: Fehlerkorrektur benötigt mehr Redundanz als Fehlererkennung. Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-41 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-42 Fehlererkennung (2) Fehlererkennung: Code-Beispiel Der Sender berechnet das Paritätsbit und fügt es an die Nachricht an. Der Empfänger berechnet das Paritätsbit neu und vergleicht es mit dem übertragenen Paritätsbit. Bei Abweichung erkennt er einen Fehler. Wir betrachten einen Code, der oft in der Telekommunikation zur Übertragung von BCD-Zahlen (binary coded decimals) verwendet wird: den 2-aus-5-Code (auch 7-4-2-1-Code genannt). Beispiel 2 aus 5 ⇒ nur zwei Einsen in 5 Bits Ü bertragung der Zahl 7: K anal: E m pfang: Test bei E m pfänger: FE H LE R -E R K E N N U N G E 01111 01011 01011 01011 Die Fehlererkennung erfolgt durch Geradzahligkeitsprüfung. FE H LE R ! Æ #1 gerade ⇒ E = 0 E s m u ß ein en F e hler ge ben ! E = P arity-B it oder P rüfbit! Frage: Welche Arten von Übertragungsfehlern kann man mit einem Paritätsbit erkennen? Wie mächtig ist der Code? Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-43 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-44 Prinzip eines fehlerkorrigierenden Codes 2.3 Fehlerkorrigierende Codes Eine Korrektur ist nur möglich, wenn man genau weiß, wo der Fehler liegt. Das erfordert mehr Redundanz, also mehr Bits pro Zeichen als die reine Fehlererkennung. Ein fehlerkorrigierender Code ist stets auch ein fehlererkennender Code. 1. P o s: a + c a + a c + a 2a 2a OK b b - 2. P o s: a FEHLER ! K o rre ktur: a, ... , a+ b, a -b Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-45 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-46 Hamming-Abstand (1) Hamming-Abstand (2) Hamming-Abstand d Der Hamming-Abstand d zwischen zwei Codewörtern c1, c2 ist die Anzahl der Bitpositionen, in denen sich die beiden Codewörter unterscheiden. Satz Die Fähigkeit eines Codes, Fehler zu erkennen und Fehler zu beheben, hängt von seinem HammingAbstand ab. Erkenne e-Bit Fehler: Ein Abstand von e + 1 wird benötigt Beispiel d(10001001,10110001) = 3 (Anzahl der Bits von c1 XOR c2 ) Behebe e-Bit Fehler: Ein Abstand von 2e + 1 wird benötigt Hamming-Abstand D eines vollständigen Codes C D (C ) := min{d (c1 , c2 ), c1 , c2 ∈ C , c1 ≠ c2 } Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-47 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-48 Wieviel Redundanz braucht man? Code-Beispiele Fehlererkennender Code Das Codewort bestehe aus m Zeichen-Bits. Frage: Wieviele Prüfbits werden benötigt, um jeden 1Bit-Fehler beheben zu können? n = m + r, m Datenbits, r Redundanzbits Es gibt 2m legale Zeichencodes. Fehlerbehebender Code: Pro Codewort muss es n illegale Codewörter im Ab- stand von einem Bit geben. 2n ist die Gesamtzahl der darstellbaren Codewörter. (n+1)2m ≤ 2n = 2m+r (n+1) Code mit einem einzigen Paritätsbit (gerade oder ungerade) => Hamming-Abstand = 2 => Erkennung eines 1-Bit-Fehlers ist möglich (oder aller Fehler mit einer ungeraden Anzahl Bits) Der Code besteht aus vier Codewörtern: 00000 00000, 00000 11111, 11111 00000, 11111 11111 => Hamming-Abstand = 5 => Korrektur von 2-Bit-Fehlern ist möglich ≤ 2r (m + r + 1) ≤ 2r Dies ergibt die untere Grenze für r. Beispiel: Beispiel 00000 00111 => 2-Bit-Fehler m=7 (8 + r) ≤ 2r Praktische Informatik II © Prof. Dr. W. Effelsberg => 00000 11111 nächstes Codewort r≥4 2. Zahlendarstellung und Codierung 2-49 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-50 Hamming-Code (1) Hamming-Code (2) Der Hamming-Code ersetzt jedes Datenwort von 4 Bits durch ein Codewort mit 7 Bits. Für ein gegebenes Datenwort m1 m2 m3 m4 bilden wir das Codewort c1 c2 c3 c4 c5 c6 c7. Die ersten vier Bits c1c2c3c4 sind dieselben wie im Datenwort. Die weiteren Bits werden wie Paritätsbits berechnet: c5 = Parität von c1 c2 c3 (c1 ⊗ c2 ⊗ c3) c6 = Parität von c1 c3 c4 (c1 ⊗ c3 ⊗ c4) c7 = Parität von c2 c3 c4 (c2 ⊗ c3 ⊗ c4). Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-51 Insgesamt gibt es 16 Codewörter: 0000000 0001011 0010111 0011100 0100101 0101110 0110010 0111001 1000110 1001101 1010001 1011010 1100011 1101000 1110100 1111111 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-52 Hamming-Code (3) Hamming-Code (3) Decodierung Ist das empfangene Wort ein gültiges Codewort, wird es akzeptiert. Ist es ungültig, so wird es zum nächsten Nachbarn hin korrigiert. Alle 1-Bit-Fehler können eindeutig korrigiert werden. Beispiel 1010110 wird zu 1000110 Veranschaulichung korrigiert (Abstand 1). Codewort: fülle die Bit-Positionen c5, c6, c7 so aus, dass jeder Kreis eine gerade Anzahl Einsen hat. Das Codewort für m1 m2 m3 m4 = 1 0 1 1 wird dann : c1 c2 c3 c4 c5 c6 c7 = 1 0 1 1 0 1 0 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-53 Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-54 Nachteil von fehlerkorrigierenden Codes Großer Overhead (viel Redundanz), der auch im Falle einer fehlerfreien Übertragung anfällt. Praktische Informatik II © Prof. Dr. W. Effelsberg 2. Zahlendarstellung und Codierung 2-55