Zum Inhalt springen

Fliegerhorst Wunstorf und Gray-Code: Unterschied zwischen den Seiten

aus Wikipedia, der freien Enzyklopädie
(Unterschied zwischen Seiten)
Inhalt gelöscht Inhalt hinzugefügt
K Grammatik korrigiert und kleine Ergänzung.
 
Keine Bearbeitungszusammenfassung
 
Zeile 1: Zeile 1:
{{Infobox Flughafen
{{Infobox Binärcode
| Name =
|Name=Fliegerhorst Wunstorf
| Stellenzahl =
|Logo=
| bewertbar =
|Bild=NASA World Wind - Wunstorf.jpg
| stetig = ja
|Bildbeschreibung=
| Gewicht =
|IATA=
| Minimaldistanz =
|ICAO=ETNW
| Maximaldistanz =
|Flugplatztyp=Militärflugplatz
| Hamming-Abstand = 1
|Koordinate_Breite=N
| Redundanz =
|Koordinate_Breitengrad=52
|Koordinate_Breitenminute=27
|Koordinate_Breitensekunde=26.40
|Koordinate_Länge=O
|Koordinate_Längengrad=009
|Koordinate_Längenminute=25
|Koordinate_Längensekunde=37.80
|Koordinate_Region=DE-NI
|Koordinate_Typ=airport
|Höhe in Meter=57
|Entfernung in Kilometer1=5
|Entfernung Richtung1=nördlich
|Entfernung Ort1=Wunstorf
|Schiene=
|Nahverkehr=
|Straße=
|Eröffnung=
|Betreiber=Deutsche Luftwaffe
|Fläche in Hektar=455
|Terminals=
|Passagiere=
|Fracht=
|Bewegungen=
|Kapazität=
|Beschäftigte=
|Bahn1=03/21
|Bahnlänge in Meter1=1699
|Bahnbreite in Meter1=48
|Bahnbelag1=Asphalt
|Bahn2=08/26
|Bahnlänge in Meter2=2499
|Bahnbreite in Meter2=45
|Bahnbelag2=Beton
|Bahn3=08R/26L
|Bahnlänge in Meter3=1088
|Bahnbreite in Meter3=40
|Bahnbelag3=Gras
}}
}}
Der '''Gray-Code''' ist ein stetiger [[Code]], bei dem sich benachbarte Codewörter nur in einer einzigen dualen Ziffer unterscheiden. Die [[Hamming-Distanz]] aller benachbarten Codewörter ist somit 1. Dadurch verringert sich der maximal mögliche Ablesefehler bei der [[Quantisierung]] aus einem [[Analogsignal]] auf einen Code. Er dient als [[Kodierung]]sverfahren zur robusten Übertragung digitaler Größen über analoge Signalwege. Der Code ist nach dem Physiker [[Frank Gray (Physiker)|Frank Gray]] benannt, welcher 1953 das [[Patent]] auf dieses Verfahren erhielt.<ref>{{Patent|Land=US|V-Nr=2632058|V-Datum=1953-03-17|Titel=Pulse code communication|Erfinder=Frank Gray}}</ref>


Meistens ist der Gray-Code als [[Binärcode]] ausgeführt, kann aber auch für mehrstufige [[Kanal (Informationstheorie)|Übertragungswege]] benutzt werden.
Der '''Flugplatz Wunstorf''', auch ''[[Fliegerhorst]] Wunstorf'' genannt, ist ein deutscher [[Militärflugplatz]] der [[Luftwaffe (Bundeswehr)|Luftwaffe]] in der Nähe von [[Wunstorf]] (Niedersachsen). Auf ihm ist das [[Lufttransportgeschwader 62]] stationiert und es werden [[Fluggerätmechaniker]] und Elektroniker ausgebildet.


== Generierung aus Binärcode ==
== Geschichte ==
Die folgenden Punkte zeigen, wie man Schritt für Schritt aus einer binär codierten Dezimalzahl (Binärcode) eine Gray-codierte Binärzahl erhält:
Der Fliegerhorst wurde ab 1934 für die [[Luftwaffe (Wehrmacht)|Luftwaffe]] der [[Wehrmacht]] angelegt.


* X1: Dualzahl im Binärcode
Im April 1945 übernahm die [[Royal Air Force]] den Fliegerhorst, den die Alliierten zunächst als ''Airfield B.116'' bezeichneten. Die [[RAF Germany|British Air Force of Occupation]] stationierte hier besonders Jagdbombergeschwader zum Beispiel das ''123. Wing''. Dies bestand im Sommer 1945 aus [[Hawker Typhoon|Typhoon IB]] und [[Supermarine Spitfire|Spitfire XIV/XVI]] Staffeln, letztere der [[Royal Canadian Air Force (1924–1968)|Royal Canadian Air Force]] (zwei) sowie mit Freiwilligen aus [[Belgische Luftkomponente|Belgien]] und [[Niederländische Luftstreitkräfte|den Niederlanden]] (zwei bzw. eine Staffel, die übrigens noch heute (2011) existieren und [[General Dynamics F-16|F-16]] fliegen). '''RAF Wunstorf''' blieb als einer der wenigen noch unmittelbar nach Kriegsende genutzten Flugplätze längerfristig eine ''Flying Station'' der RAF, ab Ende März 1946 unterstanden dem 123. Geschwader jedoch lediglich noch zwei (britische) Staffeln [[Hawker Tempest|Tempest V]]. Ein Jahr später sank der Klarstand dieser bereits im Krieg eingesetzten Maschinen bedenklich. Im Januar 1948 begann daher bei der ersten der beiden Staffeln, der ''80. Squadron'', die Umrüstung auf die letzte Baureihe der Spitfire (F.24), während die zweite Einheit, die ''3. Squadron'', Mitte April 1948 mit Zulauf der [[de Havilland Vampire|Vampire F1]] das Jet-Zeitalter bei der BAFO einläutete.
* X2: Rechts-Shift der Dualzahl um 1 Bit
* X3: Modulo-2-Addition ([[XOR-Verknüpfung]]) von X1 und X2; dies ist die gewünschte Zahl im Graycode.


