Código Gray: Diferenzas entre revisións

Contido eliminado Contido engadido
m centrado de táboa
Liña 1:
{{enuso}}
O '''código binario reflectido''' ou '''código Gray''', que recibe o seu nome en honra ao investigador Frank Gray, é un [[Código binario|sistema de numeración binario]] no que dous números consecutivos difiren só nun dos seus [[Bit|díxitos]].
 
Liña 49 ⟶ 50:
O código binario reflectido foi aplicado para quebracabezas matemáticos antes de empregarse na enxeñaría. O enxeñeiro francés Émile Baudot deulle unha aplicación ao código de Gray en 1878 en [[telegrafía]], traballo polo cal foi condecorado coa Lexión de Honra.
 
O código Gray é atribuído nalgunhas ocasións, de forma incorrecta, a Elisha Gray (en ''Principles of Pulse Code Modulation'', K. W. Cattermole, por exemplo).<ref name="knuth">Knuth, Donald E. "Generating all ''n''-tuples." ''The Art of Computer Programming, VolumenVolume 4A: Enumeration and Backtracking'', pre-fascículo 2a, 15 de octubreoutubro de 2004. {{Wayback|url=http://www-cs-faculty.stanford.edu/~knuth/fasc2a.ps.gz|date=20061209075457}}</ref><ref>K. W. Cattermole, ''Principles of Pulse Code Modulation'', American Elsevier Publishing Company, Inc., 1969, New York NY, ISBN 0-444-19747-8.</ref>
 
Ata a primeira metade dos anos 1940 os circuítos lóxicos dixitais realizábanse con válvulas sen carga e dispositivos electromecánicos. Os contadores precisaban potencias moi elevadas na entrada e xeraban picos de [[ruído]] cando varios bits cambiaban simultaneamente. Tendo en conta isto, Frank Gray inventou un método para converter sinais analóxicos a grupos de código binario reflectido empregando un aparello deseñado con válvulas sen carga, co cal garantiu que en calquera transición variaría tan só un bit.
Liña 60 ⟶ 61:
 
== Motivación ==
As computadoras antigas indicaban posicións abrindo e pechando interruptores. Empregando tres interruptores como entradas usando [[Código binario|Basebase 2]], a posición <math>100</math> estaría xusto despois da posición <math>011</math>.
 
O problema co código binario en [[Código binario|base 2]] é que con interruptores mecánicos, é realmente difícil que todos os interruptores cambien ao mesmo tempo. Na transición dos dous estados mostrados arriba, tres interruptores cambian de sitio. No lapso no que os interruptores están a cambiar, pódense presentar saídas de información falsas. Se as saídas mencionadas alimentan un circuíto secuencial, probablemente o sistema presentará un erro na entrada de datos.
 
O código Gray resolve este problema cambiando só un díxito de cada vez, modificando un único interruptor:
{| class="wikitable" style="margin:0 auto"
|-
! Decimal !! Gray !! Binario
Liña 167 ⟶ 168:
Para converter un número binario (en [[Código binario|base 2]]) a código Gray, simplemente aplícaselle unha operación XOR co mesmo número desprazado un bit á dereita, sen levar unha.
 
Exemplo: 1010 ([[Código binario|Basebase 2]]) a Gray:
<pre>
1010
Liña 175 ⟶ 176:
</pre>
 
Exemplo: 0111 ([[Código binario|Basebase 2]]) a Gray:
<pre>
0111
Liña 183 ⟶ 184:
</pre>
 
Exemplo: 110101010001 ([[Código binario|Basebase 2]]) a Gray:
<pre>
110101010001
Liña 191 ⟶ 192:
</pre>
 
=== Gray a [[Código binario|Basebase 2]] ===
Definimos un vector <math>g</math> contendo os díxitos en Gray e outro vector <math>b</math> destinado a conter os díxitos en [[Código binario|Basebase 2]].
 
* <math>g_0</math> é o díxito que se atopa no extremo esquerdo da representación en código Gray.
 
* <math>b_0</math> é o díxito de maior peso e que se atopa no extremo esquerdo na representación en [[Código binario|Basebase 2.]]
 
Logo resulta que:
<math> b_{ n+1 } = { g_{n+1} } \oplus { b_n } </math> coa excepción de que <math> b_0 = g_0 </math>, que se pode resumir como:
 
O díxito máis á esquerda en [[Código binario|Basebase 2]] é igual ao díxito de máis á esquerda en código de Gray.
 
'''Exemplo'''