Bitácora · FEC · Clase práctica

El registro ciclo a ciclo

Ejercicios 4 y 5 de la clase práctica de la Unidad 5 · el codificador del (15,5) bit por bit, el síndrome como resto, y el ciclo de más que gira la palabra

Los dos ejercicios trabajan sobre el código cíclico (15,5) de la práctica, el de polinomio generador

g(X)=1+X+X2+X4+X5+X8+X10

con polinomio de paridad h(X)=1+X+X3+X5, distancia mínima 7 y t=3. Los dos usan el mismo circuito, un registro de desplazamiento de diez etapas que divide por g(X). En el 4 codifica. En el 5 calcula el síndrome, y después sigue andando sin entrada: cada ciclo de más es el síndrome de la palabra girada una posición. Los vectores van con la posición 0 a la izquierda.

01 · Ejercicio 4: la traza del codificador

El enunciado, textual: «Para el código (15,5), con el registro de n−k=10 etapas y el mensaje u=10110,

  1. Indicar en qué orden ingresan los bits del mensaje al registro.
  2. Completar el contenido del registro ciclo a ciclo, partiendo del estado nulo.
  3. Verificar que el contenido final coincide con el resto de dividir X10u(X) por g(X).
  4. Escribir la palabra de código completa.»

Antes de resolver: qué se entrega. Cuatro cosas de forma distinta. Un orden: los cinco bits del mensaje en fila. Una tabla de seis renglones, el estado inicial y uno por ciclo, con diez bits cada uno. Una división de polinomios cuyo resto tiene que dar el último renglón. Y un vector de quince bits, la palabra de código.

Lo primero es leer bien el mensaje. El vector u=10110 tiene la posición 0 a la izquierda: u0=1, u1=0, u2=1, u3=1, u4=0, y entonces

u(X)=1+X2+X3

02 · Las herramientas del ejercicio 4

Codificar en forma sistemática es una sola división. Se corre el mensaje n−k lugares hacia los grados altos y se lo divide por g(X):

X10u(X)=a(X)g(X)+b(X),b(X)=Rg(X){X10u(X)}

Como en GF(2) sumar y restar son lo mismo, b(X)+X10u(X)=a(X)g(X): es un múltiplo de g(X) de grado menor que 15, y las palabras del código son exactamente esos múltiplos. Ésa es la palabra:

v(X)=b0+b1X+⋯+b9X9⏟paridad+u0X10+⋯+u4X14⏟mensaje

con la forma sistemática del apunte: la paridad en las diez primeras posiciones y el mensaje intacto en las cinco últimas.

El circuito hace esa división bit por bit. Tiene diez etapas, b0,…,b9, y en cada ciclo de reloj entra un bit ui del mensaje. La realimentación es la entrada más la última etapa, y vuelve a cada etapa cuyo coeficiente en g(X) no es cero:

f=ui+b9,b0′=f,bj′=bj−1+gjf(1≤j≤9)

Para este g(X) las tomas están en b0, b1, b2, b4, b5 y b8. Cuando f=1, el registro desplazado recibe g(X) sin su X10, o sea 1110110010; cuando f=0, sólo se desplaza.

03 · El razonamiento: qué guarda el registro

Primero pensar: por qué entra primero u4. La división larga arranca por el término de mayor grado, y el registro es una división larga. Hay una forma más precisa de decirlo: después de cada ciclo, el registro guarda el resto de X10 por lo que entró hasta ahí, leído con el primer bit en el grado más alto. Si hasta ahora entró p(X) y entra el bit c, lo entrado pasa a ser Xp(X)+c. El registro hace exactamente eso. Desplazar es multiplicar por X. El bit que se cae por la punta vale b9X10, la entrada aporta cX10, y su suma es fX10. Como X10≡1+X+X2+X4+X5+X8 módulo g(X), reducirlo es sumar 1110110010 cuando f=1.

Por eso la entrada se suma en el punto de realimentación y no en b0: ahí ya viene multiplicada por X10. Y por eso el orden importa: el último bit en entrar queda con grado 0, así que el mensaje tiene que entrar desde u4 hasta u0, es decir 0, 1, 1, 0, 1.

Después escribir, ciclo a ciclo.

Cada renglón se puede controlar contra la división del prefijo. Calculados aparte, los restos de X10 por 0, 1, 1+X, X+X2 y 1+X2+X3 dan los cinco estados de la traza, uno por uno.

