Anda di halaman 1dari 9

Conferencia #17 y 18: ”Códigos cíclicos”

Bibliografía:
- “Digital communication, fundamentals and applications”. Bernard Sklar.
Prentice Hall. International 1985.
- “Wireless Digital Communication” Dr. Kamilo Feher. Prentice Hall. 1995.
- “Equipos electrónicos para la transmisión de datos” Juan V. Lorenzo Ginari
- “Transmisión de datos, teleprocesamiento y redes de computadoras”
Eduardo Mejía Torres.
- “Error Correcting Codes” Peterson and Weldon. 1972.

Los códigos cíclicos constituyen una clase importante de códigos de bloques


algebraicos. Estos se caracterizan porque las palabras de código tiene naturaleza
cíclica, o sea, todo cíclico de los bits de una palabra de código resulta
en otra palabra también perteneciente al código.

Ejemplo:
100101  110010  011001

Palabra 1 Palabra 2 Palabra 3


del código del código del código

Las principales ventajas que ofrecen los códigos cíclicos (por lo que se usan
ampliamente en la práctica):
- Es posible diseñar códigos cíclicos para detectar o corregir errores de la
multiplicidad que se desee, empleando la cantidad adecuada de bits
redundantes.
- Los códigos cíclicos son capaces de detectar ráfagas de errores.
Ráfagas: Consisten en un grupo de errores que tienen lugar
concentrados en cierto período de tiempo. (Producidas por canales
con ruido impulsivo).
- Los circuitos codificadores y decodificadores son sencillos.
Es usual, en el trabajo con códigos cíclicos, representar las palabras binarias
mediante polinomios.
Las palabras binarias se representan por medio de polinomios. Si a la aparición
de un 1 en determinada posición i de la palabra de código se asocia el término x i
partiendo de que para el bit menos significativo i = 0.
Ejemplos:

1 0 1 1  1.x3 +0.x2 +1.x +1= x3 + x +1

Posición más Posición menos


significativa i = 3. significativa i = 0.
1 0 1 1 0 
1 x5 + x3 + x2 + 1

i=5 i=0
Al representar las palabras de código de esta forma es posible realizar
operaciones algebraicas con palabras completas utilizando los polinomios
correspondientes.

Las operaciones definidas para los polinomios en x que representan a la


secuencia binaria son:
1. Suma módulo 2 (operación XOR) 1  1 = 0  0= 0 y 1  0 = 0  1= 1.
2. Resta módulo 2 (operación XOR) Equivale exactamente a la suma módulo
2.
3. Multiplicación: Multiplicación corriente entre polinomios con la salvedad de
que las sumas de términos son sumas módulo 2.
4. División: División corriente entre polinomios con la salvedad de que las
restas de términos son resta módulo 2 (o sea, sumas módulos 2 operación
XOR).

Ejemplos de operaciones:

Ejemplo de multiplicación de dos secuencias.


(101).(10010)(x2 + 1).(x4 + x) = x6 + x4 + x3 + x
llevándolo a secuencia binaria 1011010.
(101).(111)(x2 + 1).(x2 + x +1) = x4 + x3 + x2 + x2 + x + 1. (por suma módulo 2) = x 4
+ x3 + x + 1
llevándolo a secuencia binaria 11011.

Ejemplo de división de secuencias.


(111010)/(101)  (x5 +x4 + x3 + x)/(x2 +1)
Hacemos

x5 +x4 + x3 + x x2 +1
5
x x3 x3 + x2 +1 Cociente de la división
4
x +x (1101)
x4 + x2
x2+ x
2
x + 1
x+1 Resto de la división
(11)
Esta división se puede hacer empleando de forma abreviada los propios dígitos de
la secuencia binaria. Retorno al segundo paso.

111010 101
101 1101 Cociente de la división
100
101 No cabe, bajo el otro dígito
110
101
11 Resto de la división
Las sumas son módulo 2 (que son restas) y se divide de igual forma, mucho más
sencillo y compacto.

Cuando: El residuo de la división es cero, se dice que el polinomio dividendo


(111010) es divisible por el polinomio divisor (101).
Cuando: El residuo de la división es diferente de 0 no es divisible, que es el caso
del ejemplo.

Descripción algebraica de un código cíclico.


Un código cíclico se describe a través de un polinomio, llamado polinomio
generador P(x), cuyo grado es n-k = b donde, como antes:
k: número total de bits de información.
b: número de bits redundantes.
n = k +b: número total de bits de la palabra de código.

Regla: Una palabra de código se considera perteneciente al código especificado


(palabra válida del código) solo si el polinomio que la representa es divisible
entre el código polinomio generador.
[Regla básica para la generación y detección de errores en las palabras de código
de 1 código cíclico]

