Grayův kód

Z Wikipedie, otevřené encyklopedie

Dvoubitový Grayův kód
00
01
11
10
Tříbitový Grayův kód
000
001
011
010
110
111
101
100
Čtyřbitový Grayův kód
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000

Zrcadlový binární kód, známý také jako Grayův kód podle Franka Graye, je binární číselná soustava, ve které se každá dvě po sobě jdoucí čísla liší v jediné číslici.

Zrcadlový binární kód byl původně navržen pro zabránění rušivého výstupu z elektromechanických přepínačů (relé). Dnes je Grayův kód používán pro podporu opravy chyb v digitální komunikaci jako je digitální pozemská televize a některé systémy kabelové televize. Také některé snímače polohy (nebo natočení) udávají polohu v Grayově kódu, aby se eliminoval výskyt naprosto chybné hodnoty při přechodu mezi dvěma sousedními polohami.

[editovat] Důvod vzniku

Použití tohoto kódu má význam v elektrických obvodech, kdy se při změně z jedné hodnoty na sousední může na krátký časový okamžik objevit hodnota výrazně odlišná. (Například díky rozdílné rychlosti různých spínacích prvků.) Viz následující příklad bez Grayova kódu.

Teoretický a skutečný binární signál

Ve výše uvedené ukázce by měl obvod plynule přecházet do následujicích stavů:

0000, 0001, 0010, 0011, 0100, 0101, 0110, ...

Díky různým zpožděním se v časech t1 až t2 a t3 až t4 dostane obvod do vyznačených stavů:

0000, 0001, (0000), 0010, 0011, 0100, 0101, (0111), 0110, ...

Je tak narušen plynulý průběh hodnoty, což může v praxi způsobovat značné nepříjemnosti. Právě tyto přechodové jevy jsou eliminovány použitím Grayova kódu, jak se lze přesvědčit na následujícím obrázku.

Teoretický a skutečný signál Grayova kódu

[editovat] Převod na binární kód a naopak

Převod z Grayova kódu na klasický binární kód lze snadno realizovat pomocí logických členů XOR zapojených následovně.

 g0 ->--------------[     ]
                    [ XOR ]--> b0
                  +-[     ]
 g1 ->---[     ]  |
         [ XOR ]--+----------> b1
       +-[     ]
       |
 g2 ->-+---------------------> b2

Pro převod opačným směrem, tedy z binárního kódu na Grayův, lze použít následující zapojení.

 b0 ->---[     ]
         [ XOR ]--> g0
       +-[     ]
       |
 b1 ->-+-[     ]
         [ XOR ]--> g1
       +-[     ]
       |
 b2 ->-+----------> g2

Velmi snadno lze tento převod naprogramovat v jayzku C.

unsigned int grayencode(unsigned int b) {
  return b ^ (b >> 1);
}

Analogicky v Pascalu:

function GrayEncode(b: Longint): Longint;
begin
 GrayEncode := b xor (b shr 1);
end;