El punto 3: la división escrita. X10u(X)=X10+X12+X13. Se va sumando Xsg(X) para matar el término de mayor grado, hasta bajar de grado 10:

X10u(X)=X10+X12+X13 +X3g(X)=X3+X4+X5+X7+X8+X11+X13 →X3+X4+X5+X7+X8+X10+X11+X12 +X2g(X)=X2+X3+X4+X6+X7+X10+X12 →X2+X5+X6+X8+X11 +Xg(X)=X+X2+X3+X5+X6+X9+X11 b(X)=X+X3+X8+X9

El cociente es a(X)=X+X2+X3 y el resto, escrito como vector de diez posiciones, 0101000011: el último renglón de la traza.

Simulación 1 El codificador, un bit por ciclo — el mensaje se edita tocando sus bits. Elegí qué bit entra primero y avanzá de a un ciclo. Al quinto, el registro se compara con la división y la palabra armada con el síndrome.
El mensaje u = (u₀, …, u₄)
Antes de arrancar: ¿cuál entra primero?
El registro b₀ … b₉

CicloEntradafRegistro b₀…b₉
registro al final — resto de la división — palabra — su síndrome —

Con u4 primero, el registro termina en 0101000011 y la palabra tiene síndrome nulo. Volvé a cero y probá el orden al revés con el mismo mensaje: el registro termina en otra cosa, y la palabra que se arma con eso no es del código. Después probá el orden al revés con un mensaje capicúa, como 10101.

04 · La resolución del ejercicio 4

1. Los bits entran empezando por el de mayor orden, u4: en el orden u4,u3,u2,u1,u0, que para este mensaje es 0, 1, 1, 0, 1.

2. El registro, ciclo a ciclo:

CicloEntradafRegistro b₀…b₉
0——0000000000
1u4=000000000000
2u3=111110110010
3u2=111001101011
4u1=011010000111
5u0=100101000011

3. El registro termina en b(X)=X+X3+X8+X9. La división de la sección 03 da el mismo resto, con cociente a(X)=X+X2+X3.

4. La paridad adelante y el mensaje atrás:

v=0101000011⏟paridad10110⏟mensaje

o, como polinomio,

v(X)=X+X3+X8+X9+X10+X12+X13

Control final: dividido por g(X), v(X) da resto cero, con el mismo cociente a(X).

05 · Ejercicio 5: el síndrome y un ciclo más

El enunciado, textual: «Se transmite la palabra del ejercicio anterior y el canal introduce un error en la posición X12, de modo que se recibe

r=010100001110010.
  1. Calcular el síndrome s(X), resto de dividir r(X) por g(X).
  2. Obtener s(1)(X) y s(2)(X) aplicando ciclos de reloj al registro, es decir como los restos de Xs(X) y X2s(X) módulo g(X).
  3. Calcular por separado el síndrome de r(1) y el de r(2), dividiendo desde cero.
  4. Comparar y enunciar qué resultado de la teoría se acaba de verificar.»

Antes de resolver: qué se entrega. Tres vectores de diez bits que salen del registro, s,s(1),s(2); dos más que salen de dividir de nuevo; y el nombre de un teorema. Conviene leer también r contra la palabra del ejercicio 4: difiere sólo en la posición 12, donde v tenía un 1. Entonces

r(X)=v(X)+X12=X+X3+X8+X9+X10+X13

06 · Las herramientas del ejercicio 5

El síndrome es un resto, y sólo ve el error. Si r(X)=v(X)+e(X), con e(X) el patrón de error, y g(X) divide a v(X),

s(X)=Rg(X){r(X)}=Rg(X){e(X)}

Es el síndrome de siempre, calculado de otra manera: el síndrome cíclico sale del mismo registro del codificador, alimentado con la palabra recibida. Con una diferencia de cableado: r(X) entra por s0, desde r14, y no en el punto de realimentación. Por eso tarda quince ciclos y no cinco:

f=s9,s0′=ri+f,sj′=sj−1+gjf

El teorema 5 del apunte. Si s(X) es el síndrome de r(X), el de su desplazamiento cíclico r(1)(X) es

s(1)(X)=Rg(X){Xs(X)}

y, aplicado i veces,

s(i)(X)=Rg(X){Xis(X)}

La prueba entra en un renglón. Girar es r(1)(X)=Xr(X)+r14(X15+1), y X15+1=h(X)g(X) es múltiplo de g(X): módulo g(X), girar es multiplicar por X. Y Xs(X) reducido es lo que hace el registro en un ciclo con la entrada cortada.