La regla anterior tiene una implicación, por propiedades de las operaciones con
polinomio, si F1(x) y F2(x) son dos palabras válidas del código (divisibles ambas
por el polinomio generador P(x)) entonces F1  x   F2  x  también será una
palabra válida del código.
O sea: la suma módulo 2 de dos palabras válidas del código dan como resultado
otra palabra válida del código.

Algoritmo de obtención del código cíclico.


1. A partir de la secuencia de k bitios del mensaje, que se representa por el
polinomio G(x)
G x   x b esto equivale a añadir b ceros a continuación de la secuencia de bits de
mensajes que dio origen a G(x).
2. Se toma el producto G x   x b y se divide entre el polinomio generador P(x).
G x   x b R x 
 Q x  
P x  P x 
Esa división va a dar como resultado un cociente Q(x) más un término residuo
R(x), no divisible entre P(x).

Q(x): Cociente de la división.


R(x): Residuo.
G(x): Polinomio que representa la secuencia de k bits de información.
P(x): Polinomio generador del código.
Por la regla de codificación que vimos, especificamos que las palabras de código
válidas serían aquellas que fueran divisibles por P(x). Haciendo un trabajo
algebraico en la expresión anterior.
G x   x b R x 
 Q x  
P x  P x 
G x   x b R x 
  Q x 
P x  P x 
G x   x b  R x 
 Q x 
P x 
La última expresión nos da la palabra codificada, el término G x   x b  R x  es
divisible por P(x), notar que el cociente es Q(x) y no hay residuo. Por lo tanto la
palabra codificada sería precisamente:
F x   G x   x b R x 
F(x) se obtiene de sumarle módulo 2 al término G x   x b , el residuo de la división
de este propio término por P(x).

La palabra codificada válida que se transmite es F(x), pero si ocurren errores


durante la transmisión supondremos que al receptor llega una palabra B(x) tal que:
B x   F x   E x 
Donde E(x) es la palabra o polinomio de error.

Ejemplo:
Si F(x) = 10011 y se necesita B(x) con un error en la tercera posición.
B(x) = 10111
E x   F x   B x  E(x) 00100 (palabra que indica con un 1 la posición donde está
el error)

Entonces si B x   F x   E x  en el extremo receptor, el chequeo se hace


dividiendo la palabra recibida entre el polinomio generador, si es divisible la
palabra pasa como válida, si da un residuo diferente de 0, entonces se determina
que ocurrió error.
B x   F x   E x 
B x  F x   E x  F x  E x 
  
P x  P x  P x  P x 
F x 
pero  Q x 
P x 
B x  R x 
 Q x  
P x  P x 
R x 
residuo de la división.
P x 
Si el residuo de la división de la secuencia recibida B(x) es cero, no se detectó
error, puede que no haya ocurrido error ó que hayan ocurrido varios y se haya
convertido una palabra válida del código en otra palabra válida del código, por lo
que seria un error indetectable.
Si el residuo de la división es diferente de 0, se detecta que ha ocurrido error. Si el
error es simple, la secuencia del residuo identifica unívocamente el error en una
posición dada (aunque no numéricamente)
Para cada posición de error simple se obtiene un residuo diferente.

Ejemplo de codificación:
Palabra de 10 bitios de información, k = 10.
Para obtener palabras de código de longitud, n = 15.
Codifiquemos la palabra: 1000100101.
Emplearemos el polinomio generador: P(x) = x5 + x4 + x2 + 1. (110101).

Primer paso:
k = 10, n = 15, por lo que b = n-k, b = 5.
Observar que la cantidad de bits de chequeo coincida con el grado del polinomio
generador P(x).
La palabra a codificar es: 1000100101
Cuyo polinomio G(x) correspondiente es: G(x) = x9 + x5 + x2 +1.
Armamos el producto: G x   x b = (x9 + x5 + x2 +1). x5.
G x   x b = x14 + x10 + x7 + x5 que corresponde a la palabra binaria:
G(x).x5 = 100010010100000
NOTAR QUE: multiplicar G x   x b equivale a adicionar b ceros (5 en este caso) a
continuación de la secuencia representada por G(x).

Segundo paso:
G x   x b
Obtención del residuo R(x) de la división de para sumárselo (módulo 2) a
P x 
F x   G x   x b R x  y armar de esta forma la palabra codificada.
G x   x b x 14  x 10  x 7  x 5
 5
P x  x  x4  x2 1
Dividiéndolo de la forma sintética, como hicimos en el ejemplo de la división.
Entonces dividiríamos:
100010010100000 entre 110101, dando como residuo 11.
Para conformar la palabra codificada debemos sumar módulo 2:
F x   G x   x b R x 
de forma binaria es más sencillo, los términos de R(x) se colocan en las
posiciones menos significativas.