Das gleiche als Pseudocode:
Im Sommer des Jahres verlegten beide Staffeln nach [[Flughafen Gütersloh|RAF Gütersloh]] um Platz für die bei der [[Berliner Luftbrücke]] eingesetzten Frachtmaschinen zu schaffen. Während der auch von Wunstorf aus betriebenen Luftbrücke nach Berlin starteten hier vom Juni 1948 bis Mai 1949 Transportflugzeuge, meist vom Flugzeugmuster [[Avro York]].
* Binärcode X1 → Graycode: X3 = (X1 XOR (X1/2))


== Generierung als Gray-Zähler ==
Nach dem Ende der Luftbrücke Mitte 1949 wurde die Station wieder Heimat des ''123. Wing'', dass zunächst u.a. auch noch Spitfires einsetzte. Ab Mitte 1950 startete auf Grund des [[Koreakrieg]]es eine weltweite Aufrüstung und zwei weitere Staffeln [[de Havilland Vampire|Vampire]] verlegten nach Wunstorf. Im August 1952 trafen die ersten [[de Havilland Venom|Venom FB1]] bei 2. Tactical Air Force ein, Wunstorf fiel die Rolle der Einsatzerprobung dieses neuen Typs zu. Später in den 1950er Jahren betrieb die 2.TAF dann nur noch Jets der Typen [[Supermarine Swift|Swift FR.5]] und [[Gloster Meteor|Meteor PR.10]].
Man kann auch direkt einen Gray-Code-Zähler in Hardware (z.B. in [[Hardwarebeschreibungssprache|HDL]]) programmieren. Hierzu ist es hilfreich, ein Hilfsregister zu benutzen, das mit jedem Taktzyklus toggelt.


Q<sub>h</sub> [n+1] = !Q<sub>h</sub> [n]
Im März 1958 übernahm die [[Luftwaffe (Bundeswehr)|Luftwaffe der Bundeswehr]] den Fliegerhorst. Dieser wurde kurz darauf Standort der Flugzeugführerschule „S“, die hier vor allen Dingen die Ausbildung mit der [[Nord_Noratlas|Noratlas N2501]], später der [[Transall C-160]] durchführte.


Damit wird die Kombinatorik recht übersichtlich:
Am [[12]]. [[Oktober]] [[1963]] wurde Konrad [[Adenauer]] hier durch die [[Bundeswehr]] mit einer [[Feldparade]] verabschiedet.<ref>Wochenschaubilder unter http://www.youtube.com/watch?v=gTZwshEVeXo</ref>


Q<sub>0</sub> [n+1] = ! ( Q<sub>0</sub> [n] ^ Q<sub>h</sub> [n] )
== Heutige Nutzung ==
Durch Umgliederung im Oktober 1978 aus der FFS „S“ entstanden, ist das [[Lufttransportgeschwader 62]] seitdem mit seinen C-160 [[Transall]] hier stationiert.


Q<sub>1</sub> [n+1] = Q<sub>1</sub> [n] ^ ( Q<sub>0</sub> [n] & Q<sub>h</sub>[n] )
Vor der Wache im Westen des Fliegerhorsts bei [[Großenheidorn]] befindet sich das durch einen Verein getragene [[Ju-52-Museum]] mit Ausstellungshalle, in der unter anderem eine [[Junkers Ju 52]] ausgestellt ist. Auf dem angrenzenden Freigelände sind weitere Flugzeuge zu besichtigen.


