Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Codificacion PDF
Codificacion PDF
Teorı́a de la Codificación
Como un ejemplo de aplicación de la teorı́a de las estructuras algebraicas vamos a ver en
esta sección un aspecto de la teorı́a de la codificación: los códigos lineales.
Introducción
Cuando se trasmite un mensaje lo primero que se hace es codificarlo, es decir, convertirlo
en una secuencia de ceros y unos, agrupados en palabras de una misma longitud. El que lo
recibe tiene que descodificarlo y, para ello, conviene que tenga mecanismos para detectar
y, si es posible, corregir los posibles errores que haya podido haber en la trasmisión.
Denotamos por V n al conjunto de las 2n palabras de longitud n. Por ejemplo, V 2 =
{00, 01, 10, 11} y V 3 = {000, 001, 010, 011, 100, 101, 110, 111}.
El siguiente ejemplo ilustra muy bien lo que vamos a ver en este capı́tulo.
Ejemplo 2. Supongamos que queremos mandar un mensaje que tiene cuatro posibilidades:
arriba, abajo, izquierda y derecha. Podemos emplear alguno de estos tres códigos para
codificarlo:
arriba abajo izquierda derecha
C1 00 01 10 11
C2 000 110 101 011
C3 000000 111000 001110 110011
Se trata entonces de buscar códigos que, sin emplear un número grande de dı́gitos, tengan
buenas propiedades de detección y corrección de errores.
1
Distancia en un código binario
Denotamos por a, b, c, . . . a las palabras del conjunto V n .
Definición 3. La distancia de Hamming d(a, b) entre las palabras a, b ∈ V n es el número
de bits en que difieren.
Ejemplo 4. d(100, 110) = 1, d(0010101, 1110111) = 3.
Esta distancia, como cualquier otra distancia definida en términos matemáticos, cumple
estas tres propiedades:
Ejercicio 8. Halla la distancia mı́nima del código C = {00000, 00100, 11000, 10011} de
V 5 . Determina su capacidad de detección y corrección de errores.
Ejercicio 9. Halla la distancia mı́nima del código C ⊂ V 6 formado por las palabras
000000, 111111 y las que tienen tres ceros y tres unos. Determina su capacidad de detec-
ción y corrección de errores. ¿Cuántas palabras tiene este código?
2
Estructura algebraica de V n
En el conjunto V n formado por las palabras de ceros y unos de longitud n, podemos
definir una operación +. La suma de dos palabras a + b es la palabra cuyos bits se
obtienen sumando los correspondientes bits de a y b módulo 2.
Códigos lineales
Definición 11. Decimos que un código C ⊆ V n es lineal si la suma de dos palabras del
código es otra palabra del código.
• C2 también es lineal y k = 2.
3
De ellos depende la utilidad de un código. Interesa, por una parte, que k no sea mucho
menor que n para que el número de bits que se tiene que emplear no sea muy grande. Por
otra parte, cuanto mayor sea δ, mejor, porque la capacidad de detección y corrección de
errores es mayor. Pero, lógicamente, cuando k aumenta, δ disminuye, y viceversa.
Ejemplo 14. Vamos a estudiar el código C ⊂ V 4 formado por las palabras que tienen
un número par de unos. Hay una palabra con cuatro unos y una con ninguno. Con dos
4
unos hay 2 = 6, que son las formas de escoger los sitios que ocupan los dos unos, sin
considerar el orden y sin repeticiones.
El código es, pues, el conjunto C = {0000, 0011, 0101, 0110, 1001, 1010, 1100, 1111}. Sus
parámetros son n = 4, k = 3, porque tiene 23 elementos, y δ = 2, con lo que detecta un
error y no corrige ninguno.
Se puede comprobar que es un código lineal porque la suma de dos palabras cualesquiera
es otra palabra del código.
Ejercicio 15. Halla las palabras del menor código lineal C que contiene las palabras
00011, 11000 y 01100. Determina sus parámetros n, k y δ.
Ejercicio 16. (generalización del ejemplo 14) Demuestra que las palabras de V n que
tienen un número par de unos forman un código lineal. Halla el parámetro k de este
código, en función de n. ¿Cuál es su capacidad de detección y corrección de errores?
4
1 1 0
Ejemplo 18. Si H = , la ecuación matricial es
0 1 1
x1
1 1 0 0
x2 =
0 1 1 0
x3
Es decir, las primeras r columnas forman la matriz identidad I. En este caso, podemos
tomar las variables dependientes x1 , . . ., xr , que se pueden expresar directamente en
función de las independientes xr+1 , xr+2 , . . ., xn :
x1 = h11 xr+1 + h12 xr+2 + . . . + h1,n−r xn
x2 = h21 xr+1 + h22 xr+2 + . . . + h2,n−r xn
...
xr = hr1 xr+1 + hr2 xr+2 + . . . + hr,n−r xn
5
Si las primeras columnas no forman la matriz identidad, pero hay columnas en la matriz
que, después de una reordenación la formarı́an, la resolución serı́a análoga. Deberı́amos
considerar como variables dependientes las que corresponden a estas columnas que for-
marı́an I, y despejar cada una de ellas de la ecuación en que esté.
1 0 1 0 1
Ejemplo 21. En la matriz H = 1 1 1 0 0 vemos que las columnas segunda,
1 0 0 1 0
cuarta y quinta, reordenadas, formarı́an I. Podemos tomar entonces x2 , x4 y x5 como
variables dependientes, y, despejándolas de las ecuaciones segunda, tercera y primera,
respectivamente, el sistema se podrı́a expresar ası́:
x2 = x1 + x3
x4 = x1
x5 = x1 + x3
Si no hay columnas que pudieran formar la matriz identidad, podrı́amos hacer trasforma-
ciones en la matriz hasta conseguir que las haya.
1 1 0 1 1 1 0
Ejemplo 22. En H = 1 0 1 0 1 nos faltan las columnas 0 y 1 . Para
0 1 1 0 1 0 0
conseguirlas podemos seguir, por ejemplo, estos pasos:
1 1 0 1 1 1 1 0 1 1 0 0 0 1 1
1 0 1 0 1 → 1 0 1 0 1 → 1 0 1 0 1
0 1 1 0 1 1 1 0 0 0 0 1 1 0 1
6
donde C i representa la columna i de la matriz. Ası́ pues, si al aplicar H a una palabra
que tiene un error el resultado es la columna i de la matriz, podemos decir que el error
se ha producido en el dı́gito i, y podemos corregirlo simplemente lo cambiamos.
Ejemplo 23. En el código del ejemplo 20 vamos a suponer que se recibe la palabra 000011,
que es una palabra del código que tiene un error. Multiplicando por H resulta
0
0
1 0 0 0 1 1 0
0
0 1 0 1 1 1 = 0
0
0 0 1 1 0 1 1
1
1
que es la tercera columna de la matriz, lo que indica que el error está en el tercer bit. Lo
cambiamos y queda la palabra 001011.
Códigos de Hamming
Definición 24. Un código de Hamming es un código lineal cuya matriz de paridad no
tiene columnas de ceros ni columnas iguales y además, teniendo en cuenta estas limita-
ciones, consta del máximo número de columnas posible.
Ejemplo 26. Con tres filas tenemos siete columnas no nulas, diferentes. Si las ordenamos
siguiendo el criterio del ejemplo anterior resulta la matriz
0 0 0 1 1 1 1
H = 0 1 1 0 0 1 1
1 0 1 0 1 0 1
Para hallar las palabras del código tomamos como variables dependientes x1 , x2 y x4 ,
porque sus columnas correspondientes están formadas por dos ceros y un uno, lo que
facilita la resolución del sistema.
x4 = x5 + x6 + x7
x2 = x3 + x6 + x7
x1 = x3 + x5 + x7
Para hallar las palabras del código damos valores a las variables independientes y hallamos
los valores que toman las variables dependientes.
7
x3 x5 x6 x7 x1 x2 x4 x
0 0 0 0 0 0 0 0000000
0 0 0 1 1 1 1 1101001
0 0 1 0 0 1 1 0101010
0 0 1 1 1 0 0 1000011
0 1 0 0 1 0 1 1001100
0 1 0 1 0 1 0 0100101
0 1 1 0 1 1 0 1100110
0 1 1 1 0 0 1 0001111
1 0 0 0 1 1 0 1110000
1 0 0 1 0 0 1 0011001
1 0 1 0 1 0 1 1011010
1 0 1 1 0 1 0 0110011
1 1 0 0 0 1 1 0111100
1 1 0 1 1 0 0 1010101
1 1 1 0 0 0 0 0010110
1 1 1 1 1 1 1 1111111
La razón de colocar las columnas de la matriz en este orden es que esto facilita la mecánica
de corrección de errores. Hemos dicho que si se produce un error en una palabra, al
multiplicarla por la matriz resulta la columna correspondiente al lugar donde está el
error. Pero en estos códigos de Hamming para buscar el sitio en que está una columna no
hay más que pasarla a decimal.
Ejemplo 27. En el código del ejemplo 26 la palabra 1100010 tiene un error. Para buscarlo
la multiplicamos por H:
1
1
0 0 0 1 1 1 1 0
1
0 1 1 0 0 1 10 = 0
1 0 1 0 1 0 1 0
1
1
0
El resultado es 101 que, pasado a decimal, es 5, con lo que el error está en el quinto bit.
8
Códigos cı́clicos
Vamos a representar una palabra a ∈ V n como a = a0 a1 . . . an−1 . A la palabra â =
an−1 a0 a1 . . . an−2 la llamaremos primer desplazamiento de a. El segundo desplazamiento
serı́a an−2 an−1 a0 a1 . . . an−3 , y ası́ sucesivamente.
Ejemplo 28. La palabra a = 11001 ∈ V 5 tiene cinco desplazamientos diferentes, que son
11100 = â, 01110, 00111, 10011 y 11001 = a.
Ejemplo 29. Decimos que un código lineal es cı́clico si los desplazamientos de cualquier
palabra del código son también palabras del código.
Ejemplo 30.
Los códigos cı́clicos están relacionados con la teorı́a de las estructuras algebraicas, con-
cretamente con los anillos de polinomios, como vamos a ver a continuación.
Vamos a representar la palabra a = a0 a1 . . . an−1 como el polinomio a(x) = a0 + a1 x +
. . . + an−1 xn−1 . Ası́, el conjunto V n será como el conjunto de polinomios de grado menor
que n, que representaremos por V n [x].
El primer desplazamiento de a(x) es â(x) = an−1 + a0 x + a1 x2 + . . . + an−2 xn . Sumamos
y restamos an−1 xn para obtener lo siguiente:
• i1 , i2 ∈ I ⇒ i1 + i2 ∈ I
• r ∈ A, i ∈ I ⇒ ri ∈ I
9
Si lo interpretamos en términos de códigos, tomamos A = V n [x] y C ⊆ V n [x], vemos que
la primera condición equivale a decir que C es lineal: la suma de dos palabras del código
es otra palabra del código. Y la segunda condición, si tomamos r = x y i = a(x) ∈ C,
nos dice que xa(x) está también en C. O, en otras palabras, que C es cı́clico.
Ası́ pues, los códigos cı́clicos son los ideales del anillo V n [x]. De la teorı́a de anillos vamos a
extraer una serie de resultados, sin demostración, que nos permitirán construir los códigos
cı́clicos. Estos son los pasos que vamos a seguir:
• Los ideales de V n [x], o los códigos cı́clicos, están siempre generados por un poli-
nomio.
• De los generadores que puede tener un código cı́clico, hay uno, único, de grado
mı́nimo, denominado generador canónico.
En primer lugar, diremos que los ideales de V n [x] tienen siempre un generador. En
nuestro caso, esto quiere decir que todo código cı́clico C es de la forma C =< g(x) >, con
g(x) ∈ V n [x]. El ideal generado por g(x) es el conjunto de sus múltiplos:
Ejemplo 32. En V 3 [x] vamos a hallar el ideal generado por el polinomio g(x) = x +
x2 . Para ello hacemos una tabla con los productos de g(x) multiplicado por todos los
polinomios de V 3 [x].
a(x) a(x)(x + x2 )
0 0 000
1 x + x2 011
x 1 + x2 101
1+x 1+x 110
x2 1+x 110
1 + x2 1 + x2 101
x + x2 x + x2 011
1 + x + x2 0 000
10
Ejemplo 36. Los divisores de x4 − 1 = (x + 1)4 son 1, x + 1, (x + 1)2 , (x + 1)3 y (x + 1)4 .
Lo que quiere decir que hay cinco códigos cı́clicos de longitud 4.
Ejercicio 37. Los cinco códigos cı́clicos de longitud 4 son
{0000}
{0000, 1111}
{0000, 0101, 1010, 1111}
{0000, 0011, 0110, 1100, 1001, 0101, 1010, 1111}
V4
hk . . . h1 h0 0 ... 0
0 hk . . . h1 h0 0 . . . 0
H=
.. .. ..
. . .
0 ... 0 h ... h h 0
k 1 0
0 ... 0 hk ... h1 h0
Como h(x) tiene grado k, hay k + 1 coeficientes y por tanto hay que añadir n − k − 1
ceros en la primera fila, para que haya n columnas en la matriz. Después en cada fila hay
que ir desplazando el bloque de dı́gitos de h(x) hasta que llege al final. En total habrá
n − k filas y la dimensión del código será k.
Ejemplo 38. La descomposición de x7 − 1 es (1 + x)(1 + x + x3 )(1 + x2 + x3 ), por lo
tanto x7 − 1 tiene 8 divisores, que son
1
1+x
1 + x + x3
1 + x2 + x3
(1 + x)(1 + x + x3 ) = 1 + x2 + x3 + x4
(1 + x)(1 + x2 + x3 ) = 1 + x + x2 + x4
(1 + x + x3 )(1 + x2 + x3 ) = 1 + x + x2 + x3 + x4 + x5 + x6
(1 + x)(1 + x + x3 )(1 + x2 + x3 ) = xn − 1
Cada uno de ellos es el generador canónico de un código cı́clico, con lo que podemos decir
que hay ocho códigos cı́clicos de longitud 7.
11
Por ejemplo, si tomamos el divisor g(x) = (1 + x)(1 + x + x3 ), el polinomio h(x) es
(1 + x2 + x3 ). Tomamos sus coeficientes en orden inverso para colocarlos en la matriz:
1101. Entonces la matriz de paridad del código C generado por g(x) es
1 1 0 1 0 0 0
0 1 1 0 1 0 0
H= 0 0 1 1 0 1 0
0 0 0 1 1 0 1
y resulta el código
Ejercicio 39. Determina las palabras del código de longitud 7 generado por el polinomio
1 + x + x3 .
Ejercicio 40. Factoriza el polinomio x6 − 1 ∈ Z2 [x] y halla todos los códigos cı́clicos de
longitud 6.
12