G x   x b = 100010010100000
R x  = 11

F(x) = 100010010100011

Los últimos b dígitos (cinco en este caso) representan el residuo R(x) añadido.
Para la detección de errores en códigos cíclicos.
Se recibe la palabra B(x) que será B x   F x   E x  .
Si B(x) no es divisible por P(x), entonces se detecta que ha ocurrido un error.
Si B(x) es divisible por P(x), entonces el error o los errores serán indetectables.
B x  E x 
 Q x  
P x  P x 
E x 
Donde sería el residuo, que igual a cero no ocurrió error o no se detectó y
P x 
si es diferente de cero entonces ocurrió error.

A la hora de diseñar el código, P(x) debe seleccionarse de forma que el polinomio


asociado al tipo de error que se desea detectar [E(x) típico] no sea divisible por
P(x) para que el residuo sea diferente de cero.

Anexo
Propiedades y teoremas asociados a los polinomios generadores de los
códigos cíclicos.
Un código perfecto es aquel que satisface de forma exacta el límite de Hamming.
 
2 3

2 b  1  n  n  n  ...  n
k
b: Número de bits de chequeo.
k: Multiplicidad del error que se desea corregir.
n: Longitud total de la palabra de código.

Particularmente para errores simples, k = 1, el límite de Hamming toma la forma:


2b  n + 1 (k = 1)

Propiedades de los polinomios.


1. Polinomios irreducibles: Son aquellos que no pueden ser factorizados en
polinomios de menor orden. No pueden expresarse como productos de polinomios
de menor orden.
Ejemplo: Q(d) = d3 + d +1

2. El grado de un polinomio Q(d) es la mayor potencia de d dentro de Q(d).


Ejemplo: Q(d) = d5 + d +1 tiene grado 5.

3. El exponente de un polinomio o el exponente a que pertenece un polinomio: El


exponente de un polinomio Q(d) es el mínimo valor de l para el cual Q(d) divide al
polinomio dl +1.
Ejemplo: El exponente de Q(d)= d3 + d +1 es 7 ya que:
d3  1
 d 4  d 2  d  1 l = 7 es el mínimo valor encontrado o lo que es lo mismo d l
d  d 1
3

+1 no es divisible por Q(d)= d3 + d +1 si l < 7.


4. Un polinomio irreductible de grado m es llamado un polinomio primitivo si el
exponente a que pertenece es l = 2m –1.
Ejemplo: Q(d)= d3 + d +1 es un polinomio primitivo. El exponente de Q(d) es l = 7
y su grado es 3 y se cumple l = 2m –1 7 = 23 – 1 7 = 7.
Los polinomios primitivos son tabulados en la bibliografía referida con el tema.

5. Un polinomio generador de un código cíclico (de longitud de bloque n) es


siempre un factor de dn +1.
Para un código cíclico con una longitud de palabra codificada n y una cantidad de
dígitos de chequeo b. El polinomio generador de ese código tiene grado b es uno
de los polinomios en lo que se puede factorizar el polinomio d n +1.
Ejemplo:
Longitud de la palabra n = 7.
Para corregir errores simples 2b  n + 1, b = 3.
d 7  1   d  1  d 3  d 2  1 d 3  d  1 cualquiera de estos polinomios puede se runo
generador del código.

Códigos cíclicos que constituyen estándares internacionales del UIT.


- Se les conoce como “códigos de redundancia cíclica” o CRC.
CRC-12 G d  d12  d11  d 3  d 2  d  1
CRC-16 G d  d16  d15  d 2  1
Estos polinomios, todos, tienen como factor a (d + 1), por lo que todos los
patrones de errores impares serán detectados.
CRC-12 Se usa para transmitir palabras de 6 dígitos de información.
CRC-16 Se usa para transmitir palabras de 8 bits.

- Código de Golay (23, 12) n = 23, k = 12.


 Código cíclico perfecto (cumple con el límite de Hamming).
 Tiene distancia de código 7 por lo que puede corregir hasta errores
triples.
 El polinomio generador del Golay (23, 12) es:
G d  d11  d19  d 7  d 6  d 5  d  1
 Existe el código Golay extendido (24, 12) que añade un bit de
paridad adicional a cada palabra codificada de longitud 7.
 La ventaja del código Golay sobre el Hamming es que permite la
corrección de errores múltiples (hasta k = 3) pero con longitudes de
palabra limitada a n = 23 ó 24.
- Códigos BCH (Bose-Chaudhuri-Hocquenghen)
 Permiten múltiples capacidades de corrección de error.
 Es una generalización del código de Hamming que permite corregir
