www.wikidata.de-de.nina.az
Der Gray Code ist ein stetiger Code bei dem sich benachbarte Codeworter nur in einer einzigen binaren Ziffer unterscheiden die Hamming Distanz benachbarter Codeworter ist 1 Ubertragungsfehler bei sich kontinuierlich andernden digitalen Signalen auf mehradrigen Leitungen werden so verringert da sich unterschiedliche Laufzeiten nicht auswirken konnen Der Gray Code wurde ursprunglich fur elektromechanische Sensoren und Schalter entwickelt die fehleranfallig sind Heute dient der Code fur Fehlerkorrekturen in digitalen Ubertragungssystemen wie DVB T und im Kabelfernsehen Der Code ist nach dem Physiker Frank Gray benannt welcher 1953 das Patent auf dieses Verfahren erhielt 1 Gray Codestetig jaHamming Abstand 1 Inhaltsverzeichnis 1 Generierung 1 1 Logische Operatoren 1 2 Generatormatrix 1 3 Gray Zahler 2 Eigenschaften 3 Bedeutung 3 1 Problem bei Dualcode Signalen 3 2 Losung mit Gray Code 3 3 Karnaugh Veitch Diagramm 4 Programmierung 4 1 Zwei und mehrdimensionale Graycodes 5 Geometrische und graphentheoretische Darstellung 6 Balancierte Gray Codes 7 Anwendungen 7 1 Reduktion von Bitfehlern in digital PSK APSK und QAM modulierten Signalen 8 Beispiel 9 Gray Code zuruckrechnen 10 Spezielle Gray Codes 10 1 Gray Codes mit m bits und Lange kleiner als 2m 10 2 Excess Gray Code 11 Geschichte 12 Ahnliche Codes 13 Literatur 14 Weblinks 15 EinzelnachweiseGenerierung BearbeitenBeginnend mit einer Binarzahl die nur aus den Ziffern 0 besteht kann ein Gray Code erzeugt werden indem immer das niederwertigste Bit von 0 nach 1 oder von 1 nach 0 geandert wird das geandert werden kann ohne dass eine Bitkombination entsteht die schon dran war Eine alternative Methode die leichter zu merken und anzuwenden ist besteht aus folgenden Schritten 2 Beginne mit dem einfachsten moglichen Gray Code den beiden einstelligen Werten 0 und 1 Erganze die Codefolge mit den vorhandenen Werten in umgekehrter Reihenfolge vom letzten bis zum ersten Code Setze an den alten Codes die Ziffer 0 davor an den neuen Codes die Ziffer 1 Wiederhole die Schritte 2 und 3 bis die gewunschte Anzahl von Bits erreicht ist Der so erzeugte Code hat die Eigenschaft dass sich niederwertige Bits haufiger andern als hoherwertige Es kann aber auch ein balancierter Gray Code konstruiert werden in welchem sich alle Stellen Bits der Codeworter gleich haufig von benachbarten Codewortern unterscheiden Beim durchgehen aller Codeworter in korrekter Reihenfolge andert sich dann jede Stelle gleich oft 3 Meistens ist der Gray Code als Binarcode ausgefuhrt kann aber auch fur mehrstufige Ubertragungswege benutzt werden Logische Operatoren Bearbeiten Die folgenden Punkte zeigen wie man Schritt fur Schritt aus einem Binarcode eine Gray codierte Binarzahl erhalt X1 Dualzahl im Binarcode X2 Rechts Shift der Dualzahl um 1 Bit X3 Modulo 2 Addition XOR Verknupfung von X1 und X2 dies ist die gewunschte Zahl im Graycode Das gleiche als Pseudocode Binarcode X1 Graycode X3 X1 XOR X2 Und als Formel x 3 x 1 x 1 1 displaystyle x 3 x 1 oplus x 1 gg 1 nbsp Generatormatrix Bearbeiten Da der Gray Code ein linearer Code ist kann man ihn mit einer Generatormatrix G displaystyle G nbsp erzeugen Ein binares Wort w displaystyle w nbsp der Lange n displaystyle n nbsp kann man als Vektor eines n displaystyle n nbsp dimensionalen F 2 displaystyle mathbb F 2 nbsp Vektorraums F 2 n displaystyle mathbb F 2 n nbsp betrachten Sei w displaystyle w nbsp nun ein Zeilenvektor dann lasst sich die Kodierung des Wortes w displaystyle w nbsp in das Codewort c displaystyle c nbsp wie folgt darstellen c w 1 1 0 1 0 1 G displaystyle c w underbrace begin bmatrix 1 amp 1 amp amp 0 amp ddots amp ddots amp amp amp ddots amp 1 0 amp amp amp 1 end bmatrix G nbsp Die Dekodierung erfolgt mit der Multiplikation der Inversen G 1 displaystyle G 1 nbsp von G displaystyle G nbsp Diese hat folgende Form G 1 1 1 0 1 F 2 n n displaystyle G 1 begin bmatrix 1 amp cdots amp cdots amp 1 amp ddots amp amp vdots amp amp ddots amp vdots 0 amp amp amp 1 end bmatrix in mathbb F 2 n times n nbsp Der Vektorraum F 2 n displaystyle mathbb F 2 n nbsp lasst sich anschaulich mit Hyperwurfeln darstellen Gray Zahler Bearbeiten Man kann auch direkt einen Gray Code Zahler in Hardware z B in HDL programmieren Hierzu ist es hilfreich ein Hilfsregister zu benutzen das mit jedem Taktzyklus toggelt Qh n 1 Qh n Qh 0 0 wenn der Gray Code Zahler mit Null startet also Q 0 0 oder Q 0 eine gerade Anzahl an Einsen hat Bei anderer Initialisierung wurde der Zahler ruckwarts laufen Damit wird die Kombinatorik recht ubersichtlich Q0 n 1 Q0 n Qh n Q1 n 1 Q1 n Q0 n amp Qh n Q2 n 1 Q2 n Q1 n amp Q0 n amp Qh n Q3 n 1 Q3 n Q2 n amp Q1 n amp Q0 n amp Qh n Qk 1 n 1 Qk 1 n Qk 2 n amp Qk 3 n amp amp Q1 n amp Q0 n amp Qh n Qk n 1 Qk n Qk 2 n amp amp Q1 n amp Q0 n amp Qh n Der Unterschied zwischen den Formeln fur das grosste Bit Qk und den kleineren Bits Qk 1 ist notig damit der Zahler zyklisch ist also der Zahler nach dem letzten Wert Q 100 00 auf den Anfangswert Q 000 00 springt Bei einem unendlichen Zahler gabe es keinen Unterschied Exklusiv Oder XOR Antivalenz Inverter NOT Negation amp Und AND KonjunktionEigenschaften BearbeitenDie Hamming Distanz benachbarter Codeworter ist 1 d h die Werte unterscheiden sich in genau einem Bit Das ist das hochstwertige Bit das sich in der Binardarstellung der mit 0 beginnenden Zeilennummern andert Zum Beispiel haben Zeile 11 und Zeile 12 die Binardarstellungen 001011 und 001100 Es andern sich also die letzten drei Bits Die Codeworter von Zeile 11 und 12 namlich 001110 und 001010 unterscheiden sich daher im drittletzten Bit Die absolute Differenz benachbarter Codeworter ist also eine Zweierpotenz Diese Zweierpotenz ist die grosste Zweierpotenz durch die sich die Zeilennummer des zweiten Codeworts teilen lasst Ist der grosste ungerade Teiler der Zeilennummer von der Form 4k 1 also 1 5 9 dann ist die Differenz positiv Ist der grosste ungerade Teiler von der Form 4k 3 also 3 7 11 dann ist die Differenz negativ Zum Beispiel hat die Zeile 12 die Zahl 22 4 als grosste Zweierpotenz und die Zahl 3 als grosste ungerade Teiler Die Differenz der Codeworter von Zeile 11 und Zeile 12 ist also gleich 4 Bedeutung BearbeitenEin Ziffernschritt sei nachfolgend der kleinstmogliche Unterschied die kleinste Differenz das kleinste Intervall zwischen zwei digitalisierten Werten Eine zeitliche Veranderung eines Zahlenwertes um einen Ziffernschritt wird nachfolgend als stetige Veranderung bezeichnet Signale werden uber Datenubertragungsstrecken ubertragen Typische Signalgeber sind z B Signale eines Temperatursensors oder eines Drehwinkelgebers Die Motivation fur die Entwicklung dieses Codes ist das folgende Problem Signalubertragungsstrecken und Signalgeber unterliegen Storeinflussen die dazu fuhren konnen dass sich einzelne oder mehrere Stellen eines Codewortes codierte Zahl unbeabsichtigterweise verandern oder falsch interpretiert werden konnen Physische Schalter sind beispielsweise nicht ideal Es ist sehr unwahrscheinlich dass physische Schalter ihren Zustand exakt synchron andern Auf mehreren Adern einer elektrischen Datenleitung sollen nun beispielsweise Daten parallel ubertragen werden die sich stetig andern Als Dualzahl ubertragen andern sich die Bits bei einem neuen Messwert auf jeder betroffenen Leitung theoretisch exakt gleichzeitig und zwar sowohl am Eingang der Leitung als auch am Ausgang Tatsachlich aber andern sich die Bits auf der Leitung nicht gleichzeitig Das kann verschiedene Ursachen haben Bauteilestreuung Laufzeiten Asymmetrien usw Dadurch kommt es zu ungewollten Zwischenzustanden und kurzzeitig zwischen den roten Linien falsch empfangenen Werten 2 Bit Gray Code 00 01 11 103 Bit Gray Code 000 001 011 010 110 111 101 1004 Bit Gray Code 0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 10005 Bit Gray Code 00000 00001 00011 00010 00110 00111 00101 00100 01100 01101 01111 01110 01010 01011 01001 01000 11000 11001 11011 11010 11110 11111 11101 11100 10100 10101 10111 10110 10010 10011 10001 10000 6 Bit Gray Code 0 00000 000001 00001 1 000010 0001 10 000111 00010 1 000100 001 100 001101 00111 1 001110 0010 10 001011 00100 1 001000 01 1000 011001 01101 1 011010 0111 10 011111 01110 1 011100 010 100 010101 01011 1 010110 0100 10 010011 01000 1 010000 1 10000 110001 11001 1 110010 1101 10 110111 11010 1 110100 111 100 111101 11111 1 111110 1110 10 111011 11100 1 111000 10 1000 101001 10101 1 101010 1011 10 101111 10110 1 101100 100 100 100101 10011 1 100110 1000 10 100011 10000 1 100000Problem bei Dualcode Signalen Bearbeiten nbsp Erklarung zu den Abbildungen Als steigende Flanke wird nachfolgend der Ubergang vom Wert 0 Aus auf 1 Ein eines Signals auf einer Datenleitung bezeichnet In der oberen Abbildung sind theoretische Dualcode BCD Signale auf vier parallelen Leitungen dargestellt sowie reale Dualcode Signale in der Abbildung darunter wie sie in der Praxis auftreten konnen Die realen Signale auf der Leitung 1 sind im Vergleich zu dem theoretischen Signal zeitlich verschoben Die erste steigende Flanke des realen Signals auf Datenleitung 1 kommt hier im Vergleich zu dem theoretischen Signal um das Zeitintervall t2 t1 spater am Ausgang an wahrend die zweite steigende Flanke um das Intervall t4 t3 fruher am Ausgang anliegt Die Signale 0 und 1 auf den Leitungen werden nachfolgend als Tetrade vier stelliges Codewort geschrieben wobei der Kanal 3 an der Stelle ganz links und der Kanal 0 an der Stelle ganz rechts notiert wird Die dazugehorigen Werte die theoretisch vor der Codierung bei dem Signalgeber vorhanden waren lauten im Dezimalsystem 0 1 2 3 4 5 6 7 usw Die Werte des Gebers andern sich in diesem Beispiel also stetig das heisst immer nur um das kleinstmogliche Intervall von 1 also ohne grossere Sprunge zwischen zwei aufeinanderfolgenden Werten Wahrend das theoretische Signal in der Reihenfolge 0000 0001 0010 0011 0100 0101 0110 0111 usw abgesendet wird kommen am Ausgang des realen Signals kurzzeitig andere Signalzustande an 0000 0001 0000 0010 0011 0100 0101 0111 0110 0111 usw Wahrend sich der Dezimalwert des Gebers zwischen zwei aufeinanderfolgenden Werten theoretisch maximal um 1 andert entsteht hier auf der Empfangerseite verursacht durch einen Laufzeitfehler ein Sprung mit einem Betrag von 2 dezimal und zwar verursacht durch die Signalfolge 0000 und 0010 die der Zahlenfolge 0 und 2 im Dezimalsystem entspricht Ein weiterer Sprung um den Betrag von 2 dezimal entsteht durch die Signalfolge 0101 und 0111 dezimal 5 und 7 Der theoretisch richtige Dezimalwert des Gebers betrug 3 zwischen den Zeitpunkten t1 und t2 Der Laufzeitfehler des realen Signals fuhrt allerdings dazu dass der Wert in diesem Intervall als 1 interpretiert wird Der Betrag des Fehlers zwischen theoretischem und realem gestorten Signal betragt also zwei wie auch der Fehler zwischen den Zeitpunkten t3 und t4 Losung mit Gray Code Bearbeiten nbsp Die theoretischen Ausgangswerte des Signalgebers lauten wie oben im Dezimalsystem 0 1 2 3 4 5 6 7 usw Die Dezimalwerte sind allerdings nun mithilfe des Gray Codes codiert bzw werden mithilfe des Gray Codes gesendet Zwischen zwei aufeinanderfolgenden Eingangswerten andert sich dabei immer nur ein Bit eine Stelle im Codewort Abgesendete Sequenz 0000 0001 0011 0010 0110 0111 0101 0100 usw Ankommende Sequenz 0000 0001 0011 0010 0110 0111 0101 0100 usw Hier kommt also am Ausgang auch dann die gleiche Sequenz wie am Eingang an wenn beachtliche Zeitfehler rote Linien auftreten Die gestorte Tetrade zwischen den Zeitpunkten t1 und t2 lautet hier 0001 die anstatt dem theoretischen Codewort 0011 empfangen worden ist was im Dezimalsystem dem Empfang einer 1 anstatt der 2 entspricht Die gestorte Tetrade zwischen den Zeitpunkten t3 und t4 lautet 0101 anstatt dass 0111 empfangen worden ist Das entspricht dezimal dem Empfang einer 6 anstatt 5 Der Dezimalbetrag des Fehlers zwischen dem wahren Wert des Gebers im Vergleich zu dem gestorten Signal entspricht bei Verwendung des Gray Codes also nur 1 und ist somit geringer als im oberen Beispiel bei dem der Dezimalwert des Gebers BCD dual codiert wurde Abweichungen an einer oder wenigen Stellen eines Codewortes werden bei der Verwendung des Gray Codes also zwar nicht erkannt resultieren aber nicht in gravierenden Abweichungen des ursprunglichen Eingangswertes Die Verwendung des Gray Codes erlaubt auch keine Fehlerkorrektur Karnaugh Veitch Diagramm Bearbeiten Im Karnaugh Veitch Diagramm erkennt man den Graycode es sind mehrere Sequenzen moglich daran dass Ubergange nur zwischen horizontal oder vertikal benachbarten Feldern vorkommen Reihenfolge Dualcode X0 X0 X0 X0 X2 0 1 3 2 X3X2 4 5 7 6 X3X2 12 13 15 14 X3 X2 8 9 11 10 X3 X1 X1 X1 X1 Reihenfolge Graycode X0 X0 X0 X0 X2 0 1 2 3 X3X2 7 6 5 4 X3X2 8 9 10 11 X3 X2 15 14 13 12 X3 X1 X1 X1 X1Der Code eignet sich auch fur zyklische Anwendungen wie der unten abgebildeten Scheibe da sich auch beim Ubergang von der hochsten Zahl auf die Null nur eine Stelle andert Die Wertigkeit einer 1 an der Position n displaystyle n nbsp im Gray Code Zahlensystem ist 2 n 1 displaystyle 2 n 1 nbsp wobei n ab 1 zahlt also 31 15 7 3 1 Die einzelnen Einsen werden im Gegensatz zum normalen Binarsystem nicht addiert sondern von rechts beginnend subtrahiert Beispiel 111Gray 7 3 1 5 oder 1111Gray 15 7 3 1 10 Stellen die 0 sind werden dabei ausgelassen Beispiel 101Gray 7 1 6 Bei der Generierung von Gray Code wird symmetrisch vorgegangen Da sich benachbarte Werte nur in einer Ziffer unterscheiden ist der Gray Code geeignet um Fehler in seriellen Prozessen aufzudecken Programmierung BearbeitenFolgendes Beispiel zeigt eine Implementierung in der Programmiersprache C die die Zeilen des Gray Codes mit 6 Bits iterativ erzeugt und auf der Konsole ausgibt 4 5 include lt iostream gt include lt string gt include lt vector gt using namespace std void writeGrayCode int const bits Diese Funktion erzeugt den bits Bit Gray Code und gibt ihn auf der Konsole aus vector lt string gt GrayCode Ergebnis Vektor mit initialer leerer Zeile Diese for Schleife wird bits mal durchlaufen und erzeugt iterativ die Text fur den 1 Bit 2 Bit n Bit Gray Code Die Schleifenvariable pos durchlauft die jeweiligen Bitpositionen 1 2 4 2 n 1 for int pos 1 pos lt 1 lt lt bits pos 2 for int i pos i gt 0 Hange die zuletzt erzeugten Zeilen in umgekehrter Reihenfolge am Ende noch mal an GrayCode push back GrayCode i Die Anzahl der Zeilen verdoppelt sich dadurch for int i 0 pos i lt 1 pos i Fuge eine 0 am Anfang der Zeilen der ersten Halfte hinzu GrayCode i 0 GrayCode i for int i 1 pos i lt 2 pos i Fuge eine 1 am Anfang der Zeilen der zweiten Halfte hinzu GrayCode i 1 GrayCode i for auto amp E GrayCode Diese for Schleife durchlauft alle Zeilen des Gray Code cout lt lt E lt lt endl Ausgabe auf der Konsole int main Eintrittspunkt beim Aufruf eines C Programms writeGrayCode 6 Aufruf der Funktion die hier den 6 Bit Gray Code erzeugt und auf der Konsole ausgibt Zwei und mehrdimensionale Graycodes Bearbeiten In mehrdimensionen Vektorraumen sind mehrdimensionale Graycodes moglich In N displaystyle N nbsp dimensionalen Graycodes mit jeweils n 4 displaystyle n geq 4 nbsp Codeworten pro Dimension hat jedes Codewort 2 N displaystyle 2N nbsp Nachbarn in 2 N displaystyle 2N nbsp Richtungen die sich um maximal 1 Bit unterscheiden In N displaystyle N nbsp dimensionalen Graycodes mit jeweils n 2 displaystyle n 2 nbsp Codeworten pro Dimension hat jedes Codewort N displaystyle N nbsp Nachbarn in 2 N displaystyle 2N nbsp Richtungen die entgegengesetzten Nachbarn sind die gleichen die sich um maximal 1 Bit unterscheiden Genutzt werden diese in der Digitalen Kodierung siehe hier Geometrische und graphentheoretische Darstellung Bearbeiten nbsp Bild 1 3 Bit Gray Code als Ecken eines 3D Wurfels nbsp Bild 2 Koordinatensystem hinzugefugtBild 1 zeigt den Hexaeder fur 3 Variablen und Bild 2 den gleichen Wurfel mit dazugehorigem Koordinatensystem Die Knoten Eckpunkt oder Kreise am Einheitswurfel entsprechen jeweils einer Zeile im Gray Code Die Ubergange Nachbarschaft der Zeilen sind durch die Kanten des Wurfels symbolisiert Beim Wandern auf der Kante entsteht ein Gray Code geschlossener 3 Bit Gray Code a b c d e f 000 000 000 000 000 000001 100 010 010 001 100101 101 110 011 011 110100 001 100 001 010 010110 011 101 101 110 011111 111 111 111 111 111011 110 011 110 101 101010 010 001 100 100 001 nbsp Bild 3 Die 6 Pfade zu dem Gray Code in der Tabelle Es handelt sich um einen Hamiltonkreis Startpunkt 000 gruner Kreis jeweils hinten links oben Verlauf grune blaue rote schwarze Linie Endpunkt am StartpunktFehler in Bild b Linie 101 111Auf jeder Kante andert sich genau 1 Bit Der Gray Code hat so viel Nachbarschaften wie der Wurfel Kanten hat Aus dem Wurfel in Bild 1 konnen die moglichen Pfade auf 6 verschiedenen Wegen durchschritten werden Somit ergeben sich 6 Moglichkeiten um einen 3 Bit Gray Code zu erzeugen der die Bedingungen des Gray Codes erfullt Tabelle und Bild 3 Abgesehen davon ist der Gray Code zyklisch und der Startpunkt konnte deshalb auch an einer anderen Zeile sein Wegen seiner einfachen rekursiven Generierungsvorschrift wird meist der binare reflektierte Gray Code binary reflected Gray code angegeben Spalte e vorletzte Spalte in der Tabelle Es gibt fur eine bestimmte Bitlange eine ganze Klasse von Graycodes Es gibt fur einen n Bit Gray Code exakt so viel Varianten wie es Hamiltonkreise auf einem n dimensionalen Hyperwurfel gibt Die Anzahl dieser Hyperwurfel ist in der On Line Encyclopedia of Integer Sequences als Sequenz A003042 angegeben und Stand Februar 2022 bis zu 6 Dimensionen bekannt 6 Fur 1 bit gibt es 1 moglichen Gray Code fur 2 bit gibt es 2 mogliche Gray Codes und fur 3 bit gibt es 12 mogliche Gray Codes Nr 1 0 1Nr 1 00 01 11 10Nr 2 00 10 11 01Nr 1 000 001 011 010 110 111 101 100Nr 2 000 001 011 111 101 100 110 010Nr 3 000 001 101 100 110 111 011 010Nr 4 000 001 101 111 011 010 110 100Nr 5 000 010 011 001 101 111 110 100Nr 6 000 010 011 111 110 100 101 001Nr 7 000 010 110 111 011 001 101 100Nr 8 000 010 110 100 101 111 011 001Nr 9 000 100 101 111 110 010 011 001Nr 10 000 100 101 001 011 111 110 010Nr 11 000 100 110 111 101 001 011 010Nr 12 000 100 110 010 011 111 101 001Daruber steigt die Zahl steil an Fur 4 bit sind es 2688 fur 5 bit 1813091520 und fur 6 bit 71676427445141767741440 Balancierte Gray Codes BearbeitenEin balancierter Gray Code ist ein Gray Code bei dem sich die Anzahl der Anderungen fur alle n displaystyle n nbsp Bits hochstens um 2 unterscheidet Wenn T C i displaystyle TC i nbsp und T C j displaystyle TC j nbsp die Anzahl der Anderungen fur die Bits mit den Indexen i displaystyle i nbsp und j displaystyle j nbsp ist dann gilt fur jeden balancierten Gray Code die Ungleichung T C i T C j 2 displaystyle TC i TC j leq 2 nbsp Ein balancierter Gray Code mit n displaystyle n nbsp Bits kann folgendermassen konstruiert werden Aus einem beliebigen n 2 displaystyle n 2 nbsp Bit Gray Code mit den Zeilen s s 1 s 2 s 2 n 2 displaystyle s s 1 s 2 ldots s 2 n 2 nbsp wird eine Teilfolge t t 1 t 2 t l displaystyle t t 1 t 2 ldots t l nbsp ausgewahlt wobei l displaystyle l nbsp gerade ist und t 1 displaystyle t 1 nbsp t 2 displaystyle t 2 nbsp und t l 1 displaystyle t l 1 nbsp t l displaystyle t l nbsp direkt aufeinanderfolgende Zeilen sind Die vier Kopien des n 2 displaystyle n 2 nbsp Wurfels In jedem dieser Wurfel betrachtet man den definierten Gray Code mit den Zeilen s s 00 s 01 s 11 s 10 displaystyle s s 00 s 01 s 11 s 10 nbsp und loscht die Ubergange zwischen direkt aufeinanderfolgenden Zeilen auf folgende Weise Aus s 00 displaystyle s 00 nbsp werden die entsprechenden Elemente von den Zeilen mit ungeraden Indexen t 1 t 3 t l 1 displaystyle t 1 t 3 ldots t l 1 nbsp geloscht Aus s 01 displaystyle s 01 nbsp werden die entsprechenden Elemente von t 2 t 3 t l displaystyle t 2 t 3 ldots t l nbsp geloscht Aus s 11 displaystyle s 11 nbsp werden die entsprechenden Elemente von den Zeilen mit geraden Indexen t 2 t 4 t l displaystyle t 2 t 4 ldots t l nbsp geloscht Aus s 10 displaystyle s 10 nbsp wird nur das entsprechenden Elemente von t 1 displaystyle t 1 nbsp geloscht Die vier Teilwurfel werden miteinander verbunden Es kann uberpruft werden dass die oben beschriebene Konstruktion tatsachlich einen balancierten n displaystyle n nbsp Bit Gray Code ergibt Die Verteilung der Anzahl der Anderungen fur die Bits in diesem Code hangt von der Wahl der ausgewahlten Teilfolge t displaystyle t nbsp ab 7 Anwendungen Bearbeiten nbsp Schemazeichnung einer Scheibe mit Gray Codierung Die gelben Punkte stellen Lichtsensoren dar nbsp Ein Gray Code Absolutwertgeber mit 13 bitsEine Anwendungsmoglichkeit ist die Bestimmung der absoluten Position einer Scheibe oder Leiste die mit schwarzen und weissen Balken markiert ist Die Balken werden mit Lichtschranken oder anderen Sensoren abgetastet Diese Position wird dann zur Winkel oder Drehgeschwindigkeitsmessung verwendet 8 Eine weitere Anwendung ist die Streifenprojektion Dort wird eine Folge von Mustern aus parallelen Streifen auf ein Objekt projiziert Die Nummer der Streifen ist Gray kodiert und kann von einer beobachtenden Kamera fur jeden Bildpunkt berechnet werden Eine andere Anwendung ist das asynchrone Einlesen von Daten Beispielsweise wird der Gray Code genutzt um in Korrelatoren die Zahlerstande fehlerfrei einzulesen Selbst im ungunstigsten Fall wenn wahrend eines kippenden Bits eingelesen wird ist das Ergebnis immer korrekt da ein kippendes Bit nicht definiert ist und es zudem nur einen Unterschied von 1 ausmacht Diese Art des Einlesens erfordert keine Synchronisation Weitere Anwendungsmoglichkeiten sind Windrichtungsmesser oder Wasserniveaumesser Abbildung des Fahrkorbstands bei Aufzugen Der reflektierte Gray Code hat eine enge Beziehung zur Losung des Problems der Turme von Hanoi und er beschreibt auch den Losungsweg der Chinesischen Ringe Reduktion von Bitfehlern in digital PSK APSK und QAM modulierten Signalen Bearbeiten In moderner Digitale Kommunikation spielen 1D and 2D Gray Codierungen eine bedeutende Rolle beim Verhindern von Mehrfachbitfehlern bei Ubertragungen Sie machen damit Fehlerkorrektur Verfahren effizienter Sie finden Verwendung bei allen PSK Modulationen wie auch bei geradzahligen 22n QAM Modulationen Benachbarte durch Rauschen sehr wahrscheinlich auftretende fehlerhafte Codeworte unterscheiden sich nur um 1 Bit Nicht perfekt lassen sie sich umsetzen bei APSK Modulationen z B APSK 16 und APSK 32 und bei ungeradzahligen 22n 1 QAM Modulationen nbsp Codes 4 PSK nbsp Codes 8 PSK nbsp Codes 16 QAMBeispiel BearbeitenDie Dezimalzahl 4 10 100 2 displaystyle 4 10 100 2 nbsp entspricht dem Gray Code 6 10 110 2 displaystyle 6 10 110 2 nbsp Die Dekodierung in die Dezimaldarstellung folgt dann der Regel 1 7 10 1 3 10 0 1 10 4 10 displaystyle 1 cdot 7 10 1 cdot 3 10 0 cdot 1 10 4 10 nbsp Wenn mehrere Einsen in einer Gray Code Zahl vorkommen werden diese voneinander subtrahiert Der Gray Code 7 10 111 2 displaystyle 7 10 111 2 nbsp wird wie folgt dekodiert 1 7 10 1 3 10 1 1 10 5 10 displaystyle 1 cdot 7 10 1 cdot 3 10 1 cdot 1 10 5 10 nbsp Allgemeines Verfahren Bei einer Umwandlung ist entscheidend an welcher Position die Einser stehen Die Position hat Einfluss auf die Rechnung Wenn wir uns die Zahl 100 anschauen dann steht die Eins auf Position 3 von rechts nach links Den Faktor fur die Eins bekommt man indem man sich uberlegt welche Dezimalzahl maximal in einer 3 Bit Zahl binar gespeichert werden kann In 3 Bit Binarcode kann maximal die Zahl 7 111 gespeichert werden Nehmen wir jetzt eine grossere Binarzahl funktioniert das praktisch analog Binarzahl 11010 1 an Position 5 4 und 2 5 Bit Binarzahl max 31 4 Bit Binarzahl max 15 2 Bit Binarzahl max 3Berechnung 31 10 15 10 3 10 19 displaystyle 31 10 15 10 3 10 19 nbsp Gray Code zuruckrechnen BearbeitenEine Zeile des Gray Codes kann in die Zeilennummer zuruckgerechnet werden indem alle Bits vom hochstwertigen Bit bis zum aktuellen Bit mit einem exklusiven Oder verknupft werden Dazu werden die Bits der Zeile mit jedem Iterationsschritt jeweils um 1 Bit nach rechts verschoben und mit dem Zwischenergebnis mit einem exklusiven Oder verknupft 9 Das folgende Beispiel zeigt die Implementierung einer Funktion die die Zeile eines beliebigen n Bit binaren reflektierten Gray Codes decodiert int GrayDecode int const CodeWort int res CodeWort int mask CodeWort Die Bitmaske ist der Gray Code res mit einer Rechtsverschiebung der Bits while mask Solange nicht alle gesetzten Bits nach rechts verschoben sind und der Wert ungleich 0 ist mask gt gt 1 Rechtsverschiebung um 1 Bit res mask Exklusives Oder mit der Bitmaske return res Spezielle Gray Codes BearbeitenGray Codes mit m bits und Lange kleiner als 2m Bearbeiten Es existieren auch Gray Codes mit m displaystyle m nbsp Bits mit einer Lange von weniger als 2 m displaystyle 2 m nbsp Hierfur muss Lange gerade sein Eine Moglichkeit sie zu konstruieren besteht in der Verwendung eines Standard Gray Codes und dem paarweisen Wegstreichen entweder des ersten und des letzten Eintrags oder von Eintragen in der Mitte 10 Die OEIS Folge A290772 11 zahlt die Anzahl der moglichen Gray Codes der Lange 2 n displaystyle 2n nbsp auf wofur jeweils die minimale Anzahl von Bits verwendet werden Excess Gray Code Bearbeiten Wird aus einem Gray Code ein Ausschnitt herausgetrennt beispielsweise die letzten 3 Bit eines 4 Bit Gray Codes so erhalt man einen sogenannten Excess Gray Code Dieser Code zeichnet sich dadurch aus dass die betroffenen herausgetrennten Bits bei weiterem Hochzahlen des originalen Codewortes ruckwarts zahlen Dies ist dadurch bedingt dass bei einer Gray Codierung kein Uberlauf bei der hochsten Zahl entsteht wie man ihn aus dem klassischen Binarsystem kennt 12 Beispiel Die hochste mit einem 3 Bit Gray Code codierte Zahl also 7 wird als 0 100 reprasentiert Weiteres Addieren einer 1 resultiert in einer 8 im Gray Code 1100 Die letzten 3 Bit erfahren keinen Uberlauf und verhalten sich bei weiterem Hochzahlen genau entgegengesetzt zur ursprunglichen Zahlrichtung Bei Sensoren die mehrere Werte seriell als Gray codierte Werte ausgeben sollte daher darauf geachtet werden ob es sich um einen zusammengesetzten Gray Code oder um separate Codeworte handelt da die ausgegebenen Werte sonst den Anschein erwecken der Sensor wurde ruckwarts zahlen Geschichte BearbeitenNoch bevor die Bezeichnung Gray Code eingefuhrt wurde gab es bereits mathematische Knobelspiele in denen das Prinzip angewendet wurde Erst spater fand der Code die Beachtung von Ingenieuren Bereits 1874 wendete Otto Schaffler der in Wien Telegrafen und Telefone produzierte und verbesserte den reflektierten Gray Code an Der Franzose Jean Maurice Emile Baudot verwendete Gray Codes im Jahr 1874 fur die elektrische Telegrafie Er erhielt fur seine Arbeit die Auszeichnung der franzosischen Ehrenlegion Namensgebend war allerdings Frank Gray Forscher in den Bell Laboratories der den schon 1941 von George Stibitz beschriebenen Code 13 im Jahre 1947 fur seine Zwecke wiederentdeckte Unter dem Titel Pulse Code Communications wurde im Jahre 1953 ein Patent fur eine Gray kodierende Elektronenrohre erteilt 1 Ahnliche Codes Bearbeiten1 aus 10 Code Aiken Code BCD Code Gillham Code Libaw Craig Code Stibitz CodeLiteratur BearbeitenRobert W Doran The Gray Code In Journal of Universal Computer Science Band 13 Nr 11 2007 S 1573 1597 karadimov info PDF 219 kB Weblinks Bearbeiten nbsp Commons Gray code Sammlung von Bildern Videos und Audiodateien Java Beispiel fur die Umwandlung einer Dezimalzahl in Gray Code Darstellung Memento vom 30 September 2007 im Internet Archive Algorithmen zur Erzeugung des reflektierten Gray Codes auf dem Combinatorial Object ServerEinzelnachweise Bearbeiten a b Patent US2632058A Pulse code communication Angemeldet am 13 November 1947 veroffentlicht am 17 Marz 1953 Anmelder Bell Telephone Labor Inc Erfinder Frank Gray EE Times Gray Code Fundamentals Part 2 Girish S Bhat Carla D Savage Balanced Gray Codes In The Electronic Journal of Combinatorics 28 August 1996 ISSN 1077 8926 S R25 R25 doi 10 37236 1249 combinatorics org abgerufen am 22 Mai 2021 GeeksforGeeks Generate n bit Gray Codes Rosetta Code Gray code A003042 Number of directed Hamiltonian cycles or Gray codes on n cube Formerly M2053 Girish S Bhat Carla D Savage North Carolina State University Balanced Gray Codes Robert W Doran The Gray Code In Journal of Universal Computer Science Band 13 Nr 11 2007 S 1575 1577 Lenard Szolnoki s programming site Implementations for Gray code encoding and decoding Max Maxfield How to generate Gray Codes for non power of 2 sequences 29 Juni 2007 abgerufen am 25 Februar 2023 englisch A290772 Number of cyclic Gray codes of length 2n which include all 0 bit sequence and use the least possible number of bits AutomationDirect What are Excess Gray Codes Patent US2307868A Binary counter Angemeldet am 26 November 1941 veroffentlicht am 12 Januar 1943 Anmelder Bell Telephone Labor Inc Erfinder George R Stibitz Abgerufen von https de wikipedia org w index php title Gray Code amp oldid 239459747