07 · El razonamiento: el síndrome sólo ve el error

Primero pensar. No hace falta dividir r(X): el error es e(X)=X12, así que s(X)=Rg(X){X12}. Y como v(X) girada sigue siendo palabra, r(1)(X) es una palabra más un error en X13, y r(2)(X), una palabra más un error en X14. Todo el ejercicio se reduce a los restos de las potencias altas de X.

La tabla de restos. Se arma de a un renglón: cada uno es el anterior multiplicado por X, y si aparece un X10 se lo cambia por 1+X+X2+X4+X5+X8.

jCómo saleRg{Xj}Vector
10g(X) sin X101+X+X2+X4+X5+X81110110010
11por XX+X2+X3+X5+X6+X90111011001
12por X, reducido1+X+X3+X5+X6+X7+X81101011110
13por XX+X2+X4+X6+X7+X8+X90110101111
14por X, reducido1+X+X3+X4+X7+X91101100101

El renglón 12, desarrollado: el 11 por X da un X10, y se lo cambia.

X·(X+X2+X3+X5+X6+X9) =X2+X3+X4+X6+X7+X10 ≡X2+X3+X4+X6+X7 +1+X+X2+X4+X5+X8 =1+X+X3+X5+X6+X7+X8

Punto 1. Por el error, s(X)=Rg(X){X12}, el renglón 12: s=1101011110. Por la palabra recibida, que es la cuenta que pide el enunciado, la parte de grado menor que 10 queda como está y cada potencia alta se cambia por su renglón: r(X) tiene X+X3+X8+X9 abajo y X10+X13 arriba, así que

s=0101000011+1110110010+0110101111=1101011110

Los dos caminos dan lo mismo porque v(X) es palabra; si el ejercicio 4 hubiera salido mal, acá no coincidirían.

Punto 2. Un ciclo con la entrada cortada. En s, la última etapa vale 0: no hay realimentación, el registro sólo se desplaza, y Xs(X) ya tiene grado menor que 10. Queda s(1)=0110101111. En s(1) la última etapa vale 1: desplazado da 0011010111 con un X10 que se cae, y sumando las tomas,

s(2)=0011010111+1110110010=1101100101

Son los renglones 13 y 14 de la tabla, como tenía que ser: el error se corrió a X13 y a X14.

Punto 3. Ahora las palabras giradas, cada una dividida desde cero con la misma tabla. Girar una posición manda cada bit al siguiente y el r14 a la posición 0:

r(1)=001010000111001,r(1)(X)=X2+X4+X9+X10+X11+X14 s=0010100001+1110110010+0111011001+1101100101=0110101111 r(2)=100101000011100,r(2)(X)=1+X3+X5+X10+X11+X12 s=1001010000+1110110010+0111011001+1101011110=1101100101

En cada suma, el primer término es la parte baja de la palabra girada y los otros, los renglones de sus potencias altas. Las cuentas usan bits distintos de las del punto 2, y llegan a los mismos vectores.

Simulación 2 El síndrome, y los ciclos de más — la palabra recibida entra desde r₁₄, un bit por ciclo. Al ciclo 15 el registro tiene el síndrome; a partir de ahí la entrada se corta, y al lado de cada ciclo de más está el síndrome de la palabra girada, dividido desde cero. Tocá bits para mover o agregar errores.
La palabra recibida r, contra la del ejercicio 4
La palabra girada
El registro s₀ … s₉

GirosRegistroDesde ceroPeso
ciclo — errores en la palabra — registro —

Seguí de largo después del segundo ciclo de más. En el tercero el registro queda en 1000000000: el error dio la vuelta hasta la posición 0, y desde ahí el registro muestra el error tal cual mientras éste recorre la paridad. Probá también con dos errores separados, o con tres juntos.

08 · La resolución del ejercicio 5

1. s(X)=Rg(X){r(X)} vale s=1101011110, el polinomio 1+X+X3+X5+X6+X7+X8. El circuito de síndrome llega ahí en quince ciclos.

2. Con dos ciclos más del registro, sin entrada: s(1)=0110101111 y s(2)=1101100101.

3. Dividiendo desde cero, Rg(X){r(1)(X)} da 0110101111 y Rg(X){r(2)(X)} da 1101100101.