Q<sub>2</sub> [n+1] = Q<sub>2</sub> [n] ^ ( Q<sub>1</sub> [n] & !Q<sub>0</sub> [n] & Q<sub>h</sub> [n] )
== Zukünftige Nutzung ==
Im Vorgriff des Zulaufs von 40 [[Airbus A400M]] ab 2014, Wunstorf wird deutscher Typstützpunkt, wird der Platz derzeit modernisiert und erweitert, unter anderem wurde bereits die Bahn 08/26 Richtung Osten verlängert. Zukünftig werden die Aussenabstellflächen erweitert sowie die Hallen und ein Ausbildungszentrum errichtet. Analog der [[Eurocopter Tiger|Tiger]]-Ausbildung werden Deutschland und Frankreich die Ausbildung der A400M gemeinsam betreiben. Das Herz der Ausbildung in Wunstorf sind zwei [[Flugsimulation|"Full Flight" Simulatoren]]. Deutschland übernimmt im Rahmen der Übereinkunft mit Frankreich die Grundausbildung gemäß [[Joint_Aviation_Authorities#Flight_Crew_Licensing_.28JAR-FCL.29|JAR-FCL]]. Die anschließende Taktikausbildung der Einsatz-Besatzungen erfolgt am französischen [[Militärflugplatz Orléans-Bricy|Typstützpunkt Orléans-Bricy]]. In einer Übergangsphase erfolgen die Schulungen bei [[Airbus Military]] in [[Flughafen Sevilla|Sevilla]].


Q<sub>3</sub> [n+1] = Q<sub>3</sub> [n] ^ (Q<sub>2</sub> [n] & !Q<sub>1</sub> [n] & !Q<sub>0</sub> [n] & Q<sub>h</sub> [n] )
== Motorsport ==
[[Datei:Wunstorf airfield circuit.png|miniatur|links|hochkant=0.5|DTM-Strecke des Fliegerhorst Wunstorf]]
Zwischen [[DTM-Saison 1984|1984]] und DTM-Saison [[DTM-Saison 1993|1993]] wurden insgesamt neun Rennen der [[Deutsche Tourenwagen-Meisterschaft|Deutschen Tourenwagen-Meisterschaft]] in Wunstorf ausgetragen<ref>[http://www.dtm.com/statistik-strecke.php?strecke=Wunstorf Rennstatistik auf DTM.com]</ref>.


...
Die 5050&nbsp;m lange Strecke zählt zu den längsten in der Geschichte der DTM. Den Rundenrekord hält der [[Italien]]er [[Nicola Larini]], der die Strecke mit seinem [[Alfa Romeo 155#Der 155 im_Motorsport|Alfa Romeo 155 V6 TI]] in 1:44,45 Minuten umfuhr. Die Bestzeit wurde 1993 im Qualifying zum bisher letzten DTM-Rennen auf dem Fliegerhorst aufgestellt<ref>DeAgostini-Magazin: AMG Mercedes C-Klasse DTM 2008 - Ausgabe 47</ref>.
<br style="clear:left;" />


Q<sub>k-1</sub> [n+1] = Q<sub>k-1</sub> [n] ^ ( Q<sub>k-2</sub> [n] & !Q<sub>k-3</sub> [n] & ... & !Q<sub>1</sub> [n] & !Q<sub>0</sub> [n] & Q<sub>h</sub> [n] ) <br />
== Galerie ==

<gallery>
Q<sub>k</sub> [n+1] = Q<sub>k</sub> [n] ^ ( !Q<sub>k-1</sub> [n] & !Q<sub>k-2</sub> [n] & ... & !Q<sub>1</sub> [n] & !Q<sub>0</sub> [n] & Q<sub>h</sub> [n] ) <br />
File:Ju88-wunstorf.jpg|US Soldaten untersuchen einen Ju88 G-8 Nachtjäger auf dem Fliegerhorst Wunstorf, Sommer 1945

File:Bundesarchiv Bild 101I-676-7975A-28, Wunstorf, Major Günther Specht und Prof. Kurt Tank.jpg|Major Günther Specht mit Professor Kurt Tank, Focke Wulf Chefkonstrukteur
^ := Exklusiv Oder / XOR / [[XOR-Verknüpfung|Antivalenz]] <br />
File:Ju52mus-halle.jpg|Ju52 Museumshalle vor den Toren des Fliegerhorst
! := Inverter / NOT / [[Aussagenlogik#Verneinte Aussage – Negation|Negation]] <br />
File:Transall LTG 62 1983.jpeg|LTG-62 aus Wunstorf im Flug
& := Und / AND / [[Aussagenlogik#Und-verknüpfte Aussagen – Konjunktion|Konjunktion]]
</gallery>

== Bedeutung ==
Ausgangspunkt für diesen Code ist das folgende Problem: Auf mehreren Adern einer elektrischen Datenleitung sollen Daten parallel übertragen werden, die sich stetig (also nicht sprunghaft) ändern, z. B. Signale eines Temperatursensors oder eines [[Absolutwertgeber|Drehwinkelgebers]]. Theoretisch ändern sich die Bits bei einem neuen Messwert auf jeder betroffenen Leitung exakt gleichzeitig, und zwar sowohl am Eingang der Leitung als auch am Ausgang. Tatsächlich aber ändern sich die Bits auf der Leitung nicht gleichzeitig. Das kann verschiedene Ursachen haben: Bauteilestreuung, Laufzeiten, Asymmetrien usw. Dadurch kommt es zu ungewollten Zwischenzuständen:

{| border="0" cellpadding="10" align="right"
|-
|
{| width="150" align="right" cellpadding="5" border="1" style="border-collapse: collapse;"
|-
| <small>2-Bit-Gray-Code:</small>
00
01
11
10
|-
| <small>3-Bit-Gray-Code:</small>
000
001
011
010
110
111
101
100
|-
| <small>4-Bit-Gray-Code:</small>
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
|-
| <small>5-Bit-Gray-Code:</small>
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
|}
|
{| width="150" align="right" cellpadding="5" border="1" style="border-collapse: collapse;"
| <small>6-Bit-Gray-Code:</small>
<span style="color:#FF0000">0</span>00000
00000<span style="color:#FF0000">1</span>
0000<span style="color:#FF0000">1</span>1
00001<span style="color:#FF0000">0</span>
000<span style="color:#FF0000">1</span>10
00011<span style="color:#FF0000">1</span>
0001<span style="color:#FF0000">0</span>1
00010<span style="color:#FF0000">0</span>
00<span style="color:#FF0000">1</span>100
00110<span style="color:#FF0000">1</span>
0011<span style="color:#FF0000">1</span>1
00111<span style="color:#FF0000">0</span>
001<span style="color:#FF0000">0</span>10
00101<span style="color:#FF0000">1</span>
0010<span style="color:#FF0000">0</span>1
00100<span style="color:#FF0000">0</span>
0<span style="color:#FF0000">1</span>1000
01100<span style="color:#FF0000">1</span>
0110<span style="color:#FF0000">1</span>1
01101<span style="color:#FF0000">0</span>
011<span style="color:#FF0000">1</span>10
01111<span style="color:#FF0000">1</span>
0111<span style="color:#FF0000">0</span>1
01110<span style="color:#FF0000">0</span>
01<span style="color:#FF0000">0</span>100
01010<span style="color:#FF0000">1</span>
0101<span style="color:#FF0000">1</span>1
01011<span style="color:#FF0000">0</span>
010<span style="color:#FF0000">0</span>10
01001<span style="color:#FF0000">1</span>
0100<span style="color:#FF0000">0</span>1
01000<span style="color:#FF0000">0</span>
<span style="color:#FF0000">1</span>10000
11000<span style="color:#FF0000">1</span>
1100<span style="color:#FF0000">1</span>1
11001<span style="color:#FF0000">0</span>
110<span style="color:#FF0000">1</span>10
11011<span style="color:#FF0000">1</span>
1101<span style="color:#FF0000">0</span>1
11010<span style="color:#FF0000">0</span>
11<span style="color:#FF0000">1</span>100
11110<span style="color:#FF0000">1</span>
1111<span style="color:#FF0000">1</span>1
11111<span style="color:#FF0000">0</span>
111<span style="color:#FF0000">0</span>10
11101<span style="color:#FF0000">1</span>
1110<span style="color:#FF0000">0</span>1
11100<span style="color:#FF0000">0</span>
1<span style="color:#FF0000">0</span>1000
10100<span style="color:#FF0000">1</span>
1010<span style="color:#FF0000">1</span>1
10101<span style="color:#FF0000">0</span>
101<span style="color:#FF0000">1</span>10
10111<span style="color:#FF0000">1</span>
1011<span style="color:#FF0000">0</span>1
10110<span style="color:#FF0000">0</span>
10<span style="color:#FF0000">0</span>100
10010<span style="color:#FF0000">1</span>
1001<span style="color:#FF0000">1</span>1
10011<span style="color:#FF0000">0</span>
100<span style="color:#FF0000">0</span>10
10001<span style="color:#FF0000">1</span>
1000<span style="color:#FF0000">0</span>1
10000<span style="color:#FF0000">0</span>
|}
|}

=== Problem bei Dualcode-Signalen ===
[[Datei:Dualcode-1.svg|400px|Dualcodesignal]]

Während das theoretische Signal in der Reihenfolge
* {0000}, {0001}, {0010}, {0011}, {0100}, {0101}, {0110}, {0111}, usw.

abgesendet wird, kommen am Ausgang kurzzeitig andere Signalzustände an:
* {0000}, {0001}, '''{0000}''', {0010}, {0011}, {0100}, {0101}, '''{0111}''', {0110}, {0111}, usw.

=== Lösung mit Gray-Code ===
[[Datei:Graycodesignal.svg|400px|Graycodesignal]]

Um das zu vermeiden, werden mittels Gray-Code Steuersignalzustände in einer Sequenz abgesendet, bei denen sich immer nur ein Bit gleichzeitig ändert:

* 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 die gleiche Sequenz wie am Eingang an.

=== Karnaugh-Veitch-Diagramm ===
Im [[Karnaugh-Veitch-Diagramm]] erkennt man den Graycode – es sind mehrere Sequenzen möglich – daran, dass Übergänge nur zwischen benachbarten Feldern vorkommen.

{|
|
{| class="wikitable"
|+ Reihenfolge Dualcode
|-
!
! ¬X<sub>0</sub>
! X<sub>0</sub>
! X<sub>0</sub>
! ¬X<sub>0</sub>
!
|-
! ¬X<sub>2</sub>
| 0 || 1 || 3 || 2
! ¬X<sub>3</sub>
|-
! X<sub>2</sub>
| 4 || 5 || 7 || 6
! ¬X<sub>3</sub>
|-
! X<sub>2</sub>
| 12 || 13 || 15 || 14
! X<sub>3</sub>
|-
! ¬X<sub>2</sub>
| 8 || 9 || 11 || 10
! X<sub>3</sub>
|-
!
! ¬X<sub>1</sub>
! ¬X<sub>1</sub>
! X<sub>1</sub>
! X<sub>1</sub>
!
|}
|
{| class="wikitable"
|+ Reihenfolge Graycode
|-
!
! ¬X<sub>0</sub>
! X<sub>0</sub>
! X<sub>0</sub>
! ¬X<sub>0</sub>
!
|-
! ¬X<sub>2</sub>
| 0 || 1 || 2 || 3
! ¬X<sub>3</sub>
|-
! X<sub>2</sub>
| 7 || 6 || 5 || 4
! ¬X<sub>3</sub>
|-
! X<sub>2</sub>
| 8 || 9 || 10 || 11
! X<sub>3</sub>
|-
! ¬X<sub>2</sub>
| 15 || 14 || 13 || 12
! X<sub>3</sub>
|-
!
! ¬X<sub>1</sub>
! ¬X<sub>1</sub>
! X<sub>1</sub>
! X<sub>1</sub>
!
|}
|}

Der Code eignet sich auch für zyklische Anwendungen wie der unten abgebildeten Scheibe,
da sich auch beim Übergang von der höchsten Zahl auf die Null nur eine Stelle ändert.

Die Wertigkeit einer 1 an der Position <math>n</math> im Gray-Code Zahlensystem ist <math>2^n-1</math> (wobei n ab 1 zählt, also ... 31, 15, 7, 3, 1). Die einzelnen Einsen werden, im Gegensatz zum normalen Binärsystem, nicht addiert, sondern von rechts beginnend subtrahiert. Beispiel: 111<sub>Gray</sub> = 7 - (3 - 1) = 5 oder 1111<sub>Gray</sub> = 15- (7 - (3 - 1)) = 10.
Stellen, die 0 sind, werden dabei ausgelassen, Beispiel: 101<sub>Gray</sub> = 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.
<br style="clear:both;" />

== Hyperwürfel ==

{| valign class="float-left"
|[[Datei:Karnaugh map KV Nachbarschaft 1.svg|miniatur|links|200 px|Bild 1: Hyperwürfel]]
|[[Datei:Karnaugh map KV Nachbarschaft 10.svg|miniatur|links|200 px|Bild 2: Hyperwürfel mit Koordinatensystem]]
|}
Bild 1 zeigt den [[Hyperwürfel]] für 3 Variablen und Bild 2 den gleichen Würfel mit dazugehörigem Koordinatensystem. Die Knoten (Eckpunkt oder Kreise) am Hyper-Einheitswürfel entsprechen jeweils einer Zeile im Gray-Code. Die Übergänge (Nachbarschaft der Zeilen) sind durch die Kanten des Würfels symbolisiert. Beim Wandern auf der Kante entsteht ein Gray-Code.
<br style="clear:both;" />

{| class="wikitable float-right"
|-
! colspan="6 "| geschlossener 3-Bit-Gray-Code
|-
| a) || b) || c) || d) || '''e)''' || f)
|-
| 000 || 000 || 000 || 000 || '''000''' || 000
|-
| 001 || 100 || 010 || 010 || '''001''' || 100
|-
| 101 || 101 || 110 || 011 || '''011''' || 110
|-
| 100 || 001 || 100 || 001 || '''010''' || 010
|-
| 110 || 011 || 101 || 101 || '''110''' || 011
|-
| 111 || 111 || 111 || 111 || '''111''' || 111
|-
| 011 || 110 || 011 || 110 || '''101''' || 101
|-
| 010 || 010 || 001 || 100 || '''100''' || 001
|}

Auf jeder Kante ändert sich genau 1 Bit. Der Gray-Code hat so viel Nachbarschaften, wie der Würfel Kanten hat. Aus dem Hyperwürfel in Bild 1 können die möglichen Pfade auf 6 verschiedenen Wegen durchschritten werden. Somit ergeben sich 6 Möglichkeiten, um einen 3-Bit-Gray-Code zu erzeugen, der die Bedingungen des Gray-Codes erfüllt (Tabelle und Bild 3). Abgesehen davon ist der Gray-Code zyklisch und der Startpunkt könnte deshalb auch an einer anderen Zeile sein. Wegen seiner einfachen rekursiven Generierungsvorschrift wird meist der binäre reflektierte Gray-Code (binary-reflected Gray code) angegeben (Spalte „e“ – vorletzte Spalte in der Tabelle). Es gibt für eine bestimmte Bitlänge eine ganze Klasse von Graycodes. Es gibt für einen n-Bit-Gray-Code exakt so viel Varianten, wie es [[Hamiltonkreisproblem|Hamiltonkreise]] auf einem n-dimensionalen Hyperwürfel gibt.

[[Datei:Karnaugh map KV Nachbarschaft 9.svg|miniatur|links|600 px|Bild 3: Die 6 Pfade zu dem Gray-Code in der Tabelle. Es handelt sich um einen [[Hamiltonkreisproblem|Hamiltonkreis]]. Startpunkt: 000 (grüner Kreis jeweils links oben), Fortsetzung: grüne→blaue→rote→schwarze Linie, Endpunkt: am Startpunkt]]
<br style="clear:both;" />

{| class="wikitable float-right"
|-
! colspan="6 "| geschlossener 3-Bit-Gray-Code
|-
| a) || b) || c) || d) || '''e)''' || f)
|-
| 000 || 000 || 010 || 010 || 000 || 100
|-
| 001 || 100 || 110 || 011 || 001 || 110
|-
| 101 || 101 || 100 || 001 || 011 || 010
|-
| 100 || 001 || 101 || 101 || 010 || 011
|-
| 110 || 011 || 111 || 111 || 110 || 111
|-
| 111 || 111 || 011 || 110 || 111 || 101
|-
| 011 || 110 || 001 || 100 || 101 || 001
|-
| 010 || 010 || '''000''' || '''000''' || 100 || '''000'''
|}

