Rechnergrundlagen Teil 1 -1- Prof.Dipl.-Ing. Komar Rechnergrundlagen Inhaltsverzeichnis 1 Teil 1 Einführung und Überblick Das Werden der Informatik - Rechnergenerationen Einteilung der Informatik - Themen der Informatik 2 3 Grundbegriffe : Information – Nachricht – Signal – Zeichen – Code – Digitalisieren – A/D-Wandlung Grundlagen der lnformations-Theorie Elementarvorrat E, Informationsgehalt h, Entropie H, mittl. Wortlänge L, Redundanz R 4 Codierung Quell- und Kanalcodierung - Optimal-Codes, (Huffmann, FANO), Codesicherungsverfahren ( m-aus n- Code, Blocksicherung, Hamming-Code) 5 Zahlensysteme Polyadisches Bildungsgesetz für Zahlen Dual – Dezimal – Hexadezimal Umwandlung von Dezimalzahlen in Dual - / Hexadezimal-Zahlen mittels Horner-Schema Arithmetik im Dualsystem Darstellung negativer Zahlen – Einerkomplement – Zweierkomplement Zahlendarstellung im Rechner - Festkomma – Gleitkomma – BCD-Darstellung 6 Teil 2 Funktionsweise digitaler Rechenanlagen Funktionseinheiten eines Computers: CPU, Bus, I/O-Peripherie, Speicher, Programme Aufbau eines Mikroprozessors – Bauformen und Einsatz von Mikrocomputern Personalcomputer und INTEL 80x86-Prozessoren Der PC als Mikrocomputer -Versuchs- und Übungssystem 7 Maschinenorientierte Programmierung Programmiermodell des 8086 - Maschinenbefehle des 8086 Assemblerprogrammierung mit DEBUG und EDIT DEBUG – Monitor BIOS- und DOS- Funktionen des Betriebssystems Asynchrone, serielle Datenübertragung nach RS232C/V24 Terminalemulation Anhang: Gleitkommarechnung mit der Floating-Point-Unit FPU Literatur [ 1 ] Blieberger, Klasek, Redlein, Schildt Informatik Springers Lehrbücher der Informatik Springer Verlag Wien NewYork [ 2 ] Rechenberg, Pomberger Informatik-Handbuch Carl Hanser Verlag München Wien [ 3 ] P. Rechenberg Was ist Informatik ? Eine allgemeinverständliche Einführung Carl Hanser Verlag München Wien [ 4 ]G. Küveler, D. Schwoch Informatik für Ingenieure Vieweg [ 5 ] Otto Mildenberger Informationstechnik kompakt Vieweg Rechnergrundlagen Teil 1 -2- Prof.Dipl.-Ing. Komar 1. Einführung und Überblick Informatik (Computer Science) ist die Wissenschaft von der systematischen Verarbeitung von Informationen – insbesondere deren automatische Verarbeitung mit Hilfe von Digitalrechnern. Symbolisch: Informatik = Information + Automatik ( auch + Mathematik ) Die Informatik ist auf das engste mit dem Computer ( Rechner, Datenverarbeitungsanlage) verknüpft. Der Computer als elektronische Rechenmaschine entstand in den vierziger Jahren und begründete die Informatik. Seine Vorläufer waren die elektromechanischen Rechenmaschinen und die Lochkartentechnik. Der Computer (vom lateinischen „ computare“ -> computus entspricht Kirchenrechnung/Kalenderrechnung) ist eine universelle, elektronische digitale Rechenanlage zur Lösung von Problemen, die zuvor als Algorithmen formuliert wurden. In früheren Zeiten wurde immer wieder versucht, mechanische Rechenmaschinen für die vier Grundrechenarten zu konstruieren. Diese Konstruktionsversuche hatten ihre Ursache darin, daß es sich bei den Grundrechenarten um mechanisch ausführbare Rechenverfahren handelt. („mechanisch“ bedeutet hier „ohne Nachdenken“ – „ohne Verstehen“ ). Dieser Begriff des mechanisch ausführbaren Rechenverfahrens wird als Algorithmus bezeichnet. Algorithmen sind beschreibbare und Schritt für Schritt nachvollziehbare Verfahren zur Lösung vorgegebener Probleme. Sie bestehen aus mehreren nacheinander auszuführenden Schritten, die solange nacheinander ausgeführt bzw wiederholt durchlaufen werden, bis ein Ergebnis gefunden ist (endliche Lösungsverfahren ). Erst das Werkzeug „Computer“ erlaubte, Algorithmen mit Millionen von Schritten auszuführen. Mechanischen Rechenmaschinen waren noch keine Computer, denn sie konnten zwar die Algorithmen für die vier Grundrechenarten ausführen, aber eben keine anderen. Diese Eigenschaft des Computers, die verschiedensten und komplexesten Algorithmen auszuführen, wird durch seine freie Programmierbarkeit ermöglicht und machte den Computer zu einem universalen Instrument. Freie Programmierbarkeit heißt, der Computer hat einen Programmspeicher, in dem man beliebige Programme speichern kann, die der Computer dann ausführt. Ein Programm ist demnach ein mit Hilfe eindeutiger Regeln formulierter Algorithmus, der in dieser Form von einem bestimmten Rechner übernommen und ausgeführt werden kann ( im Computer gespeichert und vom Computer ausgeführt werden kann ). Drei Eigenschaften unterscheiden den heutigen Computer von seinen Vorläufern und begründen seinen Erfolg: - die hochintegrierte Elektronik anstelle der Mechanik oder Elektromechanik - die Benutzung von zweiwertigen (binären) Zuständen anstelle von zehnwertigen das gespeicherte Programm (v. Neumann-Rechner mit Daten und Programm im gemeinsamen Arbeitsspeicher) Die Informatik gründet auf Daten und Algorithmen das sind die Dinge die verarbeitet werden Daten, Algorithmen, das sind die Handlungen (Verfahrensschritte), die verarbeiten. - Heutzutage werden mit dem Computer längst nicht mehr nur Zahlen verarbeitet, sondern alles was zähl- und meßbar ist wie Zahlen, Texte, Sprache, Musik, Bilder und viele andere physikalische Größen mit ihren zeitlichen Verläufen werden von Computern verarbeitet. Um diese vielfältigen Informationen verarbeiten zu können, müssen diese zuerst in eine für den Computer gemäße Form umgewandelt werden, nämlich in digitale, binärcodierte Daten ( Digitalisierung ). Zusammengefaßt: . . . Alles was zähl- und meßbar ist, kann codiert werden Alles was codiert werden kann, kann ein Computer verarbeiten Die Codierung im Computer ist immer binär, d.h. geschieht mit den Werten 0 und 1 Rechnergrundlagen Teil 1 -3- Prof.Dipl.-Ing. Komar 1.1 Das Werden der Informatik 1700 v. Chr. Papyrus Rhind, Ägypten, älteste schriftliche Rechenaufgaben. 300 v.Chr. Euklidischer Algorithmus ( größter gemeinsamer Teiler zweier natürlichen Zahlen ) 5. Jh. n.Chr. Erfindung des Dezimalsystems in Indien. 820 n.Chr. Al-Chowarizmi (etwa 780 - 850), persischer Mathematiker und Astronom, schreibt ein Buch über Algebra. (von ihm leitet sich der Begriff Algorithmus ab ) 1202 Leonardo von Pisa, genannt Fibonacci (etwa 1180 - 1240), italienischer Mathematiker, verfaßt den liber abaci, die erste systematische Einführung in das dezimale Zahlenrechnen. 1524 Adam Riese (1492 - 1559) veröffentlicht ein Rechenbuch, in dem er die Rechengesetze des Dezimalsystems beschreibt. Seit dieser Zeit setzt sich das Dezimalsystem in Europa durch. 1623 Wilhelm Schickard (1592 - 1635) konstruiert eine Maschine, die die vier Grundrechenarten ausführen kann. Sie bleibt unbeachtet. 1641 Blaise Pascal (1623 - 1662) konstruiert eine Maschine, die sechsstellige Zahlen addiert. 1674 G. W. Leibniz (1646 - 1716) konstruiert eine Rechenmaschine mit Staffelwalzen für die vier Grundrechenarten. Er befaßt sich auch mit dem dualen Zahlensystem. 1774 P. M. Hahn (1739 - 1790) entwickelt erste zuverlässige mechanische Rechenmaschine. Ab 1818 Rechenmaschinen nach dem Vorbild der Leibnizschen Maschine werden serienmäßig hergestellt und dabei ständig weiterentwickelt. 1805 Joseph-Marie Jaquard Ablauf-Steuerung von Webstühle mit Lochplatten aus Holz 1822 Charles Babbage (1791 - 1871) plant seine Analytical Engine, mit 3 wesentlichen Baugruppen: Speicher-, Rechen- und Leitwerk, Steuerung des Progammablaufes durch Lochkarten 1886 Hermann Hollerith (1860 - 1929) erfindet die Lochkarte. Lochkartenmaschine zum Abtasten von Lochkarten und Auslösen elektrischer Schrittschaltwerke für die Volkszählung 1890 in USA. Heute noch verwendete Lochkarte mit 80 Spalten und 12 Zeilen. Mechanische Rechenwerke 1934 1941 1944 (der Algorithmus für die Grundrechenarten fest eingebaut ) Konrad Zuse (geb. 1910) beginnt mit der Planung einer programmgesteuerten Rechenmaschine Z1 . Duales Zahlensystem und Gleitkomma-Zahlendarstellung , Relaisrechner mit fest eingebauter Steuerung („festverdrahtetes Programm ) Die elektromechanische Anlage Z3 von Zuse ist fertig. Erster funktionsfähiger programmgesteuerte Rechenautomat, Programmeingabe über gelochte Filmstreifen (extern, gesteuerter Programmablauf), Unterprogramme in Form von Lochstreifenschleifen realisiert, 3000 Relais H. H. Aiken (1900 - 1973) erbaut Mark 1. Additionszeit 1/3 sec, Multiplikationszeit 6 sec. Zusammenschaltung von Lochkartenmaschinen ( Mark I ) ohne externe Programmsteuerung Länge 16m, Gewicht 35t, Weiterentwicklungen zu Relaisrechner (Mark II), Dezimalsystem Elektromechanische Rechenwerke, benutzen langsame äußere Speicher (Lochkarten, Lochstreifen) (verschiedene Algorithmen durch äußeren Programmspeicher verarbeitbar ) Rechnergrundlagen Teil 1 1946 -4- Prof.Dipl.-Ing. Komar J. P. Eckert und J. W. Mauchly erbauen ENIAC (Electronic Numerical Integrator and Calculator). Erster voll elektronische Rechner (18000 Elektronenröhren, Gewicht 30t, Leistungsaufnahme 175 kW). Multiplikationszeit 3 ms, Programmsteuerung durch Stecktafeln John von Neumann schlägt das im Rechner gespeicherte Programm vor, eine sogn. „speicherprogrammierte Rechenanlage“ 1949 M. V. Wilkes baut EDVAC. (Electronic Discrete Variable Automatic Calculator ) Erster universeller Digitalrechner mit binärer Codierung und einheitlichem internen Programm und Datenspeicher (erster „von Neumann Rechner “ ) Ab 1950 Industrielle Rechnerproduktion. Die weitere Entwicklung wird in Rechner-Generationen anhand der Technologie der elektronischen Schalter ( Röhre, Transistor, integrierte Schaltkreise, hochintegrierte Schaltkreise, usw. ) dargestellt. Generation Charakterisierung 1 Bis Ende der fünfziger Jahre. Elektronenröhren als Schaltelemente; zentrale Speicher von wenigen hundert Maschinenwörtem, typ. Additionszeiten 100 - 1000µsec, Speicherkapazität <100 Zahlen, Programmiert wurde umständlich mit Zahlenkolonnen, keine Software vorhanden 2 Bis Ende der sechziger Jahre. Transistorschaltkreise; Ferritkern-, Band-, Trommel-, Plattenspeicher, typ. Additionszeiten 1 – 10 µsec, Speicherkapazität einige 1000 Zahlen, Assemblerprogrammierung, maschinenunabhängige Programmiersprachen wie Fortran und Cobol, erste Betriebssysteme für bessere Ausnutzung 3 Seit Mitte der sechziger Jahre. Teilweise integrierte Schaltkreise, Rechnerfamilien wie IBM 360 UNIVAC 9000, Siemens 4004 in Stufen ausbaubar und damit fertige Programme weiterverwendbar (Kompatibilität), Timesharing (Multiuser-Betrieb) , mit Bildschirmen beginnt die graphische Datenverarbeitung , Lochkartenstapel-Arbeitsweise 4 Seit Anfang der siebziger Jahre. Überwiegend hochintegrierte Schaltkreise; Mikroprozessor = Rechnerkern CPU auf einem Chip; 8-Bit-Architektur, der Mikrocomputer führt mit Home- und Personal-Computer PC zu einer drastischen Dezentralisierung und eröffnet neue Dimensionen in der Mensch-Maschine-Kommunikation, Betriebssysteme CP/M, MS-DOS und UNIX 5 Seit Anfang der achtziger Jahre. Hochintegrierte Schaltkreise; Mikrocomputer auf einem Chip, mehrere Prozessoren auf einem Chip; 16- und 32-Bit-Architekturen; Mikrocomputer-Netzwerke, lokale und globale Netze, Neuronale Netze und parallele Multiprozessorsysteme, Multimedia Abkehr von der vorherrschenden von-Neumann-Architektur Elektronische Rechenanlagen ( Algorithmen im inneren Programmspeicher ) Rechnergrundlagen Teil 1 1.2 Einteilung der -5- Prof.Dipl.-Ing. Komar Informatik Technische Informatik Hardwarekomponenten Schaltnetze Schaltwerke Prozessoren Praktische Informatik Algorithmen Datenstrukturen Programmiermethoden Programmiersprachen und Compiler Mikroprogrammierung Theoretische Informatik Automatentheorie Theorie der Formalen Sprachen Angewandte Informatik Informationssysteme Computergrafik Künstliche Intelligenz Theorie der Berechenbarkeit Digitale Signalverarbeitung Betriebssyteme Rechnerorganisation und –architektur Softwaretechnik Komplexitätstheorie Schnittstellentechnik und Rechnernetze Mensch-MaschineKommunikation Simulation und Modellierung Algorithmenanalyse Textverarbeitung und Büro-Automation Theorie der Programmierung Automatische Programmsynthese Formale Semantik Spezifische Anwendungen Wirtschaft Verwaltung Ingenieurwissenschaften Naturwissenschaften Medizin Kunst Theoretische Informatik befaßt sich mit Grundlagenfragen und abstrahiert dabei von den technischen Gegebenheiten realer Computer. Sie bedient sich in starkem Maße mathematischer Begriffe und Methoden Technische Informatik behandelt die Bestandtteile, den Aufbau und die Zusammenarbeit von Computern, also die Hardware ( Schaltkreise, Schaltnetze, Schaltwerke ) Praktische Informatik behandelt Algorithmen, Datenstrukturen, Programmiersprachen und Programmierungstechniken, Betriebssysteme, Compilerbau , Softwaretechnik (Kern der Informatik ) Angewandte Informatik hat ebenfalls die Programmierung im Mittelpunkt. Der Computer wird hier dagegen als Werkzeug zur Lösung von Aufgaben eingesetzt, die außerhalb der eigenen Weiterentwicklung liegen, also für Anwendungen in allen anderen Bereichen. Das Arbeitsgebiet der Informatik kann man letztlich auch als eine Ingenieursdisziplin betrachten. Rechnergrundlagen Teil 1 1.3 Theoretische Grundlagen Boolsche Algebra -6- Prof.Dipl.-Ing. Komar Themen der Informatik Einführung Informationstheorie Algorithmen Codierungstheorie Zahlendarstellung Optimale Codierung Logische Schaltungen Mikroprocessor Hardware Computersysteme Betriebssysteme Assemblersprachen Betriebssysteme und Systemsoftware Höhere Sprachen Rechnergrundlagen Teil 1 -7- Prof.Dipl.-Ing. Komar 2. Grundbegriffe: Information, Nachricht, Codierung, Digitalisierung Information ist neben Energie und Materie der dritte fundamentale Begriff in Wissenschaft und Technik Information ist aber ein sehr vielschichtiger Begriff, der mathematisch nicht fassbar ist. Information: Der Begriff Information ist formal nicht definiert und eigentlich subjektiv. Eine Information ist die Bedeutung, die durch eine Nachricht übermittelt wird, und ist abhängig von vorhergegangenen Vereinbarungen. Information ist Gewinn an Wissen bzw beseitigt Ungewissheit oder Information ist beseitigte Unsicherheit Information wird durch eine Zuordnung ( Interpretation ) aus der Nachricht extrahiert und ist damit der semantische Gehalt einer Nachricht Die abstrakte Information wird durch die konkrete Nachricht mitgeteilt, d.h. die Information wird über eine Interpretationsvorschrift (Abbildungsvorschrift) aus der Nachricht abstrahiert bzw aus ihr herausgelesen. Bei gegebener Information kann es verschiedene Nachrichten geben, welche diese Information wiedergeben, z.B. kann die gleiche Information durch Nachrichten in verschiedenen Sprachen übermittelt werden. In der Kryptologie soll niemand Unbefugtes (ohne Schlüssel) der Nachricht die Information entnehmen können. Andererseits ist die Information einer Nachricht, bzw. deren Interpretation nicht unbedingt eindeutig z.B. die Bedeutung des Wortes "Erblasser" - Person die vererbt oder - Person die erbleicht Information kann man - mitteilen oder - aufbewahren oder - verändern oder übertragen speichern verarbeiten (über räumliche Distanz transportieren) (über zeitliche Distanz transportieren ) Erhalten u. Übertragen von Information ist an Erhalten u. Übertragen von Nachrichten gebunden und dies an die Übermittlung von Signalen oder Zeichen Nachricht: Gebilde aus Zeichen oder kontinuierlichen Funktionen , die aufgrund bekannter oder unterstellter Abmachung Informationen darstellen und die vorrangig zum Zweck der Weitergabe als zusammengehörig angesehen und deshalb als Einheit betrachtet werden. (DIN 44300 Teil 2) Als Sonderfall wird der Begriff Daten aufgefaßt, der sich nur durch die Zweckbestimmung von der Nachricht unterscheidet ( Informatik arbeitet mit Daten ) Daten (Datum /Datenelement) : Gebilde aus Zeichen oder kontinuierlichen Funktionen, die aufgrund bekannter oder unterstellter Abmachung Information darstellen, vorrangig zum Zweck der Verarbeitung oder als deren Ergebnis. Weitere Definitionen: Nachricht ist eine begrenzte Folge diskreter, einzelner Zeichen oder Zustände, die zur Übertragung von Information dienen Die Nachricht läßt sich als Folge von Zeichen auffassen, die von einem Sender (Quelle) ausgehend, in irgendeiner Form einem Empfänger (Senke) übermittelt wird. Während der Übermittlung ist auch immer die Möglichkeit eine Störung der Nachricht gegeben. Nachricht ist eine räumliche oder zeitliche Anordnung von Signalen, die zwischen Sender und Empfänger ausgetauscht werden. Quelle Übertragungsmedium Senke Störung Sender Nachrichtenkanal Empfänger Rechnergrundlagen Teil 1 -8- Prof.Dipl.-Ing. Komar Signale sind die Darstellung von Nachrichten oder Daten mit physikalischen Mitteln, sie sind die Träger einer Nachricht. Signale sind die systematische Veränderung von Parametern einer physikalischen Größe in Raum oder Zeit nach vereinbarten Regeln. Ein Signalparameter ist diejenige Kenngröße des Signals, deren Wert oder Werteverlauf die Nachricht oder die Daten darstellt, z.B. die Amplitude einer amplitudenmodulierten Wechselspannung. Beispiele für physikalische Größen als Träger von Nachrichten: Physikalische Größe Veränderbare Parameter Spannung, Strom Amplitude, Kurvenform ,Frequenz Feldstärke Betrag, Richtung Reflexionsfähigkeit Reflexionsfaktor Durchlässigkeit Transmissionsfaktor Ein analoges Signal ist ein Signal, dessen Signalparameter analoge Nachrichten oder Daten kontinuierlich abbildet (kontinuierliches Signal , stetiger Wertebereich). Es hat unendlich viele Signalwerte innerhalb des nutzbaren Signalbereiches analog = > entsprechend Darstellung einer Größe durch eine entsprechend andere z.B. Uhrzeit dargestellt durch den sehr anschaulichen Winkel der Uhrzeiger . Die Darstellung ist damit ein direktes Abbild der darzustellenden Größe Ein digitales Signal ist ein Signal, dessen Signalparameter eine Nachricht oder Daten darstellt, die nur aus Zeichen besteht bzw. bestehen (diskretes Signal). Bei einem digitalen Signal kann der Signalparameter nur endlich viele Werte annehmen. ( griechisch digitus = Finger ) Die Darstellung ist damit eine symbolische Beschreibung der darzustellenden Größe. Bei den in der Technik üblichen digitalen, binären Signalen sind es zwei Werte oder Wertebereiche ( 0 und 1, L und H oder true und false ). Binäre Signale sind technisch besonders einfach und kostengünstig zu realisieren. Wenn in der Technik allgemein von „digital“ gesprochen wird, ist immer digital binär gemeint. Schnittstelle zwischen Elektrotechnik und Informatik: In der Natur fast nur analoge Signale- (Ausnahme Quantenphysik) In der Informatik die Verarbeitung digitaler, binärer Signale Eine digitale Nachricht ist eine aus den Zeichen eines Alphabets gebildete Zeichenfolge, also z:B. dieser schriftliche Text Zeichen oder Symbol: Element aus einer endlichen Menge von Objekten ( Zeichenvorrat, Alphabet), die zur Darstellung von Information vereinbart wurde. Ein Zeichen ( Symbol) ist ein Element eines Codes und wird durch eine bestimmte Anzahl von Signalen ( Code-Elemente ) dargestellt. Alphabet: Ein in vereinbarter Reihenfolge geordneter Zeichenvorrat Für die Informatik von großem Interesse ist das kleinste Alphabet mit einem binären Zeichenvorrat , der nur aus zwei Zeichen besteht, den Symbolen 0 und 1, auch Binärzeichen oder Bit ( binary digit = Binärziffer ) genannt. ( 0,1,2,3,4,5,6,7,8,9 ) Alphabet der Dezimalziffern ( a,b,c,....A,B,C,.... ) Alphabet der Buchstaben ( rot, gelb, grün ) Alphabet der Verkehrsampelsignale Rechnergrundlagen Teil 1 -9- Prof.Dipl.-Ing. Komar Code ist eine Vorschrift für die eindeutige Zuordnung (Codierung) der Zeichen eines Zeichenvorrates ( Urmenge, Quellalphabet ) zu denjenigen eines anderen Zeichenvorrates ( Bildmenge, Zielalphabet ). Auch die Bildmenge einer solchen Abbildung wird als Code bezeichnet Die Übersetzung aus der Urbildmenge in die Bildmenge heißt Codierung ( Verschlüsselung ), der umgekehrte Vorgang Decodierung ( Entschlüsselung ) Ist das Zielalphabet einer Codierung ein binäres Alphabet, so spricht man von einem Binärcode. Binärcodierung ist die Codierung irgendeines Alphabets durch Folgen von Binärzeichen und da alle denkbaren Alphabete sich durch Folgen von Binärzeichen ausdrücken lassen, ist es möglich , im Computer nur die Binärzeichen 0 und 1 zu benutzen und aus ihnen die ganze Vielfalt der zu verarbeitenden Daten aufzubauen. Codewort ist die aus der Codierung eines einzelnen Zeichens hervorgehende binäre Zeichenfolge. Beispiele: a) Die folgende Codetabelle zeigt eine von vielen Möglichkeiten, das Alphabet der zehn Dezimalziffern durch Gruppen von vier Binärziffern (Codewörter) zu codieren: Binär 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 Dezimal 0 1 2 3 4 5 6 7 8 9 b) Im 2-aus-5-Code wird die Dezimalziffer 4 eindeutig-umkehrbar durch die fünfstellige binäre Zeichenfolge 01001 abgebildet. Eine Zeichenfolge von 8 Binärziffern wird zusammengefaßt zu einem Byte: 1 Byte = 8 Bit Größere Zahlen von Bits oder Bytes kürzt man mit folgenden Größenfaktoren ab: Kilo Mega Giga Tera 1K = 1M= 1 G= 1T = 210 220 230 240 = 1024 1 Kbit = 1024 Bit bzw 1Kbyte = 1024 Byte = 1 048 576 1 Mbyte = 1 048 576 Byte = 1 073 741 824 = 1 099 511 627 776 Die binärcodierte Darstellung von Daten hat folgende Vorteile: Genauigkeit. Die digitale Darstellung kann durch Hinzufügen weiterer Binärziffern (Bits) beliebig genau gemacht werden. Geringe Störempfindlichkeit. Da binäre Symbole durch zweiwertige, physikalische Größen dargestellt werden, bleiben Störungen ohne Auswirkung, sofern sie eine bestimmte Größe nicht überschreiten. Speicherbarkeit. Bedingt durch die Zweiwertigkeit lassen sich binäre Werte hervorragend speichern. Verarbeitung digitale Funktionen für die Verarbeitung binärer Signale lassen sich technisch leichter miniaturisieren, integrieren und sehr viel kostengünstiger herstellen als analoge Funktionen, bei denen Streu-, Rausch-, Linearitäts- und Reproduzierbarkeits-Probleme auftreten. Rechnergrundlagen Teil 1 - 10 - Prof.Dipl.-Ing. Komar 2.1 Digitalisieren Heutzutage werden mit dem Computer längst nicht mehr nur Zahlen verarbeitet, sondern alles was zähl- und meßbar ist wie Zahlen, Texte, Sprache, Musik, Bilder und viele andere physikalische Größen mit ihrem zeitlichen Verläufen werden von Computern verarbeitet. Um diese vielfältigen Informationen verarbeiten zu können, müssen diese zuerst in eine für den Computer gemäße Form umgewandelt werden, nämlich in digitale, binärcodierte Daten. Bei Informationen, die bereits in digitaler (diskreter) Form vorliegen, wie z.B. Zahlen und Texte erfordert dies nur noch eine entsprechende Binärcodierung, bei analogen physikalischen Größen ist diese Digitalisierung über eine Analog-Digital-Wandlung zu erzielen. A/D-Wandlung bedeutet, man „rastert“ die stetige (kontinuierliche) physikalische Größe und die stetige Zeit und durch diese Diskretisierung ersetzt man einen unendlichen durch einen endlichen Wertevorrat. Die erhaltenen diskreten (digitalen) Daten werden danach nur noch binärcodiert. analoge Darstellung (durch eine geometrische oder physikalische Größe ) Diskretisierung diskretisierte wertkontinuierliche (analoge ) Darstellung (diskret bezüglich Zeit und/oder Ort, unendlicher Wertevorrat ) Digitalisierung digitale Darstellung durch Zahlen ( mehrwertiger, aber endlicher Wertevorrat ) (diskret bezüglich Zeit /Ort und Amplitude ) Codierung binäre, digitale Darstellung für Rechnerverarbeitung ( zweiwertige parallele oder serielle Darstellung ) Zusammenhang der Begriffe analog, diskretisiert, digital und binär Eine Temperaturkurve, ihre Diskretisierung und Digitalisierung Ein Bild, seine diskretisierte und seine digitalisierte Darstellung Rechnergrundlagen Teil 1 - 11 - Prof.Dipl.-Ing. Komar 2.2 A/D-Wandlung Erzeugung der binärcodierten Darstellung ( Digitalisierung ) einer physikalischen Größe mit stetigem Wertebereich am abstrahierten Beispiel einer Analog-Digital-Wandlung U Analogsignal Signal kontinuierlich in Zeit und Wert Signal ->Spannung U Signalparameter -> Amplitude der Spannung Nachricht : Spannungsverlauf über der Zeit Information : Temperaturverlauf über der Zeit Interpretationsvorschrift : Temp = f ( U ) t Abtastung (Entnahme kurzer Amplitudenproben zu äquidistanten Zeitpunkten) U Signal diskret in Zeit , kontinuierlich im Wert Abtasttheorem (Shannon) Kein Informationsverlust wenn gilt: Fabtast > 2 Fsignal_max t U Quantisierung (Unterteilung des Wertebereiches in eine endliche Anzahl Intervalle) Signal diskret in Zeit und Wert digitales Signal (durch Zahlen darstellbar) Quantisierungsfehler durch Verfeinerung der Amplitudenstufung verringerbar t U Codierung (Wertestufen ersetzen durch binäres Codewort ) digitales, binäres Signal störunempfindlich durch nur noch zwei gültige Werteintervalle t Serielle (Übertragung) oder parallele (Verarbeitung) Realisierung möglich hier: serieller Zeichenstrom Rechnergrundlagen Teil 1 - 12 - Prof.Dipl.-Ing. Komar 3. Informationstheorie Die von Shannon 1948 entwickelte Informationstheorie untersucht Darstellung, Speicherung und Austausch von Information mit Methoden aus der Wahrscheinlichkeitsrechnung und der mathematischen Statistik. Sie versucht ein Maß zu finden für den Informationsgehalt einer diskreten Nachricht. In Abgrenzung von dem sehr weit gefassten intuitiven Begriff "Information " befasst man sich in dem hier betrachteten speziellen Fall mit der mathematisch fassbaren Entscheidungsinformation, die ihrem Wesen nach statistischen Charakter trägt und nicht nach der semantischen Bedeutung oder dem Zweck einer Information fragt. 3.1 Informationsgehalt Mit dem Informationsgehalt möchte man ein Maß dafür finden, wieviel Information ein Zeichen trägt, um einen möglichst quantitativen Vergleich mit anderen zu haben und es im Hinblick auf seinen technischen Darstellungsaufwand bewerten zu können. Es gibt kein Instrument zur Messung des Informationsgehaltes, er kann nur berechnet werden. Eine diskrete Quelle erzeugt eine endliche Menge diskreter Symbole (Zeichen ). Für die Auftrittswahr scheinlichkeit p(i) der voneinander unabhängigen Zeichen eines Alphabets ( Symbole einer diskreten Quelle ) gilt: 0 ≤ p (i) ≤ 1 E ∑ p(i) = 1 i=1 p = 0 : völlige Ungewissheit ( Zeichen tritt nicht auf ) p = 1 : Gewißheit (nur dieses eine Zeichen, keine Information ) Statistisch unabhängige Zeichen liegen dann vor, wenn aus der Kenntnis eines Zeichens nicht auf das folgende Zeichen geschlossen werden kann. An die mathematische Beschreibung des statistischen Informationsgehaltes h(i) eines Zeichens i , das in einer Nachricht mit der Auftrittswahrscheinlichkeit p (i) vorkommt, stellt man nun folgende Forderungen: 1. Je seltener ein bestimmtes Zeichen i auftritt, d.h. je kleiner seine Auftrittswahrscheinlichkeit p (i) ist, desto größer soll der Informationsgehalt h (i) dieses Zeichens sein. Häufig auftretende Zeichen sollen also einen niedrigen Informationsgehalt haben, selten auftretende einen hohen, denn Information ist das Unerwartete und seltenere Zeichen bedeuten eine größere „Überraschung“ beim Empfänger, übermitteln also mehr Information. Der Informationsgehalt h (i) muß demnach umgekehrt proportional der Wahrscheinlichkeit p(i) sein und streng monoton wachsen. h (i) ~ f ( 1 / p i ) 2. 1 / p(i) = Überraschungswert Die Gesamtinformation einer Zeichenfolge aus mehreren unabhängigen Zeichen soll gleich der Summe der Informationsgehalte der einzelnen Zeichen sein. Wobei die Auftrittswahrscheinlichkeit dieser Zeichenfolge gleich ist dem Produkt der Einzelwahrschein lichkeiten pi der die Nachricht bildenden Zeichen. p (i1 i2 i3 ) = p (i1 ) * p (i2 ) * p ( i3 ) und es muß gelten h ( i1 i2 i3 ) = h (i1 ) + h ( i2 ) + h ( i3 ) Beispiel: p (e) = 0,3 ; p (h) = 0,1 Zeichenfolge e h e p (ehe) = p(e) * p(h) * p(e) = 0.3 * 0,1 * 0,3 = 0,009 und h ( e h e ) = h (e) + h (h) + h (e) 3. Weiter soll ein Zeichen i , das mit Sicherheit auftritt p (i ) = 1 , keinen Informationsgehalt haben h (i ) = 0 denn es erscheint nur immer dieses eine gleiche Zeichen und das vermittelt keine Information. Die einfachste Funktion, welche diese Forderungen erfüllt, ist der Logarithmus log (x y ) = log x + log y log ( 1 ) = 0 Rechnergrundlagen Teil 1 - 13 - Prof.Dipl.-Ing. Komar Mit diesen Grundannahmen hat Shannon den Informationsgehalt h eines einzelnen Zeichens wie folgt definiert: h ( i ) = log b 1/p(i) = - log b p(i) Die Basis b des Logarithmus bestimmt lediglich den Maßstab, mit dem man Information messen möchte. Man kann die Basis b, die auch als Entscheidungsgrad bezeichnet wird, als die Anzahl der Zustände interpretieren, die in der Nachrichtenquelle angenommen werden können. In der Technik werden die Werte b= 2, b = 10 und b = e verwendet b=2 h in [bit] mit log 2 = ld = Logarithmus dualis mit b = 10 h in b = e = 2.71828... ld N = 3.322 lg N [dit /Hartley] mit log 10 = lg [nit / nepit ] mit log e = ln dekadischer Logarithmus natürlicher Logarithmus Da die meisten Taschenrechner die ld-Funktion nicht aufweisen, kann man den ld –Wert auch mit Hilfe des Dekadischen Logarithmus bestimmen: ld N = log 2 N = lg N / lg 2 = 3,322 * lg N Im Falle b = 2 entsprechen die beiden Zustände ( 0 und 1 ) einer computergemäßen binären Darstellung und der Informationsgehalt h(i) gibt die Anzahl der als Elementarentscheidungen bezeichneten Alternativ entscheidungen an, die nötig sind um ein Zeichen eindeutig identifizieren zu können. Wichtig ist damit der Informationsgehalt speziell im binären : h(i) = ld 1/p(i) [bit] Die Einheit des Informationsgehaltes in Binärsystemen heißt bit ( basis information unit ). Nicht zu verwechseln mit der Einheit für die Darstellung von Daten durch binäre Zeichen Bit ( binary digit ). bit : abstrakt, kontinuierlich Bit: konkret, diskret (nur ganzzahlig ) Bit ≥ bit Informationsgehalt / Entropie Maßeinheit für Daten in binärer Darstellung Beispiel: In einem deutschsprachigen Text tritt der Buchstabe b mit der Wahrscheinlichkeit 0.016 auf. Wie groß ist der Informationsgehalt dieses Zeichens ? h (b) = ld (1/0.016) = 1/lg (2) * lg (1/0.016) = 3.322 lg 6.25 = 3.322 * 1.79588 = 5.97 bit Empfängt man eine Nachricht in Form eines Binärwortes, so ist für jedes der empfangenen Zeichen nacheinander die Elementarentscheidung zu treffen, ob es sich um das Zeichen 0 oder 1 handelt. Die Anzahl der Entscheidungen, also der Informationsgehalt des Zeichens, ist hier notwendigerweise mit der Anzahl der binären Stellen des Zeichens identisch. Einen derartigen Entscheidungsprozess kann man in Form eines Binärbaumes veranschaulichen. Der Sender (diskrete Quelle ) verfügt über ein Nachrichtenalphabet mit dem Elementarvorrat E , der Zahl der Zeichen des Quell-Alphabets. Dieses Quell-Alphabet wird auf ein Ziel-Alphabet ( Kanal-Alphabet, binär ) abgebildet und übertragen der Empfänger kehrt die Abbildung des Senders um und rekonstruiert die ursprüngliche Nachricht durch eine Anzahl von Binärentscheidungen (Alternativentscheidungen, Ja-Nein-Entscheidungen ) Rechnergrundlagen Teil 1 - 14 - Prof.Dipl.-Ing. Komar Übertragungskanal Sender Empfänger binär Zuordnung (Codierung) Zuordnung (Decodierung) Alphabet 1 Alphabet 2 A 000 B 001 C 010 D 011 E 100 F 101 G 110 H 111 Codetabelle Alphabet 2 Alphabet 1 000 A 001 B 010 C 011 D 100 E 101 F 110 G 111 H Codetabelle Ein Alphabet mit der einheitlichen Stellenzahl n je Zeichen und mit B-Werten je Stelle hat den Elementarvorrat E = B n , das Alphabet besteht also aus E Zeichen Alphabet 1 : n = 1 B = 8 -> E = 8 Alphabet 2: n=3 B = 2 -> E = 23 = 8 Beim Auswahlvorgang im Empfänger ( Decodieren ) wird ein Codebaum durchlaufen, indem die Stellen des empfangenen Zeichens durch Binärentscheidungen abgefragt werden. Codebaum (Binärbaum) des Auswahlvorgangs beim Empfänger durch Binärentscheidungen Empfangen: 100 -> 3 Binärentscheidungen -> E Alphabet 2 000 Alphabet 1 A 001 B 010 C 0 1 0 0 1 1 011 0 0 100 100 E 101 F 110 G 111 H 1 1 0 0 1 1 Damit kann man sich nun den Informationsgehalt eines Zeichens innerhalb eines Zeichenvorrates vorstellen als die Anzahl der Binärentscheidungen, die der Empfänger fällen muß, um dieses Zeichen zu ermitteln. Da in obigem Beispiel durch die Annahme von gleichwahrscheinlichen Elementen des Alphabets 1 alle Zeichen mit der gleichen Stellenzahl von 3 Bit binär codiert wurden, ist der Informationsgehalt und auch die Anzahl der Binärentscheidungen für jedes Zeichen gleich. Wenn die Auftrittswahrscheinlichkeit der Quellsymbole nicht mehr gleich ist (praktisch der Normalfall), so kann der Informationsgehalt h eines Quellsymbols angesehen werden als der für dieses Symbol erforderliche minimale binäre Codierungsaufwand in bit / Symbol, wobei eine nicht ganzzahlige binäre Stellenzahl [bit] natürlich nur als aufgerundeter ganzzahliger Wert [Bit] realisierbar ist. Rechnergrundlagen Teil 1 - 15 - Prof.Dipl.-Ing. Komar 3.2 Entropie oder mittlerer Informationsgehalt Eine Nachricht setzt sich im allgemeinen aus Zeichen bzw. aus zu Worten verbundenen Zeichen zusammen, die mit unterschiedlicher Häufigkeit auftreten und damit einen unterschiedlichen Informationsgehalt tragen. Wenn nun die Zeichen eines Alphabetes mit unterschiedlicher Wahrscheinlichkeit auftreten, dann ist jetzt der durchschnittliche Informationsgehalt eines einzelnen Zeichens in einer langen Zeichenfolge von Interesse. Dies ist der sogn. Erwartungswert oder auch der Mittelwert der Informationsgehalte aller Zeichen . Wenn man in diesem Fall den Informationsgehalt h (i) für alle E Quellensymbole mit der zugehörigen Wahrscheinlichkeit p(i) gewichtete und aufsummiert, dann erhält man den Mittelwert der Information, den diese Quelle pro Symbol abgibt. Sei h(i) der Informationsgehalt des i-ten Zeichens und p(i) die Wahrscheinlichkeit, mit der dieses Zeichen auftritt, so ist der mittlere Informationsgehalt H , auch Entropie H genannt, gegeben durch H = E ∑ p(i) h(i) = i=1 E ∑ E p(i) ld 1/p(i) = - ∑ p(i) ld p(i) [bit] i =1 i=1 H wird auch als mittlerer Entscheidungsgehalt pro Zeichen oder als Entropie der Nachrichtenquelle bezeichnet und gibt auch für die Codierung das Minimum der mittleren Binärstellenzahl an. Mit Hilfe der Variationsrechnung kann man zeigen, daß H dann maximal wird, wenn alle Zeichen des Alphabets ( Elementarvorrat E ) gleich wahrscheinlich sind mit p( i ) = 1 / E => H0 = H max = E E i=1 i=1 ∑ p(i) ld 1/p(i) = ∑ (1 / E ) ld E = E *1 / E * ld E = ld E H0 wird als Entscheidungsgehalt bezeichnet und ist in der Informationstheorie die maximale Information, die eine Quelle pro Symbol abgeben kann. D.h. jede Quelle, deren Symbole nicht gleichverteilt sind, sendet nicht die maximale Information pro Symbol und dies ist im allgemeinen bei realen Nachrichtenquellen der Fall. Damit verringert jede Abweichung von der Gleichverteilung den Informationsgehalt, d.h. die Quelle nützt dann die Möglichkeiten des Zeichenvorrates ( Elementarvorrat E ) nicht aus. Die Differenz zwischen dem Entscheidungsgehalt H0 und dem mittleren Informationsgehalt H der Quelle wurde von Shannon als Redundanz der Quelle bezeichnet: R = H0 – H [ bit ] Quellen-Redundanz Diese Redundanz im informationstheoretischen Sinne wird auch als Redundanz vor der Codierung bezeichnet. Das bedeutet, eine Quelle enthält umso mehr Redundanz, je geringer ihr mittlerer Informationsgehalt H gegenüber dem Entscheidungsgehalt H0 ist. Als Entropie des deutschen Alphabets hat man für 30 Buchstaben (Großbuchstaben und Leerzeichen ) unter der Annahme unabhängiger Zeichen einen Wert von H = 4,11 bit ermittelt. Bei der Berücksichtigung von Abhängigkeiten ergibt sich von Silben ( Silbenlänge = 3,03 Buchstaben , H = 2,8 bit ) über Wörter ( Wortlänge = 5,53 Buchstaben , H = 2,0 bit ) bis zur Statistik von Sätzen ( H = 1,6 bit ) ein sich immer weiter reduzierender mittlerer Informationsgehalt des deutschen Alphabets. Der errechnete Wert der Entropie H = 1,6 bit für die deutsche Schriftsprache besagt, daß man für die Codierung langer deutschsprachiger Texte nur 21,6 = 3 Symbole benötigen würde, die in den Codewörtern gleichhäufig auftreten müßten. Solche Texte wären natürlich völlig unverständlich bzw bei dem kleinsten Fehler von nur einem Symbol könnten sie vollständig unlesbar werden. Aber man könnte so die Quellenredundanz von R = H0 – H = ld 30 – 1,6 = 4,9 – 1,6 = 3,3 bit beseitigen. Rechnergrundlagen Teil 1 - 16 - Prof.Dipl.-Ing. Komar 3.3 Mittlere Wortlänge und Codierungs-Redundanz Im allgemeinen Fall sind die Zeichen einer Nachricht nicht gleichwahrscheinlich. D.h. die einzelnen Zeichen des zugrundeliegenden Alphabets werden mit unterschiedlicher Häufigkeit in der Nachricht auftreten. Es ist naheliegend, die Codierung so zu wählen, daß für häufiger auftretende Zeichen des Quellalphabets kürzere Zeichen im binären Zielalphabet gewählt werden um insgesamt die Anzahl der Binärentscheidungen beim Empfang einer Zeichenfolge zu minimieren bzw. die mittlere Anzahl der Binärentscheidungen pro Zeichen zu minimieren (Codierung mit variabler Wortlänge ). Codewörter für Zeichen mit geringer Wahrscheinlichkeit enthalten demnach bei optimaler Codierung mehr Binärstellen als jene mit größerer Wahrscheinlichkeit. Mehr Binärstellen bedeuten mehr Binärentscheidungen und mehr Binärentscheidungen bedeutet mehr Informationsgehalt. Informationstheoretisch ausgedrückt: Es ist eine (binäre) Ersatzquelle durch Umcodieren so zu schaffen, daß die Auftrittswahrscheinlichkeit ihrer Symbole möglichst eine Gleichverteilung ergibt und die Ersatzquelle damit pro (binärem) Symbol ein Maximum an Information abgibt. Dieses Umcodieren ist möglich bei einem vermindertem Symbolvorrat (z.B. binär 0 und 1 ) der Ersatzquelle. Beispiel: Quelle Alphabet mit den vier Zeichen a, b, c, d Wahrscheinlichkeiten für deren Auftreten p(a) = ½ , p(b) = ¼, p(c) = 1/8, p(d) = 1/8 Summe aller Wahrscheinlichkeiten = 1 bekannte Wahrscheinlichkeit Alphabet 1 Überraschungswert p a b c d 1/p ½ ¼ 1/8 1/8 Binärstellenzahl l = ld 1/p 2 4 8 8 Informationsgehalt h = ld 1/p 1 2 3 3 Ziel Alphabet 2 1 2 3 3 0 10 110 111 Bei diesem Beispiel wurde jedes Zeichen mit seiner minimalen Binärstellenzahl l codiert und damit benötigt der Empfänger für die Decodierung jedes Zeichens eine andere Anzahl von Binärentscheidungen, als wenn man z.B. einheitlich mit der Binärstellenzahl 2 codiert hätte. H = p(a) ld 1/p(a) + p(b) ld 1/p(b) + p(c) ld 1/p(c) + p(d) ld 1/p(d) = H= 0.5 * 1 + 0.25 * 2 + 0.125 * 3 + 0.125 * 3 = 1.75 bit Die Entropie H = 1.75 bit zeigt, daß die gewählte Codierung im Mittel weniger Binärentscheidungen bei der Auswahl eines Zeichens zur Folge hat, als bei Codierung aller vier Zeichen mit gleicher Binärstellenzahl von l = 2, was dem H max = H0 = ld E = 2 bit entsprechen würde. Unter der mittleren Wortlänge L eines Codes versteht man die mit den Auftrittswahrscheinlichkeiten p(i ) gewichtete Summe der Längen l(i) der , den einzelnen Zeichen entsprechenden Codewörtern. L = E ∑ p(i) l(i) [ bit ] i=1 Wobei l(i) für die Länge oder Stellenzahl des dem i-ten Zeichen entsprechenden Codewortes steht. Da in obigem Beispiel die Länge jedes Binärwortes l(i) gleich dem Informationsgehalt h(i) gewählt werden konnte (ganzzahlig, denn die Wahrscheinlichkeiten sind Zweierpotenzen) , ist die mittlere Wortlänge L des Codes auch gleich dem mittleren Informationsgehalt H L = H = 1.75 bit Rechnergrundlagen Teil 1 - 17 - Prof.Dipl.-Ing. Komar Shannonsches Codierungstheorem H 1. Es gilt stets < L 2. Jede Nachrichtenquelle kann so codiert werden, daß die Differenz L - H beliebig klein wird, wenn man sich nicht auf die Codierung von einzelnen Zeichen beschränkt, sondern Gruppen von Zeichen zusammenfasst, die möglichst übereinstimmende Auftrittswahrscheinlichkeiten haben. (aber L - H = 0 nur möglich, wenn die Wahrscheinlichkeiten p(i) reziproke Potenzen von 2 sind ) Die mittlere Wortlänge L eines Codes ist immer größer oder bestenfalls gleich dem mittleren Informationsgehalt H der Zeichen des Codes. Die Differenz zwischen mittlerer Wortlänge L und mittlerem Informationsgehalt H wird mit Redundanz R des Codes bezeichnet ( auch als Redundanz nach der Codierung ) R = L – H [bit] mit R > 0 Codierungs-Redundanz Bezieht man die Redundanz R auf die mittlere Wortlänge L so erhält man die relative Redundanz r r = R/L manchmal auch in [%] In obigem Beispiel ist die mittlere Wortlänge L des Codes gleich dem mittleren Informationsgehalt H und damit die Redundanz nach der Codierung R = 0. Wären alle vier Zeichen des Codes mit gleicher Binärstellenzahl von 2 codiert worden, so ergäbe sich mit L = 2 die Redundanz R = L – H = 2 - 1.75 = 0.25 bit und r = 0.125 oder r = 12.5 % Im folgenden wird für obiges Beispiel für die durch Umcodierung erzeugte binäre Ersatzquelle die Statistik ihrer beiden Binärsymbole berechnet: Eine Nachricht aus 8 Quellsymbolen besteht entsprechend der Auftrittswahrscheinlichkeiten aus 4xa 2xb 1xc 1xd 4x0 2x0 1x0 Summe 7 x 0 2x1 2x1 3x1 7x1 und damit weisen die beiden Binärsymbole 0 und 1 die gleiche Auftrittshäufigkeit von 50% auf . Somit wurde aus der Redundanz vor der Codierung (Quellredundanz) von R = H0 – H = 0,25 bit durch die binäre Umcodierung die Redundanz nach der Codierung (Codierungsredundanz) mit R = L – H = 0 bit . Werden die 30 Zeichen des deutschen Alphabets mit 5 Bit gleichlang codiert ( H0 = ld 30 = 4,91 bit ) , so ergibt sich die Codierungs-Redundanz R bei der Annahme von unabhängigen Zeichen mit H = 4,11 bit zu R = L – H = 5 – 4,11 = 0,89 bit r = 17,8 % ( siehe Seite 26 ) Dagegen ergibt eine Codierung anhand der Wahrscheinlichkeiten ( FANO-Codierung ) eine mittlere Wortlänge von L = 4,148 bit und damit nur noch eine Redundanz von R = 0,034 bit , r = 0,81 %. Redundanz bedeutet, daß mehr Bit übertragen werden als für die Nachrichtenübermittlung eigentlich benötigt werden und bedingt damit unausgenutzte Kapazität und erhöhte Kosten. Da in praktischen Fällen die einzelnen Zeichen fast nie gleich häufig auftreten, ist die Codierung mit fester Wortlänge meist redundand. Andererseits ermöglicht erst die Redundanz bei Übertragungsstörungen eine Fehlererkennung oder gar Fehlerkorrektur. Natürliche Sprachen weisen einen sehr hohen Grad an Redundanz auf, so daß sich zum Beispiel das Auslassen von Buchstaben oder Silben nicht unbedingt verständnismindernd auswirken muß. Rechnergrundlagen Teil 1 - 18 - Prof.Dipl.-Ing. Komar Zusammenfassung E ∑ p(i) = 0 ≤ p (i) ≤ 1 Auftrittswahrscheinlichkeiten 1 i=1 h(i) = ld 1/p(i) Informationsgehalt eines Zeichens [bit] Entropie , mittlerer Informationsgehalt H = E ∑ p(i) h(i) = i=1 E ∑ E p(i) ld 1/p(i) = - E Entscheidungsgehalt H0 = H max = mittlere Code-Wortlänge p(i) ld p(i) ∑ E p(i) ld 1/p(i) = i=1 Quellen-Redundanz (vor der Codierung) ∑ i=1 R = H0 – H L = ∑ (1 / E ) ld E = E *1 / E * ld E = ld E E ∑ p(i) [ bit ] l(i) [ bit ] i=1 Codierungs-Redundanz (nach der Codierung) [bit] i =1 i=1 R = L – H [bit] mit R > 0 Rechnergrundlagen Teil 1 - 19 - 3. 4 Tabelle zur Berechnung der Entropie p ld (1/p) p ld (1/p) H2 (p) 0,00 0,01 0,02 0,03 0,04 0,05 0,06 0,07 0,08 0,09 0,10 0,11 0,12 0,13 0,14 0,15 0,16 0,17 0,18 0,19 0,20 0,21 0,22 0,23 0,24 0,25 0,26 0,27 0,28 0,29 0,30 0,31 0,32 0,33 0,34 0,35 0,36 0,37 0,38 0,39 0,40 0,41 0,42 0,43 0,44 0,45 0,46 0,47 0,48 0,49 0,50 0,51 0,52 0,53 0,54 0,55 0,56 0,57 0,58 0,59 0,60 0,61 0,62 0,63 – 6,64386 5,64386 5,05889 4,64386 4,32193 4,05889 3,83650 3,64386 3,47393 3,32193 3,18442 3,05889 2,94342 2,83650 2,73697 2,64386 2,55639 2,47393 2,39593 2,32193 2,25154 2,18442 2,12029 2,05889 2,00000 1,94342 1,88897 1,83650 1,78588 1,73697 1,68966 1,64386 1,59946 1,55639 1,51457 1,47393 1,43440 1,39593 1,35845 1,32193 1,28630 1,25154 1,21754 1,18442 1,15200 1,12029 1,08927 1,05889 1,02915 1,00000 0,97143 0,94342 0,91594 0,88897 0,86250 0,83650 0,81097 0,78588 0,76121 0,73697 0,71312 0,68966 0,66658 0 0,06644 0,11288 0,15177 0,18575 0,21610 0,24353 0,26856 0,29151 0,31265 0,33219 0,35029 0,36707 0,38264 0,39711 0,41054 0,42302 0,43459 0,44531 0,45523 0,46439 0,47282 0,48057 0,48767 0,49413 0,50000 0,50529 0,51002 0,51422 0,51790 0,52109 0,52379 0,52603 0,52782 0,52917 0,53010 0,53062 0,53073 0,53045 0,52980 0,52877 0,52738 0,52565 0,52356 0,52115 0,51840 0,51534 0,51596 0,50827 0,50428 0,50000 0,49543 0,49058 0,48545 0,48004 0,47437 0,46844 0,46225 0,45581 0,44912 0,44218 0,43500 0,42759 0,41994 0 0,08079 0,14144 0,19439 0,24229 0,28640 0,32744 0,36592 0,40218 0,43647 0,46900 0,49992 0,52936 0,55744 0,58424 0,60984 0,63431 0,65770 0,68008 0,70147 0,72193 0,74148 0,76017 0,77801 0,79504 0,81128 0,82675 0,84146 0,85545 0,86872 0,88129 0,89317 0,90438 0,91493 0,92482 0,93407 0,94268 0,95067 0,95804 0,96480 0,97095 0,97650 0,98145 0,98582 0,98959 0,99277 0,99538 0,99740 0,99885 0,99971 1,00000 0,99971 0,99885 0,99740 0,99538 0,99277 0,98959 0,98582 0,98145 0,97650 0,97095 0,96480 0,95804 0,95067 Prof.Dipl.-Ing. Komar H2(p) = p ld (1/p) + (1 – p ) ld (1/1-p) p ld (1/p) p ld (1/p) H2(p) 0,64 0,65 0,66 0,67 0,68 0,69 0,70 0,71 0,72 0,73 0,74 0,75 0,76 0,77 0,78 0,79 0,80 0,81 0,82 0,83 0,84 0,85 0,86 0,87 0,88 0,89 0,90 0,91 0,92 0,93 0,94 0,95 0,96 0,97 0,98 0,99 1,00 0,64386 0,62149 0,59946 0,57777 0,55639 0,53533 0,51457 0,49411 0,47393 0,45403 0,43440 0,41504 0,39593 0,37707 0,35845 0,34008 0,32193 0,30401 0,28630 0,26882 0,25154 0,23447 0,21759 0,20091 0,18442 0,16812 0,15200 0,13606 0,12029 0,10470 0,08927 0,07400 0,05889 0,04394 0,02915 0,01450 0,00000 0,41207 0,40397 0,39564 0,38710 0,37835 0,36938 0,36020 0,35082 0,34123 0,33144 0,32146 0,31128 0,30091 0,29034 0,27959 0,26866 0,25754 0,24625 0,23477 0,22312 0,21129 0,19930 0,18713 0,17479 0,16229 0,14963 0,13680 0,12382 0,11067 0,09737 0,08391 0,07030 0,05654 0,04263 0,02856 0,01435 0,00000 0,94268 0,93407 0,92482 0,91493 0,90438 0,89317 0,88129 0,86872 0,85545 0,84146 0,82675 0,81128 0,79504 0,77801 0,76017 0,74148 0,72193 0,70147 0,68008 0,65770 0,63431 0,60984 0,58424 0,55744 0,52936 0,49992 0,46900 0,43647 0,40218 0,36592 0,32744 0,28640 0,24229 0,19439 0,14144 0,08079 0,00000 H2 = Entropie einer binären Datenquelle Rechnergrundlagen Teil 1 4. - 20 - Prof.Dipl.-Ing. Komar Codierung Ein Code ist eine Zuordnungsvorschrift zwischen zwei Zeichenmengen. Den Vorgang der Zuordnung nennt man Codierung bzw Decodierung. Zweck einer Codierung ist die Umformung einer gegebenen Zeichenmenge in eine nach bestimmten Kriterien geeignetere Zeichenmenge. Diese Kriterien folgen aus den jeweiligen technischen Problemen bei der Übertragung, Verarbeitung, Speicherung und Geheimhaltung von Nachrichten bzw Daten. Die Auswahl eines geeigneten Codes ist abhängig von den Forderungen, die an die binären Daten bezüglich ihrer Speicherung, Übertragung oder Verarbeitung gestellt werden, z.B. . Codes zur effektiven Rechnung ( z.B. Dualcode ) . Codes zur Datenübertragung und Speicherung ( prüfbare Codes ) . Codes zur Meßwertaufnahme bzw A/D-Wandlung (Gray-Code ) Im folgenden sind einige Gesichtspunkte, die bei der Codierung von Bedeutung sind, zusammengestellt Bewertbarkeit Will man eine binär codierte Zahl in eine analoge Größe umwandeln, so ist dies besonders einfach, wenn jeder Binärstelle ein Gewicht oder eine Wertigkeit zugeordnet ist. Komplementierbarkeit Der übliche Weg, in einer Rechenanlage eine Subtraktion durchzuführen, ist die Komplement-Addition. Zum Rechnen sind deshalb Codes vorteilhaft, die das (B-1)-Komplement möglichst einfach bilden, beispielsweise durch Invertierung sämtlicher Bits. Einfache Konvertierbarkeit Binär verschlüsselte Dezimalzahlen müssen oft in Dualzahlen konvertiert werden. In diesem Fall ist es angenehm, wenn diese Konvertierung leicht möglich ist. Einfache Additionsregeln, Übertragsbildung Entsteht bei der Addition zweier Dezimalzahlen ein Übertrag zur nächsthöheren Dekade, so sollte bei der Addition der entsprechenden Codewörter ebenfalls ein Übertrag im (n+1)-ten Bit entstehen. Leichte Rundungsregeln durch leichte Unterscheidbarkeit von Zahlen, die größer und kleiner als 5 sind. Prüfbarkeit Leichte Erkennung von Verfälschungen eines Codewortes. Grundbegriffe Bewertbar heißt, jeder Binärstelle des Codewortes ist eine Wertigkeit zugeordnet. Als Gewicht eines Codeworts bezeichnet man die Anzahl der mit 1 belegten Stellen. Die Hamming-Distanz D zweier Codewörter entspricht der Anzahl der Binärstellen, die sich in diesen beiden Codewörtern ( Nutzwörtern ) unterscheiden Ein Code ist stetig, wenn die Hamming-Distanz zwischen zwei benachbarten Codewörtern über den gesamten Code hinweg konstant ist. Ein Code heißt einschrittig, wenn die Hamming-Distanz zweier benachbarter Codewörter konstant gleich eins ist. Redundanz bedeutet im Zusammenhang mit der Codierung, daß ein Code mehr Kombinationsmöglichkeiten besitzt als zur Codierung benutzt werden. R = L – ld n n = Zahl der benutzten Kombinationen, Anzahl der Nutzwörter L = Wortlänge oder Anzahl der Binärstellen ( R = L - ld E E = Elementarvorrat ) Rechnergrundlagen Teil 1 - 21 - Prof.Dipl.-Ing. Komar 4.1 Codierungsarten Sender Quelle X digital Quellencodierer m nn Kanalcodierer binär Ziel: R => 0 u Modulator binär Ziel: d => max (Nebeneffekt R => größer ) Störung Senke Y digital Quellendecodierer Kanaldecodierer m* binär u* Kanal Demodulator binär Empfänger Übertragung von Nachrichten/Daten über gestörte räumliche (Übertragungsstrecken) oder zeitliche ( Speicher ) Kanäle . Quellcodierung Ziel: R Code = 0 formt ein primäres Signal X in ein binäres Signal so um, daß dieses möglichst nur das erforderliche Minimum an Information enthält. Durch Umcodierung soll eine binäre Ersatzquelle geschaffen werden, die möglichst gleichhäufig Nullen und Einsen sendet und damit redundanzfrei ist. Die binäre Zeichenfolge m soll also möglichst wenig Redundanz besitzen und die entsprechenden Codes für diese Redundanzreduktion sind sogn. Optimale Codes. Quellencodierung im Zusammenhang mit der Datenübertragung und Speicherung wird heute zunehmend als Datenkompression bezeichnet, worunter man die Reduzierung der Datenmenge zur Reduzierung von Übertragungszeit und /oder Speicherplatz versteht. Und zwar werden bei digitalen Daten wie Zahlen oder Text informationserhaltende, verlustfreie Kompressionsverfahren verwendet. Bei digitalisierten kontinuierlichen Daten wie Bildern und Tönen werden oft auch informationsreduzierende, verlustbehaftete Datenkompressionsverfahren eingesetzt. Dies wird auch als Irrelevanzreduktion bezeichnet, weil physiologisch nicht wahrnehmbare Bestandteile der Nachricht anhand eines Gütekriteriums vernachlässigt werden. ( JPEG, MPEG sind derartige Kompressionsstandards ) Kanalcodierung codiert eine Zeichenfolge m in eine Sendefolge u so um, daß in der gestörten Empfangsfolge u* eine Fehlerminderung ( Fehlererkennung, Fehlerkorrektur ) möglich ist. Die entsprechenden Codes, mit denen eine derartige Codesicherung möglich ist, heißen Prüfbare Codes. Ziel: möglichst große Hammingdistanz d => max, aber dadurch R => größer Verarbeitungscodierung codiert digitale Daten wie Text, Ziffern und Zahlen mit numerischen und alphanumerischen Codes für die effiziente Verarbeitung im Rechner. Das Grundproblem der Codierung besteht darin, einen „guten“ Code zu finden, – der sich mit wenig Rechenzeit erzeugen läßt – eine geringe Redundanz hat – mit wenig Rechenzeit decodierbar ist – und dabei eine kleine Restfehlerwahrscheinlichkeit der empfangenen Zeichenfolge m* liefert Rechnergrundlagen Teil 1 - 22 - Prof.Dipl.-Ing. Komar 4.2 Optimale Codes Bei optimalen Codes versucht man, die im Mittel auftretende Codewortlänge L bzw die Redundanz R zu minimieren, oder anders ausgedrückt, man codiert so nahe wie möglich am theoretischen Grenzwert, d.h. so wenig wie möglich über der Entropie H des gegebenen Modells der Wahrscheinlichkeiten für die Quellsymbole. Der minimal erreichbare Idealwert für L wäre dabei der mittlere Informationsgehalt H des Zeichenvorrats. ( R = L – H = 0 nur erreichbar, wenn die Auftrittswahrscheinlichkeiten p(i) = 2– x reziproke Zweierpotenzen sind. ) Informationstheoretisch ist optimale Codierung die Schaffung einer optimalen binären Ersatzquelle. Damit die einzelnen Zeichen bei wechselnden Wortlängen ohne Trennzeichen aus dem Bitstrom identifizierbar sind, muß die Fano-Bedingung eingehalten werden: Kein Wort aus dem Code ist Anfang eines anderen Codewortes Wenn diese Bedingung erfüllt ist, dann ist offensichtlich die Fuge durch das Nicht-mehr-weiter-lesen-können bestimmt. ( Fano-Bedingung ist hinreichend, aber nicht notwendig ) Mit obiger Formulierung ist gleichbedeutend, daß bei Darstellung eines Codes als Codebaum die Code-Wörter nur die Blätter (Endknoten) des Baumes besetzen dürfen, nicht aber die Verzweigungsstellen (Knoten). Man sagt auch, die Menge der verwendeten Bitfolgen ist kommafrei (Präfixcode). Beispiel im vorherigen Kapitel: Man kann sich leicht überzeugen, daß der gewählte Code umkehrbar eindeutig ist, d. h. daß man den ursprünglichen Strom von Zeichen des Quellalphabets eindeutig aus dem Strom der Zeichen des Zielalphabets rekonstruieren kann, weil die Fano-Bedingung eingehalten wurde. Der beliebig gewählte Bit-Strom 0111110100 ergibt a d c b a als Zeichenstrom des Quellalphabets 4.2.1 Fano-Codierung Von Fano stammt ein Algorithmus, der die Fano-Bedingung automatisch einhält und sehr einfach zu implementieren ist. Es ist jedoch nicht garantiert, daß der erzeugte Code im Sinne der Redundanz-Minimierung in jedem Fall optimal ist, wenn auch die Abweichungen praktisch kaum eine Rolle spielen. 1. 2. Die zu codierenden Zeichen i werden in einer Tabelle nach fallenden Wahrscheinlichkeiten p(i) geordnet. In der zweiten Spalte werden – beginnend mit der kleinsten Wahrscheinlichkeit – die Teilsummen der p(i) eingetragen. In der obersten Zeile steht somit eine 1. 3. Die Folge der Teilsummen wird in zwei, möglichst gleich große Intervalle unterteilt ( Schnitt bei 50% ) 4. Für alle Zeichen oberhalb des Schnittes wird für den Code eine 0 eingetragen, für alle Zeichen unterhalb des Schnittes eine 1 (oder umgekehrt ) 5. Alle entstandenen Teilfolgen werden wieder halbiert und die nächste Binärstelle wird gemäß Schritt 4 eingetragen. 6. Enthält eine Teilfolge nur noch ein Zeichen, so endet das Verfahren für dieses Zeichen, da dessen Code nun komplett ist. Beispiel: Quelle mit fünf Symbolen a b c d e Wahrscheinlichkeit 0.40 0.20 0.18 0.11 0.11 p(i) ∑ p(i) 1. 2. 3.Schritt Code l(i) l(i) p(i) a 0.40 1.00 0 0 00 2 0.80 b 0.20 0.60 0 1 01 2 0.40 c 0.18 0.40 1 0 10 2 0.36 d 0.11 0.22 1 1 0 110 3 0.33 e 0.11 0.11 1 1 1 111 3 0.33 H = 2.1391 bit L = 2.22 bit R = 0.08 bit Rechnergrundlagen Teil 1 - 23 - Prof.Dipl.-Ing. Komar 4.2.2 Huffman-Codierung Die nach dem französischen Mathematiker Huffman benannte Huffman-Codierung ist eine Verfeinerung der Codiermethode nach Shannon-Fano und liefert einen besonders redundanzarmen Code. Für gegebene Wahrscheinlichkeiten erstellt der Huffman-Algorithmus eine Codetabelle, die jedem Quellsymbol eine Bitfolge zuordnet. Der Algorithmus ist optimal in dem Sinne, daß mit keiner anderen Zuordnung von Bitfolgen eine bessere Kompression erreicht werden könnte und die Bitfolgen genügen der Fano-Bedingung, sind also kommafrei. Der Huffman-Algorithmus baut den Codebaum rekursiv auf, indem er jeweils die zwei Zeichen mit der kleinsten Wahrscheinlichkeiten zu einem Teilbaum zusammenfaßt. Dieser Teilbaum geht als ein Zeichen mit der Summe der Wahrscheinlichkeiten der zusammengefaßten Zeichen in den weiteren Verlauf des Algorithmus ein. Den beiden Ästen des Baumes werden die Bitwerte 0 und 1 zugewiesen. Dieser Prozeß wird solange fortgesetzt, bis alle Zeichen oder Symbole zu einem Baum zusammengefaßt sind. 1. Beispiel: Quelle mit fünf Symbolen Wahrscheinlichkeit P( i ) 1.Schritt p a 0.40 b 0.20 c 0.18 d 0.11 0 e 0.11 1 2.Schritt p a de b c a 0.40 b 0.20 3.Schritt p 0.40 0.22 0.20 0 0.18 1 c 0.18 d 0.11 e 0.11 4.Schritt p a 0.40 bc 0.38 0 de 0.22 1 p bcde 0.60 0 a 0.40 1 abcde 1.00 4.Schritt 1.0 1 0 a 0.6 3.Schritt 0.4 0 1.Schritt 0.22 0 a b c d e p(i) Code 0.40 0.20 0.18 0.11 0.11 1 000 001 010 011 l(i) p(i) l(i) 1 3 3 3 3 0.40 0.60 0.54 0.33 0.33 L = 2.20 bit ld 1/p 1.322 2.322 2.474 3.184 3.184 1 0.38 1 0 d e b 0.11 0.11 0.2 p ld 1/p 0.5288 0.4644 0.4453 0.3503 0.3503 H = 2.1391 bit R = L – H = 0.06 bit 2.Schritt 1 c 0.18 Rechnergrundlagen Teil 1 2.Beispiel: Quelle mit acht Symbolen Wahrscheinlichkeit P( i ) Codewort (aus Huffmancodierung) - 24 - Prof.Dipl.-Ing. Komar A 0.34 B 0.24 C 0.14 D 0.12 E 0.07 F 0.05 G 0.03 H 0.01 11 01 101 100 000 0011 00101 00100 Eine weitere Verminderung der Redundanz läßt sich nur noch durch Gruppencodierung, also durch Codieren von Zeichengruppen erzielen. Die beiden vorgestellten Verfahren setzten voraus, daß vor der ersten Anwendung die Auftrittswahrschein lichkeiten der einzelnen Zeichen feststehen, d.h. daß ein statisches Modell der Wahrscheinlichkeiten der Quellsymbole gegeben ist oder ermittelt wird ( Entropiecodierung ). Wenn diese Vorraussetzung nicht erfüllt ist (oft in der Praxis), dann versucht man durch adaptive Codes eine bessere Datenverdichtung zu erreichen. Bei adaptiven Codes führen sowohl der Sender als auch der Empfänger für jedes Zeichen einen Zähler mit und mit der fortlaufend berechneten relativen Häufigkeit der Zeichen als Näherung für deren Auftrittswahrscheinlichkeit ändert man fortlaufend den Code, bzw erstellt einen neuen Code. Diese Adaption des Codes wird nach jeweils N übertragenen Zeichen von Sender und Empfänger synchron durchgeführt. Für diese Adaption eignet sich das sogn. Arithmetische Codieren [ 1 ], [ 2 ] besser als der adaptive Huffman-Code. Unter Datenkompression versteht man die Reduzierung der Datenmenge zum Zwecke der Übertragung oder Speicherung. Bei der verlustfreien Datenkompression ist das Ziel eine Redundanz-Reduktion möglichst auf Null. Es bleibt aber die in den Daten enthaltene Information ohne Änderung erhalten. Bei der verlustbehafteten Datenkompression (Datenreduktion) ist das Ziel eine Verringerung der Datenmenge, wobei die Information im wesentlichen erhalten bleibt, aber ein gewisser Informationsverlust in Kauf genommen wird. Dies ist zum Beispiel möglich bei Messwerten (wg. überlagertem Rauschen) und bei Bild- und Tondaten, wenn die Veränderungen für den Menschen nicht wahrnehmbar sind. Neben den bereits bekannten Verfahren von Huffman und Fano werden auch noch die folgenden Verfahren eingesetzt, wobei die Methoden für die verlustfreie Datenkompression mit geringen Modifikationen auch zur verlustbehafteten Datenkompression verwendbar sind : - Lauflängen-Codierung (Run-Length Coding) für Binärbilder und Grafiken; es werden nicht nur die Daten abgespeichert, sondern zusätzlich die Anzahl, wie oft aufeinander folgende Daten den selben Wert aufweisen - Differenz-Codierung für Meßwerte; wobei nur die Differenzen aufeinanderfolgender Werte abgespeichert werden - Arithmetische Codierung - LZW-Algorithmus (nach seinen Erfindern Lempel, Ziv und Welch ) hat sich für die verlustfreie Kompression beliebiger Daten als effizientestes Verfahren durchgesetzt. Es erreicht zwar nicht ganz den Kompressionsgrad des Huffman-Verfahrens, ist jedoch beim Komprimieren und Dekomprimieren deutlich schneller und bietet für eine große Masse von unterschiedlichen Dateien den besten Kompromiss. Es handelt sich dabei um ein statistisches Verfahren, das Zeichengruppen unterschiedlicher Länge codiert. Dessen Prinzip besteht darin, beim Übertragen des Datenstromes zu überprüfen, ob einzelne Zeichenfolgen schon vorher im abgearbeiteten Teil vorgekommen sind und durch einen Rückbezug ersetzt werden können. Rechnergrundlagen Teil 1 - 25 - Prof.Dipl.-Ing. Komar Lauflängen-Codierung stellt die einfachste Form der Datenkompression dar. Bei der Lauflängen-Codierung (Run-Length Coding ) werden nicht nur die codierten Daten abgespeichert, sondern zusätzlich noch die Anzahl, wie oft aufeinanderfolgende Daten denselben Wert aufweisen. Man speichert also Zahlenpaare der Art (f,n) ab, wobei f den Wert der Date und n die Lauflänge angibt, immer gerechnet ab Anfang des Datenstroms, bzw. ab Ende der vorhergehenden Sequenz. Mit Hilfe dieses Verfahrens lassen sich nur Daten effizient komprimieren, in denen zahlreiche homogene Bereiche mit nur einem einzigen Zeichen auftreten. Dies ist vor allem bei computergenerierten Bildern und Grafiken sowie in Binärbildern mit nur zwei Helligkeitsstufen der Fall. Beispiel für die Lauflängen-Codierung eines Binärbildes aus 64 Bildpunkten (Pixel), die entweder schwarz oder weiß sind. 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 1 0 0 1 0 1 0 0 0 1 1 0 1 0 0 1 0 1 0 In der Mitte das dem Bild zugeordnete Bit-Muster : 1 => Schwarz, 0 => Weiß Rechts das Bitmuster der Lauflängen-Codierung. Zuerst wird in drei Bits die Lauflänge angegeben . Dabei bedeuten: 001=1, 010=2, 011=3, 100=4, 101=5, 110=6, 111=7, 000=8 Danach folgt der Code des Bildpunktes, also 0 oder 1. Es wurde offenbar eine Kompression von 64 auf 56 Bit erreicht. Aufgabe: Welche Kompression läßt sich bei obigem Beispiel durch Gruppencodierung erreichen ? p(0)= p(1)= H= L= 1.Variante: Gruppenstatistik berechnen aus Einzelstatistik Gruppenpaar 00 01 10 11 2.Variante: Gruppenstatistk direkt aus gegebenem Bild ermitteln Gruppenpaar 00 01 10 11 R= Rechnergrundlagen Teil 1 - 26 - Prof.Dipl.-Ing. Komar Entropie des deutschen Alphabetes Lfd. Nr. i Buchstabe xi 1 2 1 – Wahrscheinlichkeit p(xi) 3 Summe Code (FANO) Bit / Buchstabe l(xi) si 4 p(xi)l (xi) p(xi)ld(1/p(xi)) 5 6 7 8 000 3 0,45447 0,41251 001 3 0,44100 0,40661 010 3 0,26505 0,30927 0110 4 0,27432 0,26512 0111 4 0,25508 0,25323 1000 4 0,21552 0,22705 1001 4 0,18924 0,20824 1010 4 0,17540 0,19783 10110 5 0,21775 0,19691 10111 5 0,21655 0,19616 11000 5 0,15940 0,15847 11001 5 0,14655 0,14927 11010 5 0,13365 0,13968 11011 5 0,13335 0,13945 111000 6 0,12804 0,11842 111001 6 0,10632 0,10389 111010 6 0,09582 0,09585 111011 6 0,08538 0,08727 111100 6 0,08520 0,08716 111101 6 0,08160 0,08431 1111100 7 0,06692 0,06412 1111101 7 0,05145 0,05209 11111100 8 0,04640 0,04309 11111101 8 0,03992 0,03817 11111110 8 0,03928 0,03764 111111110 9 0,02295 0,02194 1111111110 10 0,01650 0,01521 11111111110 11 0,00187 0,00217 111111111110 12 0,00180 0,00181 111111111111 12 0,00156 0,00167 1,00000 0,15149 0,84851 2 E 0,14700 0,70151 3 N 0,08835 0,61316 4 R 0,06858 0,54458 5 I 0,06377 0,48081 6 S 0,05388 0,42693 7 T 0,04731 0,37962 8 D 0,04385 0,33577 9 H 0,04355 0,29222 10 A 0,04331 0,24891 11 U 0,03188 0,21703 12 L 0,02931 0,18772 13 C 0,02673 0,16099 14 G 0,02667 0,13432 15 M 0,02134 0,11298 16 O 0,01772 0,09526 17 B 0,01597 0,07929 18 Z 0,01423 0,06506 19 W 0,01420 0,05086 20 F 0,01360 0,03726 21 K 0,00956 0,02770 22 V 0,00735 0,02035 23 Ü 0,00580 0,01455 24 P 0,00499 0,00956 25 Ä 0,00491 0,00465 26 Ö 0,00255 0,00210 27 J 0,00165 0,00045 28 Y 0,00017 0,00028 29 Q 0,00015 0,00013 30 X 0,00013 0,00000 L= 4,14834 Mittlere Wortlänge Mittlerer Informationsgehalt Redundanz L = 4,14834 bit H = 4,11461 bit R = 0,03373 bit -> 0,81 % H= 4,11461 bit Rechnergrundlagen Teil 1 4.3 - 27 - Prof.Dipl.-Ing. Komar Verarbeitungscodierung – numerische und alphanumerische Codes Numerische Codes können Ziffern und Zahlen darstellen. Bei einem Wortcode wird eine Zahl als Ganzes codiert und nicht etwa ziffernweise (Dualcode, Graycode) Bei einem Zifferncode wird dagegen jede Ziffer einer Zahl getrennt codiert ( untercodiert ) Numerische Codes Wortcodes bewertbar Zifferncodes nicht bewertbar Anordnungscodes Graycode Dualcode bewertbar nicht bewertbar Anordnungscodes n-aus-m-Codes 8421-BCD Wortcodes haben den Nachteil einer aufwendigen Ein/Ausgabe aber den Vorteil von einfach durchführbaren Rechenoperationen. Bei Zifferncodes ist die Ein/Ausgabe vergleichsweise einfach, da ziffernweise umcodiert werden kann, aber dafür sind die Rechenoperationen aufwendiger Tetradische Codes sind Zifferncodes, die 4 Bit ( Tetrade ) für die Codierung einer Dezimalziffer verwenden. Da sich mit 4 Bit insgesamt 16 Binärausdrücke bilden lassen, aber nur 10 benötigt werden, lassen sich durch unterschiedliche Anordnung der 10 Nutzwörtern und der 6 Pseudotetraden die verschiedensten tetradischen Binärcodes bilden. ( 8-4-2-1-BCD, Aiken-Code, Stiebitz- oder 3-Exzess-Code ) BCD-Codes ( Binär Codierte Dezimalziffer) codieren die 10 Dezimalziffern und lassen sich in bewertbare Zifferncodes (8-4-2-1-BCD, Aiken-Code, 1-aus-10-Code, BCD-Zählcode ) und Anordnungscodes ( Stiebitzoder 3-Exzess-Code, Libaw-Craig-Code, Ziffernsicherungscode Nr. 3 ) unterteilen. 8-4-2-1-BCD-Code (binary coded decimal-Code) Der BCD-Code oder dezimal-dualer Code verwendet die ersten zehn der 16 möglichen Kombinationen und hat die Wertigkeiten 8-4-2-1. Digitale Signale im BCD-Code können leicht in analoge Signale umgesetzt werden, indem man die einzelnen Tetradenstellen in Form von Spannungen über Bewertungswiderstände einer Summierstufe zuführt. Der BCD-Code bildet jedoch nicht auf einfache Weise das (B-1)-Komplement, auch entsteht bei der Addition von zwei Zahlen, deren Summe größer ist als 9, nicht zwangsläufig ein Übertrag, was die Korrektur aufwendig macht. Wenn gemeinhin vom BCD-Code gesprochen wird, so ist der 8-4-2-1-BCDCode gemeint. Zugeordnete Ziffer 0 1 2 3 4 5 6 7 8 9 Wertigkeit 8 4 2 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Stellenzahl Bewertbar Gewicht Minimaldistanz Maximaldistanz Hamming-Distanz zweier benachbarter Codewörter Stetig Redundanz 8-4-2-1-Code und seine Eigenschaften : : : : : 4 Ja 0.. . 3 1 4 : 1. . .4 : Nein : 0,7 Rechnergrundlagen Teil 1 - 28 - Prof.Dipl.-Ing. Komar 3-Exzess-Code Im 3-Exzess-Code ( auch Stiebitz-Code ) sind die Stellen nicht bewertbar, man erhält die von einem Codewort dargestellte Ziffer, indem man vom entsprechenden BCD-Codewort drei addiert oder subtrahiert. Die ersten und die letzten drei Codeworte sind Pseudotetraden. Der Code ist symmetrisch und das Komplement einer Dezimalzahl entsteht damit einfach durch Inversion aller Binärstellen. Bei der Addition ist folgende Korrekturvorschrift zu beachten: Entsteht kein Übertrag, so muß die Dualzahl 0011 subtrahiert werden; entsteht ein Übertrag, so muß die Dualzahl 0011 addiert werden. Es existieren außerdem keine Codeworte, bei denen alle vier Bits den gleichen Signalwert ( 0000, 1111 ) aufweisen, also Codeworte, die leicht durch Störungen ( z.B. Spannungsausfall ) entstehen. Zugeordnete Ziffer Wertigkeit ---0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0 1 2 3 4 5 6 7 8 9 Stellenzahl Bewertbar Gewicht Minimaldistanz Maximaldistanz Hamming-Distanz zweier benachbarter Codewörter Stetig Redundanz : 4 : Nein : 1. .3 : 1 : 4 : 1 .. 4 : Nein : 0,7 Stiebitz-Code oder 3-Exzess-Code Aiken- Code Beim Aiken-Code liegen die Pseudotetraden in der Mitte des mit vier Bits darstellbaren Zahlenbereichs. Der Code ist symmetrisch, da nur die ersten und die letzten fünf Tetraden verwendet werden. Das Komplement läßt sich einfach durch Invertierung sämtlicher Bits bilden. Die Korrekturvorschrift ist etwas komplizierter als im 3Exzess-Code, dafür sind die Stellen mit 2-4-2-1 bewertbar. Zugeordnete Ziffer 0 1 2 3 4 5 6 7 8 9 Wertigkeit 2 4 2 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Stellenzahl Bewertbar Gewicht Minimaldistanz Maximaldistanz Hamming-Distanz zweier benachbarter Codewörter Stetig Redundanz : 4 : Ja : 0. .4 : 1 : 4 : 1. .4 : Nein : 0,7 Aiken-Code Der Ziffernsicherungscode Nr. 3 ist ein sogn. gleichgewichteter 3-aus-5-Code, bei dem alle 5-Bit-Nutzwörter dieselbe Anzahl von Einsen enthalten, also das gleiche Gewicht haben. Solche m-aus-n-Codes sind besonders einfache auf Fehler prüfbar und werden als fehlererkennbare Codes bezeichnet Rechnergrundlagen Teil 1 Zugeordnete Ziffer 0 1 2 3 4 5 6 7 8 9 - 29 - Prof.Dipl.-Ing. Komar Wertigkeit - - - - 01011 11100 11010 11001 10110 10101 10011 00111 01110 01101 Stellenzahl Bewertbar Gewicht Minimaldistanz Maximaldistanz Hamming-Distanz zweier benachbarter Codewörter Stetig Redundanz :5 : Nein :3 :2 :4 : 2 .... 4 : Nein : 1,7 Ziffernsicherungscode Nr.3 Der Libaw-Craig-Code eignet sich auf Grund seiner gleitenden Bitmuster für Zähler mit Schieberegistern. Zugeordnete Ziffer 0 1 2 3 4 5 6 7 8 9 Wertigkeit - - - - 00000 00001 00011 00111 01111 11111 11110 11100 11000 10000 Stellenzahl Bewertbar Gewicht Minimaldistanz Maximaldistanz Hamming-Distanz zweier benachbarter Codewörter Stetig Redundanz :5 : Nein : 0. .5 :1 :5 :1 : Ja : 1,7 Libaw-Craig-Code Gray-Code Der Graycode ist ein nicht bewertbarer, stetiger und einschrittiger Wortcode, bei dem die Hamming-Distanz zwischen benachbarten Codewörtern konstant 1 ist. Dezimalzahl Dualcode Graycode Bildungsgesetzmäßigkeit 0 1 00000 00001 0 1 2 3 00010 00011 11 10 4 5 6 7 00100 00101 00110 00111 110 111 101 100 8 9 10 11 12 13 14 15 01000 01001 01010 01011 01100 01101 01110 01111 1100 1101 1111 1110 1010 1011 1001 1000 16 17 10000 10001 11000 11001 Rechnergrundlagen Teil 1 - 30 - Prof.Dipl.-Ing. Komar Derartige stetige und einschrittige Codes werden häufig für die Analog-Digital-Umsetzung gebraucht, da bei diesen Codes beim Übergang von einem Codewort zum nächsten in den Zwischenstellungen keine falschen Codewörter entstehen können, denn es verändert sich beim Übergang ja immer nur ein einziges Bit . Beim Codelineal (Wegstreckenbestimmung) und bei Codescheiben ( Winkelbestimmung ) sind diese Eigenschaften gut erkennbar. Codelineal 2 3 4 Codelineal 2 3 4 Gray-Code 5 6 7 8 9 10 11 12 13 Dual-Code 5 6 7 8 9 10 11 12 13 Alphanumerische Codes Um alphanumerische Zeichen, d.h. Buchstaben, Ziffern, Satz- und Sonderzeichen, zu codieren, sind einige sehr spezielle Codes entwickelt worden. Zur Darstellung werden dabei natürlich mehr als vier Bits benötigt, da ja viel mehr Zeichen zu codieren sind. Sollen z.B. die zehn Ziffern und die 26 Buchstaben des Alphabetes, sowie 15 Satz- und sonstige Zeichen verschlüsselt werden, so werden 51 Binärkombinationen, also 6 Binärstellen benötigt. Zur Codierung von alphanumerischen Zeichen verwendet man heute vorwiegend folgende national bzw. international genormte Codes fester Wortlänge: 1. Fernschreibcode CCITT Nr. 2 oder 5-SpurlochstreifenCode ( Wortlänge n=5 ) 2. CCITT Nr. 5-Code, ASCII-Code ( American Standard Code for Information Interchange ), ISO-7-Bit-Code ( Wortlänge n = 7 ) 3. EBCDIC-Code ( Wortlänge n = 8 ) Weiterhin gibt es noch einen Unicode ( 16 Bit ) (www.unicode.org ), der alle wesentlichen, und den UCSCode ( 32 Bit ), der alle auf der ganzen Welt vorkommenden Schriftzeichen codiert. (der Unicode wird bei Java zugrundegelegt ) Der 5-Spurlochstreifencode CCITT Nr. 2 ( Baudot-Code ) wurde bereits im Jahr 1932 genormt. Er wird zur Nachrichtenübermittlung in Fernschreibnetzen benutzt. Da nur 5 Spuren ( Wortlänge n = 5 ) vorhanden sind, können eigentlich nur 25 = 32 Binärkombinationen gebildet werden. Dies ist jedoch für die Codierung von Zahlen und Buchstaben nicht ausreichend. Man ordnet deshalb jeder Binärkombination zwei Zeichen zu und spricht von einer Doppelbelegung. Da häufig Gruppen von Buchstaben oder von Ziffern vorkommen, führt man einen Umschaltbefehl ein, der festlegt, ob es sich bei den folgenden Kombinationen um Buchstaben ( Bu = 11111 ) oder Ziffern ( Zi = 11011 ) handelt. Die Interpretation der einzelnen Binärworte hängt von ihrer Vorgeschichte, dem zuletzt gegebenen Umschaltzeichen, ab. Mit der Doppelbelegung ist es möglich, über 50 verschiedene Zeichen darzustellen. Der Fernschreibcode hat den Nachteil, daß Fehler bei der Übertragung der Umschaltzeichen die gesamte Zeichenfolge bis zum folgenden Umschaltzeichen beeinflussen. Rechnergrundlagen Teil 1 - 31 - Prof.Dipl.-Ing. Komar ASCII-Code, ISO-7-Bit-Code ( International Organisation for Standardisation ) oder CCITT-Code Nr. 5. Diese drei Codes sind bis auf einzelne, durch nationale Bedürfnisse bedingte Festlegungen, identisch. Der ASCII-Code ist der am weitesten verbreitete alphanumerische Code. Mit 7 Bit lassen sich 128 Zeichen codieren, wobei bestimmte Binärkombinationen nach nationalem Bedarf festgelegt werden können. Die Erweiterungen auf 8-Bit-ASCII ( 256 Zeichen ) sind nicht genormt und werden von den Herstellern unterschiedlich belegt. Durch den PC wurde die IBM-Erweiterung zum Quasistandard. In Europa wird häufig die ASCII-Erweiterung Latin-1 verwendet ( Norm ISO 8859-1 8 Bit-Code ) Der Großbuchstabe A wird im ASCII-Code z.B. als 4116 verschlüsselt. Die Sonderzeichen werden zur Übertragungssteuerung ( ACK, DLE, ..), zur Formatsteuerung ( BS, CR, ..), zur Gerätesteuerung ( DC 1, DC2, ..), zur Informationstrennung ( FS, GS, ..) und zur Code-Erweiterung ( ESC, SI,..) eingesetzt. Einige Zeichen lassen sich keiner der genannten Gruppe zuordnen ( BEL, CAN, ..). Die Sonderzeichen haben im einzelnen die folgenden Bedeutungen: ACK BEL BS CAN CR DC DEL DLE EM ENQ EOT ESC ETB ETX FF FS GS HAT LF NAK NUL RS SI SO SOH SP STX SUB SYN US VT Positive Rückmeldung (Acknowledge), Klingel (Bell), Rückwärtsschritt (Backspace), Ungültig (Cancel), Wagenrücklauf (Carriage Return), Gerätesteuerzeichen (Device Control Characters), Löschen (Delete), Datenübertragungsumschaltung (Data Link Escape), Ende der Aufzeichnung (End of Medium), Stationsaufforderung (Enquiry), Ende der Ubertragung (End of Transmission), Code-Umschaltung (Escape), Ende des Datenübertragungsblocks (End of Transmission Block), Ende des Textes (End of Text), Formularvorschub (Form Feed), Hauptgruppen-Trennzeichen (File Separator), Gruppen-Trennzeichen (Group Separator), Horizontal-Tabulator (Horizontal Tabulation), Zeilenvorschub (Line Feed), Negative Rückmeldung (Negative Acknowledge), Füllzeichen (Null), Untergruppen-Trennzeichen (Record Separator), Rückschaltung (Shift-in), Dauerumschaltung (Shift-out), Anfang des Kopfes (Start of Reading), Zwischenraum (Space), Anfang des Textes (Start of Text), Substitutionszeichen (Substitute Character), Synchronisierung (Synchronous Idle), Teilgruppen-Trennzeichen (Unit Separator), Vertikal-Tabulator (Vertical Tabulation). HEX 0 1 2 3 4 HEX BIN 0000 0001 0010 0 1 2 3 0000 0001 0010 0011 NUL SOH STX ETX DLE DC1 DC2 DC3 SP ! " # 0 1 2 3 4 5 6 7 0100 0101 0110 0111 EOT ENQ ACK BEL DC4 NAK SYN ETB $ % & ' 8 9 A B 1000 1001 1010 1011 BS HT LF VT CAN EM SUB ESC ( ) * + C D E F 1100 1101 1110 1111 FF CR SO SI FS GS RS US , . / niederwertiges Halbbyte 0011 0100 5 6 7 0101 0110 0111 @ A B C P Q R S ` a b c p q r s 4 5 6 7 D E F G T U V W d e f g t u v w 8 9 : ; H I J K X Y Z [ h i j k x y z { L M N O \ ] 1 m n o | } ~ DEL < = > ? _ ASCII-Code, 7-Bit-Code nach DIN 66003 höherwertiges Halbbyte (Beispiel: 6 => 0011 01102 = 3616 ) Rechnergrundlagen Teil 1 DezimalWert 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 127 - 32 - Prof.Dipl.-Ing. Komar HexCode ASCIIZeichen englisch Bedeutung deutsch 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 7F NUL S0H STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US SP DEL Null Start of Heading Start of Text End of Text End of Transmission Enquiry Acknowledge Bell Backspace Horizontal Tabulation Line Feed Vertical Tabulation Form Feed Carriage Return Shift Out Shift In Data Link Espace Device Control 1 Device Control 2 Device Control 3 Device Control 4 Negative Acknowledge Synchronous Idle End of Transmission Block Cancel End of Medium Substitute Escape File Separator Group Separator Record Separator Unit Separator Space Delete Füllzeichen Anfang des Kopfes Anfang des Textes Ende des Textes Ende der Übertragung Stationsaufforderung Positive Rückmeldung Klingel Rückwärtsschritt Horizontal-Tabulator Zeilenvorschub Vertikal-Tabulator Formularvorschub Wagenrücklauf Dauerumschaltung Rückschaltung Datenübertragung-Umschaltung Gerätesteuerung 1 ( XON ) Gerätesteuerung 2 Gerätesteuerung 3 ( XOFF ) Gerätesteuerung 4 Negative Rückmeldung Synchronisierung Ende des Übertragungs-Blocks Ungültig machen Ende der Aufzeichnung Substitution Umschaltung Hauptgruppen-Trennung Gruppen-Trennung Untergruppen-Trennung Teilgruppen-Trennung Zwischenraum, Leerschritt Löschen Bedeutung der Sonderzeichen im ASCII-Code nach DIN 66003 Erweiterter IBM-PC Zeichensatz für Bildschirmausgabe Rechnergrundlagen Teil 1 - 33 - Prof.Dipl.-Ing. Komar 4.4 Codesicherung ( Kanalcodierung ) Bei der Übertragung oder Speicherung von binären Daten können Störeinflüsse das binäre Signal so verändern, ( 0/1 – Vertauschung ), daß es zu einer falschen Zuordnung kommt. Grundbegriffe und Definitionen Ein Einzelfehler liegt vor, wenn in einem Wort nur eine Bitstelle gestört ist. Ein Doppelfehler liegt vor, wenn in einem Wort zwei Bitstellen gestört sind. Bei Fehlerbündeln werden mehrere aufeinanderfolgende Bit eines Wortes bzw mehrerer Worte einer Nachricht gestört Das Gewicht eines Codewortes ist die Anzahl der mit 1 belegten Stellen Bei gleichgewichteten Codes enthalten alle Codewörter die gleiche Anzahl von Einsen. Ein Sonderfall des Doppelfehlers ist die Transposition. Dabei bleibt das Gewicht des Codes erhalten, da die Vertauschung von 1 und 0 durch eine entgegengesetzte Änderung einer anderen Binärstelle von 0 nach 1 wieder aufgehoben wird. Wenn im statistischen Mittel gleich viele 1 -> 0 - wie 0-> 1 Vertauschungen auftreten, so spricht man von einer symmetrischen Störung. Bei Bevorzugung einer Störungsrichtung spricht man von einer unsymmetrischen Störung. Treten Störungen immer derart auf, daß ein Zeichentyp verändert wird (z.B. 0 in 1), spricht man von einseitiger Störung. Ein vollständiger Code hat die Redundanz R =0, d.h. es sind alle möglichen Bitkombinationen benutzt. Vollständige Codes sind naturgemäß sehr anfällig gegen Störungen und bieten keinerlei Möglichkeit zur Fehlererkennung. Bei einem unvollständigen Code sind demzufolge nicht alle Bitkombinationen benutzt, also R> 0 (BCDCode). Um eine größere Datensicherheit zu erreichen, wählt man bewußt eine redundante Codierung, d.h. durch Vergrößerung der Stellenzahl eines Wortes läßt man eine Anzahl zusätzlicher und eigentlich überflüssiger Wörter zu. Diese Codewörter nennt man Fehlerwörter oder Pseudowörter. Die tatsächlich informationstragenden Codewörter nennt man im Unterschied dazu Nutzwörter. Da bei der Codesicherung meist mit festen Wortlängen gearbeitet wird, ergibt sich in diesem Fall für die Redundanz R ( gleichlange Codewörter ) : R = L - ld n = L – ld E n = Anzahl der Nutzwörter L = Wortlänge oder Anzahl d. Binärstellen E = Elementarvorrat ld E = H 0 Fehlererkennende und fehlerkorrigierende Codes beruhen darauf, daß Störungen auf ein Fehlerwort führen. Nur dann sind Fehler erkennbar und gegebenenfalls korrigierbar. Als notwendige aber nicht hinreichende Bedingung für Fehlererkennung und -korrektur gilt für die Redundanz um um Fehler einer Bitstelle zu erkennen Fehler einer Bitstelle zu korrigieren R> 1 R> 2 Bitfehlerwahrscheinlichkeiten einiger leitungsgebundener Übertragungskanäle Bei einer Bitfehlerwahrscheinlichkeit p ergibt sich die Wahrscheinlichkeit, dass in einem übertragenen Block der Länge n ( Nutz- und Prüfdaten ) s Bit fehlerhaft sind: ps = n * Ps * ( 1 – p ) n-2 s Rechnergrundlagen Teil 1 - 34 - Prof.Dipl.-Ing. Komar Wahrscheinlichkeiten für Übertragungsfehler von s Bit bei einer Bitfehlerwahrscheinlichkeit p = 10 -6 und einer Nachrichtenlänge von n Hamming-Distanz Die Hamming-Distanz D zweier Codewörter (auch Stellendistanz ) entspricht der Anzahl der Binärstellen, die sich in diesen beiden Codewörtern (Nutzwörtern) unterscheiden. Die Hamming-Distanz d eines Codes ist das Minimum der paarweisen Hamming-Distanzen D aller seiner Nutzwörter ( auch Minimaldistanz oder Mindestdistanz ). Die Hamming-Distanz d (als minimale paarweise Stellendistanz eines Codes) ist ein Maß für die Störsicherheit eines Codes und damit die maßgebliche Größe für die Möglichkeiten der Fehlererkennung und Fehlerkorrektur. Ein Code hat offensichtlich mindestens die Hamming-Distanz d = 1, da sonst zwei Codewörter übereinstimmen würden. Beispiel: Ziffern 1 bis 4 in binärer 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 ( 100, 001 ) = 2 D ( 011, 010 ) = 1 D ( 100, 010 ) = 2 D ( 100, 011 ) = 3 Dies läßt sich durch folgendes Matrix-Schema formalisieren : D 001 010 011 100 001 010 011 100 2 1 2 1 2 3 - Damit ergibt sich als kleinste Stellendistanz Dmin für die Hamming-Distanz d = 1 . Mit d = 1 lassen sich Fehler nicht in jedem Fall erkennen, da es offenbar Nutzwörter gibt, zwischen denen keine Fehlerwörter liegen. Die Ermittlung der Hamming-Distanz d erfordert bei n Code-Wörtern (n2 – n) / 2 Vergleichsoperationen Aufgabe: Für obiges Beispiel eine Codierung entwickeln, die bei gleicher Wortlänge die HammingMinimal-Distanz d = 2 aufweist. Aufgabe: Wieviel Symbole lassen sich mit 3 Bit und einer Minimaldistanz d = 3 codieren ? und mit welchen Nutzwörtern ? Rechnergrundlagen Teil 1 - 35 - Prof.Dipl.-Ing. Komar 101 111 001 011 100 110 000 010 Würfel mit den 8 binären Codewörtern, die sich aus 3 binären Stellen bilden lassen Die Hammingdistanz D ( Stellendistanz ) zweier Codeworte kann man mit Geraden anschaulich darstellen. D = 2 Nutzwort D = 3 Nutzwort Einzelfehler erkennbar Fehlerwort Nutzwort Doppelfehler erkennbar Einzelfehler korrigierbar Fehlerworte Nutzwort Korrekturbereich D = 4 Nutzwort D = 5 Nutzwort Dreifachfehler erkennbar Einzelfehler korrigierbar Fehlerworte Nutzwort Vierfachfehler erkennbar Doppelfehler korrigierbar Fehlerworte Hamming-Distanz Nutzwort Rechnergrundlagen Teil 1 - 36 - Prof.Dipl.-Ing. Komar Bei einer Hamming-Distanz von d = 2 paßt zwischen zwei Nutzwörtern noch ein Fehlerwort Durch einen Einzelfehler gelangt man von einem Nutzwort zu einem Fehlerwort (ein Fehler erkennbar ), erst bei einem zweiten Fehler wieder zu einem Nutzwort ( beide Fehler nicht mehr erkennbar ). Da das Fehlerwort von beiden Nutzworten gleich weit entfernt ist, ist nicht erkennbar, aus welchem Nutzwort es durch einen Fehler entstanden ist ( keine Korrektur möglich). Beim Walking-Code ( 2 aus 5 ) [ Seite 35] beträgt die Hamming- oder Minimaldistanz d = 2 und damit ist nur ein Einzelfehler sicher erkennbar. Bei d = 3 liegen zwischen zwei Nutzworten 2 Fehlerworte. Bei einem Fehler ist eindeutig entscheidbar, aus welchem Nutzwort dieses Fehlerwort entstanden ist ( ein Fehler korrigierbar ). Zwei Fehler sind zwar noch erkennbar, aber nicht korrigierbar, da dann das Fehlerwort auch durch einen Fehler aus dem anderen Nutzwort entstanden sein kann. Erst bei d = 5 erhöht sich die Anzahl der korrigierbaren Fehler wieder. Will man Fk Fehler korrigieren, so benötigt man mindestens eine Hammingdistanz d > 2 Fk + 1, Denn nur in diesem Fall sind die Nutzwörter so weit „voneinander entfernt“, daß selbst bei F Störungen das orginale Nutzwort noch „näher“ liegt als alle anderen Nutzwörter und daher eindeutig bestimmt werden kann. Soll ein Code bis zu Fk Fehler korrigieren und bis zu Fe > Fk erkennen (ohne zu korrigieren) so muß die Hammingdistanz d > Fe + Fk + 1 sein. Allgemein gilt Femin = d - 1 Fkmin = d −1 2 Femin = Mindestzahl der erkennbaren Fehler d = Mindestdistanz der Nutzwörter falls d ungerade Fkmin = Mindestzahl der korrigierbaren Fehler Fkmin = Hammingdistanz d 1 2 3 4 5 d −2 2 falls d gerade Möglichkeiten der Fehlerminderung Eindeutigkeit Einzelfehlererkennung Einzelfehlerkorrektur oder Doppelfehlererkennung Einzelfehlerkorrektur und Doppelfehlererkennung oder Dreifachfehlererkennung Doppelfehlerkorrektur oder Vierfachfehlererkennung Die Minimaldistanz d ist sozusagen die “schwächste Stelle“ im Code, der ungünstigste Fall (worst case ). Wohingegen an den Distanzen D > d die Verhältnisse für eine Fehlerminderung günstiger sind. Oder anders ausgedrückt, zwischen den jeweiligen Codewörtern mit D lassen sich eben mehr Fehler korrigieren /erkennen als an der schwächsten Stelle d . Beispiel: 1 Informationsbit werde durch 3 zusätzliche Prüfbit wie folgt gesichert: 0 000 1 111 H = 1 bit L = 4 bit R = 3 bit d=4 Wird 0100 empfangen, so kann der 1-Bit-Fehler erkannt und korrigiert werden (wenn es aber auch ein Dreifachfehler sein könnte, dann nur Erkennung möglich, aber nicht ob 1- oder 3-Bit-Fehler vorliegt ) Wird 0101 empfangen, so kann ein Doppelfehler als solcher erkannt, aber nicht korrigiert werden. Aufgabe: Wieviel Fehler können bei einem Code mit Redundanz R = 3 korrigiert oder erkannt werden ? Rechnergrundlagen Teil 1 - 37 - Prof.Dipl.-Ing. Komar 4.4.1 Fehlererkennung Einfachste Art: Wiederholen einer Datenübertragung : der Sender sendet die Information zweimal nacheinander und der Empfänger vergleicht. Verdoppelt die Wortlänge des Codes und erhöht stark die Redundanz Handshake-Verfahren : der Sender wartet, daß der Empfänger das gleiche Wort zurückschickt Bei einem Fehler wiederholt der Sender das Wort Nachteil: bei beiden Verfahren werden einseitige oder unsymmetrische Störungen nicht erkannt. Invertierte Wiederholung vermeidet diesen Nachteil dadurch, daß der Sender beim zweiten Mal alle Bits invertiert sendet. Eine einseitige Störung auf der Übertragungsleitung macht sich bei der Wiederholung umgekehrt bemerkbar und ist daher erkennbar. Der größte Nachteil der Nachrichtenwiederholung ist aber, daß doppelt so viele binäre Daten übertragen werden müssen als notwendig. Fehlererkennung durch Quersummenprüfung ( Paritätsprüfung ) Das üblichere Verfahren bei der Datenübertragung ist die Quersummenprüfung. Dem Nutzwort wird ein Prüfbit hinzugefügt, welches die Anzahl der Einsen im Nutzwort auf eine gerade oder ungerade ( even oder odd ) Anzahl ergänzt. Dieses Prüfbit wird Paritätsbit ( parity bit )genannt. Ob gerade oder ungerade Parität verwendet wird, muß natürlich zwischen Sender und Empfänger vereinbart werden. Der Sender erzeugt das Prüfbit und hängt es an die Nachricht an. Es werden also statt 8 Bit jetzt 9 Bit übertragen. Diese 9 Bit werden vom Empfänger auf die vereinbarte Parität überprüft. Ist bei der Übertragung eine Bitstelle verfälscht worden, so kann der Empfänger dies erkennen. Fehler in zwei Bitstellen (bzw alle geraden Fehlerzahlen) verändern die Parität nicht, sind also nicht erkennbar. Mehrfachfehler mit ungeraden Fehlerzahlen werden hingegen aufgedeckt. Diese Methode des Anhängens eines Paritätsbit erhöht die Hamming-Distanz d um 1 und auch die Redundanz um 1 bit. Die Schaltungen, die zur Erzeugung und Überprüfung der Parität erforderlich sind, sind heute meist in den Treiberbausteinen für die Übertragungsstrecke mit eingebaut, so daß kaum Mehraufwand erforderlich ist. ( Kann verhältnismäßig einfach durch Exklusiv-Oder -Verknüpfungen XOR bestimmt werden ) Dies hat die Paritätsprüfung zur meistverwendeten Methode zur Fehlererkennung gemacht. Beispiele: Fehlererkennung durch Paritätsprüfung Nutzwort gerade Parität: ungerade Parität: 10101110 01100011 Erzeugung und Überprüfung eines Paritätsbits ergänztes Paritätsbit 1 1 Anzahl der Einsen 6 = gerade 5 = ungerade Rechnergrundlagen Teil 1 - 38 - Prof.Dipl.-Ing. Komar Sicherung des 8421-BCD-Codes durch gerade Parität Dez.Ziffer 0 1 2 3 4 5 6 7 8 9 BCD-Code 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 Par.Bit 0 1 1 0 1 0 0 1 1 0 4.4.2 Fehlererkennung durch gleichgewichtete Codes ( m-aus-n- Codes ) Gleichgewichtete Codes sind Blockcodes mit der Wortlänge n und enthalten in jedem Codewort eine konstante Anzahl von m Einsen und dementsprechend n-m Nullen. Die maximale Anzahl der damit erzeugbaren verschiedenen Codewörter k ergibt sich zu n n! = m!(n − m)! m k = m<n m = Anzahl der Einsen im Codewort n = Anzahl der Bitstellen des Codewortes n! = l *2*3*... *n. 0! = 1 Mit dem pascalschen Dreieck kann man sich die erzeugbaren Codewörter k leicht ausrechnen. m n 0 1 0 2 1 1 1 2 1 1 3 1 4 1 5 1 6 1 7 1 4 6 15 21 1 3 10 6 7 2 3 5 3 10 1 5 15 35 5 1 4 20 35 4 6 7 1 6 21 1 7 1 Pascalsches Dreieck für k Da in allen Codewörtern dieselbe Anzahl von Einsen enthalten sind, müssen sich zwei verschiedene CodeWörter in mindestens zwei Stellen unterscheiden, so daß bei m-aus-n-Codes die Hamming-Distanz d=2 ist. Damit sind 1-Bit-Fehler immer erkennbar, jedoch nicht in jedem Fall korrigierbar. Beispiel: Der 2 aus 5 Code ( Walking-Code ) ist ein 5-Bit-Code zur Darstellung der Dezimalziffern, bei dem jedes Codewort 2 Einsen besitzt. Die Codewörter besitzen demnach alle das Gewicht 2. Beim 1-aus-10-Code besitzen alle Codewörter das Gewicht 1. n 5 = = 10 m 2 Walking-Code k = n 10 = = 10 m 1 1-aus-10-Code k = Rechnergrundlagen Teil 1 - 39 Walking-Code Dezimalcode 00011 00101 00110 01010 01100 10100 11000 01001 10001 10010 0 1 2 3 4 5 6 7 8 9 Prof.Dipl.-Ing. Komar 1-aus-10-Code 0000000001 0000000010 0000000100 0000001000 0000010000 0000100000 0001000000 0010000000 0100000000 1000000000 Bei allen m-aus-n-Codes ist eine Fehlerüberprüfung durch Gewichtsprüfung, d.h. Prüfung der Anzahl der Einsen leicht möglich. Der 1-aus-10-Code weist eine sehr hohe Redundanz auf. 4.4.3 Fehlererkennung und Fehlerkorrektur mit systematischer Codierung Bei den m-aus–n-Codes ist die Zuordnung von Codewort zum kodierten Wert willkürlich. Eine Unterscheidung zwischen Prüfstellen und informationstragender Binärstelle ist bei derartigen unsystematischen Codes nicht möglich. Ein Code, bei dem zwischen Informationsbit x1, x2, ..., xm und den Prüfbit p1, p2,...., pk unterschieden werden kann, wird als systematischer Code bezeichnet. Die Aufgabe besteht darin, einen Code zu konstruieren, bei dem bis zu e Bit-Fehler pro Codewort korrigierbar sein sollen., d.h. man muß einen Code mit vorgegebener Hammingdistanz d erzeugen. Man bezeichnet diese Codes auch als Lineare Codes, weil sie eine geometrische Veranschaulichung in sogn. Vektorräumen ermöglichen. Die bekannteste spezielle Lösung dieses Problems sind die Hamming-Codes, bei denen für die Codierung von n-stelligen Codewörtern k Prüfpositionen eingeführt werden , so daß m = n – k Bits für die eigentliche Information verbleiben. Die Idee dazu ist, daß die direkte binäre Codierung der Bits an den Prüfpositionen die Fehlerposition angeben soll und daß für eine fehlerfreie Übertragung alle Bits der Prüfpositionen den Wert 0 haben sollen. Die Hamming-Grenze gibt die Mindestanzahl der Prüfstellen k an, um in n-stelligen Codewörtern die Korrektur bis zu e Fehlerstellen zu erlauben k > ld e n j =0 j ∑( ) = ld e n! ∑ j!(n − j )! e = 1, n = 3, kmin = 2 j =0 e = 2, n = 3, kmin = ld 7 = 2,8 4.4.4 Fehlerkorrektur mit Hamming Codes Die Hamming-Codes sind die bekanntesten Ein-Fehler-korrigierenden Codes mit besonders geringer Redundanz und erlauben die Korrektur von einer fehlerhaften Bitposition in einem Block. Diese Codes verwenden für m Informationsbit eine bestimmte Anzahl k Prüfbit. Jedes dieser Prüfbit bildet die gerade Parität über eine gewisse Anzahl von Informationsbit. Man unterscheidet die informationstragenden Stellen x1, x2, ....., xm und die nur zu Prüfzwecken dienenden Stellen p1, p2, ....,pk Der Code besitzt also n = m + k Stellen, mit m = Anzahl der Informationsbits k = Anzahl der Prüfbits n = Gesamtzahl der Bits Rechnergrundlagen Teil 1 - 40 - Prof.Dipl.-Ing. Komar Hamming: Theoretische untere Schranke der Prüfbits k für die Korrektur von Einzelfehlern e = 1 . Durch k Prüfstellen können 2k Tatbestände gekennzeichnet werden. Man muß n + 1 Tatbestände feststellen können, nämlich ob das betreffende Codewort ( Prüf- und Informationsbits ) fehlerfrei ist oder welche der n = m + k Bitstellen gestört ist. Damit muß für die Anzahl k der Prüfbit gelten: 2k ≥ m + k + 1 mit k = Prüfbitzahl und m = Informationsbitzahl Tabelle mit Maximalzahlen der überprüfbaren Informationsbit m für Korrektur eines Einzelfehlers k m 1 2 3 4 5 6 0 1 < < < < 4 11 26 57 Mit steigender Anzahl von Informationsstellen sinkt der prozentuale Anteil an Prüfstellen. Konstruktionsschritte eines Hamming-Codes ( 1-F-korrigierbarer Code ) 1. 2. 3. 4. Die n Bits des Codewortes werden mit 1 beginnend von links nach rechts durchnummeriert ( bj , j =1..n ) Jene Bits, deren bj-Nummern Potenzen von 2 sind, also 1, 2, 4, 8, 16, 32,... usw , sind Prüfbits pi . Die restlichen also 3, 5, 6, 7, 9, 10,... usw sind Informationsbit xi . Jedes Prüfbit ist ein Parity-Bit auf gerade Parität für eine bestimmte Anzahl von Informationsbit. Ein Informationsbit kann in die Berechnungen verschiedener Prüfbit einbezogen sein und zu dieser Festlegung wird die Nummer j des Informationsbit bj in eine Summe von Zweierpotenzen zerlegt. Das Informationsbit bj mit der Nummer j liefert dann zu all jenen Prüfbits bj einen Beitrag, deren Nummer in der Zweierpotenz- (Polynom-) Darstellung von j erscheint. z.B. j = 29 = 16 + 8 + 4 + 1 d.h. das Informationsbit b29 wird in die Paritätsbildung für die Prüfbit bj mit den Nummern j = 16, 8, 4 und 1 einbezogen. 5. Das Codewort, bestehend aus Informations- und Prüfbits wird gesendet. 6. Der Empfänger bildet nach denselben Regeln die Quersumme bzw die gerade Parität für jedes Prüfbit und vergleicht bitweise mit den empfangenen. Die Nummer j jedes abweichenden Prüfbits wird summiert und ergibt dadurch automatisch die Nummer bzw Position des gestörten Bits, das für eine Korrektur nur noch invertiert werden muß. Diese Fehlerkorrektur schließ die Prüfbits mit ein. Ist ein Prüfbit gestört, so wird auch dieses erkannt und korrigiert. Aufbau eines Hamming-Codes mit 7 Daten- und 4 Prüfbits Rechnergrundlagen Teil 1 - 41 - Prof.Dipl.-Ing. Komar Beispiel: Für das 4-Bit-Nutzzeichen x1 = 0, x2 = 1, x3 = 1, x4 = 0 sieht das Hamming’sche Verfahren zur Korrektur eines Einzelfehlers 3 Prüfbit p1, p2 und p3 ( gerade Parität ) vor. 1. Schritt Binärstelle Belegung 2.Schritt bj b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 pi ,xi p1 p2 x1 p3 x2 x3 x4 p4 x5 x6 ? ? 0 ? 1 1 0 ? 1. Stellenbelegung Bestimmung von p1 3.Schritt 2. Stellenbelegung Bestimmung von p2 4.Schritt 3. Stellenbelegung Bestimmung von p3 p1 x1 0 1 p2 1 x2 1 x4 0 x1 0 p3 x2 1 0 x3 1 x4 0 x3 1 x4 0 Konstruktion eines 1-F-korrigierenden Codewortes Im ersten Schritt werden die 7 Binärstellen mit den Prüf- und Informationsbit belegt Im zweiten Schritt wird das Prüfbit b1 (p1) durch die Quersummenprüfung der Stellen b3, b5 und b7 auf gerade Parität festgelegt und zwar im Beispiel zu b1 = 1 oder p1 = x1 ⊕ x2 ⊕ x4 b1 = b3 ⊕ b5 ⊕ b7 = 0 ⊕ 1 ⊕ 0 = 1 dritter Schritt : b2 = b3 ⊕ b6 ⊕ b7 = 0 ⊕ 1 ⊕ 0 = 1 p2 = x1 ⊕ x3 ⊕ x4 vierter Schritt: b4 = b5 ⊕ b6 ⊕ b7 = 1 ⊕ 1 ⊕ 0 = 0 p3 = x2 ⊕ x3 ⊕ x4 mit ⊕ = Operation zur Erstellung von Parity-Bits (Addition-modulo-2 ohne Übertrag, Exklusiv-Oder bzw XOR , Antivalenz ) 0 ⊕ 0 = 0 0 ⊕ 1 = 1 1 ⊕ 0= 1 1 ⊕ 1= 0 Mit den drei festgelegten Prüfbit p1 = b1 = 1 , p2 = b2 = 1 und p3 = b4 = 0 wird also im 1 1 0 0 1 1 0 übertragen Hamming-Code das Codewort Man erkennt, daß jede Informationsstelle durch mindestens zwei Prüfbits kontrolliert wird. Wird dieses Codewort nun übertragen, so kann der Empfänger durch Quersummenprüfung (auf gerade Parität) einen Fehler erkennen und korrigieren. Beispiel für einen Fehler bei der Datenübertragung : Stelle bj Belegung 1 p1 2 p2 3 xl 4 p3 5 x2 6 x3 7 x4 Gesendet wird Empfangen wird 1 1 1 1 0 0 0 0 1 1 1 0 0 0 Bilden der Quersummen über jeweils die drei Info- und das eine Prüfbit , ergibt Q1 = b1 ⊕ b3 ⊕ b5 ⊕ b7 = 1 ⊕ 0 ⊕ 1 ⊕ 0 = 0 Q2 = b2 ⊕ b3 ⊕ b6 ⊕ b7 = 1 ⊕ 0 ⊕ 0 ⊕ 0 = 1 Q4 = b4 ⊕ b5 ⊕ b6 ⊕ b7 = 0 ⊕ 1 ⊕ 0 ⊕ 0 = 1 oder q1 = p1 ⊕ x1 ⊕ x2 ⊕ x4 q2 = p2 ⊕ x1 ⊕ x3 ⊕ x4 q4 = p3 ⊕ x2 ⊕ x3 ⊕ x4 Ist kein Fehler aufgetreten, dann gilt für die 3 Quersummen Q1 = Q2 = Q4 = 0 Rechnergrundlagen Teil 1 - 42 - Prof.Dipl.-Ing. Komar An Q2 und Q4 ist erkennbar, daß im Beispiel ein Fehler aufgetreten ist. Die Fehlerposition kann man nun sehr einfach ermitteln, indem man die Quersummen in der Reihenfolge ihrer Stellenwertigkeit anschreibt ( das Syndrom bildet ), ( Q4 Q2 Q1 ) = ( 1 1 0 ) 2 und diese Zahl als Dualzahl interpretiert, oder einfach die Nummern der abweichenden Prüfbit (Qx = 1) aufsummiert. Im Beispiel ( 110 )2 = 6 10. Somit ist die sechste Bitstelle gestört und kann durch invertieren korrigiert werden. Beispiel einer Hamming-Codierung mit 7 Daten- und 4 Prüfbits Aufgabe: Es wird das folgende 10 Bit-Codewort empfangen : 0 1 1 0 0 0 1 1 0 1 Welchen Wert weisen die Nutzbits auf, wenn diese vom Sender nach Hamming 1-F-korrigierend codiert wurden.? Rechnergrundlagen Teil 1 - 43 - Prof.Dipl.-Ing. Komar 4.4.5 Fehlererkennung und – korrektur mit Polynomcodes ( CRC-Codes ) Der “Cyclic Redundancy Check“ (CRC) ist eine sehr verbreitete Methode der Fehlersicherung, die nicht nur bei Datenübertragungen zwischen verschiedenen Rechnern eine überragende Rolle spielt, sondern auch innerhalb eines Rechners, z.B. bei Datentransfers mit Festplatten und Disketten, intensiv eingesetzt wird (auch ECC Error Checking and Correcting genannt ). Diese zyklischen Gruppencodes (systematische Codes) werden durch ihren hohen Grad an mathematischer Struktur und die dadurch bedingten vorausberechenbaren fehlererkennenden Eigenschaften in der Praxis häufig für Codewörter von mehreren hundert Bit eingesetzt, die in einer Tabelle oder einer Matrix nicht mehr zu übersehen sind. Die CRC-Methode ist somit nicht Bytegebunden und es können damit beliebige serielle Bitströme abgesichert werden. Die an den Bitstrom angefügten CRC-Bits bilden die sogn. “Frame Check Sequence“ (FCS) eines Übertragungsblocks. Ein zyklischer Code ist dadurch definiert, daß man durch zyklische Vertauschung der Stellen eines CodeWortes wieder ein Codewort erhält. Die Beschreibung zyklischer Codes erfolgt durch Identifikation der Codewörter mit Polynomen, wobei dessen Koeffizienten die Informationsbit darstellen. D. h. Bitfolgen werden als Polynome interpretiert, deren Koeffizienten nur aus 0 und 1 bestehen. Beispiel für die Erzeugung eines binären Polynoms: Bitstrom: 110101 zugehöriges Polynom I(x): I(x) = l*x5 + l*x4 + 0*x3 + l*x2 + 0*x1 + l*x0 I(x) = x 5 + x 4 + x 2 + 1 Das Prinzip der Fehlererkennung / Fehlerkorrektur Informations-Bitströme (Codewörter ) werden als binäre Polynome I(x) geschrieben. Die CRC-Bits ( Prüfpolynom R(x) ) werden so konstruiert, daß das zu sendende abgesicherte Polynom S(x), welches aus Informationsbits I(x) und CRC-Bits R(x) entstanden ist, ohne Rest durch ein vorher festgelegtes “Generatorpolynom“ G(x) teilbar ist. Für die Bildung der abgesicherten Bitfolge (Sendepolynom S(x)) werden dazu die CRC-Prüfbits des Prüf polynoms R(x) an die Infobits des Informationspolynoms I(x) angehängt. Der Empfänger prüft den eintreffenden Bitstrom, indem er das zugehörige Polynom S(x) erneut durch das Generatorpolynom G(x) dividiert. Falls sich bei dieser Division ein Rest 0 ergibt, ist kein Fehler aufgetreten. Aus einem eventuellen Restpolynom können Rückschlüsse auf die verfälschten Bits gezogen werden, so daß nicht nur Fehler erkennbar, sondern diese auch automatisch korrigierbar sind. Die Form des Generatorpolynoms G(x) bestimmt dabei das Ausmaß der Fehlererkennung und -korrekter. Generatorpolynome sind nach bestimmten Regeln aufgebaut und liegen tabelliert vor. Man verwendet Polynome G(x), die sich als Produkte von Polynomen darstellen lassen, die nicht weiter zerlegbar sind ( Primpolynome ). Beispiel: G(x) = 1 + x + x2 + x4 + x5 + x8 + x10 = ( 1 + x + x4 ) (1 + x + x2) ( 1 + x + x2 + x3 + x4 ) Damit lassen sich drei Fehler korrigieren, deren Positionen sich als die Wurzeln der drei Primpolynome ergeben. Der Grad r des Generatorpolynoms G(x) bestimmt die Anzahl der CRC-Bits und je höher der Grad des Generatorpolynoms, desto besser ist ein Infobit-Block abgesichert. Ein vom CCITT vorgeschlagenes "Standard"- Generatorpolynom lautet : (es fängt alle Einfach und Doppelfehler sowie Fehlerketten der Länge <16 und wird im öffentlichen DATEX-P Netz benutzt ) IBM setzt im BYSYNC-Protokoll zur Datenkommunikation "CRC 16" ein : G(x) = x16 + x12 + x5 + 1 G(x) = x16 + x15 + x2 + 1 Beim Rechnen im “binären System“ (modulo-2-System, Addition / Subtraktion modulo 2 --> ⊕ = bitweises XOR ) müssen die folgenden Regeln beachtet werden: 0±0=0 1±0=1 0±1=1 1±1=0 und " – " entspricht " + " Rechnergrundlagen Teil 1 - 44 - Prof.Dipl.-Ing. Komar Pragmatische Darstellung der Schritte zur Generierung der CRC-Bitfolge: Beispiel: gegeben: Generatorpolynom G(x) = xr + .... + 1 ( Grad r ) G(x) = x 3 + x + 1 Informationsbitfolge r=3 Informationsbits: 1 0 1 0 Schritt 1: I(x) = x 3 + x 1. Bilde binäres Polynom I(x) aus gegebenen Infobits 2. I(x) x r dadurch werden Infobits in den Wertigkeiten um r Bits " nach oben " geschoben und damit Platz geschaffen für r CRC-Bits Infobits 0000....0 Schritt 2: I(x) * x 3 = x 6 + x 4 3. Polynom-Division zur Bildung des Prüfpolynoms R (x) I (x) x r R (x) ---------- = Q (x) + ---------G (x) G (x) => Rest R (x) 4. Divisionsrest R (x) entspricht den CRC-Bits. Rückwandlung von R (x) in einen Bitstrom und diesen an die Infobits anhängen. S(x) = I (x) xr + R (x) Schritt 3: ( x 6 + x 4 ) / ( x 3 + x + 1 ) = x 3 + 1 x6+x4+x3 x3 x3+x+1 x + 1 (Rest) Schritt 4: R (x) = x + 1 Rückwandlung in Bits: x 2 x 1 x 0 (<= mögliche Potenzen r-1 ) 0 1 1 ( = CRC ) damit wird das gesamte " Paket" : Sendepolynom: S(x) = x 6 + x 4 + x + 1 Sende-Bitfolge: 1 0 1 0 0 1 1 Der Empfänger prüft, ob das Polynom des eintreffenden Bitstroms ohne Rest durch G (x) teilbar ist. Falls bei dieser Division ein Rest auftritt: => Fehler ! Aus der Form des Restpolynoms: => Korrektur der Fehler Aus der Gleichung bei Schritt 3 folgt für die Polynomdarstellung des gesendeten Bitstroms (incl. CRC): S (x) = I ( x ) x r + R (x ) = Q (x ) G(x ) D.h. es werden nur solche Pakete verschickt, die (Polynom-) Vielfache von G(x) sind. Daher darf bei der erneuten Division beim Empfänger kein Rest auftreten! Beispiel einer CRC-Codierung mit G(x) = x 4 + x + 1 Rechnergrundlagen Teil 1 - 45 - Prof.Dipl.-Ing. Komar Die technische Generierung der CRC-Bits kann hardwaremäßig sehr einfach durch rückgekoppelte Schieberegister realisiert werden. Die Rückkopplung erfolgt über XOR-Glieder an den vom Generatorpolynom bestimmten Stellen. Bei einem Generatorpolynom vom Grade r besteht das Schiebergister aus r Bitzellen (FlipFlops). Für jede im Generatorpolynom auftretende Potenz gibt es einen XOR-gekoppelten Rückkopplungspfad. Die getaktet eintreffenden Informationsbits gelangen direkt zum Empfänger. Parallel dazu entstehen im Schieberegister die CRC-Bits, die am Ende des Byteblocks durch Umlegen eines Schalters ausgetaktet, d.h. "nachgeschoben" werden. Aufbau eines CRC-Generators mit G(x) = x 16 + x15 + x2 + 1 Literatur zu CRC : Lochmann Digitale Nachrichtentechnik Verlag Technik Berlin H.P.Messmer PC-Hardwarebuch Addison-Wesley Rechnergrundlagen Teil 1 - 46 - Prof.Dipl.-Ing. Komar 4.4.6 Fehlerminderung mit Blocksicherung Einfache Blockabsicherung Ein Block hintereinander liegender Byte wird durch einen “Block Check Character“ (BCC) gesichert. Typische Blocklängen sind 10..1024 Byte. Das Check-Byte entsteht durch Addition oder durch eine logische XORVerknüpfung ( modulo 2-Addition ohne Übertrag = bitweise Bildung der geraden Parität ) aller Bytes des Blocks und wird als zusätzliches “Zeichen“ an den Block angehängt ( LRC = longitudinal redundancy check ) Beispiel Byte-Block (HEX-Notation): BCC (gebildet durch .... ) (ADD) (XOR) 03 12 07 4F 30 A4 F1 7C 2B 65 (3) 3C 0E Beispiel für Bildung des Prüfwortes ( BCC ) durch spaltenweise Bildung der geraden Parität ( XOR ) 0 0 1 0 1 0 0 1 0 1 1 1 1 0 1 0 BCC 0 1 1 0 Welche Fehlerminderung ist bei dieser einfachen Blocksicherung möglich? Falls das beim Empfänger generierte Check-Byte nicht mit dem gesendeten übereinstimmt, fordert der Empfänger eine Wiederholung der Blocksendung an. Rechteckcode ( auch Kreuzsicherung ) Eine Verbesserung der Fehlerminderung dieser einfachen Blocksicherung ist durch mehrdimensionalen Schutz von Bitblöcken möglich. Dazu versieht man jedes Codewort mit jeweils einem Paritätsbit ( in jeder Zeile die Längsparität = Longitudinal Redundancy Check LRC ) und bildet dann aus diesen neuen Wörtern einen Block bestimmter Länge . Über diesen Block bildet man nun spaltenweise die Parität ( in jeder Spalte die Querparität= Vertical Redundancy Check VRC ) Das so ermittelte Längsprüfwort wird an das Ende des Blocks gehängt und mit den Informationen übertragen. Das Prüfbit in der rechten unteren Ecke des gesamten Blocks wird üblicherweise so gesetzt, daß es die Anzahl der Einsen im gesamten Daten-Block auf die gewünschte Parität ergänzt Man findet wegen des rechteckigen Übertragungsschemas in der Literatur dafür auch die Bezeichnung Rechteck-Codes. Ein Beispiel hierzu mit gerader Parität ( Block aus 8 Wörtern zu je 7 Bit ): Codewort Paritätsbit 101000 001000 101100 101011 001000 111000 001011 0 1 1 0 1 1 1 011100 1 _ 1010000 0010001 1011001 1011110 0010001 1110001 0010111 0111001 ungerade Längsprüfwort = Spaltenparität ungerade gerade Parität a b Blocksicherungsbeispiel Im Empfänger kann man nun wieder die Zeilen- und Spaltenparität bilden und dadurch die fehlerhafte Bitstelle im Block lokalisieren. Diese befindet sich nämlich genau im Schnittpunkt der fehlerhaften Spalten- und Zeilenprüfsumme. Tritt eine Paritätsverletzung nur in der Prüfzeile oder der Prüfspalte auf, aber nicht in beiden gleichzeitig, so ist der 1-Bit-Fehler im entsprechenden Prüfwort entstanden. Rechnergrundlagen Teil 1 - 47 - Prof.Dipl.-Ing. Komar Ist nur das rechte untere Prüfbit fehlerhaft und weder die Parität der Prüfzeile noch die der Prüfspalte verletzt, so liegt der Fehler im Prüfbit selbst. Das obige Beispiel a zeigt die Bildung eines Blockes mit gerader Parität. Beispiel b zeigt einen fehlerhaften Datenblock. Es ist je eine ungerade Zeilen- und Spaltenparität gefunden worden. Die 1 im Schnittpunkt muß daher zur Fehlerkorrektur durch eine 0 ersetzt werden. Die Blocksicherung ist eine einfache und effiziente Methode zur Korrektur von Einzelfehlern. Im Vergleich mit Hamming-Codes benötigt sie aber mehr Prüfbits. Im Beispiel beträgt die Anzahl der überprüften Informationsbits, in denen ein Fehler zugelassen wird, m= 42 Hierfür benötigt man beim Hamming-Code k = 6 Prüfbits. Verwendet werden bei der Blocksicherung aber 14 Prüfbits. Wegen der einfachen Überprüfbarkeit ist die Blocksicherung dennoch weit verbreitet, z.B. bei Sicherung der Daten auf Magnetbändern. Erzeugung der Kreuzparität Aufgabe: Wieviel Fehler sind bei einem derartigen Rechteck-Code sicher erkennbar und wieviele korrigierbar ? Aufgabe: Der folgende Bitstrom werde empfangen: 01010 00110 10110 01001 00011 Auf der Empfangsseite ist bekannt, daß damit eine 4 stellige Dezimalzahl, deren einzelne Ziffern im 3-Exzess-Code codiert sind, mit Blocksicherung (Rechteckcode) in gerader Parität gesichert und übertragen wird. Wie lautet diese Zahl ? Rechnergrundlagen Teil 1 4.4.7 - 48 - Prof.Dipl.-Ing. Komar Zeichenverflechtung gegen Bündelfehler Ein ähnliches Verfahren hat man entwickelt, um Fehlerbündel zu korrigieren. Fehlerbündel stören mehrere aufeinanderfolgende Bits eines Wortes oder Blockes . Eine Folge von k aufeinanderfolgenden Codeworten wird in Form einer Matrix angeordnet, und zwar ein Codewort pro Zeile. Um Fehlerbündel zu korrigieren, sendet man nun die Matrix spaltenweise und nicht wie üblich Codewort hinter Codewort.Auf Empfängerseite wird die Matrix spaltenweise rekonstruiert. Falls nun ein Fehlerbündel ( burst ) der Länge k aufgetreten ist, so ist nicht mehr als ein Bit in jedem der k Codewörter gestört. Dieses eine Fehlerbit pro Codewort kann dann z.B. durch den Hamming-Code korrigiert werden und damit kann der gesamte übertragenen Block wiederhergestellt werden. Übertragung mit Zeichenverflechtung e5 Ü b e t r a g u n g a1 b1 c1 d1 e1 a2 b2 c2 d2 e2 a3 b3 c3 d3 e3 a4 b4 c4 d4 e4 a5 b5 c5 d5 e5 d5 c5 Senden b5 a5 e4 d4 a1 b1 c1 Bündel-Störung a1 b1 c1 d1 e1 a2 b2 c2 d2 e2 a3 b3 c3 d3 e3 a4 b4 c4 d4 e4 a5 b5 c5 d5 e5 Empfangen c4 b4 a4 e3 d3 c3 b3 gestörte a3 aufeinandere2 folgende d2 Bits c2 b2 a2 e1 d1 Rechnergrundlagen Teil 1 - 49 - Prof.Dipl.-Ing. Komar 5. Zahlensysteme Polyadische Zahlensysteme sind Zahlensysteme mit Stellenschreibweise, wobei zusätzlich die einzelnen Stellenwerte nach einem exponentiellen Bildungsgesetz gestuft sind: ( in einem polyadisches Zahlensystem mit der Basis B wird die Zahl Z nach Potenzen von B zerlegt ) n −1 Z = ∑ a ∈ ( 0, B – 1 ) ai Bi i =− m mit B = Basis des Zahlensystems a = Wert des Symbols an der Stelle i bzw Ziffer der Zahl n = Anzahl der ganzen Stellen m = Anzahl der Stellen hinter dem Komma Anzahl der Ziffern des Zahlensystems = B Höchster Ziffernwert = B – 1 Zu diesen polyadischen Systemen gehören die technisch interessanten Zahlensysteme Dezimal – Dual – Sedezimal. Das Sedezimalsystem wird auch als Hexadezimalsystem bezeichnet. Dualsystem Oktalsystem Dezimalsystem Hexadezimalsystem Beispiele: 1543,210 B Q D H a∈ a∈ a∈ a∈ B = 2 B= 8 B = 10 B = 16 ( 0, 1 ) ( 0, 1, 2, 3, 4, 5, 6, 7 ) ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ) ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F ) = 1 * 103 + 5 * 102 + 4 * 101 + 3 * 100 + 2 * 10-1 2002,0110 = 2 * 103 + 2 * 100 + 1* 10-2 101,012 = 1 * 22 + 0 * 21 + 1 * 20 + 0 * 2-1 + 1 * 2-2 1AF016 = 1 * 163 + 10 * 162 + 15 * 161 + 0 * 160 Dezimal Hexadezimal Oktal Dual Basis 2 Basis 10 Basis 16 Basis 8 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 Zahlen in den vier Systemen 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000 10001 Potenzen von 2 2 n n 2 -n 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 0, 5 0, 25 0, 125 0, 062 5 0, 031 25 0, 015 625 0, 007 812 5 0, 003 906 25 0, 001 953 125 0, 000 976 562 5 0, 000 488 281 25 0, 000 244 140 625 0, 000 122 070 312 5 0, 000 061 035 156 25 0, 000 030 517 578 125 0, 000 015 258 789 062 5 Rechnergrundlagen Teil 1 - 50 - Prof.Dipl.-Ing. Komar 5.1 Zahlenumwandlung bei unterschiedlichen Basen Für die Umwandlung von Dezimalzahlen in Zahlen zur Basis B und für die Rückwandlung von Zahlen zur Basis B in Dezimalzahlen werden Verfahren vorgestellt, die sich leicht programmieren lassen. Diese Verfahren verwenden für beide Umwandlungsrichtungen die bekannten Rechenregeln des Dezimalsystems und werden im Dezimalsystem durchgeführt. Die Verfahren beruhen auf der folgenden Darstellung ( Horner Schema ): l Z = ∑ ai B i = i =− k ∑ ai B i i =0 ganzzahliger Anteil l ∑a i =0 i Bi −1 l + ∑a i =−k i Bi Nachkommastellen = ((( a l * B ) + a l-1 ) * B + . . . + a 1 ) * B + a 0 Horner Schema −1 ∑ ai Bi = (((( a -k / B ) + a -k+1 ) / B + . . . + a -2 ) / B + a -1 ) / B i =− k 5.1.1 Umwandlung einer Dezimalzahl (Restwertmethode) Die Vorgehensweise bei der Umwandlung einer Dezimalzahl in eine Zahl zur Basis B ist für beliebige Basen B anwendbar. Die Beispiele beschränken sich aber auf B = 2 und B = 16, also auf die Umwandlung in das übliche Dual- bzw. Sedezimalsystem (Hexadezimalsystem). Die Umwandlung wird in vier Schritte gegliedert. Schritt 1: Die Dezimalzahl wird in den ganzzahligen Anteil und in die Nachkommastellen zerlegt. Beispiel: 190,24 = 190 + 0,24. Schritt 2: Der ganzzahlige Anteil wird durch die Basis B geteilt , es entsteht ein neuer ganzzahliger Anteil und ein Rest. Der Rest ist schon Teil des Umwandlungsergebnisses. Der neu entstandene ganzzahlige Anteil wird wieder durch B geteilt, usw. Das Verfahren ist fortzusetzen, bis sich für den ganzzahligen Anteil Null ergibt. Bei der Umwandlung ins Dualsystem stellt die erste Division z.B. fest, ob der ganzzahlige Anteil gerade ist (Rest =0) oder ungerade (Rest 1). Dieser Rest liefert also die Ziffer mit dem niedrigsten Stellenwert, und es ergibt sich die im Bild durch Pfeile gekennzeichnete Leserichtung. B=2 190/2 95/2 47/2 23/2 11/2 5/2 2/2 1/2 = = = = = = = = B = 16 95 Rest 0 47 Rest 1 23 Rest 1 11 Rest 1 5 Rest 1 2 Rest 1 1 Rest0 0 Rest 1 190/16 = 11 Rest E 11/16 = 0 Rest B 19010 = B E 16 190 10 = 1 0 1 1 1 1 1 0 2 Umwandlung des ganzzahligen Anteils Schritt 3: Die Nachkommastellen werden mit der Basis B multipliziert, das Produkt besteht aus einem ganzzahligen Anteil und aus neuen Nachkommastellen. Der ganzzahlige Anteil ist schon Teil des Umwandlungsergebnisses. Die neu entstandenen Nachkommastellen werden wieder mit der Basis B multipliziert, usw. Das Verfahren ist fortzusetzen, bis die Nachkommastellen Null werden oder bis die gewünschte Genauigkeit erreicht ist. Rechnergrundlagen Teil 1 0,24 0,48 0,96 0,92 0,84 0,68 0,36 0,72 - 51 - B = 2 2 = 0,48 + 0 2 = 0,96 + 0 2 = 0,92 + 1 2 = 0,84 + 1 2 = 0,68 + 1 2 = 0,36 + 1 2 = 0,72 + 0 2 = 0,44 + 1 * * * * * * * * Prof.Dipl.-Ing. Komar B = 16 0,24 * 16 = 0,84 + 3 0,84 * 16 = 0,44 + D . . . 0,24 10 = 0,3D..... 16 . . 0,24 10 = 0, 0011 1101 . . . 2 Umwandlung der Nachkommastellen Schritt 4: Die Teilergebnisse der Schritte zwei und drei werden zusammengefaßt. Beispiel: 190,2410 = 1011 1110 , 0011 1101.. .2 190,2410 = BE , 3D. ..16 5.1.2 Rückwandlung in Dezimalzahl Auch die Vorgehensweise bei der Rückwandlung einer Zahl zur Basis B in eine Dezimalzahl ist für beliebige Basen B anwendbar. Als Beispiele werden die gerade ermittelten Zahlen im Dual- bzw. Sedezimalsystem (Hexadezimalsystem) verwendet. Die Rückwandlung muß also 190,24 ergeben. Schritt 1: Die Zahl zur Basis B wird in den ganzzahligen Anteil und in die Nachkommastellen zerlegt. Beispiele: 1011 1110 , 0011 1101 2 = 1011 1110 2 + 0 , 0011 1101 2 BE , 3D16 = BE16 + 0 , 3D16 Schritt 2: Der ganzzahlige Anteil wird nach dem Horner-Schema schrittweise mit der Basis B multipliziert. B = 2 2 2 2 2 2 2 2 B = 16 1 0 1 1 1 1 1 0 * 1+ 0 * 2+ 1 * 5+ 1 * 11+ 1 * 23+ 1 * 47+ 1 * 95+ 0 = 2 = 5 = 11 = 23 = 47 = 95 = 190 B E 16 * B + E = 190 BE 16 = 190 10 1011 1110 2 = 190 10 Rückwandlung des ganzzahligen Anteils Schritt 3: Die Nachkommastellen werden rückgewandelt. B = 2 0,00111101 1 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0,5 0,25 0,62.. 0,81.. 0,90.. 0,95.. 0,48.. / / / / / / / / 2 2 2 2 2 2 2 2 0 , 0 0 1 1 1 1 0 1 2 = 0, 24 . .10 = = = = = = = = 0,5 0,25 0,62.. 0,81.. 0,90.. 0,95.. 0,48.. 0,24.. B = 16 0,3D D 3 + 0,8125 / 16 = 0,8125 / 16 = 0,238 0 , 3D 16 = 0,238.. 10 Rückwandlung der Nachkommastellen Rechnergrundlagen Teil 1 - 52 - Prof.Dipl.-Ing. Komar Schritt 4: Die Teilergebnisse der Schritte zwei und drei werden zusammengefaßt. Beispiele: 1011 1110 , 0011 1101 2 = 190,24.. .10 BE , 3D 16 = 190,238.. 10 5.1.3 Vereinfachte Umwandlung In Sonderfällen lassen sich Umwandlungen zwischen zwei Zahlensystemen mit den Basen B1 und B2 vereinfachen. B1n = B2 Diese vereinfachte Umwandlung ist dann möglich, wenn für die beteiligten Zahlensysteme obige Beziehung gilt, wobei n eine ganze Zahl größer eins sein muß. Es lassen sich da vom Komma nach links bzw. rechts ausgehend, jeweils n Folgeziffern des Systems mit Basis B1 und eine Ziffer des Systems mit der Basis B2 einander zuordnen. a) b) B1= 2 B 2 = 16 n=4 B1 = 2 B2 = 8 n = 3 1011 1110 , 0011 1101 | | | | B E , 3 D 010 111 110 , 001 111 010 | | | | | | 2 7 6 , 1 7 2 Dual – Hexadezimal Dual - Oktal Umwandlung in Sonderfällen a ) Mit B1 = 2 und B2 = 16 gilt n = 4, d.h. jeweils vier Ziffern des Dualsystems wird eine Ziffer des Sedezimalsystems ( Hexadezimalsystems ) zugeordnet. Diese Eigenschaft von Hexadezimal- und Dualsystem wird benutzt, um unübersichtliche Bitmuster großer Länge ( 4 – 64 Bit ) durch Hex-Ziffern übersichtlich darzustellen, wobei die Bitmuster keineswegs Dualzahlen darstellen müssen ( Binär->Hex 4er Bündelung ; Hex-> Binär 4er Entbündelung ) b ) zeigt die Vorgehensweise für die Umwandlung zwischen Dual- und Oktalsystem. Bei Bedarf können führende und abschließende Nullen ergänzt werden. Mit einem Umwandlungszwischenschritt über das Hex-System läßt sich dadurch die Dual-Dezimalwandlung bedeutend vereinfachen, dies gilt insbesondere bei der Zuhilfenahme eines Taschenrechners, der die DezimalHexadezimalumwandlung beherrscht. Beispiel: 564,2810 in das Dualsystem wandeln unter Zuhilfenahme eines Taschenrechners der die ganzzahlige Dezimal-Hexadezimalumwandlung beherrscht. 1.) Zuerst ganzahligen Anteil 564 nach Hex wandeln, ergibt 564 10 = 234 16 2.) Dann gewünschte Anzahl der binären Dualstellen hinter dem Komma auf Vielfache n von 4 festlegen und den dezimalen Nachkommaanteil mit 16 n multiplizieren . In diesem Beispiel mit n = 3 bedeutet dies 12 Binärstellen hinter dem Komma und ergibt 0,28 * 163=1146,810 Davon wird der ganzzahlige Anteil nach Hex gewandelt 114610 = 47A16 3.) Durch Multiplikation mit 16-n , im Beispiel 16-3 , wird das Komma der Hex-Zahl um n Stellen nach links verschoben und liefert den Nachkommanteil der Hex-Zahl 47A * 16-3 = 0,47A 16 Diese Hex-Zahl läßt sich nun leicht mit der 4er-Entbündelung nach binär wandeln. 564,2810 = 234,47A16 = 0010 0011 0100 , 0100 0111 1010 2 Für die Rückwandlung dual nach dezimal ist entsprechend invers zu verfahren, d.h. jeweils vier duale Nachkommastellen sind nach Hex zu wandeln (4er-Bündelung) und die Nachkomma-Hexzahl ist mit 16 n zu multiplizieren (n = Nachkommastellen der Hex-Zahl ) Die dadurch entstandene ganzahlige Hex-Zahl ist nach Dezimal zu wandeln und das dezimale Ergebnis mit 16-n zu multiplizieren und liefert den Nachkommaanteil der Dezimalzahl. 0,0011 11012 => 0,3D 16 * 162 = 3D 16 = 6110 => 6110 * 16-2 = 0,2383 10 Rechnergrundlagen Teil 1 - 53 - Prof.Dipl.-Ing. Komar 5.2 Arithmetik im Dualsystem Die Rechenregeln im Dualsystem sind besonders einfach, da nur die Ziffern 0 und 1 auftreten können. Additions – Regeln Subtraktions - Regeln 0+0=0 0–0=0 0+1=1 1–0=1 1+0=1 1–1=0 1 + 1 = 0 + Übertrag ( Carry ) von 1 0 – 1 = 1 – Entleihung ( Borrow ) einer 1 zur nächsthöheren Stelle von der nächsthöheren Stelle Da sich das Ergebnis von 1 + 1 und von 0 – 1 nicht mehr mit einer einzigen Ziffer darstellen läßt, muß eine zusätzliche Stelle eingeführt werden. Es entsteht ein Übertrag (Carry) auf die höherwertige Stelle bzw ein Borgen von der höherwertigen Stelle Beispiele: a) 5 + 12 = 17 b) 1,5 + 10,5 = 12,0 0101 1100 1 1 0 0 Carry (1) 0 0 0 1 0001,1 + 1010,1 1 1 1 Carry (0)1100,0 + a) 12 - 5 = 7 b) 14,75 - 5,25 = 9,5 1 1 0 0 Minuend - 0 1 0 1 Subtrahend 111 Borrow 0111 1110,11 - 0101,01 10,0 1 0 0 1, 1 0 Minuend Subtrahend Borrow Mit negativen Dualzahlen kann die Subtraktion auf die Addition einer negativen Zahl in der sogenannten Komplementdarstellung zurückgeführt werden. Diese Vorgehensweise vermindert den Aufwand in Rechenschaltungen. Bei der Multiplikation gelten die folgenden Regeln: 0*0=0 0*l =0 1*0=0 1*1=1 Die Vorgehensweise bei der Multiplikation mehrstelliger Zahlen entspricht dem vom Dezimalsystem her bekannten Verfahren. Das Ergebnis der Multiplikation zweier n-Bit-Wörter ist 2n-Bit lang. Es ist aber immer kleiner als die mit 2n Bits maximal darstellbare Binärzahl 2 2n – 1 . Die Multiplikation zweier Dualzahlen mit n und k Stellen hinter dem Komma ergibt ein Produkt mit n + k Stellen hinter dem Komma. Beispiele: a) 5 * 3 = 15 1 0 1 * 11 101 + 101 1111 b) 3,5 * 2 = 7,0 c) 2,25 * 2,5 = 5,625 10,01* 10,1 10 0 1 + 0 0 00 + 1 0 01 1 0 1 ,1 0 1 Die Division wird, wie aus dem Dezimalsystem bekannt, auf eine Folge von Vergleichen und Subtraktionen zurückgeführt. Bei einer Division einer Zahl mit n-Stellen hinter dem Komma durch eine Zahl mit k-Stellen hinter dem Komma, hat der Quotient n – k Stellen hinter dem Komma. Auch die Division von Zweierkomplementzahlen kann auf Multiplikation und Addition zurückgeführt werden. Beispiele: a) 9 / 3=3 1001 / 11 =11 - 11 11 - 11 0 11,1* 10 111 000 1 1 1, 0 b) 13 / 5 = 2,6 1 1 0 1 / 1 0 1 = 1 0, 1 0 0 1 . . -101 110 - 101 1000 - 101 11 Rechnergrundlagen Teil 1 - 54 - Prof.Dipl.-Ing. Komar 5.3 Zahlendarstellung im Rechner In Rechnern wird für die Zahlendarstellung sowohl das Dualsystem als auch das Dezimalsystem in Form der binär-dezimalen Zahlendarstellung ( Tetraden-Codierung der Dezimalziffern wie BCD- oder Aiken-Code ) angewandt. Um im Rechenwerk ( ALU = arithmetische, logische Einheit ) arithmetische Operationen mit diesen Zahlen ausführen zu können, müssen diese eine bestimmte einheitliche feste Wortlänge mit n Bits ( üblich n = 4, 8, 16, 32 oder 64 ) haben. Dies Wortlänge entspricht meist der Registerbreite der jeweiligen CPU. Folgende Bezeichnungen sind üblich: Maschinenwort = Anzahl der Bits, die ein gegebener Rechner mit einem Maschinenbefehl maximal verarbeiten kann. (entspricht der Registerbreite ) Halbbyte ( Nibble) = 4 Bit Hex-Ziffer Byte = 8 Bit kleinste vom Rechner adressierbare Speichereinheit, Datentyp char Wort = 16 Bit Ganzzahl-Datentyp integer Doppelwort = 32 Bit Datentypen Long-Integer, Short-Real, Float Da die Wortlänge fest und begrenzt ist, ergeben sich für die Zahlendarstellung zwei Konsequenzen: - der darstellbare Zahlenbereich ist beschränkt , es sind nur E = 2 n unterschiedliche Zahlen darstellbar es können nur ganze Zahlen dargestellt werden Weil man aber auch vorzeichenbehaftete, gebrochene Zahlen verarbeiten will, muß man Möglichkeiten für die Darstellung des Vorzeichens und der Kommaposition finden. Man unterscheidet drei Möglichkeiten der Zahlendarstellung: - Festkomma-Darstellung ( Festpunktzahl, fixed point ) ( hohe Genauigkeit, Zahlenbereich nicht sehr groß, z.B. kaufmännisches Rechnen ) - Gleitkomma-Darstellung ( Gleitpunktzahl, floating point ) ( sehr großer Zahlenbereich mit geringerer Genauigkeit, technisch-wissenschaftliches Rechnen ) - binärcodierte Dezimalzahl ( BCD – Zahl ) (einfache Ein /-Ausgabe, für einfache Rechnungen im beschränkten Format, Meßgeräte ,Taschenrechner) Das Rechnen im Binärformat ( Festkomma ) und Dezimalformat ( BCD ) wird von fast allen Rechnern und Mikroprozessoren unterstützt. Für die Gleitkomma-Rechnung wird bei manchen Prozessoren ein zusätzlicher arithmetischer Coprozessor benötigt, oder die Gleitkommarechnung wird durch Software in Form von Unterprogrammpaketen emuliert. Bei den INTEL-Prozessoren ist ab dem 80486 der Gleitkommaprozessor in Form der Floating-Point-Unit FPU integriert. Rechnergrundlagen Teil 1 - 55 - Prof.Dipl.-Ing. Komar 5.4 Darstellung vorzeichenbehafteter Dual-Zahlen Die üblichen Plus- und Minuszeichen zur Kennzeichnung positiver und negativer Zahlen existiert im Binären nicht. Für viele Anwendungen werden aber vorzeichenbehaftete Dual-Zahlen (vb.D) benötigt. Untenstehende Tabelle zeigt am Beispiel vierstelliger Dualzahlen einige Möglichkeiten zur Darstellung derartiger Zahlen. Man ordnet negativen Zahlen die Hälfte der verfügbaren Kombinationsmöglichkeiten zu, in der Regel die Kombinationen mit gesetztem führenden Bit (i = 3). Der Bereich von 0000 bis 1111 wird auf diese Weise in einen positiven und in einen negativen Bereich unterteilt. Eine 0 in der höchstwertigen Stelle ( MSB = most significant bit ) kennzeichnet eine positive Dualzahl, eine 1 eine negative (ausgenommen die Exzeßdarstellung ) Dezimalwert bei Darstellung nur positiver i 3210 Dualzahlen 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 positiver und negativer Dualzahlen Betrag und Vorzeichen EinerKomplement +0 +1 +2 +3 +4 +5 +6 +7 -0 -1 -2 -3 -1 -5 -6 -7 ZweierKomplement +0 +1 +2 +3 +4 +5 +6 +7 -7 -6 -5 -4 -3 -2 -1 -0 +0 +1 +2 +3 +4 +5 +6 +7 -8 -7 -6 -5 -4 -3 -2 -1 Exzeßdarstellung –8 –7 –6 –5 –4 –3 –2 –1 0 +1 +2 +3 +4 +5 +6 +7 Möglichkeiten zur Darstellung vorzeichenbehafteter Dualzahlen Bei des Exzeßdarstellung wird durch Addition einer Konstanten k = 2 n-1 der Zahlenbereich unterteilt. Exzeßzahlenwert = Bitmusterwert als vorzeichenlose Dualzahl - 2 n – 1 Die Vorzeichen-/Betragsdarstellung wird in der Digitaltechnik und in der Datenverarbeitung kaum verwendet, denn sie hat den Nachteil, daß man eine gesonderte Vorzeichenrechnung durchführen muß und daß man ein Rechenwerk benötigt, das sowohl addieren als auch subtrahieren kann. Ein weiterer Nachteil dieser Darstellung sind die beiden fehlerträchtigen Nullen ( + 0 und – 0 ) 5.4.1 Komplementdarstellung Um mit einem reinem Addierwerk (d.h. das Rechenwerk kann nur addieren ) auszukommen, führt man mit dem Verfahren der Komplementbildung, die Subtraktion auf eine Addition zurück. y – z = y + z* _ C mit z* := C – z Komplement von z zu C Diese Zurückführung der Subtraktion auf eine Addition ist nur dann möglich, wenn sich sowohl die Komplementbildung von z* als auch die Subtraktion der Komplementzahl C einfach und ohne Zuhilfenahme der Rechenoperation " Subtraktion" durchführen lassen. Dies ist nur beim Dualsystem der Fall, da hier die Komplementbildung durch einfaches Invertieren der einzelnen Stellen erfolgen kann und die Subtraktion von C ( Reduktion mod C ) bei geschickter Wahl von C gar nicht mehr ausgeführt werden muß. Rechnergrundlagen Teil 1 - 56 - Prof.Dipl.-Ing. Komar Diese Komplementdarstellung zur Vermeidung der Rechenoperation "Subtraktion" kann aber auch zur Darstellung negativer Dualzahlen verwendet werden y - z = ( + y ) + ( -z ) indem die Subtraktion als die Addition einer negativen Dualzahl betrachtet wird. Damit wird dann eine negative Dualzahl durch ihr Komplement dargestellt. Die beiden günstigen Werte für die Komplementzahl C sind im dualen C = 2 n – 1 ( Einerkomplement ) und C = 2 n (Zweierkomplement) (mit n = binäre Stellenzahl ) Das ( B – 1 ) – Komplement einer Zahl ist die Differenz dieser Zahl zur größten darstellbaren Zahl in diesem Zahlenbereich ( im Dezimalen -> Neuner-Komplement , im Dualen -> Einer-Komplement ) C= Bn –1 z* = C - z = ( B n – 1 ) – z C = Komplementzahl mit n = Stellenzahl B = Basis des Zahlensystems z = n-stellige Zahl z* = dazugehörendes Komplement B n – 1 ist eine n-stellige Zahl, deren Ziffern alle den maximal möglichen Ziffemwert besitzen Beispiele: B = 10, n = 5 : B n – 1 = 10 5 – 1 = 99999 B = 2, n = 6: B n – 1 = 2 6 – 1 = 111111 Als Folge kann bei der Subtraktion kein Borgen auftreten. Außerdem erhält man im Dualsystem ( B = 2 ) das Subtraktionsergebnis z* ganz einfach durch stellenweises Invertieren des Subtrahenden z, da gilt 1– 0=1 und 1–1 = 0 Das Einer-Komplement einer Dualzahl ( ( B – 1 )-Komplement , Stellenkomplement ) wird gebildet, indem alle Stellen invertiert werden. DieEiner-Komplement–Darstellung negativer Zahlen findet man nur noch in einigen alten Großrechenanlagen, Sie hat nämlich den Nachteil der zweifachen Darstellung der Null und die Arithmetik ist durch eine notwendige Korrekturaddition bei einem auftretenden Übertrag , dem sogn. Einer-Rücklauf, etwas aufwendiger. Das B – Komplement (echtes Komplement) einer Zahl ist die Differenz dieser Zahl zur nächsthöheren Potenz des Zahlensystems, d.h. zur nächstgrößeren, außerhalb des Zahlenbereiches liegenden Zahl. ( im Dezimalen -> Zehner - Komplement , im Dualen -> Zweier-Komplement ) C= Bn z * = C – z = Bn – z = ( B n – 1 ) – z + 1 Einerkomplement Das Zweier-Komplement ( B – Komplement ) einer Dualzahl kann gebildet werden, indem man sie stellenweise invertiert (Einerkomplement) und anschließend eine 1 addiert oder Das Zweier-Komplement einer Dualzahl wird gebildet, indem man von rechts nach links alle Stellen links von der ersten 1 invertiert und die übrigen Stellen beibehält. Auf die gleiche Weise wie oben erhält man den Betrag einer im Zweier-Komplement vorliegenden negativen Zahl, denn nach Umformung gilt : z = ( B n – 1 ) – z *+ 1 ImZweier-Komplement ist die Darstellung der Null eindeutig. Alle Mikrocomputer und Computer unterstützen heutzutage das Rechnen in dieser Zahlendarstellung. Deswegen wird im weiteren für vb.Dualzahlen immer diese Zweier-Komplement-Darstellung zugrunde gelegt. Beispiele: Zweierkomplementbildung K (-1) = 10000 K (-3) = 10000 K (-8) = 10000 ( n = 4 ) durch Subtraktion z * = 2 4 – z - 0001 =1111 - 0011 =1101 - 1000 =1000 Zweierkomplementbildung durch Invertieren und inkrementieren ( Wortlänge n = 8 ) K (- 107) = K (-0110 1011) = 1001 0100 + 1 = 1001 0101 K (- 16 ) = K (-01 0000 ) = 10 1111 + 1 = 1111 0000 K (- 6 ) = K (-0110 ) = 1001 + 1 = 1111 1010 Rechnergrundlagen Teil 1 - 57 - Prof.Dipl.-Ing. Komar 5. 4. 2 Rechnen in Zweier-Komplement-Darstellung Bei der Rechnung im Zweier-Komplement (d.h. negative Zahlen werden im Zweierkomplemet dargestellt ) können positive und negative Dual-Zahlen einschließlich des Vorzeichens bei Addition und Subtraktion gleichbehandelt werden. (vom Rechenwerk gleichbehandelt werden )!!!! Beispiele: Addition /Subtraktion in Zweier-Komplementdarstellung für n = 4 0 < 4 Bit-vl.D < 15 -8 < 4 Bit-vb.D < +7 a) ( +5 ) + ( -5 ) = 0 b) ( +3 ) – ( -3 ) = 6 0101 + 1011 1111 Carry (1) 0000 0011 - 1101 1100 Carry (1) 0110 c) (-3) + (-3) = - 6 d) (+3) – (+7) = - 4 1101 + 1101 1101 Carry (1) 1010 0011 + 1001 011 Carry (0)1100 ( ) = Übertrag oder Borger (Carry ) CY an der Stelle n + 1 Da ein vierstelliges Rechenwerk den Übertrag nicht weiter verarbeitet, braucht die Subtraktion von C = 2 4 nicht explizit ausgeführt zu werden. Wenn man den Übertrag (Carry-Bit = Übertrag an Stelle n + 1) ignoriert, dann stellt das vierstellige Rechenwerk bereits das Ergebnis richtig dar , denn dabei wird eigentlich die Zweier-Komplementergänzungszahl C = 2 n subtrahiert. Im Beispiel b ) soll das Rechenwerk subtrahieren können, und in d ) wird die Subtraktion auf eine Addition mit dem Subtrahenden im Zweierkomplement zurückgeführt. Bereichsüberschreitungen Beim Rechnen mit vorzeichenlosen Dualzahlen (vl.D) kann eine Zahlenbereichsüberschreitung ( Über- oder Unterlauf ) am Übertrags-Bit (Carry / Borrow – Flag CY = 1) erkannt werden. Die obigen Beispiele zeigen, daß beim Rechnen mit vorzeichenbehafteten Dualzahlen in Zweierkomplementdarstellung eine Zahlenbereichsüberschreitung an dem Carry-Flag Cn+1 = CY nicht mehr erkannt werden kann. Im vorzeichenbehafteten Dual-Zahlensystem kann bei Addition und Subtraktion eine Zahlenbereichsüber schreitung auftreten und diese zeigt sich am Vorzeichenumschlag im höchstwertigen Ergebnisbit MSB . Das Rechenwerk „kennt“ aber nur Bitmuster und unterstützt das Rechnen mit vorzeichenbehafteten Zahlen durch das Anzeigen einer Zahlenbereichsüberschreitung in einem speziellen Overflow-Bit OV = 1 (OV-Flag) Das Rechenwerk setzt das OV-Flag und signalisiert damit dann eine Zahlenbereichsüberschreitung , wenn die beiden Übertragsstellen Cn und Cn+1 (= CY) ungleich sind : Cn ≠ Cn+1 dann OV =1 bzw OV = Cn ⊕ Cn+1 Beispiele mit 8-Bit-Zahlen: vl.D 96 + 48 ___ 144 Bitmuster Welchen dezimalen Werten entsprechen die unteren Bitmuster ? vb.D 0110 0000 (+96) + 0011 0000 + (+48) 11 _____ (0) 1001 0000 (+144) CY=0 OV=1 1010 0000 1101 0000 1 (1) 0111 0000 CY=1 OV=1 0101 0000 1110 0000 11 (1) 0011 0000 CY=1 OV=0 Bereich 8Bit-vb.D. überschritten (OV=1) Systematik von vorzeichenbehafteten Dualzahlen vb.D im binären n-Bit-System Zahl (dez) +/– 0 : +1: größte positive Zahl : absolut größte negative Zahl : –1 : Binärmuster 00............. 0000 00............. 0001 0 1 1 1 . . . . . . . . . . .1 1 1 1 1 0 0 0 . . . . . . . . . . .0 0 0 0 1111.......... 1111 Rechnergrundlagen Teil 1 - 58 - Prof.Dipl.-Ing. Komar CY=1 0000 1111 0001 1110 0010 1101 0011 1100 0100 1011 0101 1010 0110 1001 0111 1000 OV = 1 Geschlossener-Zahlenkreis eines 4-Bit-Systems Aufgabe : An welchem Bit des Ergebnisses kann man in einem vb.Dualsystem bei einem Überschreiten des Zahlenbereiches (OV = 1) einen Überlauf oder Unterlauf feststellen ? (aus dem Zahlenkreis herleitbar ) Aufgabe: Welchen Zahlenbereich haben 10-Bit vorzeichenlose (vl.D) und vorzeichenbehaftete Dualzahlen ? Wie sehen die Bitmuster der größten positiven und negativen Zahl aus ? Rechnergrundlagen Teil 1 - 59 - Prof.Dipl.-Ing. Komar 5.5 Festkommadarstellung In Festkommadarstellung wird das Komma als Trennsymbol zwischen dem ganzzahligen und dem gebrochenen Teil von Dualzahlen mit der konstanten Wortlänge n benutzt. Dabei wird das Komma allerdings nicht mit dargestellt ( nicht in Rechnerhardware implementiert), sondern „existiert“ nur im Kopf des Programmierers. Üblich und auch übersichlich ist es, das Komma entweder vor der höchsten ( MSB ) oder nach der niedrigsten Stelle (LSB = least signifikant bit ) anzubringen. Das bedeutet, daß die in einem Wort dargestellte Zahl entweder als ganze Zahl b n b n-1 . . . . . . . . . . b 1 b 0 , n Z= ∑b i =0 Bi i oder als echt gebrochene Zahl ,b −1 -1 b -2 . . . . . . . . . . . . . b –n Z= ∑b B i =− n i i behandelt wird. Die Festkommadarstellung als ganze Zahl mit dem Komma hinter dem niederwertigsten Bit LSB ist die Implementierung der in höheren Programmiersprachen als "Integer" vereinbarten Zahlen. Die Umwandlung einer gegebenen Zahl in die gewünschte Darstellungsweise erreicht man durch die Wahl eines geeigneten Maßstabsfaktor MF. Vorzeichenlose (vl.D) und vorzeichenbehaftete (vb.D) Festkommazahlen Für Festkommazahlen gelten bei einem gewählten dualen Format n = k + m die folgenden darstellbaren Zahlenbereiche ( k ganzzahlige Stellen, m gebrochene Stellen ) größte darstellbare Zahl 2 k – 2 –m 1.. .....1,1... ....1 k m 0 . . . . . . . .0 , 0 . . . . . . . . 1 2 –m kleinste darstellbare Zahl größte pos. darstellbare Zahl + 2 k-1 – 2 –m kleinste pos. darstellbare Zahl kleinste neg. darstellbare Zahl + 2 –m – 2 –m größte neg. darstellbare Zahl – 2 k-1 vl. Dualzahlen 01 . . . . . . 1 , 1 . . . . . . . 1 k m 0 . . . . . . . .0 , 0 . . . . . . . .1 1 . . . . . . . .1 , 1 . . . . . . . .1 k m 10 . . . . . . 0 , 0 . . . . . . . 0 vb.Dualzahlen Überschreitungen des Zahlenbereiches nach Addition / Subtraktion werden für vl.Dualzahlen durch das Übertrags-Bit ( Carry – Flag CY = 1 ) und für vb. Dualzahlen durch das Overflow-Bit (OV = 1 ) angezeigt. Bei der Konvertierung von gebrochenen Dezimalzahlen in ein vorgegebenes duales Festkommaformat entsteht durch das Abschneiden von Stellen ein Wandlungs- oder Konvertierungsfehler. Für den absoluten Wandlungsfehler gilt: F < 2 –m Zahlenbereiche ganzer Festkommazahlen PC-FPU Bezeichnung Word Integer Short Integer Long Integer Wortlänge n 8 Bit 16 Bit 32 Bit 64 Bit vorzeichenlose 0< Z< 0< Z < 0< Z < 0< Z < 255 65 535 4 294 967 296 2 64 – 1 0< Z < 2n– 1 vorzeichenbehaftete – 128 < Z < 127 – 32 768 < Z < 32 767 – 2 147 483 648 < Z < 2147 483 647 – 2 63 < Z < 2 63 – 1 – 2 n–1 < Z < 2 n–1 – 1 Rechnergrundlagen Teil 1 - 60 - Prof.Dipl.-Ing. Komar Beispiel: 485,2510 ist in einem dualen 16Bit-Festkommasystem mit 10 Stellen (Bit) vor und 6 Stellen nach dem Komma darzustellen 485,2510 =1E5,416 = 0 1 1 1 1 0 0 1 0 1 , 0 1 0 0 0 0 => 7950 h (abkürzende Hex-Darstellung des Bitmusters) oder mit Maßstabsfaktor dargestellt: 0 1 1 1 1 0 0 1 0 1 0 1 0 0 0 0 , * 2 – 6 = 795016 * 2 –6 Beispiel: Es sollen die Zahlen 23 und 1,5 im 8 Bit Festkommaformat addiert werden. 23 10 = 0001 0111, * 2 0 1,5 10 = 0000 0011, * 2 –1 Bevor die beiden Zahlen addiert werden können, müssen die beiden Maßstabsfaktoren angeglichen werden. + 23 10 1,5 10 24,5 10 = = 0010 1110, * 2 –1 + 0000 0011, * 2 –1 0011 0001, * 2 –1 Beispiel: Es sollen die Zahlen 485,62510 und 1,510 im 16 Bit Festkommaformat ( Integer mit Maßstabsfaktoren) addiert werden . 485,62510 = 0 0 0 0 1 1 1 1 0 0 1 0 1 1 0 1 * 2-3 1,510 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 * 2-1 Vor der Addition müssen die beiden Maßstabsfaktoren angeglichen werden. 485,62510 = 0 0 0 0 1 1 1 1 0 0 1 0 1 1 0 1 * 2-3 + 1,510 = 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 * 2-3 487,125 = 0 0 0 0 1 1 1 1 0 0 1 1 1 0 0 1 * 2-3 = 0 F 3 9 16 * 2-3 Mit der Festkommadarstellung rechnet man dort am sinnvollsten, wo man mit möglichst wenig Maßstabsfaktoren, am besten nur einem einzigen , auskommen kann, wie z.B. in der kommerziellen Datenverarbeitung mit den festen DM.Pfennig-Beträgen. Wenn nun mit Zahlen gerechnet werden muß, die sehr unterschiedliche Maßstabsfaktoren aufweisen, also einen sehr großen Zahlenbereich abdecken, dann wird es günstiger sein, die einzelnen Maßstabsfaktoren in die Zahlendarstellung zu integrieren, d.h mitabzuspeichern. Und diese Anforderung führt direkt zur Zahlendarstelleung im sogn. Gleitkommaformat Rechnergrundlagen Teil 1 - 61 - Prof.Dipl.-Ing. Komar 5.6 Gleitkommadarstellung Den engen Zahlenbereich der Festkommadarstellung möchte man insbesondere bei technisch wissenschaftlichen Aufgaben mit Zahlen sehr unterschiedlicher Größenordnung vermeiden. Benötigt wird dazu ein System zur Darstellung von Zahlen, bei dem der Bereich der darstellbaren Zahlen nicht von der Anzahl der signifikanten Ziffern abhängt. Denn in vielen Bereichen genügt die Angabe einer relative kleinen Anzahl von repräsentierten Stellen („ fünf Stellen hinter dem Komma “ ), allerdings muß ein weiter Zahlenbereich abgedeckt werden. Eine Möglichkeit, den Zahlenbereich von der Genauigkeit zu trennen, ist die Darstellung in der bekannten wissenschaftlichen Notation. Man benutzt dazu einen Zahlendarstellung, die neben der Ziffernfolge eine Größenordnungsangabe ( Maßstabsfaktor ) enthält, die sogenannte Gleitkommadarstellung. Die „ wissenschaftliche Notation “ (scientific notation) der Taschenrechner ist z.B. eine Gleitkommadarstellung für Zahlen zur Basis 10. + 485,2510 = + 0,48525 * 10+3 => Display-Anzeige + .48525 +03 = + 4,8525 * 10+2 => + 4.8525 E +02 VZ Mantisse Exponent Die sogn. Gleitkommadarstellung (floating point ) ist eine halblogarithmische Darstellung zur Basis b in der Form Z = + m b +e mit Z : Gleitpunktzahl b : Basis des Zahlensystems ( gebräuchlich sind 2 , 10 und 16 ) m : Mantisse mit p Stellen bestimmt die Genauigkeit e : Exponent mit r Stellen bestimmt den Zahlenbereich Jede Rechenanlage reserviert eine feste Folge von Bits für Vorzeichen VZ, Mantisse m und Exponent e. Bis zum Erscheinen des IEEE-Standards in der Mitte der achtziger Jahre realisierte so ziemlich jeder Rechnerhersteller eine individuelle Gleitpunkt-Arithmetik. In den verschiedenen Rechnern erfolgten damals bei der Darstellung der Gleitkommazahlen die Potenzierungen auf der Basis 2, 8 oder 16 . Um die Portabilität mathematischer Berechnungen zu gewährleisten, halten sich die Rechnerhersteller heutzutage weitgehend an die IEEE-Norm. Im IEEE 754-Standard Format ( Institut of Electrical and Electronics Engineers ) werden Gleitkommaformate mit den Genauigkeitsklassen einfache ( 32Bit ) , doppelte ( 64Bit ) und erweiterte (80Bit) Genauigkeit festgelegt. Das Format mit erweiterter Genauigkeit dient vorwiegend der Reduzierung von Rundungsfehlern beim internen Rechnen in Gleitkommaarithmetik-Einheiten ( Floating Point Unit FPU ) Format einfach genau doppelt genau erweitert genau PC-Bezeichnung short real long real temporary real Wortlänge Bit 32 64 80 VZ Exponent Mantisse dezimaler Zahlenbereich Bit Bit Bit 1 8 23 ± 1.18*10-38 ≤ Z ≤ ± 3.40*1038 ± 2.23*10-308 ≤ Z ≤ ± 1.80*10308 1 11 52 ± 3.30*10-4932 ≤ Z ≤ ± 1.21*10 4932 1 15 64 Worteinteilung bei den IEEE - Gleitkommaformaten 31 30 VZ Charakteristik 23 22 c 63 62 79 78 VZ = Vorzeichen Mantisse einfache Genauigkeit (32Bit) Mantisse m 52 51 64 63 0 Betrag, normalisiert doppelte Genauigkeit (64Bit) erweiterte Genauigkeit (80Bit) Die Basis B = 2 wird nicht im Wort gespeichert bzw dargestellt. 0 0 Rechnergrundlagen Teil 1 - 62 - Prof.Dipl.-Ing. Komar Das Vorzeichen VZ ( +: = 0 ) wird im höchstwertigen Bit ( MSB ) vorangestellt. Die Mantisse m ist die Folge der signifikanten Ziffern der dargestellten Zahl und bestimmt mit der Anzahl der dargestellten Ziffern die Genauigkeit. Der Exponent e legt den Maßstabsfaktor der Zahl fest und bestimmt mit seiner Stellenzahl den darstellbaren Zahlenbereich und wird nach einer Exzeß-Codierung als Charakteristik c bezeichnet. Normalisierung Im Gleitpunktformat werden die Zahlen normalisiert dargestellt. Eine Zahl gilt im binären IEEE-Format dann als normalisiert, wenn die Mantisse m im Bereich 1 ≤ m < 2 liegt, d.h. die erste Stelle links vor dem Komma eine 1 ist, oder wenn die Zahl gleich Null ist. Für die IEEE- Normalisierung gilt also b0 ≤ m <b1 mit b = 2 1≤ m < 2 –> ( 1.m )2 Damit ist hierbei die erste Stelle vor dem Komma immer 1 und deswegen wird dieses erste Bit vor dem Komma weggelassen ( hidden bit ) und nicht im Mantissenfeld abgespeichert. Durch dieses "versteckte" Bit, das natürlich implizit in alle Rechnungen miteinbezogen wird, läßt sich die Auflösung bzw. die Genauigkeit gegenüber dem früher üblichen Format um 1 Bit erhöhen. Früher war die Normalisierung auf die erste Nachkommastelle ungleich 0 üblich : für b = 10 0.1 < m < 1 1 / b < m < 1 und m ≠ 0 b = 2 0.5 < m < 1 –> ( 0.m )2 Die normalisierte Gleitpunktzahl beginnt dabei also rechts vom Komma mit der ersten von Null verschiedenen Ziffer. Beispiel für diese normalisierte Form der Dezimalzahl 12,34 –> 0,1234 * 10 2 und der Dualzahl 1010.01010 – > 0.10100101 * 2 4 Mantisse m und Exponent e sind beides vorzeichenbehaftete Festkommazahlen .Exponent e als ganze Zahl = Festkommazahl (Integer ) mit Komma hinter LSB = low significant bit , . Mantisse m als gebrochene Zahl = Festkommazahl mit Komma vor dem MSB = most signif. bit und wurden in den verschiedensten Rechnern auf alle bereits bekannten Arten ( Zweier- , Einer-Komplement, Betrag und Vorzeichen ) dargestellt. Im IEEE-Format wird die Mantisse mit Betrag m und Vorzeichen VZ dargestellt . Beispiel: 12,344 10 = 1100, 010112 = 0,110001011 * 2 4 = > 0 Dualzahl norm. Dualzahl VZ 00000100 110001011.........0 Exponent e Mantisse m früher übliche Darstellung = 1,10001011 * 2 3 => 0 00000011 10001011 ..........0 VZ Exponent e Mantisse m Darstellung nach 32Bit IEEE Im IEEE-Format wird weiterhin der Exponent e einer normalisierten Gleitpunktzahl in Exzeß-Darstellung verschlüsselt und heißt dann Charakteristik c . Dabei wird zum Exponenten e eine Konstante k (Bias ) addiert, so daß die Summe immer größer oder gleich Null wird. Stehen r Stellen zur Darstellung des Exponenten e zur Verfügung, so erhält man die Exzeß-Darstellung, , indem man zum Exponenten die Konstante k = ½ b r hinzuzählt. Für die Charakteristik c gilt ganz allgemein c = e + k mit 0 ≤ c ≤ br–1 k =½ b für b = 2 r b : Basis des Zahlensystems 0 ≤ c ≤ 2 r– 1 k = 2 r–1 r: Stellenzahl des Exponenten e Im IEEE-Format wird aufgrund der beiden Ausnahmen für die Darstellung von Null und Unendlich die Konstante k = ½ *( 2 r – 2 ) hinzugezählt. c = e + k mit 0 < c < 2 r – 1 und k = 2 r-1 - 1 wg. Ausnahmen -> cmin = 1 und cmax = 2 r - 2 Rechnergrundlagen Teil 1 - 63 - Prof.Dipl.-Ing. Komar Allgemein gilt für eine Zahl in Gleitkommazahlen-Darstellung Z = + m * bC – k negativer Überlauf und speziell für das IEEE-Format darstellbare negative Zahlen negativer positiver Unterlauf - Zmin - Zmax normalisierte Zahlen max. Wandlungsfehler Z = ( -1 )VZ * ( 1.m )2 * 2 C - k 0 darstellbare positive Zahlen + Zmin denormalisierte Zahlen (0,0..m)2 (1.m)2 pos. + Zmax normalisierte Zahlen (1.m)2 Zahlengerade mit Bereich der darstellbaren Gleitkommazahlen Ausnahmen im IEEE-Format Zu beachten bei den IEEE-Zahlenformaten ist, daß die Charakteristiken c = 0 und c = 2 r – 1 Zahlendarstellung nicht zugelassen sind und zur Kennzeichnung von Ausnahmesituationen dienen. 0000 0000 h => + 0 zur 1.) c =0 m=0 : Z = 0 2.) c = 0, m ≠ 0 : Z = (-1)VZ * 2 Cmin-k * ( 0, 0..0m ) 2 bedeutet, die Zahl Z wird in denormalisierter Form dargestellt, weil sie betragsmäßig kleiner ist als 2Cmin-k und hat, gekennzeichnet durch c = 0 den konstanten Exponenten e min = Cmin – k 3.) c = 2 r – 1, m ≠ 0 : Z ist keine gültige Gleitpunktzahl ( not a number – NaN ) 4.) c = 2 r – 1, m = 0 : Z = (– 1)VZ * ∞ 8000 0000 h => – 0 d.h. das Ergebnis ist positiv oder negativ unendlich Damit bestimmen sich die darstellbaren Zahlen im IEEE-Format zu : Z = ( -1 ) VZ * 2 C– k * ( 1.m )2 = ( -1 )VZ * 2 C-k * ( 1,0 + p ∑ m –i * 2-i ) i =1 mit 0 < c < 2 r – 1 –> wg. Ausnahmen cmin = 1 , cmax = 2 r – 2 k = 2 r– 1 – 1 ( 1.m ) min = 1.0 ( 1.m ) max = 2 – 2 – p | Z min | = 2 exp(cmin – k ) * ( 1.m ) min | Zmax | = 2 exp(cmax – k ) * ( 1.m ) max k 32-Bit-Format 64-Bit-Format 80-Bit-Format 127 1023 16383 = 2 1– k * 1 = 2 exp( 2 r – 2 – k ) * ( 2 – 2 – p ) ≈ 2exp( 2 r – 1 – k ) |Z min | 2 –126 = 1.175 *10 –38 2–1022 = 2.23 *10 –308 2–16382 = 3.36 *10 –4932 |Zmax| 2 128 = 3.40 * 10 38 2 1024 = 1.80 * 10 308 2 16384 = 1.18 * 10 4932 Dezimalstellen ≈7 ≈ 15 ≈ 19 Zu beachten: Das 80-Bit-Format ist nach IEEE nicht vollständig spezifiziert. In der FPU der PC-Prozessoren werden alle Rechnungen im 80-Bit-Format ausgeführt und es wird nur in diesem Format die 1 vor dem Komma der normalisierten Zahl im Mantissenfeld m mitabgespeichert. Rechnergrundlagen Teil 1 - 64 - Prof.Dipl.-Ing. Komar 0< Exp < max Beliebiges Bitmuster Normalisiert + Denormalisiert + 0 Beliebiges Nicht-Null-Bitmuster Null + + 0 0 Unendlich + + 1 1 1 1. . . . 1 0 Keine Zahl + 1 1 1 1 . . . .1 Beliebiges Nicht-Null-Bitmuster Vorzeichen-Bit Numerische Typen nach Beispiel: Gleitkomma- Dezimalzahl gibt für die Charakteristik c den Bereich und für die Konstante und damit für den Exponent e = c – k IEEE 754 b = 10, r = 2 00 ≤ c ≤ 99 k = 0.5 * 10 2 = 50 – 50 ≤ e ≤ 49 Mit einer 7-stelligen Mantisse gibt sich folgende Zahlendarstellung 0,000478 = 0,478 * 10 – 3 = + 4780000 – 03 - 31,438 = -0,31438 * 10 2 = – 3143800 + 02 m e = + 47 4780000 = – 52 3143800 VZ c m Beispiel: Dezimalzahl – 61,5625 darstellen im binären IEEE-Format -einfach genau – 61,5625 = – 11 1101, 1001 = – 1,111 0110 01 * 2 5 Dualzahl normalisierte Dualzahl Festkommazahl => 1 10000100 11101100100...............0 VZ c m Gleitkommazahl im 32 Bit IEEE-Format mit k = 12710 = 0111 1111 2 und dem Exponent e = 510 = 00000101 2 ergibt sich die Charakteristik zu c = e + k = 1000 0100 2 = 132 10 – 61,5625 10 => C 2 7 6 4 0 0 0 h IEEE-Format in abkürzender Hexadezimaldarstellung Beispiel: + 0,4375 10 im binären 32Bit-IEEE-Format darstellen. 0,4375 = + 0, 0111 = + 1, 110000 * 2 – 2 => 0 01111101 VZ c mit dem Exponent e = – 2 10 = > c = -2 + 127 = 125 10 110 0000 0000 0000 0000 0000 m => 3EE00000 h = 0111 1101 2 Aufgabe: Welcher Dezimalzahl entspricht die 64 Bit-IEEE-Gleitkommazahl BFF0000000000000 h ? und welcher die 32 Bit-IEEE-Gleitkommazahlendarstellung 00200000 h ? Rechnergrundlagen Teil 1 - 65 - Prof.Dipl.-Ing. Komar 5.6.1 Gleitpunktarithmetik Die Gleitkommadarstellung einer Zahl im Rechner besteht aus zwei Teilen: Mantisse mit Vorzeichen und Charakteristik. Beide Teile müssen getrennt verarbeitet werden, was die Operationsabläufe bei Gleitkommaarithmetik länger und komplizierter macht. Da aber Mantisse und Charakteristik für die getrennte Verarbeitung als Festkommazahlen betrachtet werden können, ergeben sich keine wesentlich neuen Überlegungen. Leistungsfähige Rechner enthalten meist ein spezielles Gleitkomma-Rechenwerk, mit dem die Gleitkommaoperationen realisiert werden. ( bei den 8- und 16-Bit-Mikroprozessoren zusätzliche externe Bausteine sogn. Arithmetik-Coprozessoren bzw Gleitkomma-Coprozessoren, z.B. im PC die Intel- Co-Prozessoren 8087, 80287, 80387, die ab dem 486er als FPU auf dem Prozessorchip integriert sind ). Üblicherweise sind zwei getrennte Befehlssätze für Fest- und Gleitkommaoperationen vorhanden. Wenn keine Gleitkomma-Hardware verfügbar ist, dann müssen die Gleitkommaoperationen per Software in Form von Unterprogrammen realisiert werden und dies bedeutet natürlich deutlich längere Ausführungszeiten. 5.6.2 Gleitkommaoperationen Voraussetzung beider Durchführung von Gleitkommaoperationen ist, daß die Operanden in normalisierter Form vorliegen und das Ergebnis wieder in normalisierte Form überführt wird. Die Operanden seien Z 1 = m 1 * b n1 und Z 2 = m 2 * b n2 Addition / Subtraktion: Zuerst wird der kleinere Exponent dem größeren angeglichen. Ist n 1 > n 2 gilt: Z 1 ± Z 2 = ( m 1 ± m 2 / (b n1 – n2 ) ) * b n1 1) Durch Linksverschieben des Kommas wird der Operand mit der kleineren Charakteristik so umgeformt, daß die beiden Charakteristiken gleich sind. Der umgeformte Operand ist dann nicht mehr normalisiert. 2 ) Die beiden Charakteristiken bleiben erhalten, und die beiden Mantissen werden addiert bzw. subtrahiert. 3 ) Das Ergebnis wird durch Verschieben des Kommas, also durch Wahl der geeigneten Charakteristik normalisiert Multiplikation : Die Mantissen werden multipliziert und die Exponenten addiert Z 1 * Z 2 = m 1 * m 2 * b n1 + n2 Division: Die Mantissen werden dividiert und die Exponenten voneinander abgezogen Z 1 / Z 2 = ( m 1 / m 2 ) * b n1 – n 2 5.6.3 Rundungs- und Wandlungsfehler Gleitkommazahlen bilden im Gegensatz zu reellen Zahlen kein Kontinuum. Deswegen ist es meistens nötig, eine nicht exakt darstellbare Zahl mit der nächst liegenden ausdrückbaren Zahl darzustellen, was als Rundung bezeichnet wird. Der Abstand zwischen benachbarten ausdrückbaren Zahlen ist nicht konstant, allerdings ist der durch Rundung entstehende relative Fehler über den gesamten darstellbaren Bereich ungefähr gleich. Der bei der Konvertierung in das Gleitpunktformat entstehende Wandlungsfehler als Folge der begrenzten Stellenzahl der Mantisse ist nicht mehr direkt proportional zu der abgeschnittenen Stellenzahl, sondern ist auch abhängig von der Größenordnung des Maßstabfaktors , d.h. dem Exponenten e der darzustellenden Zahl. Der größtmögliche Wandlungsfehler tritt auf, wenn die abzuschneidenden Stellen alle 1 sind, d.h. wenn die exakte Mantisse eigentlich den Wert 2 – 2– ∞ aufweisen würde. absoluter Fehler (Betrag) F = 2 – p * 2 e max. relativer Fehler f = 2 –p mit p : Stellenzahl der Mantisse e : Exponent Aufgabe: Bestimmung des größten absoluten Wandlungsfehlers im 32 Bit-IEEE-Format ? Aus der endlichen Mantissenlänge aller Gleitpunktformate folgt, daß reelle Zahlen prinzipiell nicht exakt in Rechnern darstellbar sind. Es können nur einzelne Punkte auf der reellen Zahlengeraden dargestellt werden. Deswegen und auch wegen der unvermeidbaren Denormalisierungsfehler gilt beispielsweise das Assoziativgesetz a + ( b + c ) = (a + b ) + c nicht für das Rechnen mit Gleitkommazahlen und darum: Traue niemals vorbehaltlos den Rechenergebnissen eines Computers , insbesondere nicht bei längeren, rekursiven Kettenrechnungen (z.B. Simulationen!!) – Ergebnisse immer durch Abschätzen überprüfen Rechnergrundlagen Teil 1 - 66 - Prof.Dipl.-Ing. Komar 5.7 Binärcodierte Dezimalzahl Die rechnerinterne Zahlendarstellung als binärcodierte Dezimalzahl hat den Vorteil einer einfachen Ein/ Ausgabe und einer beliebigen Genauigkeit. Nachteilig ist der größere Speicherplatzbedarf und die längere Rechenzeit. Insbesondere in Kleinstcomputern wie Taschenrechnern und ähnlichem wird oft ausschließlich in diesem Dezimalsystem gerechnet. Beinahe alle gängigen Computer und Mikroprozessoren unterstützen mit ihrem Befehlssatz das Rechnen im binärcodierten Dezimalsystem. Rechnerintern wird in diesem System jede Dezimalziffer in 4 Bit dargestellt und zwar üblicherweise im tetradischen 8421-BCD-Code. Um bestimmte ungünstige Eigenschaften des 8421-BCD-Codes zu vermeiden, konnte man früher in einigen Rechenanlagen auch die Darstellung mittels Stibitz/Exzess-3-Code ( Siemens 2002 ) oder mittels Aiken-Code (Mark I, II, III ) finden. Dezimalzahl 1 9 8 7 0001 1001 1000 0111 0011 0001 0011 1001 0011 1000 0011 0111 rechnerintern im BCD-Code ASCII-Code der Dezimalziffer Da eine binärcodierte Dezimalziffer nur 4 Bit belegt, kann man in einem Byte zwei Dezimalstellen speichern, die sogn. gepackte BCD-Darstellung Die ungepackte Darstellung codiert eine Dezimalziffer nur im niederwertigen (rechten ) Halbbyte ( Nibble ) und nutzt damit den Speicherplatz sehr schlecht, allerdings wird die Ein/Ausgabe trivial, da eine Dezimalziffer ganz einfach durch eine 3 = 00112 im High-Nibble nach ASCII codiert wird (siehe oben ). 0 0 0 0 X 3 X2 X 1 X 0 0 0 0 0 Y3 Y2 Y1 Y0 ungepackt 1 Ziffer / Byte X 3 X 2 X 1 X 0 Y3 Y2 Y1 Y0 gepackt 2 Ziffern / Byte Gepackte und ungepackte Darstellung von BCD – Ziffern Beispielsweise lassen sich mehrstellige vorzeichenbehaftete BCD-Zahlen folgendermaßen aufbauen: Ziffer Ziffer _ _ _ VZ Ziffer Ziffer VZ Ungepackte Dezimalzahl Ziffer Ziffer Ziffer Ziffer _ _ _ Gepackte Dezimalzahl Die gepackte 10 Byte BCD-Zahl (Vorzeichen u. 18 Dezimalstellen ) für die Floating Point Unit FPU der INTEL 80x86-Prozessoren (entspricht auch Arithmetik-Coprozessoren 80x87 ) hat das Format: 10. Byte S X 9.Byte 8.Byte d17 d16 d15 d14 1.Byte d1 S = Vorzeichenbit X -> diese Bits haben keine Bedeutung und werden von der FPU beim Speichern mit Nullen gefüllt d0 Rechnergrundlagen Teil 1 - 67 - Prof.Dipl.-Ing. Komar 5.7.1 BCD-Arithmetik Beim Rechnen im BCD-System müssen aufgrund der ungültigen Zahlenwerte in den Pseudotetraden die Stellenergebnisse korrigiert werden, denn diese Pseudotetraden werden vom Rechenwerk wie gültige Dualzahlen behandelt. Die einzelnen 4-Bit-Stellenergebnisse müssen dann korrigiert werden, – wenn das Ergebnis der Operation einen Übertrag ( Borger ) auf die nächsthöherer Stelle erzeugt hat (die Pseudotetraden wurden durchlaufen) und dies wird entweder im Hilfs-Carry (Auxiliary Carry ) AC (bei einem Halbbyte-Übertrag ) oder im Carry-Flag CY ( bei Byte-Übertrag ) angezeigt oder – wenn der Ergebniswert selbst eine Pseudotetrade ist. In diesen beiden Fällen muß dann mit dem Wert 610 = 0 1 1 0 2 ( Anzahl der Pseudotetraden ) für die jeweilige Stelle eine sogn. Dezimal-Korrektur (dezimal adjust ) durchgeführt werden. Mikroprozessoren stellen für diese Dezimalkorrektur spezielle Befehle zur Verfügung, z.B. der 80x86 die Befehle DAA => Dezimal Adjust after Addition DAS => Dezimal Adjust after Subtraction Da das Rechenwerk nicht "weiß", in welchen Zahlensystem gerechnet wird, muß der Programmierer dafür Sorge tragen, daß nach einer arithmetischen Operation im BCD-System der entsprechende Befehl für die Dezimal-Korrektur ausgeführt wird. Das Rechenwerk unterstützt diese Dezimalkorrektur durch das Setzen /Löschen des Hilfs-Carry-Flags AC bei einem Übertrag im Ergebnis vom Low- zum High-Nibble Beispiel einer Addition zweier dreistelliger Dezimalzahlen (12 Bit ) im BCD–System 798 10 + 239 10 (1) 037 10 + unkorrigiertes Ergebnis: 0111 1001 1000 0010 11 0011 111 1001 (0) 1001 1101 CY=0 Dezimalkorrektur 1. wg AC=1 (z.B. mit DAA-Befehl ) + 2. wg Pseudotetrade + 3. wg Pseudotetrade + korrigiertes Ergebnis: AC=0 0001 AC=1 0000 0000 0110 (0) 1001 1101 0111 0000 11 (0) 1010 0110 1 0011 0000 0110 11 0000 0000 (1) 0000 CY=1 0011 0111 0111 Der darstellbare Zahlenbereich von 3 BCD-Ziffern 000 – 999 wurde in diesem Beispiel überschritten und dies wird vom Rechenwerk durch das Übertragsbit ( Carry CY = 1 ) angezeigt. 72 10 – 19 10 – 53 10 Dezimalkorrektur (z.B. mit DAS-Befehl) 0111 0010 0001 11 (0) 0101 1001 1 1001 CY=0 1. wg AC = 1 – 0000 (0) 0101 AC =1 0110 11 0011