Autor Tema: gray code, ayuda con planteamiento

0 Usuarios y 1 Visitante están viendo este tema.

04 Noviembre, 2018, 10:23 pm
Leído 1202 veces

luisitoc

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 2
  • Karma: +0/-0
  • Sexo: Masculino
Hola gente!

Llevo un par de semanas implementando en lenguaje C lo que se dice en este documento:

https://github.com/gbotev1/single-track-gray-codes

Que es para generar encoders que utilizan gray-code en una sola pista.

No tengo formacion especifica en matematicas, incluso en programacion soy autodidacta. Aun asi he conseguido implementar hasta el teorema 5.1 (pag. 15), donde ya me pierdo.

Me gustaria que alguien pudiera echar un vistazo al documento, y me pudiera explicar en lenguaje plano dicha definicion, ya que no consigo casar ninguna columna de una secuencia gray-code con dicha definicion.

Saludos, y gracias.


05 Noviembre, 2018, 10:25 am
Respuesta #1

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,907
  • País: es
  • Karma: +0/-0
Hola

 Bienvenido al foro.

 Recuerda leer y seguir  las reglas del mismo así como el tutorial del LaTeX para escribir las fórmulas matemáticas correctamente.

Llevo un par de semanas implementando en lenguaje C lo que se dice en este documento:

https://github.com/gbotev1/single-track-gray-codes

Que es para generar encoders que utilizan gray-code en una sola pista.

No tengo formacion especifica en matematicas, incluso en programacion soy autodidacta. Aun asi he conseguido implementar hasta el teorema 5.1 (pag. 15), donde ya me pierdo.

Me gustaria que alguien pudiera echar un vistazo al documento, y me pudiera explicar en lenguaje plano dicha definicion, ya que no consigo casar ninguna columna de una secuencia gray-code con dicha definicion.

Una Run-code \( [a_0,a_1,\ldots,a_k]_R \) es una secuencia formada por \( a_0 \) ceros, \( a_1 \) unos, \( a_2 \) ceros, \( a_3 \) unos y así sucesivamente.

Por ejemplo:

\( [2,3,1]_R=001110 \)
\( [0,2,3,1]_R=110001 \)
\( [4,1]_R=\color{red}0\color{black}0001 \)

En el Teorema 5.1 para cada \( n\geq 2 \) y cada \( j \) con \( 0\leq j\leq n-1 \) considera el Run-code:

\( [2^j,\underbrace{2^{j+1},\ldots,2^{j+1}}_{2^{n-j-1}-1\textsf {veces}},2^j]_R \)

Por ejemplo para \( n=4 \):

- Si \( j=0 \), el término central se repite \( 2^{4-0-1}-1=2^3-1=7 \) veces. \( 2^j=2^0=1 \) y \( 2^{j+1}=2^{0+1}=2 \). Queda:

\( [1,2,2,2,2,2,2,2,1]_R=0110011001100110 \)

- Si \( j=1 \), el término central se repite \( 2^{4-1-1}-1=2^2-1=3 \) veces. \( 2^j=2^1=2 \) y \( 2^{j+1}=2^{1+1}=4 \). Queda:

\( [2,4,4,4,2]_R=0011110000111100 \)

- Si \( j=2 \), el término central se repite \( 2^{4-2-1}-1=2^1-1=1 \) vez. \( 2^j=2^2=4 \) y \( 2^{j+1}=2^{2+1}=8 \). Queda:

\( [4,8,4]_R=0000111111110000 \)

- Si \( j=3 \), el término central se repite \( 2^{4-3-1}-1=2^0-1=0 \) veces (no aparece). \( 2^j=2^3=8 \). Queda:

\( [8,8]_R=0000000011111111 \)

 ¿Te aclara algo esto?.

Saludos.

CORREGIDO.

05 Noviembre, 2018, 08:46 pm
Respuesta #2

luisitoc

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 2
  • Karma: +0/-0
  • Sexo: Masculino
Hola Luis, muchisimas gracias, claro que me ayuda!

Solo vi un fallo:

[texx][4,1]_R=0001[/texx]

Deberia ser:

[texx][4,1]_R=00001[/texx]

Pues a ver como hago, todavia no entiendo el documento del todo, ni como es el flujo de las operaciones en la practica.

Hasta ahora, entiendo que uno genera una secuencia BRGC del numero de bits (sensores) deseado, por ejemplo 3:

Código: [Seleccionar]
-------------------
bit-length (n) = 3
-------------------
Gray code   Decimal
---------   -------
      001   1
      011   3
      010   2
      110   6
      111   7
      101   5

En esta prueba he quitado el primer y ultimo elemento, (000 y 100 respectivamente), ya que por lo que he leido, especialmente 000 se utiliza como codigo de error (los sensores no han leido nada, el disco quedo posicionado entre dos estados y/o los sensores estan mal alineados). De todas formas, la secuencia sigue siendo ciclica, asi que no deberia afectar al resultado.

Luego se separa la secuencia por columnas, y se generan los run-sequences para cada una:

Código: [Seleccionar]
column #        run sequence    extd(rs)                proof
------------    ------------    --------                -----
00: 110011      [0,2,2,2]R      [0,2,2,4,2,2]R          110011110011
01: 011110      [1,4,1]R        [1,4,2,4,1]R            011110011110
02: 000111      [3,3]R          [3,6,3]R                000111111000

Luego ya entran en juego los PRSD Y GPRSD, que imagino que es el equivalente de solapar las columnas como el chico explica en la pagina 8, de forma que se ahorra espacio con aquellos estados que son identicos al final de una columa y al principio de la siguiente, llegando incluso a invertir alguna para hacerla coincidir.

Con ello se consigue poder disminuir el diametro del encoder, a expensas de recolocar los sensores de forma irregular o no lineal (p. ej.: para n=3, 360/3 = 120 grados entre sensores).

Aunque lo que mas me gusta de este metodo es que permite una resolucion mas rapida de la posicion absoluta, bien con operaciones bitwise del micro-procesador, o como dice el chico, utilizando chips de puestas logicas externa.

En cualquier caso dudo que pueda terminarlo sin ayuda, pero seguire batallando y si me surge otra duda infranqueable volvere a preguntar en este hilo.

Muchas gracias por tu tiempo y tu atencion Luis!.

Saludos,


05 Noviembre, 2018, 10:17 pm
Respuesta #3

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,907
  • País: es
  • Karma: +0/-0
Hola

Hola Luis, muchisimas gracias, claro que me ayuda!

Solo vi un fallo:

[texx][4,1]_R=0001[/texx]

Deberia ser:

[texx][4,1]_R=00001[/texx]

Si, me comí un cero. Gracias.

Si tienes más dudas pregunta.

Saludos.