Da der hier dargestellte Gray-Code zyklisch ist, wurde in dieser Tabelle der Code in den Spalten c), d) und f) um eine Stelle nach oben verschoben (im Vergleich zur Tabelle weiter oben), so dass jeweils die drei Nullen in der letzten Tabellenzeile stehen. So ist erkennbar, dass es sich bei dem Gray-Code in Spalte a) nur um eine spiegelbildliche Umkehrung der Spalte c) handelt. Genauso ist Spalte b) die Umkehrung von Spalte d), während Spalte e) die Umkehrung von Spalte f) ist. Es gibt drei ungerichtete Hamiltonkreise am dreidimensionalen Hyperwürfel, die hier lediglich in unterschiedlicher Richtung (gerichteter Hamiltonkreis) dargestellt wurden.
<br style="clear:both;" />
Zur besseren Veranschaulichung sind hier nochmals die Codetafeln für die 6 Varianten des 3-Bit-Graycodes dargestellt. Wobei die Variante e den binären reflektierten Gray-Code darstellt, der meist gemeint ist, wenn vom Gray-Code die Rede ist. Die 6 Versionen kann man auch durch Permutation der 3 Spalten der Codetafel erzeugen. Daraus ergibt sich, dass es bei n Bit n! Versionen gibt. Also für 3 Bit 3!= 6 Versionen des 3-Bit-Graycodes..
{| valign="bottom"
|[[Datei:Code Gray zyklisch 3Bit 2.svg|miniatur|100 px|3 Bit: a]]
|[[Datei:Code Gray zyklisch 3Bit 3.svg|miniatur|100 px|3 Bit: b]]
|[[Datei:Code Gray zyklisch 3Bit 6.svg|miniatur|100 px|3 Bit: c]]
|[[Datei:Code Gray zyklisch 3Bit 5.svg|miniatur|100 px|3 Bit: d]]
|[[Datei:Code Gray zyklisch 3Bit 1.svg|miniatur|100 px|3 Bit: e]]
|[[Datei:Code Gray zyklisch 3Bit 4.svg|miniatur|100 px|3 Bit: f]]
|}
<br style="clear:both;" />
{| valign="bottom"
|[[Datei:Karnaugh map KV Nachbarschaft 5.svg|miniatur|200 px|Bild 4]]
|[[Datei:Code Gray zyklisch reflektiert 1.svg|miniatur|100 px|]]
|[[Datei:Code Gray zyklisch reflektiert 4.svg|miniatur|100 px|]]
|[[Datei:Code Gray zyklisch reflektiert 7.svg|miniatur|100 px|]]
|[[Datei:Code Gray zyklisch reflektiert 2.svg|miniatur|100 px|]]
|[[Datei:Code Gray zyklisch reflektiert 5.svg|miniatur|100 px|]]
|… usw. …
|}
Den 4-Bit-Gray-Code kann man aus dem Hyperwürfel in Bild 4 ablesen.
Für 4 Bit gibt es 4! = 24 verschiedene Gray-Codes.

