Multimediaexpo.cz je již 18 let na českém internetu !!
V tiskové zprávě k 18. narozeninám brzy najdete nové a zásadní informace.
Grayův kód
Z Multimediaexpo.cz
Verze z 12. 9. 2011, 10:33
Šablona:Grayův kód podle počtu bitů
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čů (hazardy relé). Dnes je Grayův kód používán pro podporu opravy chyb v digitální komunikaci jako je digitální pozemní 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 byl vyloučen výskyt chybné hodnoty při přechodu mezi dvěma sousedními polohami. Grayův kód využívají také odpovídače sekundárního radaru v letadlech.
Obsah |
Důvod vzniku
Použití tohoto kódu má význam v elektrických obvodech při čtení hodnoty nesynchronizovaných čítačů (sem spadá i výše zmiňované čidlo polohy). Obecně se problém zajištění "současnosti" v digitálních systémech řeší pomocí synchronizačního (nebo také hodinového) signálu, avšak v některých případech může být použití synchronizačního signálu nevýhodné.
Při zvýšení hodnoty klasického binárního čítače o jedničku se v mnoha případech mění současně více pozic čítače. Např. při přechodu tříbitového čístače z čísla 3 (binárně 011) na číslo 4 (binárně 100) se současně změní všechny tři pozice. V reálném systému není nikdy možné zaručit, aby se změnilo více logických hodnot naprosto současně, není možné zajistit ani jejich naprosto současné přečtení a vyhodnocení. To znamená, že v případě výše zmíněného tříbitového binárního čítače se může v nepříznivém případě při čtení "na hraně" stát, že přečteme zcela náhodnou hodnotu od 0 (000) do 7 (111).
Následující příklad znázorňuje graficky čtení 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
Další využití
Pro svou robustnost se běžne používá pro inkrementální (relativní) senzor polohy na principu jedné rotující clonky se dvěma úhlově posunutými optickými sensory. Používá se nejen u CNC strojů, ale i u obyčejné myši: Umožňuje totiž nejen načítání vzdálenosti, ale i směr pohybu.
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 převod do grayova kódu naprogramovat v jazyku C.
unsigned int gray_encode(unsigned int b) { return b ^ (b >> 1); }
Převod z grayova do binárního kódu vyjde v C-jazyku o něco složitěji:
unsigned int gray_decode( unsigned int g ) { unsigned int i, b; b = 0; for( i=0; i<8*sizeof(g); i++ ) { b <<= 1; b |= ((b>>1)&0x1) ^ (g>>(8*sizeof(g)-1)); g <<= 1; } return b; }
Převod do grayova kódu v Pascalu:
function GrayEncode(b: Longint): Longint; begin GrayEncode := b xor (b shr 1); end;
Související články
Náklady na energie a provoz naší encyklopedie prudce vzrostly. Potřebujeme vaši podporu... Kolik ?? To je na Vás. Náš FIO účet — 2500575897 / 2010 |
---|
Informace o článku.
Článek je převzat z Wikipedie, otevřené encyklopedie, do které přispívají dobrovolníci z celého světa. |