4. Coinciden. Es el teorema 5: el síndrome del desplazamiento cíclico de la palabra recibida es el resto de Xs(X) módulo g(X). Dicho en circuito: para recorrer los quince giros de r alcanza con quince ciclos de reloj del mismo registro, sin ninguna división nueva. Comprobado sobre los 215=32768 vectores de quince bits, el síndrome girado y el síndrome de la palabra girada coinciden en todos.

09 · Lo que se lleva a otros ejercicios

La tabla de restos. Con los restos de Xj para j=n−k,…,n−1, cualquier resto módulo g(X) es la parte baja más una suma de renglones: sirvió para la paridad del ejercicio 4 (renglones 10, 12 y 13), para el síndrome y para las dos palabras giradas. Es, además, la parte de paridad de la matriz generadora sistemática: la fila i de G es Rg(X){X10+i} seguido de un 1 en la posición 10+i.

El registro guarda el resto del prefijo. Para trazar un codificador no hace falta simular a ciegas: el estado después del ciclo c es Rg(X){Xn−kp(X)}, con p(X) los c bits que entraron, el primero en el grado más alto. Cualquier renglón se controla solo.

Cuándo conviene el otro codificador. En el (15,5) hay más paridad que mensaje, n−k=10>k=5. El apunte da también un codificador de k etapas, cableado según h(X) en vez de g(X), y en ese caso es el de registro más corto: cinco etapas en lugar de diez.

Seguir girando es decodificar. Con dos ciclos de más el error está en la posición 14, la última, que es la que examina el decodificador de Meggitt en cada ciclo. Con tres, el registro vale Rg(X){X15}=1, de peso 1: el error cayó en la ventana de paridad, y el síndrome es el error. Es la captura de errores, y no pide ningún circuito nuevo.

10 · Las trampas

Cuál es la posición 0. Los vectores se escriben con la posición 0 a la izquierda, y el polinomio, de grado creciente. u=10110 es 1+X2+X3, no X+X2+X4.

En qué orden entra el mensaje. Primero u4. Al revés, el registro calcula la paridad del mensaje dado vuelta: con 10110 termina en 0111100010, y la palabra que se arma con esa paridad tiene síndrome 0010100001. Lo traicionero es que el error no siempre se ve. Con un mensaje capicúa los dos órdenes dan lo mismo: de los 32 mensajes, en 8 el orden al revés arma una palabra del código. Para probar el circuito hace falta un mensaje que no sea capicúa.

Cuál es el bit de mayor orden del registro. Es b9, el de la derecha cuando el registro se escribe b0…b9. La realimentación es ui+b9, no ui+b0, y desplazar mueve los bits hacia la derecha. En el ciclo 4 entra un 0 y aun así hay realimentación, porque b9=1.

El ciclo que no hace nada también va. u4=0 deja el registro en cero, pero la tabla tiene cinco ciclos, no cuatro.

Codificador y síndrome no se alimentan igual. El codificador suma la entrada en la realimentación, que equivale a multiplicarla por X10, y termina en k ciclos. El circuito de síndrome la mete por s0 y termina en n. En la palabra del ejercicio 5 los once primeros ciclos sólo desplazan: la primera realimentación llega en el ciclo 12.

Para tener a mano

  1. b(X)=Rg(X){Xn−ku(X)} y v(X)=b(X)+Xn−ku(X): la paridad primero, el mensaje al final.
  2. El codificador: f=ui+bn−k−1, el mensaje desde uk−1, k ciclos. Después de cada ciclo guarda el resto de Xn−k por lo que entró.
  3. Ejercicio 4: orden 0, 1, 1, 0, 1; registro 0000000000, 0000000000, 1110110010, 1001101011, 1010000111, 0101000011; v=010100001110110.
  4. s(X)=Rg(X){r(X)}=Rg(X){e(X)}. El circuito de síndrome mete r por s0 desde rn−1 y tarda n ciclos.
  5. Teorema 5: s(i)(X)=Rg(X){Xis(X)}. Un ciclo sin entrada es un giro de la palabra.
  6. Ejercicio 5: s=1101011110, s(1)=0110101111, s(2)=1101100101: los restos de X12, X13 y X14.
  7. La tabla de Rg(X){Xj} para j≥n−k resuelve cualquier resto con sumas, y es la paridad de la G sistemática.
← Anterior Siguiente → Inicio
Relacionados El codificador cíclico El síndrome cíclico El polinomio generador El decodificador de Meggitt La captura de errores Desplazar, factorizar, elegir El (15,5) de punta a punta