== Anwendungen ==
[[Datei:BCD-Scheibe.svg|miniatur|Schemazeichnung einer Scheibe mit Gray-Codierung. Die gelben Punkte stellen Lichtsensoren dar.]]
[[Datei:Gray code rotary encoder 13-track opened.jpg|miniatur|Ein Gray-Code [[Absolutwertgeber]] mit 13 bits]]
Eine Anwendungsmöglichkeit ist die Bestimmung der absoluten Position einer Scheibe oder Leiste, die mit schwarzen und weißen Balken markiert ist, die mit Lichtschranken oder anderen Sensoren abgetastet werden. Diese Position wird dann zur Winkel- oder Drehgeschwindigkeitsmessung verwendet.

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 für jeden Bildpunkt berechnet werden.

Eine andere Anwendung ist das asynchrone Einlesen von Daten. Beispielsweise wird der Gray-Code genutzt, um in [[Korrelator]]en die Zählerstände fehlerfrei einzulesen. Selbst im ungünstigsten Fall, wenn während 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 und nur sehr wenig CPU-Zeit.

Weitere Anwendungsmöglichkeiten sind Windrichtungsmesser oder Wasserniveaumesser, Abbildung des Fahrkorbstands bei Aufzügen.

Der reflektierte Gray-Code hat eine enge Beziehung zur Lösung des Problems der [[Türme von Hanoi]].

