Mudanças entre as edições de "Código Gray"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
(15 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
==Conversão de Binário para Gray==
+
O código Gray é uma codificação na qual números adjacentes diferem de apenas um único bit. Desta forma ao fazer uma contagem em Gray, a cada incremento apenas um bit é modificado.  Isso difere do que ocorre na contagem em binário, onde vários bits podem alterar com o incremento de um.  
Conversão de um número binário de <math> N </math> bits em um número Gray pode ser feita considerando o um número binário inicial
 
<math>b_{N-1} | b_{N-2} | ... | b_2 | b_1 | b_0 </math>, o número Gray correspondente <math>g_{N-1} | g_{N-2} | ... | g_2 | g_1 | g_0 </math> pode ser obtido através de:
 
 
 
para <math>\  i = N-1,          g_{N-1} = b_{N-1} </math>
 
 
 
para <math>  i = [N-2, ..., 0],  g_{i} = b_{i+1} \oplus b_{i} </math>
 
 
 
Por exemplo para N = 4:
 
:<math>\  g_{3} = b_{3} </math>
 
:<math>  g_{2} = b_{3} \oplus b_{2} </math>
 
:<math>  g_{1} = b_{2} \oplus b_{1} </math>
 
:<math>  g_{0} = b_{1} \oplus b_{0} </math>
 
  
==Conversão de Gray para Binário==
+
Por exemplo:
Conversão de um número Gray de <math> N </math> bits em um número binário pode ser feita considerando o um número Gray inicial
+
*Em código binário sequencial o número adjacente a 0111 (7) é o 1000 (8), '''mudança em 4 bits'''.
<math>g_{N-1} | g_{N-2} | ... | g_2 | g_1 | g_0 </math>, o número binário correspondente <math>b_{N-1} | b_{N-2} | ... | b_2 | b_1 | b_0 </math> pode ser obtido através de:
+
*Em código Gray seria: o número adjacente a 0100 (7) é o 1100 (8), '''mudança de apenas 1 bit'''.  
  
para <math>\  i = N-1,          b_{N-1} = g_{N-1} </math>
+
Entre as aplicações do código Gray temos:
 +
*sistemas de controle de posição de eixos rotativos em máquinas
 +
*minimização de circuitos (Mapas de Karnaugh)
 +
*minimização e até correção de erros na transmissão digital (ex: QAM)
  
para <math>  i = [N-2, ..., 0],  b_{i} = g_{i+1} \oplus b_{i+1} </math>
 
  
Por exemplo para N = 4:
+
==Tabela de códigos de 0 a 15==
:<math>\  b_{3} = g_{3} </math>
+
{| class="wikitable sortable" style="text-align:center; background-color:#F8F9FA; color:#202122;"
:<math>  b_{2} = g_{3} \oplus b_{3} </math>
+
|- style="font-weight:bold; background-color:#EAECF0;"
:<math>  b_{1} = g_{2} \oplus b_{2} </math>
+
! style="vertical-align:middle;" | Octal
:<math>  b_{0} = g_{1} \oplus b_{1} </math>
+
! style="vertical-align:middle;" | Hexadecimal
 
+
! Decimal
==Tabela de conversão de 4 bits==
+
! style="vertical-align:middle;" | Binário
{|class="prettytable"
+
! style="vertical-align:middle;" | Gray
!Código decimal
+
! style="vertical-align:middle;" | One Hot
!Código Binário
 
!Código Gray
 
 
|-
 
|-
|0||0000||0000
+
| style="vertical-align:middle;" | 00
 +
| style="vertical-align:middle;" | 0
 +
| 0
 +
| style="vertical-align:middle;" | 0000
 +
| style="vertical-align:middle;" | 0000
 +
| style="vertical-align:middle;" | 0000.0000.0000.0001
 
|-
 
|-
|1||0001||0001
+
| style="vertical-align:middle;" | 01
 +
| style="vertical-align:middle;" | 1
 +
| 1
 +
| style="vertical-align:middle;" | 0001
 +
| style="vertical-align:middle;" | 0001
 +
| style="vertical-align:middle;" | 0000.0000.0000.0010
 
|-
 
|-
|2||0010||0011
+
| style="vertical-align:middle;" | 02
 +
| style="vertical-align:middle;" | 2
 +
| 2
 +
| style="vertical-align:middle;" | 0010
 +
| style="vertical-align:middle;" | 0011
 +
| style="vertical-align:middle;" | 0000.0000.0000.0100
 
|-
 
|-
|3||0011||0010
+
| style="vertical-align:middle;" | 03
 +
| style="vertical-align:middle;" | 3
 +
| 3
 +
| style="vertical-align:middle;" | 0011
 +
| style="vertical-align:middle;" | 0010
 +
| style="vertical-align:middle;" | 0000.0000.0000.1000
 
|-
 
|-
|4||0100||0110
+
| style="vertical-align:middle;" | 04
 +
| style="vertical-align:middle;" | 4
 +
| 4
 +
| style="vertical-align:middle;" | 0100
 +
| style="vertical-align:middle;" | 0110
 +
| style="vertical-align:middle;" | 0000.0000.0001.0000
 
|-
 
|-
|5||0101||0111
+
| style="vertical-align:middle;" | 05
 +
| style="vertical-align:middle;" | 5
 +
| 5
 +
| style="vertical-align:middle;" | 0101
 +
| style="vertical-align:middle;" | 0111
 +
| style="vertical-align:middle;" | 0000.0000.0010.0000
 
|-
 
|-
|6||0110||0101
+
| style="vertical-align:middle;" | 06
 +
| style="vertical-align:middle;" | 6
 +
| 6
 +
| style="vertical-align:middle;" | 0110
 +
| style="vertical-align:middle;" | 0101
 +
| style="vertical-align:middle;" | 0000.0000.0100.0000
 
|-
 
|-
|7||0111||0100
+
| style="vertical-align:middle;" | 07
 +
| style="vertical-align:middle;" | 7
 +
| 7
 +
| style="vertical-align:middle;" | 0111
 +
| style="vertical-align:middle;" | 0100
 +
| style="vertical-align:middle;" | 0000.0000.1000.0000
 
|-
 
|-
|8||1000||1100
+
| style="vertical-align:middle;" | 10
 +
| style="vertical-align:middle;" | 8
 +
| 8
 +
| style="vertical-align:middle;" | 1000
 +
| style="vertical-align:middle;" | 1100
 +
| style="vertical-align:middle;" | 0000.0001.0000.0000
 
|-
 
|-
|9||1001||1101
+
| style="vertical-align:middle;" | 11
 +
| style="vertical-align:middle;" | 9
 +
| 9
 +
| style="vertical-align:middle;" | 1001
 +
| style="vertical-align:middle;" | 1101
 +
| style="vertical-align:middle;" | 0000.0010.0000.0000
 
|-
 
|-
|10||1010||1111
+
| style="vertical-align:middle;" | 12
 +
| style="vertical-align:middle;" | A
 +
| 10
 +
| style="vertical-align:middle;" | 1010
 +
| style="vertical-align:middle;" | 1111
 +
| style="vertical-align:middle;" | 0000.0100.0000.0000
 
|-
 
|-
|11||1011||1110
+
| style="vertical-align:middle;" | 13
 +
| style="vertical-align:middle;" | B
 +
| 11
 +
| style="vertical-align:middle;" | 1011
 +
| style="vertical-align:middle;" | 1110
 +
| style="vertical-align:middle;" | 0000.1000.0000.0000
 
|-
 
|-
|12||1100||1010
+
| style="vertical-align:middle;" | 14
 +
| style="vertical-align:middle;" | C
 +
| 12
 +
| style="vertical-align:middle;" | 1100
 +
| style="vertical-align:middle;" | 1010
 +
| style="vertical-align:middle;" | 0001.0000.0000.0000
 
|-
 
|-
|13||1101||1011
+
| style="vertical-align:middle;" | 15
 +
| style="vertical-align:middle;" | D
 +
| 13
 +
| style="vertical-align:middle;" | 1101
 +
| style="vertical-align:middle;" | 1011
 +
| style="vertical-align:middle;" | 0010.0000.0000.0000
 
|-
 
|-
|14||1110||1001
+
| style="vertical-align:middle;" | 16
 +
| style="vertical-align:middle;" | E
 +
| 14
 +
| style="vertical-align:middle;" | 1110
 +
| style="vertical-align:middle;" | 1001
 +
| style="vertical-align:middle;" | 0100.0000.0000.0000
 
|-
 
|-
|15||1111||1000
+
| style="vertical-align:middle;" | 17
 +
| style="vertical-align:middle;" | F
 +
| 15
 +
| style="vertical-align:middle;" | 1111
 +
| style="vertical-align:middle;" | 1000
 +
| style="vertical-align:middle;" | 1000.0000.0000.0000
 
|}
 
|}
 +
 +
==Conversão de Binário para Gray==
 +
Conversão de um número binário de <math> N </math> bits em um número Gray pode ser feita considerando o um número binário inicial
 +
<math>b_{N-1} | b_{N-2} | ... | b_2 | b_1 | b_0 </math>, o número Gray correspondente <math>g_{N-1} | g_{N-2} | ... | g_2 | g_1 | g_0 </math> pode ser obtido através de:
 +
 +
para <math>\  i = N-1,          g_{N-1} = b_{N-1} </math>
 +
 +
para <math>  i = [N-2, ..., 0],  g_{i} = b_{i+1} \oplus b_{i} </math>
 +
 +
Por exemplo para N = 4:
 +
:<math>  g_{3} = b_{3} \oplus 0 </math>
 +
:<math>  g_{2} = b_{2} \oplus b_{3} </math>
 +
:<math>  g_{1} = b_{1} \oplus b_{2} </math>
 +
:<math>  g_{0} = b_{0} \oplus b_{1} </math>
 +
 +
==Conversão de Gray para Binário==
 +
Conversão de um número Gray de <math> N </math> bits em um número binário pode ser feita considerando o um número Gray inicial
 +
<math>g_{N-1} | g_{N-2} | ... | g_2 | g_1 | g_0 </math>, o número binário correspondente <math>b_{N-1} | b_{N-2} | ... | b_2 | b_1 | b_0 </math> pode ser obtido através de:
 +
 +
para <math>\  i = N-1,          b_{N-1} = g_{N-1} </math>
 +
 +
para <math>  i = [N-2, ..., 0],  b_{i} = g_{i} \oplus b_{i+1} </math>
 +
 +
Por exemplo para N = 4:
 +
:<math>  b_{3} = g_{3} \oplus 0 </math>
 +
:<math>  b_{2} = g_{2} \oplus b_{3} </math>
 +
:<math>  b_{1} = g_{1} \oplus b_{2} </math>
 +
:<math>  b_{0} = g_{0} \oplus b_{1} </math>
 +
 +
Ou expandindo:
 +
:<math>  b_{3} = g_{3} \oplus 0 </math>
 +
:<math>  b_{2} = g_{2} \oplus g_{3}  </math>
 +
:<math>  b_{1} = g_{1} \oplus g_{2} \oplus g_{3} </math>
 +
:<math>  b_{0} = g_{0} \oplus g_{1} \oplus g_{2} \oplus g_{3} </math>
 +
 +
==Curiosidade==
 +
*[https://patentimages.storage.googleapis.com/a3/d7/f2/0343f5f2c0cf50/US2632058.pdf PULSE CODE COMMUNICATION Patente US2632058] Depositante: Bell Labs,  Inventor: Frank Gray.  Essa patente descreve o código Gray.
 +
*[https://en.wikipedia.org/wiki/Gray_code História e usos do código Gray] [https://en-m-wikipedia-org.translate.goog/wiki/Gray_code?_x_tr_sl=auto&_x_tr_tl=pt&_x_tr_hl=pt-BR&_x_tr_pto=wapp]

Edição das 13h48min de 3 de maio de 2023

O código Gray é uma codificação na qual números adjacentes diferem de apenas um único bit. Desta forma ao fazer uma contagem em Gray, a cada incremento apenas um bit é modificado. Isso difere do que ocorre na contagem em binário, onde vários bits podem alterar com o incremento de um.

Por exemplo:

  • Em código binário sequencial o número adjacente a 0111 (7) é o 1000 (8), mudança em 4 bits.
  • Em código Gray seria: o número adjacente a 0100 (7) é o 1100 (8), mudança de apenas 1 bit.

Entre as aplicações do código Gray temos:

  • sistemas de controle de posição de eixos rotativos em máquinas
  • minimização de circuitos (Mapas de Karnaugh)
  • minimização e até correção de erros na transmissão digital (ex: QAM)


Tabela de códigos de 0 a 15

Octal Hexadecimal Decimal Binário Gray One Hot
00 0 0 0000 0000 0000.0000.0000.0001
01 1 1 0001 0001 0000.0000.0000.0010
02 2 2 0010 0011 0000.0000.0000.0100
03 3 3 0011 0010 0000.0000.0000.1000
04 4 4 0100 0110 0000.0000.0001.0000
05 5 5 0101 0111 0000.0000.0010.0000
06 6 6 0110 0101 0000.0000.0100.0000
07 7 7 0111 0100 0000.0000.1000.0000
10 8 8 1000 1100 0000.0001.0000.0000
11 9 9 1001 1101 0000.0010.0000.0000
12 A 10 1010 1111 0000.0100.0000.0000
13 B 11 1011 1110 0000.1000.0000.0000
14 C 12 1100 1010 0001.0000.0000.0000
15 D 13 1101 1011 0010.0000.0000.0000
16 E 14 1110 1001 0100.0000.0000.0000
17 F 15 1111 1000 1000.0000.0000.0000

Conversão de Binário para Gray

Conversão de um número binário de bits em um número Gray pode ser feita considerando o um número binário inicial , o número Gray correspondente pode ser obtido através de:

para

para

Por exemplo para N = 4:

Conversão de Gray para Binário

Conversão de um número Gray de bits em um número binário pode ser feita considerando o um número Gray inicial , o número binário correspondente pode ser obtido através de:

para

para

Por exemplo para N = 4:

Ou expandindo:

Curiosidade