errores de multiplicidad arbitraria.
Los polinomios generadores de los códigos BCH son factores del
polinomio dM + 1 donde M = 2 m –1 y se cumple que n-k  mt (m y t son
enteros arbitrarios).
La distancia mínima entre palabras del código es:
Dmín  2t + 1 por lo que el código diseñado es capaz de corregir errores
de multiplicidad t.
n k t
7 4 1
15 11 1
15 7 2
31 26 1
31 21 2
31 16 3
Para t = 1 tenemos los códigos de Hamming.
n k t P(x) Código Grado
octal (b)
7 4 1 13 1011 3
15 11 1 23 10011 4
31 26 1 45 100101 5

Ejemplo: BCH (63, 45) n = 63, k = 45, n-k = b = 18.


n = 63 = 26 –1 m = 6.
n-k = 18  mt con m = 6, t = 3.
El código BCH (63, 45) tiene una distancia mínima D mín = 7 y puede corregir hasta
errores de multiplicidad t = 3 (triples).

Teoremas y propiedades de los polinomios generadores.


 El polinomio generador P(x) de un código cíclico no debe tener a x como
factor común.
Si esto ocurre todas las palabras del código estarían asociadas a u polinomio que
contendría a x como factor común, o sea, sin término independiente y terminaría
siempre en 0. esto resta potencialidad al código, se transmite siempre el último bit
de la secuencia de código en 0 (sin objetivo) además, se pierde la propiedad del
desplazamiento cíclico de las palabras del código.
 Teorema 1: Un código cíclico, en el cual su polinomio generador tiene más de
un término, detecta cualquier error simple.
Cuando ocurre un error simple en la posición i se tiene E(x) = x i. Para que este
E x  xi
tipo de error sea detectado E(x) no puede ser divisible por P(x)  ,
P x  P x 
basta que P(x) tenga más de un término para que x i no sea divisible por P(x).
El polinomio generador más simple con más de un término es P(x) = x + 1.

 Teorema 2: Se dice que un polinomio P(x) pertenece un exponente e, si e es


el menor entero positivo para el cual (xe + 1) es divisible por P(x).
Ahora, un código cíclico generado por P(x) es capaz de detectar errores simples
y dobles si la longitud n de las palabras codificadas es igual o menor que le
exponente 2 al cual pertenece P(x), es decir, si n  e.
Demostración:
Para la detección de errores dobles se requiere que P(x) no divida de forma
exacta al polinomio asociado a la palabra de error E(x) correspondiente.

Si existen errores en las posiciones i y j se tiene:


E(x) = xj + xi ó
E(x) = xi ( xj-i + 1)
Se sabe que P(x) tiene más de un término por lo tanto P(x) es diferente de x, por
lo que para que E(x) no sea divisible por P(x) basta con que ( x j-i + 1) no lo sea.

Como j-i < n y n < e por condición del teorema, entonces j-i < e, y como P(x)
pertenece a e, entonces:
( xe + 1) es el polinomio de menor grado divisible por P(x) como j-i < e, entonces
( xj-i + 1)no será divisible por P(x) por lo que habrá un residuo diferente de cero y
se detectará el error doble si P(x)pertenece a e y la longitud de las palabras es
n  e.

 Teorema 3: Sobre la posibilidad de detectar ráfagas de errores (ventaja


importante de los códigos cíclicos).
Una ráfaga de error es un conjunto de errores que ocurren de forma concentrada
en una palabra de código.
Se tomará por ráfaga a la cantidad de bitios que existen entre el primero y el
último error en la palabra, ambos inclusive.

Ejemplo: Si E(x)= 00100110


Ráfaga de longitud de L = 5.

Dice el teorema:
Cualquier código cíclico generado por una un polinomio de grado b, es capaz de
detectar todas las ráfagas de longitud b o menor. L  b.

Demostración:
En caso de ocurrencia de ráfagas de error, la palabra de error puede ser
descompuesta en factores:
E(x)=xi. E1(x)
i: número de orden del bitio que aparece en la posición de error menos
significativa.
Si la longitud de la ráfaga es L, el grado de E 1(x) será L-i .
Parta que al ráfaga sea detectada E(x) no puede ser divisible por P(x), como P(x)
tiene más de un término, xi no será divisible por P(x).
Entonces para detectar la ráfaga basta con que E 1(x) no sea divisible por P(x).
Como, por condición del teorema L  b, entonces L-i < b, y este sería el grado de
E1(x).
Como el grado de P(x) es b, entonces E1(x) no es divisible por P(x)

Anda mungkin juga menyukai