== Beispiel ==
Die Dezimalzahl <math>4_{10} = 100_2</math> entspricht dem Gray-Code <math>6_{10} = 110_2</math>. Die Dekodierung in die Dezimaldarstellung folgt dann der Regel <math>1\cdot 7_{10} - (1\cdot 3_{10} - 0\cdot 1_{10}) = 4_{10}</math>. Wenn mehrere Einsen in einer Gray-Code-Zahl vorkommen, werden diese <!-- kanonisch --> voneinander subtrahiert:
Der Gray-Code <math>7_{10} = 111_2</math> wird wie folgt dekodiert: <math>1\cdot 7_{10} - (1\cdot 3_{10} - 1\cdot 1_{10}) = 5_{10}</math>.

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 für die Eins bekommt man, indem man sich überlegt, welche Dezimalzahl maximal in einer 3-Bit Zahl binär gespeichert werden kann. In 3 Bit Binärcode kann maximal die Zahl 7 (111) gespeichert werden.
Nehmen wir jetzt eine größere Binärzahl, funktioniert das praktisch analog.
Binärzahl: 11010 (1 an Position 5,4 und 2).
5 Bit Binärzahl: max. 31
4 Bit Binärzahl: max. 15
2 Bit Binärzahl: max. 3

Berechnung: <math>31_{10} - (15_{10} - 3_{10}) = 19</math>

== Einen Gray-Code zurückrechnen ==
<source lang=delphi>

for I := NumBits - 1 downto 0 do // jedes einzelne Bit vom letzten bis zum ersten
Value := Value or ( // das Ergebnis jedes errechneten Bits dem Gesamtergebnis hinzufügen
(((1 shl (I + 1)) and Value) shr 1) // das Bit der Stelle zuvor im Ergebnis
xor // xor mit
((1 shl I) and GrayCode) // der aktuellen Stelle des Codes
);
</source>

== Geschichte ==
Noch bevor die Bezeichnung Gray-Code eingeführt wurde, gab es bereits mathematische Knobelspiele, in denen das Prinzip angewendet wurde. Erst später fand der Code die Beachtung von Ingenieuren.
Bereits 1878 wendete Otto Schäffler, der in Wien Telegrafen und Telefone produzierte und verbesserte, den reflektierten Gray-Code an. Der Franzose [[Jean-Maurice-Émile Baudot]] verwendete Gray-Codes im Jahr 1887 für die elektrische [[Telegrafie]]. Er erhielt für seine Arbeit die Auszeichnung der französischen [[Ehrenlegion]].

Namensgebend war allerdings [[Frank Gray (Physiker)|Frank Gray]], Forscher in den [[Bell Laboratories]], der den Code erst 1946 für seine Zwecke wiederentdeckte. Unter dem Titel ''Pulse Code Communications'' wurde am 17. März 1953 unter der '''[http://www.freepatentsonline.com/2632058.html US-Patentnummer 2,632,058]''' ein Patent für eine Gray-kodierende [[Elektronenröhre]] erteilt.


== Siehe auch ==
== Siehe auch ==
* [[1-aus-10-Code]]
* [[Liste der Fliegerhorste in Deutschland]]
* [[Aiken-Code]]
* [[BCD-Code]]
* [[Gillham-Code]]
* [[Libaw-Craig-Code]]
* [[Stibitz-Code]]


== Einzelnachweise ==
== Einzelnachweise ==
Zeile 92: Zeile 441:


