Codice Gray

codice binario a lunghezza fissa

Il codice Gray è un codice numerico binario.

Questo standard prevede che una qualunque coppia di bit adiacenti (appartenenti ad una sequenza di n bit rappresentanti un valore) differisca al suo interno solamente di un bit.

Matrice di commutazione in un encoder rotativo Gray a tre bit

Diversi dispositivi elettronici di acquisizione di posizione, gli encoder di posizione lineare o rotativa (per esempio i regolatori di volume digitali negli impianti Hi-Fi), codificano il valore digitale della posizione chiudendo o aprendo una serie di contatti elettrici o barriere ottiche. Il problema è che a causa delle tolleranze meccaniche è improbabile che due o più bit di una cifra possano commutare esattamente nello stesso istante. Viene a crearsi un periodo intermedio in cui è codificato un valore indesiderato, che può generare confusione nella successiva elaborazione.

Per questo scopo fu progettato e brevettato nel 1953 dal ricercatore Frank Gray dei laboratori Bell un apposito codice, il codice Gray.

Negli encoder che utilizzano questo codice, il passaggio da un valore al successivo o precedente comporta la commutazione di un unico circuito, eliminando ogni possibile valore equivoco.

Costruzione

 

Un codice Gray ad n-bit si costruisce attraverso un algoritmo ricorsivo, abbastanza semplice. Si parte dal primo bit, quello meno significativo, si mette uno 0 sopra ed un 1 sotto.

Al passo successivo, si mette una riga ad di sotto dell'1, come se fosse uno specchio, e si ricopiano le cifre invertendo l'ordine, con la riga che funge da specchio, appunto. Si termina inserendo uno 0 davanti alla sequenza costruita se questa è sopra la riga, altrimenti si aggiunge un 1. Ora siamo arrivati ad un codice con 2 bit.

Iterando i passi precedenti, si mette la riga, si specchia la sequenza e si aggiunge il bit più significativo, si costruiscono codici ad n-bit.

Esempi

Codice Gray a 2 bit
00
01
11
10
Codice Gray a 3 bit
000
001
011
010
110
111
101
100
Codice Gray a 4 bit
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000


Voci correlate