Code Gray

 

En automatique, lorsqu'on procède à un comptage 0 , 1 , 2 , 3 ,4 , ... cela se traduit en binaire naturel
Par exemple sur 4bits par 0000, 0001, 0010, 0011, 0100, ...
Problême : lors du passage de 0001 à 0010 , 2 bits doivent changer d'état.
On pourrait alors avoir 0000, 0001, 0011, 0010 ou 0000, 0001, 0000, 0010. C'est-à-dire 0 , 1, 3, 2 ou 0 , 1, 0, 2
De même pour le passage de 0011 à 0100, etc.
Le codage Gray, appelé encore binaire réfléchi donne une succession de nombres binaires qui ne différent que par 1 bit.

L'algorithme est Ng = ( N ⊕ 2N ) / 2

Voici la traduction simple en PHP :

<?
function gray( $x )
{
         if ( ($x == 0) || ($x == 1) ) return $x;
         return ( ( $x ^ ( $x << 1) ) >> 1);
}
?>
<TABLE><tr><td>N</td><td>gray</td></tr>
<?
// les 16 premiers nombres
for ( $i = 0; $i < 16; $i++ )
{
         $x = sprintf("%04b", gray($i) ); // sur 4 bits, complété par des 0 à gauche
         echo "<tr><td>".$i."</td><td>".$x."</td></tr>";
}
?>
</TABLE>

Les résultats

DécimalCode Gray
00000
10001
20011
30010
40110
50111
60101
70100
81100
91101
101111
111110
121010
131011
141001
151000

 


Page chargée en 0.015 sec.

Dernière Modification : Lun 13 Janvier 2025 14:22
Copyright © 1999-2025 Jean-Paul Molina Tous droits réservés.

 

to Google