== Weblinks ==
== Weblinks ==
{{Commonscat|Wunstorf Air Base}}
{{Commonscat|Gray code}}
* {{Webarchiv | url=http://etc.manuel-breitfeld.de/gray-code-java-implementierung.html | wayback=20070930040812| text=Java-Beispiel für die Umwandlung einer Dezimalzahl in Gray-Code Darstellung}}
*[http://www.relikte.com/wunstorf/index.htm Geschichte des Fliegerhorstes] auf der Internetseite „Relikte in Niedersachsen & Bremen“
* [http://www.strw.leidenuniv.nl/~mathar/progs/gray.html Java Applet zur Umwandlung von Gray- in Binärcode und zurück]
*[http://www.ohg-wunstorf.de/ Offizierheimgesellschaft Fliegerhorst Wunstorf e.V.]
* [http://www.mikrocontroller.net/topic/23085#1917462 Postscript-Code zum Erzeugen von beliebigen Gray-Code-Scheiben]

{{NaviBlock
|Navigationsleiste Fliegerhorst (Deutschland)
|Navigationsleiste DTM-Rennen
}}

[[Kategorie:Militärflugplatz in Deutschland|Wunstorf]]
[[Kategorie:Militärflugplatz (Bundeswehr)|Wunstorf]]
[[Kategorie:Luftwaffenbasis der Royal Air Force in Deutschland|Wunstorf]]
[[Kategorie:DTM-Rennstrecke|Wunstorf]]
[[Kategorie:Wunstorf]]
[[Kategorie:Rennstrecke in Deutschland]]
[[Kategorie:Straßenkurs]]


[[Kategorie:Binärcode]]
[[en:Wunstorf_Air_Base]]
[[ja:ヴンストルフ航空基地]]

Version vom 17. Mai 2013, 19:17 Uhr

Gray-Code
stetig ja
Hamming-Abstand 1

Der Gray-Code ist ein stetiger Code, bei dem sich benachbarte Codewörter nur in einer einzigen dualen Ziffer unterscheiden. Die Hamming-Distanz aller benachbarten Codewörter ist somit 1. Dadurch verringert sich der maximal mögliche Ablesefehler bei der Quantisierung aus einem Analogsignal auf einen Code. Er dient als Kodierungsverfahren zur robusten Übertragung digitaler Größen über analoge Signalwege. Der Code ist nach dem Physiker Frank Gray benannt, welcher 1953 das Patent auf dieses Verfahren erhielt.[1]

Meistens ist der Gray-Code als Binärcode ausgeführt, kann aber auch für mehrstufige Übertragungswege benutzt werden.

Generierung aus Binärcode

Die folgenden Punkte zeigen, wie man Schritt für Schritt aus einer binär codierten Dezimalzahl (Binärcode) eine Gray-codierte Binärzahl erhält:

  • X1: Dualzahl im Binärcode
  • X2: Rechts-Shift der Dualzahl um 1 Bit
  • X3: Modulo-2-Addition (XOR-Verknüpfung) von X1 und X2; dies ist die gewünschte Zahl im Graycode.

Das gleiche als Pseudocode:

  • Binärcode X1 → Graycode: X3 = (X1 XOR (X1/2))

Generierung als Gray-Zähler

Man kann auch direkt einen Gray-Code-Zähler 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]

Damit wird die Kombinatorik recht übersichtlich:

Q0 [n+1] = ! ( Q0 [n] ^ Qh [n] )

Q1 [n+1] = Q1 [n] ^ ( Q0 [n] & Qh[n] )

Q2 [n+1] = Q2 [n] ^ ( Q1 [n] & !Q0 [n] & Qh [n] )

Q3 [n+1] = Q3 [n] ^ (Q2 [n] & !Q1 [n] & !Q0 [n] & Qh [n] )

...

Qk-1 [n+1] = Qk-1 [n] ^ ( Qk-2 [n] & !Qk-3 [n] & ... & !Q1 [n] & !Q0 [n] & Qh [n] )

Qk [n+1] = Qk [n] ^ ( !Qk-1 [n] & !Qk-2 [n] & ... & !Q1 [n] & !Q0 [n] & Qh [n] )

^ := Exklusiv Oder / XOR / Antivalenz
! := Inverter / NOT / Negation
& := Und / AND / Konjunktion

Bedeutung

Ausgangspunkt für diesen Code ist das folgende Problem: Auf mehreren Adern einer elektrischen Datenleitung sollen Daten parallel übertragen werden, die sich stetig (also nicht sprunghaft) ändern, z. B. Signale eines Temperatursensors oder eines Drehwinkelgebers. Theoretisch ändern sich die Bits bei einem neuen Messwert auf jeder betroffenen Leitung exakt gleichzeitig, und zwar sowohl am Eingang der Leitung als auch am Ausgang. Tatsächlich aber ändern sich die Bits auf der Leitung nicht gleichzeitig. Das kann verschiedene Ursachen haben: Bauteilestreuung, Laufzeiten, Asymmetrien usw. Dadurch kommt es zu ungewollten Zwischenzuständen:

2-Bit-Gray-Code:
00
01
11
10
3-Bit-Gray-Code:
000
001
011
010
110
111
101
100
4-Bit-Gray-Code:
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
5-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:
000000
000001
000011
000010
000110
000111
000101
000100
001100
001101
001111
001110
001010
001011
001001
001000
011000
011001
011011
011010
011110
011111
011101
011100
010100
010101
010111
010110
010010
010011
010001
010000
110000
110001
110011
110010
110110
110111
110101
110100
111100
111101
111111
111110
111010
111011
111001
111000
101000
101001
101011
101010
101110
101111
101101
101100
100100
100101
100111
100110
100010
100011
100001
100000

Problem bei Dualcode-Signalen

Dualcodesignal

Während das theoretische Signal in der Reihenfolge

  • {0000}, {0001}, {0010}, {0011}, {0100}, {0101}, {0110}, {0111}, usw.

abgesendet wird, kommen am Ausgang kurzzeitig andere Signalzustände an:

  • {0000}, {0001}, {0000}, {0010}, {0011}, {0100}, {0101}, {0111}, {0110}, {0111}, usw.

Lösung mit Gray-Code

Graycodesignal

Um das zu vermeiden, werden mittels Gray-Code Steuersignalzustände in einer Sequenz abgesendet, bei denen sich immer nur ein Bit gleichzeitig ändert:

  • 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 die gleiche Sequenz wie am Eingang an.

Karnaugh-Veitch-Diagramm

Im Karnaugh-Veitch-Diagramm erkennt man den Graycode – es sind mehrere Sequenzen möglich – daran, dass Übergänge nur zwischen benachbarten Feldern vorkommen.

Reihenfolge Dualcode
¬X0 X0 X0 ¬X0
¬X2 0 1 3 2 ¬X3
X2 4 5 7 6 ¬X3
X2 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 ¬X3
X2 7 6 5 4 ¬X3
X2 8 9 10 11 X3
¬X2 15 14 13 12 X3
¬X1 ¬X1 X1 X1

Der Code eignet sich auch für zyklische Anwendungen wie der unten abgebildeten Scheibe, da sich auch beim Übergang von der höchsten Zahl auf die Null nur eine Stelle ändert.

Die Wertigkeit einer 1 an der Position im Gray-Code Zahlensystem ist (wobei n ab 1 zählt, also ... 31, 15, 7, 3, 1). Die einzelnen Einsen werden, im Gegensatz zum normalen Binärsystem, 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.

Hyperwürfel

Bild 1: Hyperwürfel
Bild 2: Hyperwürfel mit Koordinatensystem

Bild 1 zeigt den Hyperwürfel für 3 Variablen und Bild 2 den gleichen Würfel mit dazugehörigem Koordinatensystem. Die Knoten (Eckpunkt oder Kreise) am Hyper-Einheitswürfel entsprechen jeweils einer Zeile im Gray-Code. Die Übergänge (Nachbarschaft der Zeilen) sind durch die Kanten des Würfels 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 000
001 100 010 010 001 100
101 101 110 011 011 110
100 001 100 001 010 010
110 011 101 101 110 011
111 111 111 111 111 111
011 110 011 110 101 101
010 010 001 100 100 001

Auf jeder Kante ändert sich genau 1 Bit. Der Gray-Code hat so viel Nachbarschaften, wie der Würfel Kanten hat. Aus dem Hyperwürfel in Bild 1 können die möglichen Pfade auf 6 verschiedenen Wegen durchschritten werden. Somit ergeben sich 6 Möglichkeiten, um einen 3-Bit-Gray-Code zu erzeugen, der die Bedingungen des Gray-Codes erfüllt (Tabelle und Bild 3). Abgesehen davon ist der Gray-Code zyklisch und der Startpunkt könnte deshalb auch an einer anderen Zeile sein. Wegen seiner einfachen rekursiven Generierungsvorschrift wird meist der binäre reflektierte Gray-Code (binary-reflected Gray code) angegeben (Spalte „e“ – vorletzte Spalte in der Tabelle). Es gibt für eine bestimmte Bitlänge eine ganze Klasse von Graycodes. Es gibt für einen n-Bit-Gray-Code exakt so viel Varianten, wie es Hamiltonkreise auf einem n-dimensionalen Hyperwürfel gibt.

Bild 3: Die 6 Pfade zu dem Gray-Code in der Tabelle. Es handelt sich um einen Hamiltonkreis. Startpunkt: 000 (grüner Kreis jeweils links oben), Fortsetzung: grüne→blaue→rote→schwarze Linie, Endpunkt: am Startpunkt


geschlossener 3-Bit-Gray-Code
a) b) c) d) e) f)
000 000 010 010 000 100
001 100 110 011 001 110
101 101 100 001 011 010
100 001 101 101 010 011
110 011 111 111 110 111
111 111 011 110 111 101
011 110 001 100 101 001
010 010 000 000 100 000

Da der hier dargestellte Gray-Code zyklisch ist, wurde in dieser Tabelle der Code in den Spalten c), d) und f) um eine Stelle nach oben verschoben (im Vergleich zur Tabelle weiter oben), so dass jeweils die drei Nullen in der letzten Tabellenzeile stehen. So ist erkennbar, dass es sich bei dem Gray-Code in Spalte a) nur um eine spiegelbildliche Umkehrung der Spalte c) handelt. Genauso ist Spalte b) die Umkehrung von Spalte d), während Spalte e) die Umkehrung von Spalte f) ist. Es gibt drei ungerichtete Hamiltonkreise am dreidimensionalen Hyperwürfel, die hier lediglich in unterschiedlicher Richtung (gerichteter Hamiltonkreis) dargestellt wurden.
Zur besseren Veranschaulichung sind hier nochmals die Codetafeln für die 6 Varianten des 3-Bit-Graycodes dargestellt. Wobei die Variante e den binären reflektierten Gray-Code darstellt, der meist gemeint ist, wenn vom Gray-Code die Rede ist. Die 6 Versionen kann man auch durch Permutation der 3 Spalten der Codetafel erzeugen. Daraus ergibt sich, dass es bei n Bit n! Versionen gibt. Also für 3 Bit 3!= 6 Versionen des 3-Bit-Graycodes..

3 Bit: a
3 Bit: b
3 Bit: c
3 Bit: d
3 Bit: e
3 Bit: f


Bild 4
… usw. …

Den 4-Bit-Gray-Code kann man aus dem Hyperwürfel in Bild 4 ablesen. Für 4 Bit gibt es 4! = 24 verschiedene Gray-Codes.

Anwendungen

Schemazeichnung einer Scheibe mit Gray-Codierung. Die gelben Punkte stellen Lichtsensoren dar.
Ein Gray-Code Absolutwertgeber mit 13 bits

Eine Anwendungsmöglichkeit ist die Bestimmung der absoluten Position einer Scheibe oder Leiste, die mit schwarzen und weißen Balken markiert ist, die mit Lichtschranken oder anderen Sensoren abgetastet werden. Diese Position wird dann zur Winkel- oder Drehgeschwindigkeitsmessung verwendet.

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 für jeden Bildpunkt berechnet werden.

Eine andere Anwendung ist das asynchrone Einlesen von Daten. Beispielsweise wird der Gray-Code genutzt, um in Korrelatoren die Zählerstände fehlerfrei einzulesen. Selbst im ungünstigsten Fall, wenn während 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 und nur sehr wenig CPU-Zeit.

Weitere Anwendungsmöglichkeiten sind Windrichtungsmesser oder Wasserniveaumesser, Abbildung des Fahrkorbstands bei Aufzügen.

Der reflektierte Gray-Code hat eine enge Beziehung zur Lösung des Problems der Türme von Hanoi.

Beispiel

Die Dezimalzahl entspricht dem Gray-Code . Die Dekodierung in die Dezimaldarstellung folgt dann der Regel . Wenn mehrere Einsen in einer Gray-Code-Zahl vorkommen, werden diese voneinander subtrahiert: Der Gray-Code wird wie folgt dekodiert: .

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 für die Eins bekommt man, indem man sich überlegt, welche Dezimalzahl maximal in einer 3-Bit Zahl binär gespeichert werden kann. In 3 Bit Binärcode kann maximal die Zahl 7 (111) gespeichert werden. Nehmen wir jetzt eine größere Binärzahl, funktioniert das praktisch analog. Binärzahl: 11010 (1 an Position 5,4 und 2). 5 Bit Binärzahl: max. 31 4 Bit Binärzahl: max. 15 2 Bit Binärzahl: max. 3

Berechnung:

Einen Gray-Code zurückrechnen

  for I := NumBits - 1 downto 0 do        // jedes einzelne Bit vom letzten bis zum ersten
    Value := Value or (                   // das Ergebnis jedes errechneten Bits dem Gesamtergebnis hinzufügen
      (((1 shl (I + 1)) and Value) shr 1) // das Bit der Stelle zuvor im Ergebnis
      xor                                 // xor mit
      ((1 shl I) and GrayCode)            // der aktuellen Stelle des Codes
                       );

Geschichte

Noch bevor die Bezeichnung Gray-Code eingeführt wurde, gab es bereits mathematische Knobelspiele, in denen das Prinzip angewendet wurde. Erst später fand der Code die Beachtung von Ingenieuren. Bereits 1878 wendete Otto Schäffler, der in Wien Telegrafen und Telefone produzierte und verbesserte, den reflektierten Gray-Code an. Der Franzose Jean-Maurice-Émile Baudot verwendete Gray-Codes im Jahr 1887 für die elektrische Telegrafie. Er erhielt für seine Arbeit die Auszeichnung der französischen Ehrenlegion.

Namensgebend war allerdings Frank Gray, Forscher in den Bell Laboratories, der den Code erst 1946 für seine Zwecke wiederentdeckte. Unter dem Titel Pulse Code Communications wurde am 17. März 1953 unter der US-Patentnummer 2,632,058 ein Patent für eine Gray-kodierende Elektronenröhre erteilt.

Siehe auch

Einzelnachweise

  1. Patent US2632058: Pulse code communication. Veröffentlicht am 17. März 1953, Erfinder: Frank Gray.
Commons: Gray code – Sammlung von Bildern, Videos und Audiodateien