63
Patricia Pascual Ortigosa Jesús Antonio Laliena Clemente Facultad de Ciencias, Estudios Agroalimentarios e Informática Grado en Matemáticas 2014-2015 Título Director/es Facultad Titulación Departamento TRABAJO FIN DE GRADO Curso Académico Códigos correctores de errores Autor/es

Códigos correctores de errores

  • Upload
    dodang

  • View
    285

  • Download
    11

Embed Size (px)

Citation preview

Page 1: Códigos correctores de errores

Patricia Pascual Ortigosa

Jesús Antonio Laliena Clemente

Facultad de Ciencias, Estudios Agroalimentarios e Informática

Grado en Matemáticas

2014-2015

Título

Director/es

Facultad

Titulación

Departamento

TRABAJO FIN DE GRADO

Curso Académico

Códigos correctores de errores

Autor/es

Page 2: Códigos correctores de errores

© El autor© Universidad de La Rioja, Servicio de Publicaciones, 2015

publicaciones.unirioja.esE-mail: [email protected]

Códigos correctores de errores, trabajo fin de gradode Patricia Pascual Ortigosa, dirigido por Jesús Antonio Laliena Clemente (publicado por la

Universidad de La Rioja), se difunde bajo una LicenciaCreative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported.

Permisos que vayan más allá de lo cubierto por esta licencia pueden solicitarse a los titulares del copyright.

Page 3: Códigos correctores de errores

Facultad de Ciencias, Estudios Agroalimentarios e Informática

TRABAJO FIN DE GRADO

Grado en Matemáticas

Códigos correctores de errores

Alumno:

Patricia Pascual Ortigosa Tutores:

Jesús Antonio Laliena Clemente

Logroño, julio, 2015

Page 4: Códigos correctores de errores
Page 5: Códigos correctores de errores

Indice

1. Introduccion. 5

2. Codigos q-arios. 82.1. Decodificacion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3. El principal problema de la codificacion. 123.1. Equivalencia de codigos. . . . . . . . . . . . . . . . . . . . . . . . 123.2. Empaquetamiento por esferas. . . . . . . . . . . . . . . . . . . . . 143.3. Codigos perfectos. . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4. Codigos lineales. 164.1. Codigos lineales equivalentes. . . . . . . . . . . . . . . . . . . . . 174.2. Codificacion con codigos lineales. . . . . . . . . . . . . . . . . . . 194.3. Decodificacion con codigos lineales. . . . . . . . . . . . . . . . . . 20

5. Un poco de teorıa de la informacion. 245.1. Informacion e incertidumbre. . . . . . . . . . . . . . . . . . . . . 245.2. Capacidad de un canal y Teorema de Shannon. . . . . . . . . . . 27

6. El codigo dual. La matriz de comprobacion de paridad. Deco-dificacion por el sındrome. 306.1. El codigo dual. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306.2. Matriz de comprobacion de paridad. . . . . . . . . . . . . . . . . 316.3. Decodificacion por el sındrome. . . . . . . . . . . . . . . . . . . . 326.4. Decodificacion incompleta. . . . . . . . . . . . . . . . . . . . . . . 33

7. Codigos de Hamming. 377.1. Decodificacion con un codigo de Hamming binario. . . . . . . . . 387.2. Codigos binarios extendidos de Hamming. . . . . . . . . . . . . . 397.3. Un teorema fundamental. . . . . . . . . . . . . . . . . . . . . . . 407.4. Codigos de Hamming q-arios. . . . . . . . . . . . . . . . . . . . . 417.5. Decodificando con un codigo q-ario de Hamming. . . . . . . . . . 427.6. Acortando un codigo. . . . . . . . . . . . . . . . . . . . . . . . . . 42

8. Codigos perfectos 438.1. El [23,12,7]-codigo binario de Golay. . . . . . . . . . . . . . . . . 448.2. El [11,6,5]-codigo ternario de Golay. . . . . . . . . . . . . . . . . 458.3. ¿Existen mas codigos perfectos? . . . . . . . . . . . . . . . . . . . 46

9. Codigos cıclicos. 479.1. El polinomio de comprobacion y la matriz de comprobacion de

paridad de un codigo cıclico. . . . . . . . . . . . . . . . . . . . . . 509.2. El codigo binario de Golay. . . . . . . . . . . . . . . . . . . . . . 529.3. El codigo ternario de Golay. . . . . . . . . . . . . . . . . . . . . . 539.4. Los codigos de Hamming como codigos cıclicos. . . . . . . . . . . 55

Conclusiones. 57

Referencias. 59

1

Page 6: Códigos correctores de errores

2

Page 7: Códigos correctores de errores

Resumen.

Este trabajo es un curso introductorio a la teorıa de codigos. Esta memoriaes de caracter teorico-practico, por lo que en su desarrollo vamos a ejemplificarlos distintos tipos de codigos que tratemos y todos sus procedimientos.

A lo largo del mismo vamos a tratar diferentes tipos de codigos. Comenza-remos con codigos sencillos como pueden ser los codigos q-arios y, conforme eltrabajo vaya avanzando, el nivel de dificultad de los mismos aumentara pocoa poco.

Nuestro objetivo es estudiar los codigos mas eficientes, los codigos perfec-tos, y ver cuales de ellos son codigos cıclicos. Con dichos codigos finalizaremosel trabajo.

Ademas, vamos a tratar muy por encima la teorıa de la informacion. Conesto pretendemos motivar el Teorema de Shannon que, como veremos en la in-troduccion, supuso un antes y un despues en el desarrollo de la teorıa de codigos.

3

Page 8: Códigos correctores de errores

Abstract.

This work is an introductory course to coding theory. This work is of theorical-practical character, so during all of it we are going to show examples of all thekinds of codes that we are studying, and also about the precedures to dealwith them.

Along this study we are going to tackle di↵erent types of codes. We will startwith simple codes such as q-ary codes and, while the study is advancing, thelevel of di�culty will increase little by little.

Our goal is to study the most e�cient codes, the perfect codes, and to provewhich of them are cyclic. We will end this work with that codes.

Moreover, we are going to tackle briefly the theory of information. Withthis, we are looking to motivate Shannon’s Theorem that, as we will see inthe introduction, it supposed a before and after in the developement of thecoding theory.

4

Page 9: Códigos correctores de errores

1. Introduccion.

La teorıa de codigos correctores de errores es un campo de investigacion muyactivo en la actualidad en diversas areas de conocimiento, como pueden ser lasmatematicas, la computacion y la ingenierıa electrica.

En la transmision de datos en la vida real a veces ocurren problemas. Porejemplo, puede ocurrir que cuando hablamos por telefono tengamos interferen-cias e impidan que la informacion llegue correctamente al receptor del mensaje.En este caso diremos que en el canal hay ruido, de manera que el mensaje puedellegar alterado. El objetivo de la teorıa de codigos es desarrollar metodos quepermitan detectar y corregir estos errores que ocurren al transmitir informacion.Los codigos que tratan los problemas de seguridad se llaman codigos secretos ocriptograficos y los que tratan problemas de fiabilidad del canal se denominancodigos detectores y correctores de errores. En este trabajo nos vamos a centraren estos ultimos.

La teorıa de codigos se inicio en la decada de los anos cuarenta. En esos anoslos ordenadores eran todavıa maquinas muy caras y solo las grandes institucionescomo el gobierno o las grandes universidades tenıan recursos suficientes paramantenerlas. Dichas maquinas eran empleadas para realizar tareas numericascomplejas como calcular con precision la orbita de Marte.

Los Laboratorios Bell poseıan dichas maquinas y contaban en su plantillade trabajadores con Richard W. Hamming, quien trabajo con estos ordenadoresen 1947. A pesar de ello, Hamming solo tenıa acceso a estas maquinas los finesde semana. En esa epoca los programas se registraban en tarjetas perforadas.El ordenador era capaz de leer esas tarjetas y detectar errores de dictado. Sinembargo, cuando se detectaba un error, el ordenador interrumpıa la lectura ypasaba a leer el siguiente programa. Hamming recuerda:

En las dos ultimas semanas consecutivas fui y descubrı que todas mis cosashabıan sido pasadas por alto y no se hizo nada. Estaba muy molesto y enfadadoporque querıa estas respuestas y habıa perdido dos fines de semana. Y entoncesme dije: ”¡Maldicion!, si las maquinas pueden detectar un error, ¿por que nopodemos localizar la posicion del error y corregirlo?”.

Esta cuestion fue imprescindible para el desarrollo de los codigos correctoresde errores.

Hamming desarrollo un codigo capaz de detectar hasta dos errores y corregiruno si el error es unico. Su trabajo fue publicado en abril de 1950 en ”The BellSystem Technical Journal” [2]. Este artıculo se publico tres anos despues de queHamming desarrollara dicho codigo ya que los Laboratorios Bell solicitaron lapatente de dicho codigo.

Durante esos tres anos, Hamming publico varios artıculos internos en losLaboratorios Bell donde se pregunto sobre la posibilidad de crear codigos maseficientes que el propuesto en un principio.

La pregunta fue respondida en 1948 por C. E. Shannon en un artıculo titu-lado ”A Mathematical Theory of Communication” [12], tambien publicado en”The Bell System Technical Journal”. El artıculo de Shannon inicio dos nuevaslıneas de investigacion en el campo de las matematicas: la teorıa de codigos(junto con el artıculo de Hamming) y la teorıa de la informacion. Este artıculosupuso un punto de inflexion en la teorıa de codigos. Desde ese momento has-ta el dıa de hoy ha habido un desarrollo continuo y significativo en la teorıade codigos.

Mas tarde, Marcel J. E. Golay, que trabajo en ”Signal Corps Enginee-

5

Page 10: Códigos correctores de errores

ring Laboratories at Fort Monmouth”, en Nueva Jersey, dio la descripcion del(7, 4)-codigo de Hamming que aparecıa en el artıculo de Shannon de 1948 yamplio dichos resultados a un codigo de longitud prima p y corrector de unerror. El trabajo de Golay fue publicado en julio de 1949 bajo el tıtulo de ”No-tes on Digital Coding” [1]. En ese artıculo, Golay desarrollo el [23, 12]-codigode Golay y el [11, 6]-codigo con el mismo nombre. Posteriormente desarrollo el(24, 4096, 8)-codigo de Golay. Este codigo fue utilizado por la sonda Voyagerpara transmitir fotografıas a color de Jupiter y Saturno. Su primer artıculo esde apenas una pagina y es uno de los mas importantes en la teorıa de la infor-macion.

Golay, Hamming y Shannon fueron los grandes pioneros que comenzaron atrabajar en este tema y desarrollaron estudios e ideas que se usan actualmenteen nuestro dıa a dıa.

Como hemos podido observar en esta breve introduccion historica, la teorıade codigos es una disciplina muy reciente. A pesar de ello, tiene muchas aplica-ciones. Algunas de ellas son las siguientes:

Recuperacion correcta de los datos grabados en un disco duro o en un CD.Los codigos correctores hacen que un CD siga sonando a pesar de que elCD este sucio o incluso rayado.

Recepcion correcta de mensajes digitales enviados a traves de canales muyruidosos. Por ejemplo, la recepcion de fotos de Marte enviadas a traves dela Mariner 9.

Deteccion y/o correccion de los errores que pueden producirse al transmitiro almacenar datos de identificacion, como por ejemplo en el DNI o el ISBN.

Deteccion y/o correccion de los errores que se pueden producir en la lec-tura automatica de datos, como ocurre al leer el codigo de barras de unproducto en la caja de un supermercado.

Como acabamos de ver, los codigos correctores y detectores de errores tie-nen numerosas aplicaciones, pero lo que interesa en la practica realmente es lafabricacion de instrumentos que puedan aplicarlos de manera rapida y eficaz.

Como ya hemos dicho, este trabajo es un curso introductorio a la teorıa decodigos por lo que solo vamos a dar un pincelada de esta teorıa. En la seccion unovamos a tratar los codigos q-arios ası como su decodificacion. En la seccion dosvamos a plantear el principal problema de la codificacion. En la siguiente seccionvamos a tratar los codigos lineales y aprenderemos a codificar y decodificar conellos. En la seccion cinco abordaremos la teorıa de la informacion para poderenunciar el Teorema de Shannon. En la seccion seis definiremos el conceptode codigo dual y la matriz de comprobacion de paridad ası como resultadosque los caracterizan. Ademas, mostraremos el metodo de decodificacion por elsındrome. En la seccion siete y ocho nos dedicaremos a estudiar los codigos deHamming y de Golay respectivamente. Para finalizar este trabajo introductorioa la teorıa de codigos, trataremos los codigos cıclicos que, como veremos en laseccion nueve, son muy importantes pues los codigos binarios de Hamming y loscodigos de Golay son equivalentes a codigos cıclicos.

Los codigos correctores de errores se pueden tratar de muchas maneras.Nosotros no los hemos tratado para ver su eficiencia, ni su probabilidad de erroro correccion, sino que hemos decidido unicamente explicar como funcionan. Nos

6

Page 11: Códigos correctores de errores

hemos decidido por presentar algunos tipos tan solo puesto que queremos llegara describir el tipo mas eficiente, en general, de codigos: los codigos perfectos.Nuestro objetivo ha sido llegar a probar que estos codigos son los codigos deHamming y los de Golay (o sus equivalentes). Los codigos binarios de Hammingy los de Golay son, ademas, codigos cıclicos, por lo que esto nos ha llevado atratar tambien este tipo de codigos.

Esta introduccion ası como la memoria estan basados en el libro de RaymondHill [3], en notas de un curso de introduccion a codigos de la Universidad de SanPaulo de Cesar Polcino [9], unas notas de divulgacion sobre el tema de AdolfoQuiros [10] y el libro de Dominic Welsh [19].

En el desarrollo de este trabajo se han omitido demostraciones de algunosresultados. Salvo cuando se dice explıcitamente que no se va a dar la demostra-cion, en el resto de casos es que no es complicado hacerla (podrıa ser propuestacomo un ejercicio).

Finalmente, mencionar que para entender este trabajo son necesarios resul-tados mas o menos basicos del algebra lineal ası como algun concepto de teorıade Galois en lo referente a los cuerpos finitos. En la seccion cinco, en la quetrataremos la teorıa de la informacion, tambien necesitaremos algun conceptode estadıstica y probabilidad.

7

Page 12: Códigos correctores de errores

2. Codigos q-arios.

Los codigos correctores de errores se emplean para corregir errores en men-sajes enviados a traves de un canal con ruido. El objetivo de estos es codificarlos datos enviados, anadiendo informacion redundante al mensaje y, ası, el men-saje original podra ser recuperado si no ocurren demasiados errores. Veamos unesquema de lo que hacen estos codigos:

Definicion 2.1. Un codigo binario es un conjunto de secuencias de ceros yunos. Estas secuencias de ceros y unos se llaman palabras codigo.

Definicion 2.2. Un codigo binario de repeticion de longitud n es un codigobinario que codifica cada palabra codigo repitiendo n veces el sımbolo que loforma.

Ejemplo 2.3. Tenemos que C = {0, 1} es el codigo binario de longitud 1 yC 0 = {00000, 11111} es el codigo binario de longitud 5. Un ejemplo de codifica-cion con estos codigos podrıa ser codificar las palabras SI y NO. Si codificamosSI=1 y NO = 0, si ocurre un error, no vamos a poder decodificar la palabraya que si recibimos y = 1 no vamos a saber si la palabra x enviada fue un 1o un 0. Sin embargo, si codificamos utilizando el codigo binario de repeticionde longitud 5, podemos codificar SI=11111 y NO = 00000. Ası, si recibimos lapalabra y = 11010, utilizando el metodo del vecino mas proximo que consisteen decodificar la palabra recibida como la palabra codificada a la que se parezcamas, tendremos que la palabra que se habıa enviado es x = 11111.

Vamos a introducir ahora los codigos q-arios, que son una generalizacion delos codigos binarios presentados anteriormente.

Definicion 2.4. Un codigo q-ario es un conjunto de secuencias de sımboloselegidos de un conjunto F

q

= {�1,�2, ...,�q

}, con �i

6= �j

, 8i, j 2 {1, ..., q}. Elconjunto F

q

se denomina alfabeto.

Normalmente vamos a emplear como alfabeto el conjuntoZq

= {0, 1, ..., q� 1}con q primo. Sin embargo, podemos tomar tambien q como potencia de primoy entonces el alfabeto es el cuerpo finito F

q

.

Definicion 2.5. Un codigo q-ario en el que cada palabra del codigo consiste enun bloque de n sımbolos tomados del alfabeto F

q

= {�1,�2, ...,�q

}, se denominacodigo q-ario de longitud n.

Sea (Fq

)n el conjunto de tuplas a = a1a2...an con ai

2 Fq

, 8i 2 {1, ..., n}.Los elementos de (F

q

)n se denominan vectores o palabras. El orden del conjunto(F

q

)n es qn. Un codigo q-ario de longitud n es un subconjunto de (Fq

)n.

Ejemplo 2.6. Imaginemos que queremos codificar las palabras norte (N), sur(S), este (E) y oeste (O). Si las codificamos con un codigo binario de longituddos tendremos:

8

Page 13: Códigos correctores de errores

C1 =

8>><

>>:

00 = N01 = O10 = E11 = S

.

Figura 1: Richard WesleyHamming (1915–1998) fueun matematico estadouni-dense que destaco en te-mas relacionados con la in-formatica y las telecomu-nicaciones. Sus principalescontribuciones a la cienciafueron los codigos, la venta-na y la distancia de Ham-ming.

Podemos observar que este codigo no es muy eficiente ya que si enviamos lapalabra x = 00 y ocurre un error, recibiremos la palabra y = 10 o y = 01, queson palabras del codigo C1 y no coinciden con la palabra que ha sido enviada.Es decir, este codigo no nos va a corregir ningun error. Es mas, ni siquierava a detectarlo. Vamos a anadir ahora redundancia para proteger el mensaje.Consideremos el codigo C2 de longitud tres que obtenemos al anadirle al codigoC1 un dıgito extra:

C2 =

8>><

>>:

000 = N011 = O101 = E110 = S

.

Fijandonos bien en este codigo podemos notar que si ocurre un error enalguna de nuestras cuatro palabras, el codigo C2 lo va a detectar. Por ejemplo, sienviamos la palabra x = 000 y ocurre un error en alguna de las tres posiciones, elcodigo C2 es capaz de detectarlo, aunque no siempre va a ser capaz de corregirlo.

Ahora bien, si ahora anadimos al codigo C1 tres dıgitos extra, obtendremosel nuevo codigo:

C3 =

8>><

>>:

00000 = N01101 = O10110 = E11011 = S

Este nuevo codigo ya es capaz de detectar dos errores y de corregir unoutilizando el metodo del vecino mas proximo.

Definicion 2.7. La distancia de Hamming entre dos vectores x e y de (Fq

)n

es el numero de posiciones en las que difieren. Esta distancia se denota comod(x, y).

La distancia de Hamming es una distancia. Recordemos que una distanciaes una aplicacion d : (F

q

)n ⇥ (Fq

)n ! Fq

que, 8x, y, z 2 (Fq

)n, verifica lassiguientes propiedades:

1) d(x, y) = 0 , x = y.

2) d(x, y) = d(y, x).

3) d(x, y) d(x, z) + d(z, y).

2.1. Decodificacion.

Vamos a tratar en esta subseccion el problema de decodificacion con codigosq-arios. Imaginemos que enviamos la palabra x 2 (F

q

)n y recibimos la palabray, que puede haber sido distorsionada por el ruido del canal. Decodificamosahora y como x0 de manera que d(x0, y) sea mınima, esto es lo que se definecomo el metodo del vecino mas proximo. Este metodo funciona correctamente

9

Page 14: Códigos correctores de errores

si asumimos que estamos trabajando en un canal simetrico q-ario, es decir, enun canal que verifica las siguientes condiciones:

Cada sımbolo de la palabra tiene la misma probabilidad p < 1/2 de serrecibido como error.

Si un sımbolo se recibe como error, entonces los q � 1 sımbolos a los quepuede ser cambiado tienen igual probabilidad de ocurrir.

Es decir, en un codigo binario se verifica el siguiente esquema, donde p es elsımbolo de probabilidad de error del canal:

0

1

0

1

1� p

p

p

1� p

En los canales simetricos q-arios tenemos que la probabilidad de que unapalabra de longitud n sea enviada sin errores es (1 � p)n y la probabilidad deque la palabra sea enviada con i errores es pi(1� p)n�i.

Ejemplo 2.8. Consideremos el codigo binario de longitud tres siguiente:

C =

⇢000111

.

Supongamos que enviamos la palabra 000. Entonces, los vectores que podemosrecibir (ocurriendo un solo error o ninguno) son 000, 100, 010 y 001. Ası, laprobabilidad de que el vector recibido sea decodificado como la palabra que hasido enviada es (1�p)3+3p(1�p)2. Luego podemos decir que el codigo C tieneuna probabilidad de error de palabra, que se denotara por P

err

(C) y que esindependiente de la palabra transmitida, P

err

(C) = 1� (1� p)3 + 3p(1� p)2.

Definicion 2.9. La distancia mınima de un codigo C se denota por d(C) y esla mınima distancia entre las palabras del codigo C, es decir,

d(C) = mın {d(x, y) | x, y 2 C, x 6= y}.

Con esta definicion de distancia mınima podemos introducir un teoremaque nos va a decir cuantos errores es capaz de detectar y/o corregir un codigoq-ario C.

Teorema 2.10.

1) Un codigo C puede detectar s errores en cada palabra si d(C) � s+ 1.

2) Un codigo C puede corregir t errores en cada palabra si d(C) � 2t+ 1.

De este teorema podemos deducir el siguiente corolario:

Corolario 2.11. Si un codigo C tiene distancia mınima d, entonces C se puedeusar tanto para detectar d � 1 errores como para corregir d�1

2 errores en cadapalabra.

10

Page 15: Códigos correctores de errores

Vamos a definir ahora lo que se entiende por un (n,M, d)-codigo. Esta no-tacion va a ser muy utilizada en el trabajo.

Definicion 2.12. Un (n,M, d)-codigo es un codigo con M palabras de longitudn y distancia mınima d.

Observamos que un buen (n,M, d)-codigo va a tener una longitud de palabrasn pequena, una distancia mınima d grande y un gran numero M de palabras.

Figura 2: La sonda Mari-ner 9 fue empleada parala exploracion de Marte. Selanzo el 30 de mayo de 1971y llego a Marte casi seis me-ses despues, el 13 de no-viembre. Formo parte delproyecto Mariner Mars 71que pretendıa enviar dos na-ves al espacio, pero por unfallo del Mariner 8, solo pu-do ser enviada una: el Mari-ner 9. Fue la primera sondaen orbitar con exito a otroplaneta y cumplio el objeti-vo de la mision de la que for-maba parte: mapear el se-tenta por ciento de la super-ficie de Marte.

Ejemplo 2.13. El codigo usado por el Mariner 9 para transmitir imagenesdesde Marte era un (32, 64, 16)-codigo, llamado codigo Reed-Muller. Este codigoes muy adecuado para transmitir informacion a traves de canales muy ruidosos.Ademas, tiene un algoritmo muy rapido para decodificar.

Introducidos ya los (n,M, d)-codigos q-arios, en la siguiente seccion estudia-remos el principal problema de la codificacion.

11

Page 16: Códigos correctores de errores

3. El principal problema de la codificacion.

Como ya vimos en la seccion anterior, un buen (n,M, d)-codigo tiene unalongitud de palabras n pequena, un numero de palabras M grande y una distan-cia mınima d tambien grande. El principal problema de la codificacion consisteen optimizar uno de estos parametros teniendo los otros dos fijados. El problemamas usual que vamos a tener va a ser el de encontrar el parametro M teniendofijados los parametros n y d. Denotaremos por A

q

(n, d) al valor maximo de Mpara el cual el (n,M, d)-codigo q-ario existe.

A continuacion enunciamos un teorema que nos resuelve el problema parad = 1 y d = n:

Teorema 3.1.

1) Aq

(n, 1) = qn.

2) Aq

(n, n) = q.

Ejemplo 3.2. Vamos a determinar el valor de A2(5, 3). Sabemos, gracias a laseccion 1, que el codigo

C3 =

8>><

>>:

00000 = N01101 = O10110 = E11011 = S

existe y es un (5, 4, 3)-codigo binario. Luego A2(5, 3) � 4. Pero. . . ¿podemosmejorarlo? Es decir, ¿podemos encontrar un M mayor para el cual el (5,M, 3)-codigo exista? Para comprobarlo, podemos emplear fuerza bruta, pero no es muyrecomendable ya que vamos a tener alrededor de 200.000 subconjuntos posibles.Con lo visto hasta ahora, no podrıamos comprobarlo de otro modo. Volvere-mos a este ejemplo en la siguiente subseccion, donde, con la nocion de codigosequivalentes, seremos capaces de resolver esta pregunta.

3.1. Equivalencia de codigos.

Recordemos que una permutacion de un conjunto S = {x1, x2, . . . xn

} es unaaplicacion biyectiva de S en sı mismo. Denotamos la permutacion f por

0

@x1 x2 . . . x

n

# # . . . #f(x1) f(x2) . . . f(x

n

)

1

A .

Definicion 3.3. Dos codigos q-arios se dicen equivalentes si uno puede ser ob-tenido a partir del otro por combinaciones de operaciones de los siguientes tipos:

A. Permutacion de las posiciones del codigo.

B. Permutacion de los sımbolos que aparecen en una posicion fija.

Si un codigo viene dado en forma de matriz de dimension M ⇥ n cuyas filasson las palabras del codigo, entonces una operacion de tipo A corresponde auna permutacion de las columnas de la matriz, mientras que una operacion detipo B corresponde con un re-etiquetado de los sımbolos que aparecen en unacolumna dada.

12

Page 17: Códigos correctores de errores

Podemos observar que estos dos tipos de operaciones no modifican la dis-tancia mınima del codigo, por lo que dos codigos equivalentes van a tener losmismos parametros (n,M, d). Ademas, si asumimos que estamos en un canalq-ario simetrico, entonces dos codigos equivalentes seran identicos en lo referen-te a la probabilidad de error de correccion.

Ejemplo 3.4. El codigo

C =

8>><

>>:

00100000111100011111

es equivalente al codigo C3 del Ejemplo 3.2. Basta con aplicar la permutacion

0

@0 1# #1 0

1

A

al sımbolo que esta en la tercera posicion de C y luego intercambiar las posiciones2 y 4.

Lema 3.5. Cualquier (n,M, d)-codigo q-ario sobre un alfabeto {0, 1, . . . , q� 1}es equivalente a un (n,M, d)-codigo que contenga al vector nulo.

Ejemplo 3.6 (Continuacion del ejemplo 3.2). Vamos a ver que un (5,M, 3)-codigo debe cumplir M 4 y que el (5, 4, 3)-codigo es unico, salvo equivalencia.

Sea C un (5,M, 3)-codigo con M � 4. Por el Lema 3.5, asumimos que00 . . . 00 2 C. Ahora, C contiene como mucho una palabra con 4 o 5 unosporque si hubiera dos palabras x e y, entonces x e y tendrıan al menos tres unosen posiciones comunes. Entonces d(x, y) 2 y eso contradice que d(C) = 3.

Como 0 2 C, entonces no hay palabras con 1 o 2 unos. Ademas, comoM � 4, debe haber pues, al menos, dos palabras conteniendo exactamente tresunos. Tenemos ası que C contiene las palabras

C =

8<

:

000001110000111

.

Es ası simple ver que la unica palabra posible que nos queda para que severifiquen los parametros es 11011. Hemos probado ası que A2(5, 3) = 4.

Notemos que una palabra de longitud n codificada con el codigo binario sepuede ver como un vector del espacio vectorial (F2)n.

A continuacion, vamos a definir el concepto de peso de un vector y, seguida-mente, daremos una serie de propiedades que son verificadas por dicho peso.

Definicion 3.7. El peso de un vector x 2 (F2)n, denotado por w(x), se definecomo el numero de unos que aparecen en x.

Lema 3.8. Si x e y 2 (F2)n, entonces d(x, y) = w(x+ y).

Lema 3.9. Si x e y 2 (F2)n, entonces d(x, y) = w(x) + w(y) � 2w(x \ y),entendiendo por x \ y la n-tupla formada por los sımbolos comunes de las n-tuplas x e y.

13

Page 18: Códigos correctores de errores

Enunciamos ahora un teorema muy relevante que sera utilizado mas adelan-te.

Teorema 3.10. Supongamos que d es impar. Entonces un (n,M, d)-codigo bi-nario existe si y solo si el (n+ 1,M,M, d+ 1)-codigo binario existe.

Demostracion. Vamos a probar este teorema demostrando las dos implicaciones:)) Supongamos que C es un (n,M, d)-codigo binario con d impar. Sea C 0 elcodigo de longitud n + 1 obtenido de C al extender cada palabra x 2 C de lasiguiente manera:

x = x1x2 . . . xn

! x0 =

⇢x1x2 . . . xn

0 si !(x) es par.x1x2 . . . xn

1 si !(x) es impar.

Equivalentemente, podemos definir x0 = x1x2 . . . xn

xn+1, donde xn+1 =

Pn

i=1 xi

modulo 2.Como !(x) es par para cada palabra x0 2 C 0, por el Lema 3.8 sabemos que

d(x0, y0) es par. Luego d(C 0) es par. Claramente d d(C 0) d+ 1 y, como d esimpar, tenemos que d(C 0) = d+ 1. Luego C 0 es un (n+ 1,M, d+ 1)-codigo.() Supongamos que D es un (n + 1,M, d + 1)-codigo con d impar. Tomamosdos palabras x e y de manera que d(x, y) = d+1. Si elegimos una posicion en lacual x e y difieran y la eliminamos de todas las palabras del codigo, obtenemosun (n,M, d)-codigo.

Corolario 3.11. Si d es impar, entonces A2(n+ 1, d+ 1) = A2(n, d). Equiva-lentemente, si d es par, entonces A2(n, d) = A2(n� 1, d� 1).

Ejemplo 3.12. Gracias al Ejemplo 3.6 sabemos que A2(5, 3) = 4. Ademas, porel Corolario 3.11, A2(6, 4) = 4. Para ver como funciona la demostracion delteorema vamos a construir un (6, 4, 4)-codigo a partir del (5, 4, 3)-codigo C3 delEjemplo 3.2, anadiendo dıgitos de control global de la siguiente manera:

x = x1x2 . . . xn

! x0 =

⇢x1x2 . . . xn

0 si !(x) es par.x1x2 . . . xn

1 si !(x) es impar.

Obtenemos ası:

(5, 4, 3)� codigo :

8>><

>>:

00000011011011011011

�! (6, 4, 4)� codigo :

8>><

>>:

000000011011101101110110

.

3.2. Empaquetamiento por esferas.

Recordemos que el numero de selecciones desordenadas que podemos hacerde m elementos en un conjunto de n elementos distintos es

�n

m

�.

Ejemplo 3.13. El numero de vectores binarios en (F2)n de peso i es�n

i

�. Por

ejemplo, los vectores en (F2)4 de peso i = 2 son 1100, 1010, 1001, 0110, 0101,0011. Observamos que son 6 =

�42

�.

Definicion 3.14. Para cualquier vector u en (Fq

)n y cualquier entero r � 0,la esfera de radio r y centro u, denotada por S(u, r), es el conjunto

S(u, r) = {v 2 (Fq

)n | d(u, v) r}.

14

Page 19: Códigos correctores de errores

Teniendo en cuenta esta definicion, podemos interpretar la segunda partedel Teorema 2.10 visualmente. Si d(C) � 2t+ 1, entonces las esferas de radio tcentradas en las palabras del codigo C son disjuntas, porque, si por ejemplo elvector y perteneciese a las dos esferas S(x, t) y S(x0, t), para las palabras x yx0, entonces por la desigualdad triangular tendrıamos que d(x, x0) d(x, y) +d(x0, y) t+ t = 2t, que contradice a d(C) � 2t+ 1.

Si ocurren t errores en la palabra x, entonces el vector recibido y puedeser diferente del centro de la esfera pero no puede salirse de la esfera S(x, t),entonces y va a poder ser decodificada como x gracias al metodo del vecino masproximo.

Lema 3.15. Una esfera de radio r en (Fq

)n con 0 r n contiene exacta-mente ✓

n

0

◆+

✓n

1

◆(q � 1) +

✓n

2

◆(q � 1)2 + · · ·+

✓n

r

◆(q � 1)r

vectores.

Vamos a introducir ahora el teorema de empaquetamiento de esferas que nosva a servir para caracterizar los codigos perfectos.

Teorema 3.16 (El empaquetamiento de esferas o la cota de Hamming). Un(n,M, 2t+ 1)-codigo q-ario satisface

M

⇢✓n

0

◆+

✓n

1

◆(q � 1) +

✓n

2

◆(q � 1)2 + · · ·+

✓n

t

◆(q � 1)t

� qn.

3.3. Codigos perfectos.

Definicion 3.17. Un codigo que verifica

M

⇢✓n

0

◆+

✓n

1

◆(q � 1) +

✓n

2

◆(q � 1)2 + · · ·+

✓n

t

◆(q � 1)t

�= qn

se denomina codigo perfecto.

Esta definicion de codigo perfecto es equivalente a decir que para un codigoque corrige t errores, las M esferas de radio t centradas en las palabras delcodigo cubren todo el espacio (F

q

)n sin solaparse.

Ejemplo 3.18. El codigo binario de repeticion de longitud n, con n impar,

⇢00 . . . 0011 . . . 11

es un (n, 2, n)-codigo perfecto. Estos codigos, junto con los que solo tienen unapalabra o son todo (F

q

)n, se conocen como codigos perfectos triviales.

El problema de encontrar todos los codigos perfectos lo estudiaremos en laseccion 8 de este trabajo.

15

Page 20: Códigos correctores de errores

4. Codigos lineales.

A lo largo de esta seccion vamos a asumir que el alfabeto Fq

es el cuerpofinito o de Galois de q = pm elementos con p un numero primo. Lo denotaremospor GF (q). El espacio vectorial de dimension n sobre GF (q) formado por lasn-tuplas de elementos de GF (q) lo denotaremos por V (n, q).

Definicion 4.1. Un codigo lineal sobre GF (q) es un subespacio de V (n, q),para algun entero positivo n.

Ası, gracias a esta definicion, tenemos que un subconjunto C de V (n, q) esun codigo lineal si y solo si

1) u+ v 2 C, 8u, v 2 C.

2) au 2 C, 8u 2 C, 8a 2 GF (q).

Ademas, si C es un subespacio de dimension k de V (n, q), entonces el codigolineal C se llama [n, k]-codigo o [n, k, d]-codigo, donde n es la longitud de lapalabra, k el numero de palabras del codigo C y d su distancia mınima.

Definicion 4.2. El peso de un vector x en V (n, q), denotado por !(x), se definecomo el numero de entradas no nulas del vector x.

Uno de los teoremas mas utiles de los codigos lineales nos dice que la distanciamınima de un codigo lineal C es igual al menor peso de las palabras no nulas delcodigo. A continuacion, vamos a enunciar un lema que es util para demostrareste teorema, aunque dicha prueba sera omitida en esta memoria.

Lema 4.3. Si x, y 2 V (n, q) ) d(x, y) = !(x� y).

Teorema 4.4. Sea C un codigo lineal y sea !(C) el menor peso de las palabrasno nulas de C. Entonces, d(C) = !(C).

A continuacion, vamos a senalar algunas de las ventajas y desventajas detratar unicamente con codigos lineales.

Entre las ventajas de restringirnos simplemente al uso de codigos linealestenemos que, mientras que para un codigo general de M palabras tenemos querealizar

�M

2

�= 1

2M(M � 1) comparaciones de palabras para encontrar la dis-tancia mınima del codigo, si utilizamos codigos lineales, gracias al Teorema 4.4,podemos encontrarla examinando el peso de las M � 1 palabras no nulas delcodigo. Ademas, para especificar un [n, k]-codigo lineal solo nos hace falta unamatriz generadora del codigo (concepto que definiremos a continuacion), mien-tras que a la hora de especificar un codigo no lineal se deben listar todas laspalabras del codigo.

Definicion 4.5. Una k⇥n matriz cuyas filas forman una base del [n, k]-codigolineal C se llama matriz generadora del codigo C.

Ejemplo 4.6. Dado el [3, 3, 2]-codigo

C2 =

8>><

>>:

000 = N011 = O101 = E110 = S

,

16

Page 21: Códigos correctores de errores

tenemos que su matriz generadora es

✓0 1 11 0 1

◆.

Ejemplo 4.7. El codigo q-ario de repeticion de longitud n sobre GF (q) es un[n, 1, n]-codigo con matriz generadora

�1 1 . . . 1

�.

Otra ventaja importante del uso de codigos lineales es que conocemos buenosprocedimientos para codificarlos y decodificarlos. Estos procedimientos seranestudiados mas adelante.

Por otra parte, los codigos lineales q-arios no estan definidos salvo en loscasos en que q sea una potencia de primo. Sin embargo, podemos obtener codi-gos q-arios, sin necesidad de que q sea potencia de primo, a partir de codigoslineales con un alfabeto mayor. En la seccion 6 veremos que podemos obtenerun codigo 10-ario a partir de un 11-codigo lineal. Emplear unicamente codigoslineales puede restringirnos al uso de codigos mas debiles de lo que deseamos.Sin embargo, los codigos mas optimos son, frecuentemente, codigos lineales. Porejemplo, en un conjunto en el que se sabe que existe un codigo no trivial perfecto,existe un codigo lineal perfecto con los mismos parametros.

4.1. Codigos lineales equivalentes.

Como en la seccion anterior, vamos a dar la definicion de codigos linealesequivalentes. La naturaleza de esta definicion va a ser parecida a la dada paracodigos q-arios.

Definicion 4.8. Dos codigos lineales definidos sobre el cuerpo GF (q) se dicenequivalentes si uno puede obtenerse a partir del otro mediante combinacionesde operaciones de los siguientes tipos:

A. Permutacion de las posiciones del codigo.

B. Multiplicacion de los sımbolos que aparecen en una posicion fijada por unescalar no nulo.

Vamos a enunciar a continuacion un teorema con el que vamos a poder iden-tificar si dos codigos lineales son equivalentes a partir de su matriz generadora.

Teorema 4.9. Dos k ⇥ n matrices generan [n, k]-codigos lineales equivalentessobre GF (q) si una de las matrices puede obtenerse a partir de la otra medianteuna secuencia de operaciones de los siguientes tipos:

R1. Permutacion de filas.

R2. Multiplicacion de una fila por un escalar no nulo.

R3. Suma de una fila multiplicada por un escalar no nulo a otra.

C1. Permutacion de columnas.

C2. Multiplicacion de una columna por un escalar no nulo.

17

Page 22: Códigos correctores de errores

Vamos a exponer ahora un teorema que nos va a resultar muy util en lasposteriores secciones del trabajo.

Teorema 4.10. Sea G una matriz generadora de un [n, k]-codigo lineal. En-tonces, usando operaciones del tipo R1, R2, R3, C1 y C2, podemos trasformarG a su forma estandar, que viene dada por

�Ik

| A�,

donde Ik

es la matriz identidad de orden k y A es una k ⇥ (n� k) matriz.

Vamos a realizar a continuacion dos comentarios al teorema anterior y mos-traremos unos ejemplos sobre matrices generadoras en forma estandar.

1) Sea G la matriz generadora de un codigo lineal C. Si G puede transformarseen su forma estandar G0 mediante operaciones unicamente del tipo R1, R2y R3, entonces G y G0 generan el mismo codigo. Sin embargo, si se empleantambien operaciones del tipo C1 y C2, entonces G y G0 generaran codigosequivalentes, pero no iguales.

2) La forma estandar G0 de una matriz generadora G del codigo C no es unica.

3) Notemos que las operaciones descritas en el Teorema 4.9 son todas del tipoconocido como operaciones elementales de fila o columna, en una matriz, yque nos permiten obtener lo que se conoce como matrices equivalentes a unadada.

Ejemplo 4.11. El codigo

C2 =

8>>>>>>>>>>>>>>>>>>>>>>>>>><

>>>>>>>>>>>>>>>>>>>>>>>>>>:

0000000111111110001011100010011000110110000101100001011000010110111010001110110011100100111101001111010011110100

es un [7, 4, 3]-codigo lineal con matriz generadora

G =

0

BB@

1 1 1 1 1 1 11 0 0 0 1 0 11 1 0 0 0 1 00 1 1 0 0 0 1

1

CCA .

Vamos a calcular ahora la forma estandar de la matriz generadora:

18

Page 23: Códigos correctores de errores

G =

0

BB@

1 1 1 1 1 1 11 0 0 0 1 0 11 1 0 0 0 1 00 1 1 0 0 0 1

1

CCA �!

0

BB@

1 1 1 1 1 1 10 1 1 1 0 1 00 0 1 1 1 0 10 1 1 0 0 0 1

1

CCA �!

�!

0

BB@

1 0 0 0 1 0 10 1 1 1 0 1 00 0 1 1 1 0 10 0 0 1 0 1 1

1

CCA �!

0

BB@

1 0 0 0 1 0 10 1 0 0 1 1 10 0 1 1 1 0 10 0 0 1 0 1 1

1

CCA

�!

0

BB@

1 0 0 0 1 0 10 1 0 0 1 1 10 0 1 0 1 1 00 0 0 1 0 1 1

1

CCA = G0.

Ejemplo 4.12. Consideramos el [6, 3]-codigo definido sobre GF (3), con matrizgeneradora

G =

0

@0 0 0 1 1 10 1 1 0 1 21 0 2 0 1 1

1

A .

Con una permutacion de columnas obtenemos la matriz

G0 =

0

@1 0 0 0 1 10 1 0 1 1 20 0 1 2 1 1

1

A ,

que es una matriz generadora en forma estandar para un codigo equivalente al[6, 3]-codigo definido.

4.2. Codificacion con codigos lineales.

Sea C un [n, k]-codigo lineal sobre GF (q) con matriz generadora G. Notemosque C tiene qk palabras que identificamos con las qk k-tuplas de V (k, q). Paracodificar un vector u = u1u2 . . . uk

2 V (k, q) simplemente debemos multiplicara derecha por la matriz G, es decir, si

G =

0

BB@

r1r2. . .rk

1

CCA

entonces uG =P

k

i=1 ui

ri

. Observamos que uG es una palabra del codigo C porser combinacion lineal de las filas de la matriz generadora.

Codificar un vector u es incluso mas sencillo si G esta en forma estandar.Supongamos que

G =�Ik

| A�

conA =

�aij

19

Page 24: Códigos correctores de errores

siendo A una matriz de dimensiones k⇥ (n� k). Entonces, el vector mensaje ues codificado como

x = uG = x1x2 . . . xk

xk+1 . . . xn

donde

xi

= ui

si 1 i k, son los dıgitos del mensaje.

xk+i

=P

k

j=1 ajiuj

si 1 i n� k, son los dıgitos de comprobacion.

Estos dıgitos de comprobacion son redundantes pero tienen una funcion muyimportante: protegen al mensaje del ruido del canal.

Figura 3: David S. Sle-pian (1923–2007) fue unmatematico estadounidenseque destaco en el area deteorıa algebraica de la codi-ficacion y en la teorıa de laprobabilidad. Trabajo conClaude Shannon y RichardHamming en los Laborato-rios Bell.

Ejemplo 4.13. Sea C el [7, 4]-codigo binario del Ejemplo 4.11 para el quehabıamos encontrado su matriz generadora G:

G =

0

BB@

1 0 0 0 1 0 10 1 0 0 1 1 10 0 1 0 1 1 00 0 0 1 0 1 1

1

CCA .

El vector mensaje u = u1u2u3u4 se codifica como

(u1, u2, u3, u4, u1 + u2 + u3, u2 + u3 + u4, u1 + u2 + u4).

Tenemos entonces que

u = 0000 se codifica como 0000000.

u = 1000 se codifica como 1000101.

u = 1110 se codifica como 1110100.

4.3. Decodificacion con codigos lineales.

Imaginemos que enviamos la palabra x = x1x2 . . . xn

a traves de un canal yse recibe la palabra y = y1y2 . . . yn. Se define entonces el vector error e comoe = x� y = e1e2 . . . en.

El decodificador debe decidir, conociendo la palabra recibida y, que palabrax es la que ha sido transmitida. O equivalentemente, que error ha ocurrido.Slepian ideo un elegante metodo de decodificacion para codigos lineales basadoen el metodo del vecino mas proximo. Este metodo emplea la idea de que uncodigo lineal es un subgrupo del grupo aditivo V (n, q).

Vamos a dar una serie de conceptos y resultados previos antes de ver comofunciona.

Definicion 4.14. Sea C un [n, k]-codigo sobre GF (q) y u un vector cualquierade V (n, q). Entonces el conjunto u+ C definido por

u+ C = {u+ x | x 2 C}

se llama trasladado de C.

El concepto definido anteriormente es conocido en el algebra lineal basica yen la teorıa de grupos elemental.

Enunciamos a continuacion una serie de resultados ya conocidos pero quenos van a resultar de utilidad para manejar este concepto.

20

Page 25: Códigos correctores de errores

Lema 4.15. Sea u + C un trasladado del codigo C y v 2 u + C. Entoncesu+ C = v + C.

Teorema 4.16 (de Lagrange). Sea C un [n, k]-codigo sobre GF (q). Entonces,

1) Cada vector de V (n, q) esta en algun trasladado de C.

2) Cada trasladado contiene qk vectores.

3) Dos trasladados son disjuntos o iguales.

Ejemplo 4.17. Sea C = {0000, 1011, 0101, 1110} el [4, 2]-codigo binario conmatriz generadora

G =

✓1 0 1 10 1 0 1

◆.

Tenemos entonces que los trasladados de C son:

0000 + C = C.

1000 + C = {1000, 0011, 1101, 0110}.

0100 + C = {0100, 1111, 0001, 1010}.

0010 + C = {0010, 1001, 0111, 1100}.

Notemos que 0001 + C = {0001, 1010, 0100, 1111} = 0100 + C. Este hecho yapodıamos haberlo predicho gracias al Lema 4.15, pues 0001 2 0100 + C. Lomismo ocurre con el trasladado 0111 + C = 0010 + C, pues 0111 2 0010 + C.

Definicion 4.18. El vector que tenga menor peso en un trasladado se llamalıder del trasladado.

Notemos que puede ocurrir que en un trasladado haya mas de un vector conel mismo peso y este sea mınimo. Entonces, elegiremos al azar uno de ellos y lellamaremos lıder.

Recordemos que el Teorema de Lagrange nos decıa que V (n, q) se particionacomo trasladados disjuntos de C, es decir,

V (n, q) = (0 + C) t (u1 + C) t · · · t (us

+ C)

donde s = qn�k � 1 y, por el Lema 4.15 tomamos 0, u1, . . . , us

como lıderesdel trasladado.

Definicion 4.19. Una matriz estandar de Slepian para un [n, k]-codigo linealC es una matriz de dimension qn�k ⇥ qk de todos los vectores de V (n, q) enel que la primera fila esta formada por el codigo C, con el vector nulo en laprimera posicion, y las otras filas son los trasladados u

i

+C, con el vector lıderen primera posicion.

Vamos a dar los pasos para calcular esta matriz:

1) Listar las palabras de C en la primera fila, colocando el vector nulo en primerlugar.

2) Elegir un vector u1 que no este en la primera fila y que tenga peso mınimo.Listar el trasladado u1 + C colocando u1 debajo del vector nulo y u1 + xdebajo de x, 8x 2 C.

21

Page 26: Códigos correctores de errores

3) Elegir otro vector u2 que no este ni en la primera ni en la segunda fila yque tambien tenga peso mınimo. Una vez elegido, proceder como en el pasoanterior.

4) Repetir el paso 3) hasta que todos los trasladados esten listados y cada vectorde V (n, q) aparezca una sola vez.

Veamos ahora como decodificar empleando el metodo de Slepian. Recibidauna palabra y, el decodificador debe localizarla en la matriz estandar de Slepian.Cuando la tenga localizada, seleccionara como vector error e al vector lıdercorrespondiente a su fila. Despues, se decodifica como x = y�e, que coincide conla primera entrada de su columna. En resumen, la palabra recibida se decodificacomo la primera palabra de la columna que la contenga en la matriz estandarde Slepian.

Vamos a verlo con un ejemplo.

Ejemplo 4.20. Utilizando los trasladados que habıamos calculado en el ejemplo4.17, calculamos la matriz estandar de Slepian siguiendo los pasos marcados:

0

BB@

0000 1011 0101 11101000 0011 1101 01100100 1111 0001 10100010 1001 0111 1100

1

CCA .

Observamos que en la matriz estandar de Slepian cada entrada es la sumade la primera palabra de su columna y su fila correspondiente.

Supongamos que hemos recibido la palabra y = 0001. Tenemos entoncesque el vector error es e = 0100. Por lo tanto, decodificamos y como la palabrax = y � e = 0101 que, como ya sabıamos que ocurrirıa, es la primera palabrade la columna que contiene a y.

Sin embargo, aunque este metodo parece fiable, solo nos sirve para corregirun error si este ocurre en las primeras tres posiciones. Veamos que ocurre si elerror se da en la cuarta posicion de la palabra:

Ademas, este metodo es muy lento y costoso para codigos mas complejos.Mas adelante, veremos un metodo mas eficaz: el metodo de decodificacion porel sındorme.

Sea un [n, k]-codigo binario, C, y sean ↵1,↵2, . . . ,↵n

el numero de lıderes depeso i de los conjuntos trasladados. La probabilidad, P

corr

(C), de que un vectorrecibido sea decodificado como la palabra o vector que se envio es

Pcorr

(C) =nX

i=0

↵i

pi(1� p)n�i.

22

Page 27: Códigos correctores de errores

En el Ejemplo 4.17 no serıa difıcil probar, teniendo en cuenta esto, que laprobabilidad de decodificar erroneamente usando el codigo se reduce a la mitadcomparandola con la probabilidad de decodificar erroneamente sin usar codigoninguno, es decir, simplemente con la transmision de los dos dıgitos de cadapalabra sin codificar.

Si C es un codigo binario con d(C) = 2t+ 1 o 2t+ 2, sabemos que entoncesC puede corregir t errores. Por tanto, cada vector de peso mayor o igual quet es un lıder de un trasladado y ası ↵

i

=�n

i

�, para 0 i t. Para i > t,

los ↵i

pueden ser muy difıciles de calcular, incluso para tipos de codigos muyconocidos. No ocurre ası con los [n, k, 2t+1]-codigos perfectos, porque entonceslos lıderes son los vectores de peso menor o igual que t, y ası ↵

i

=�n

i

�, para

0 i t, y ↵i

= 0, para i > t.Esto nos reafirma en el proposito de describir este tipo de codigos, los codigos

perfectos, en este trabajo.Un [n, k]-codigo lineal C usa n sımbolos para enviar k sımbolos de mensaje.

Se dice entonces que el codigo C tiene ratio R(C) = k

n

. Es decir, que el ratiode un codigo es la razon entre el numero de sımbolos del mensaje y el numerototal de sımbolos enviados. Los buenos codigos son los que tienen un ratio alto.

Nuestro objetivo es obtener codigos con un ratio alto y una probabilidadde error pequena. ¿Pero esto se puede obtener? Antes de seguir con los codigoslineales y su decodificacion, vamos a ver un teorema muy importante debidoa Shannon que nos dice que sı. Para ello, vamos a tener que desarrollar unapequena seccion que nos permita entender su enunciado, al mismo tiempo quedamos a conocer unos pocos conceptos de lo que se conoce como teorıa de lainformacion.

23

Page 28: Códigos correctores de errores

5. Un poco de teorıa de la informacion.

Figura 4: Claude ElwoodShannon (1916–2001) fueun ingeniero electronico ymatematico estadouniden-se. Es conocido como el pa-dre de la teorıa de la in-formacion pues desarrollo elconcepto de incertidumbrede la informacion. Shan-non trabajo durante quin-ce anos en los LaboratoriosBell, donde pudo investigaracompanado de matemati-cos como Harry Nyquist oWilliam Bradford. A lo lar-go de su vida recibio nu-merosos reconocimientos deuniversidades e institucio-nes de todo el mundo.

5.1. Informacion e incertidumbre.

Ya vimos en la seccion 1 de este trabajo que la transmision de la informa-cion digital consiste en enviar cadenas de sımbolos de un determinado alfabetoa traves de un canal con ruido. Recordemos que el esquema que sigue la trans-mision de la informacion es el siguiente:

El objetivo principal de esta seccion es enunciar el Teorema de Shannon, peropara ello debemos tener en cuenta el esquema de la transmision de la informacionası como ciertos conceptos y resultados, muchos de ellos relacionados con laprobabilidad.

Vamos a definir el concepto de cantidad de informacion que proporciona elque ocurra un determinado suceso.

Si la probabilidad de que ocurra un suceso es 1, parece claro que la cantidadde informacion que aporta el que ocurra es 0. En cambio, si la probabilidadse acerca a 0, la cantidad de informacion deberıa tender a infinito. Esto esası porque si el suceso ocurre raramente, el que suceda dara una gran cantidadde informacion.

Teniendo en cuenta esto, Shannon definio la informacion de un suceso de lasiguiente manera:

Definicion 5.1. Sea E un suceso y P (E) la probabilidad de que dicho sucesoocurra. Definimos la informacion del suceso E como

I(E) = � log2(P (E)).

Observemos que si P (E) = 0, tomaremos I(E) = 0.

Ejemplo 5.2. Si se arroja una moneda al aire, la informacion de que salgacara sera:

I = log2

✓1

1/2

◆= 1.

Si se lanza una moneda al aire tres veces seguidas, la informacion de quesalgan tres caras sera

I = log2

✓1

1/8

◆= 3.

Notemos que en cada caso I representa la cantidad de sımbolos que determinael mensaje: un 0 para salir cara, y 000 para que salgan tres caras.

Esto nos indica que se usan logaritmos en base dos para que la informaciondel suceso mas simple, como lanzar una moneda y que salga cara, sea 1.

24

Page 29: Códigos correctores de errores

Definicion 5.3. Sea X una variable aleatoria que toma valores a1, . . . , an conprobabilidades p1, . . . , pn. Se define la incertidumbre o entropıa de X como

H(X) =nX

i=1

pi

I(X = ai

).

Observemos que, en la definicion anterior, si pi

= 0, el sumando correspon-diente vale 0.

Notemos que la incertidumbre es, por tanto, la suma ponderada de las can-tidades dadas por la informacion de todos los posibles estados de una variablealeatoria. Y es tambien el numero medio de bits que se necesitara para codificarlas entradas de la variable.

Ejemplo 5.4. La incertidumbre de la variable aleatoria asociada a lanzar unamoneda al aire es:

H(U) = �✓1

2log2

✓1

2

◆◆+

✓1

2log2

✓1

2

◆◆= 1.

La informacion media es ası una unidad de informacion.Si la moneda esta trucada, con 60 por ciento de probabilidad de salir cara y

40 por ciento de salir cruz, entonces:

H(V ) = �(0,6 log2(0,6)) + (0,4 log2(0,4) = 0,970.

La informacion media es entonces menor.

Si X es una variable aleatoria bidimensional, X = (U, V ), con U y V varia-bles aleatorias tales que U toma valores a1, . . . , am y V toma valores b1, . . . , bn,entonces

P (U = ai

, V = bj

) = pij

.

Se define entonces la incertidumbre o entropıa de la variable bidimensional como

H(X) = H(U, V ) = �mX

i=1

nX

j=1

pij

log2(pij).

Teorema 5.5. Si X e Y son variables aleatorias, entonces

H(X,Y ) H(X) +H(Y ),

y la igualdad se da solo si X e Y son independientes.

Demostracion. Supongamos que

ri

= P (X = ai

), (1 i m), sj

= P (Y = bj

), (1 j n),

tij

= P (X = ai

, Y = bj

), (1 i m, 1 j n).

Entonces,H(X) +H(Y ) = �(

Pi

ri

log ri

+P

j

sj

log sj

)= �(

Pi

Pj

tij

log ri

+P

j

Pi

tij

log sj

).porque r

i

=P

j

tij

, sj

=P

i

tij

.

25

Page 30: Códigos correctores de errores

Luego

H(X) +H(Y ) = �

0

@X

i

X

j

tij

log ri

sj

1

A � �

0

@X

i

X

j

tij

log tij

1

A = H(X,Y ).

Ya tenemos ası demostrada la primera parte del teorema. Vamos a comprobarahora que la igualdad solo se da si X e Y son linealmente independientes. Enefecto, la igualdad solo se da cuando

ri

sj

= tij

,

que es exactamente la condicion para que X e Y sean independientes. Luego yahemos probado el teorema.

Definicion 5.6. Sea X una variable aleatoria que toma valores a1, . . . , an y Eun suceso. Se define la incertidumbre de X condicionada a E como

H(X | E) = �nX

i=1

P (X = ai

| E) log2(P (X = ai

| E)).

Si tenemos dos variables aleatorias X e Y que toman valores a1, . . . , am yb1, . . . , bn respectivamente, definimos la incertidumbre de X condicionada a Ycomo

H(X | Y ) =nX

j=1

P (Y = bj

) H(X | Y = bj

).

Vamos a enunciar ahora un lema que va a relacionar la incertidumbre de unavariable aleatoria y la de una de las variables condicionada a la otra.

Lema 5.7. Se tiene que H(X,Y ) = H(X | Y ) +H(Y ).

Demostracion. Sin perdida de generalidad, vamos a suponer que X e Y tomanvalores enteros. Donde sea necesario, consideraremos p

ij

= P (X = i, Y = j).Entonces,

H(X,Y ) = �P

i

Pj

P (X = i, Y = j) logP (X = i, Y = j)

= �P

i

Pj

P (X = i, Y = j) logP (X = i | Y = j)P (Y = j)

= �PP

pij

logP (X = i | Y = j)�PP

pij

logP (Y = j)

= �PP

P (X = i | Y = j)P (Y = j) logP (X = i | Y = j) +H(Y )

= �P

j

P (Y = j)P

i

P (X = i | Y = j) logP (X = i | Y = j) +H(Y )

=P

j

P (Y = j)H(X | Y = j) +H(Y )

= H(Y ) +H(X | Y ).

Corolario 5.8. Dadas dos variables aleatorias X e Y , entonces

H(X | Y ) H(X).

Ademas, la igualdad se da si y solo si X e Y son independientes.

26

Page 31: Códigos correctores de errores

Demostracion. Tenemos que

H(X | Y ) = H(X,Y )�H(Y ).

Pero como H(X,Y ) H(X)+H(Y ), sustituyendo en la primera formula tene-mos que

H(X | Y ) H(X),

que era lo que querıamos probar.Como H(X,Y ) = H(X) + H(Y ) si y solo si X e Y son independientes,

sustituyendo en la primera formula de nuevo tenemos que

H(X | Y ) = H(X),

que era lo que tenıamos que probar.

Por tanto, la incertidumbre de una variable X condicionada a otra Y esmenor o igual a la incertidumbre de X. Conocer algo acerca de una variable Ypuede que ayude a saber mas sobre otra variable X. En ningun caso podra hacerque aumente la incertidumbre.

Shannon propuso una medida para la cantidad de informacion que aportasobre una variable el conocimiento de otra.

Definicion 5.9. Sean X e Y dos variables aleatorias. Se define la informacionque transmite la variable X condicionada a que haya ocurrido Y como

I(X | Y ) = H(X)�H(X | Y ).

En otras palabras, I(X | Y ) mide la cantidad de incertidumbre de X quequita Y .

Lema 5.10. Dadas dos variables aleatorias X e Y se tiene:

I(X | Y ) = I(Y | X).

Demostracion. Tenemos que

I(X | Y ) = H(X)�H(X | Y )

= H(X)� [H(X,Y )�H(Y )]

= H(X) +H(Y )�H(X,Y ) = I(Y | X).

5.2. Capacidad de un canal y Teorema de Shannon.

Vamos a definir a continuacion la capacidad de un canal. Sea S una fuenteemisora de sımbolos, a1, . . . , an, con probabilidades p1, . . . , pn, y sea F una fuen-te receptora de sımbolos, b1, . . . , bm, con probabilidades q1, . . . , qm. Observemosque las q

j

no son independientes de las pi

.Construimos a continuacion la matriz P = (p

ij

) de modo que

pij

= P (recibir bi

| enviado aj

).

Ası, P (recibir bi

) = qi

=P

n

j=1 P (bi

| aj

)P (aj

) =P

n

j=1 P (bi

| aj

) pj

.Ahora bien, si vemos S como una variable aleatoria que toma valores a1, . . . , an

y F como otra variable aleatoria que toma valores b1, . . . , bm, tenemos que

I(S | F ) = H(S)�H(S | F ) = H(S)�H(S, F ) +H(F ).

27

Page 32: Códigos correctores de errores

Por tanto, I(S | F ) es una funcion de distribucion que determina la fuente(p1, . . . , pn) y la matriz del canal.

La capacidad de un canal de comunicacion es la medida de su habilidad paratransmitir informacion.

Definicion 5.11. La capacidad del canal se define como

C = sup {I(S | F )} = max {I(S | F )},

donde el supremo se toma sobre todas las fuentes S o, mas precisamente, sobretodas las posibles distribuciones (p1, . . . , pn) de entrada.

Notemos que podemos cambiar el supremo por el maximo puesto que elsupremo esta definido en un cerrado y acotado ya que 0 p

i

1.

Ejemplo 5.12. Vamos a centrarnos ahora en el canal simetrico binario y vamosa calcular su capacidad. Recordemos que se cumple el siguiente esquema:

0

1

0

1

1� p

p

p

1� p

Entonces, si S toma valores 0 y 1 con probabilidades ↵ y �, de manera que� = 1� ↵. Vamos a calcular ahora el maximo de

I(S | F ) = H(F ) +H(S)�H(S, F ).

Tenemos que

H(S) = �↵ log↵� � log �,

H(F ) = �(↵(1�p)+�p) log(↵(1�p)+�p)�(↵p+�(1�p)) log(↵p+�(1�p)) y

H(F, S) = �↵(1�p) log(↵(1�p))�↵p log(↵p)��p log(�p)��(1�p) log(�(1�p)).

Luego

I(F | S) = p log p+(1� p) log(1� p)� (↵(1� p)+ �p) log(↵(1� p)+ �p)�(↵p+ �(1� p)) log(↵p+ �(1� p)).

Derivamos la funcion respecto a la variable ↵ y calculamos su maximo. Setiene que el maximo se obtiene en ↵ = 1

2 . Como � = 1� ↵, tenemos que

C(p) = 1 + p log p+ (1� p) log(1� p).

Notemos que C(p) es una funcion monotona para 0 p 12 , y que se

comporta como era de esperar. Se tiene que C(0) = 1 y C( 12 ) = 0, es decir, quesi p = 1

2 el canal es un autentico emisor de interferencias, mientras que si p = 0,transmite perfectamente.

Finalmente y antes de enunciar el Teorema de Shannon, vamos a definir laprobabilidad de error de un codigo.

28

Page 33: Códigos correctores de errores

Definicion 5.13. Sea C un codigo con un metodo de decodificacion y seanc1, . . . , cM las palabras codificadas del codigo C, con la misma probabiliadad deerror en su transmision. Definimos la probabilidad de error de C como

e(C) =1

M

MX

i=1

P (error | ci

transmitida).

Ademas, se define la probabilidad maxima de error de un codigo C como

be(C) = max {P (error | ci

transmitida) | i = 1, . . . ,M}.

Ahora ya estamos en condiciones de enunciar la siguiente version del Teoremade Shannon.

Teorema 5.14 (de Shannon). Sea un canal simetrico binario con probabilidadde error p y sea R un numero que satisface 0 < R < C(p). Entonces, paracualquier ✏ > 0, existe, para un n suficientemente grande, un (n, 2k, d)-codigoC con ratio k

n

R tal que e(C) < ✏.

La demostracion de este teorema no vamos a verla en este trabajo por sermuy tediosa y larga. Para quien este interesado en ella, se puede encontrar envan Lint (1982) [6] y McEliece (1977) [8].

Lo que nos dice el teorema es que si por ejemplo suponemos que la probabi-lidad de error es tal que la capacidad es C(p)=0.8, entonces sabemos que paraun n suficientemente grande, existe un codigo de longitud n con 2k palabras co-dificadas, de modo que el ratio de transmision n

k

R y la probabilidad maximade error es menor que ✏.

Lo que se consigue ası es un codigo con probabilidad de error baja a costade complejidad en la codificacion y tasa de transmision mas lenta.

El teorema nos asegura la existencia de tal codigo pero no nos dice cuales. El Teorema de Shannon es, por tanto, un teorema de existencia, pero noes constructivo.

29

Page 34: Códigos correctores de errores

6. El codigo dual. La matriz de comprobacionde paridad. Decodificacion por el sındrome.

Ya hemos visto que un codigo lineal queda completamente determinado porsu matriz generadora. Ademas, tambien podemos definirlo mediante una matrizde comprobacion de paridad. Esta matriz sera definida en esta seccion pero paraello, primero debemos dar unos conceptos previos.

Recordemos que el producto escalar u · v de los vectores u = u1u1 . . . un

y v = v1v2 . . . vn pertenecientes a V (n, q) es el escalar de GF (q) definido poru · v = u1v1 + · · ·+ u

n

vn

.Recordemos tambien que para cualesquiera u, v, w 2 V (n, q) y �, µ 2 GF (q)

se cumple:

1) u · v = v · u.

2) (�u+ µv) · w = �(u · w) + µ(v · w).

6.1. El codigo dual.

Dado un [n, k]-codigo lineal C, el codigo dual de C, denotado por C?, sedefine como el conjunto de los vectores de V (n, q) tales que son ortogonales acada palabra de C, es decir,

C? = {v 2 V (n, q) | v · u = 0, 8u 2 C}.

Vamos a ver a continuacion un lema que nos va a ayudar a caracterizar alcodigo dual de un codigo lineal C.

Lema 6.1. Sea C un [n, k]-codigo con matriz generadora G. Entonces, un vectorv 2 V (n, q) pertenece a C? si y solo si v es ortogonal a cada fila de G. Es decir,v 2 C? si y solo si vGT = 0.

El siguiente teorema nos va a decir la dimension del codigo dual C? dadala dimension de C. Su demostracion es consecuencia de un resultado basico dealgebra lineal.

Teorema 6.2. Sea C un [n, k]-codigo sobre GF (q). Entonces, su correspon-diente codigo dual, C?, es un [n, n� k]-codigo.

Ejemplo 6.3. Dado

C =

8>><

>>:

0000110000111111

,

tenemos que C? = C.

Ejemplo 6.4. Dado el siguiente codigo C,

C =

8>><

>>:

000110011101

,

tenemos que

C? =

⇢000111

.

30

Page 35: Códigos correctores de errores

Recordemos de algebra lineal que para cualquier [n, k]-codigo C, se cumple(C?)? = C.

6.2. Matriz de comprobacion de paridad.

Una vez introducidos los conceptos de la subseccion anterior, ya estamos endisposicion de definir el concepto de matriz de comprobacion de paridad.

Definicion 6.5. Una matriz de comprobacion de paridad H para un [n, k]-codigo C es una matriz generadora de C?.

La matriz de comprobacion de paridad H de un [n, k]-codigo C es una matrizde dimensiones (n� k)⇥ n que satisface GHT = 0, siendo 0 la matriz nula.

Observemos que se verifica que si H es una matriz de comprobacion deparidad de C, entonces

C = {x 2 V (n, q) | xHT = 0}.

Ası, cualquier codigo lineal queda completamente descrito por una matrizde comprobacion de paridad, al igual que ocurrıa con la matriz generadora.

Ejemplo 6.6. Dada la matriz de comprobacion de paridad

H =

✓1 1 0 00 0 1 1

◆,

tenemos que el codigo C queda definido por

C = {(x1, x2, x3, x4) 2 V (4, 2) | x1 + x2 = 0, x3 + x4 = 0}.

Las ecuaciones x1 + x2 = 0 y x3 + x4 = 0 se denominan ecuaciones de compro-bacion de paridad.

Presentamos a continuacion un teorema que va a relacionar la matriz gene-radora de un codigo lineal C con su matriz de paridad.

Teorema 6.7. Si G = (Ik

| A) es la matriz generadora en forma estandar deun [n, k]-codigo, entonces una matriz de comprobacion de paridad para C esH = (�AT | I

n�k

).

Ejemplo 6.8. Supongamos el [7, 4]-codigo del Ejemplo 4.11, que tenıa comomatriz generadora

G =

0

BB@

1 0 0 0 1 0 10 1 0 0 1 1 10 0 1 0 1 1 00 0 0 1 0 1 1

1

CCA .

Tenemos entonces que la matriz de comprobacion de paridad para ese codigo es

H =

0

@1 1 1 0 1 0 00 1 1 1 0 1 01 1 0 1 0 0 1

1

A .

Definicion 6.9. Una matriz de comprobacion de paridad esta en forma estandarsi H = (B | I

n�k

).

Observamos que si un codigo tiene una matriz de comprobacion de paridadH que no esta en forma estandar, H se puede reducir a forma estandar de lamisma forma que se hace con la matriz generadora.

31

Page 36: Códigos correctores de errores

6.3. Decodificacion por el sındrome.

En esta subseccion vamos a ver como decodificar con el metodo del sındrome.Daremos primero la definicion de sındrome de un vector y, tras una serie delemas, explicaremos y daremos un ejemplo de este metodo de decodificacion.

Definicion 6.10. Sea H una matriz de comprobacion de paridad de un [n, k]-codigo C. Entonces, para cada vector y 2 V (n, q), el 1⇥ (n� k) vector S(y) =yHT se denomina sındrome de y.

Notemos que si las filas de H son h1, h2, . . . , hn�k

, entonces

S(y) = (yh1, yh2, . . . , yhn�k

).

Ademas, S(y) = 0 si y solo si y 2 C.

Lema 6.11. Dos vectores u y v estan en el mismo trasladado de C si y solo sitienen el mismo sındrome.

Demostracion. Vamos a demostrar este lema usando la definicion de trasladadode C.

u y v estan en el mismo trasladado , u+ C = v + C, u� v 2 C, (u� v)HT = 0, uHT = vHT

, S(u) = S(v).

Una vez vistos estos resultados, vamos a ver como funciona el metodo dedecodificacion por el sındrome.

Debemos calcular la matriz estandar de Slepian anadiendole una columnaextra que estara formada por los sındromes de los vectores lıderes del trasladadocorrespondiente. Ya construida esta matriz, el metodo consiste en lo siguiente:recibido un vector y, calculamos su sındrome y lo localizamos en la matriz cons-truida. Una vez localizado, buscamos y en la fila correspondiente al sındrome dey y decodificamos y como la primera palabra de la columna en la que esta loca-lizada.

Vamos a ver como funciona este metodo con un ejemplo.

Ejemplo 6.12. Sea el [4, 2]-codigo del Ejemplo 4.17 con matriz generadora enforma estandar

G =

✓1 0 1 10 1 0 1

◆.

Utilizando el Teorema 6.7, tenemos que su matriz de comprobacion de paridad es

H =

✓1 0 1 01 1 0 1

◆.

Calculamos los sındromes de los vectores lıderes:

S(0000) = 00.

S(1000) = 11.

S(0100) = 01.

S(0010) = 10.

32

Page 37: Códigos correctores de errores

Montamos la matriz de Slepian anadiendole la columna de los sındromes:0

BB@

0000 1011 0101 1110 001000 0011 1101 0110 110100 1111 0001 1010 010010 1001 0111 1100 10

1

CCA .

Imaginemos que recibimos la palabra y = 1101. Su sındrome es S(y) = 11.Localizamos el sındrome de la palabra recibida y decodificamos y por x = 0101.

Si el [n, k]-codigo tiene una n grande, este metodo es mas eficaz que el metodode decodificacion empleando simplemente la matriz estandar de Slepian.

Si quisieramos programar este metodo, deberıamos construir la tabla debusqueda del sındrome, que tiene como columnas el sındrome de los vectoreslıderes y estos ultimos. Despues, procederıamos del siguiente modo:

1) Recibido un vector y, le calculamos su sındrome: S(y) = yHT .

2) Localizamos el sındrome de y en la columna de sındromes de la tabla quehemos creado.

3) Decodificamos y como x = y � f(z), siendo f(z) el vector lıder correspon-diente al sındrome calculado.

Ejemplo 6.13. Usando el ejemplo anterior, formamos la tabla de busqueda delsındrome:

Sındrome (z) Lıder (f(z))00 000011 100001 010010 0010

Supongamos que hemos recibido el vector y = 1101. Calculamos su sındromey obtenemos que S(y) = 11. Lo localizamos en la tabla y tenemos que su vectorlıder correspondiente es 1000. Ası, decodificamos y como x = y� f(z) = 1101�1000 = 0101.

6.4. Decodificacion incompleta.

El metodo de decodificacion incompleta es una combinacion de correcciony deteccion de errores. Dado un codigo C tal que su distancia mınima sead(C) = 2t + 1 o d(C) = 2t + 2, entonces podemos garantizar que con estemetodo se van a corregir t errores en cualquier palabra del codigo y se van adetectar mas de t errores.

Vamos a ver como decodificar con este metodo teoricamente y despues loejemplificaremos.

Construimos la matriz estandar de Slepian de la manera usual, de maneraque los vectores lıderes vayan aumentando su peso. Despues, dividimos la matrizen una parte superior, donde estaran los vectores lıderes cuyo peso sea menor oigual que t, y en una parte inferior, donde estaran el resto de vectores. Entonces,si recibimos un vector y que esta en la parte superior de la matriz, asumiremosque el numero de errores ocurridos es menor o igual que t y decodificaremosy como la primera palabra de la columna correspondiente. Sin embargo, si y

33

Page 38: Códigos correctores de errores

esta en la parte inferior de la matriz, concluiremos que han ocurrido mas de terrores y no somos capaces de solucionarlos.

Veamos un ejemplo de como funciona este metodo.

Ejemplo 6.14. Sea C el [5, 2]-codigo lineal binario con matriz generadora

G =

✓1 0 1 1 00 1 0 1 1

◆.

Construimos la matriz descrita anteriormente y obtenemos:

0

BBBBBBBBBB@

00000 10110 01011 1110110000 00110 11011 0110101000 11110 00011 1010100100 10010 01111 1100100010 10100 01001 1111100001 10111 01010 11100

11000 01110 10011 0010110001 00111 11010 01100

1

CCCCCCCCCCA

.

Ası, si recibimos el vector y = 00011, lo decodificamos como 01011. Pero sirecibimos y = 11010, debemos pedir que nos transmitan la informacion de nuevoya que han ocurrido mas errores de los que nuestro codigo es capaz de corregir.

Observamos que si en este ejemplo se recibiese una palabra y de la parteinferior y se pudiese corregir, como los vectores lıderes de la parte inferior tienenpeso 2, significarıa que ocurren dos errores (no ocurre uno porque si no, lapalabra estarıa en la parte superior de la matriz). Si por ejemplo recibimos lapalabra y = 10011, entonces y se podrıa decodificar como 01011 o 10110.

El metodo de decodificacion incompleta es especialmente util cuando la dis-tancia de un codigo es par, ya que se garantiza la correccion de al menos t erroresy la deteccion de cualesquiera t+ 1 errores.

Vamos a ver a continuacion, mediante un ejemplo, como decodificar de formaincompleta utilizando la tabla de busqueda de sındromes.

Ejemplo 6.15. Dado el codigo del ejemplo anterior tenemos que una matrizde comprobacion de paridad es

H =

0

@1 0 1 0 01 1 0 1 00 1 0 0 1

1

A .

Obtenemos ahora los sındromes de los vectores lıderes de la parte superior dela matriz del ejercicio anterior y construimos la tabla de busqueda de sındromes,que queda de la siguiente manera:

Sındrome (z) Lıder (f(z))000 00000110 10000011 01000100 00100010 00010001 00001

34

Page 39: Códigos correctores de errores

Ahora bien, recibido un vector y, calculamos su sındrome, S(y), y procedemosde la siguiente manera:

Si S(y) aparece en la columna de sındromes de la tabla, entonces decodifi-camos y como x = y�f(z). Por ejemplo, si recibimos el vector y = 01111,tenemos que S(y) = 100. Como este aparece en la tabla de busqueda desındromes, entonces decodificamos y como x = y�f(z) = 01111�00100 =01011.

Si S(y) no aparece en la columna de sındromes de la tabla, entonces asu-mimos que ha ocurrido mas de 1 error y no podremos decodificar el vectory. Por ejemplo, recibido el vector y = 10011, calculamos su sındrome:S(y) = 101. Como este sındrome no aparece en la columna de sındromesde la tabla, asumimos que ocurren mas errores de los que nuestro codigoes capaz de corregir.

Para finalizar esta seccion vamos a ver un ejemplo de un codigo lineal nobinario con un buen metodo de decodificacion del sındrome incompleta que norequiere ni siquiera una tabla de busqueda del sındrome. En este ejemplo consi-deraremos un codigo decimal, pero como 10 no es potencia de primo, derivaremosel codigo a un codigo lineal definido sobre GF (11).

Ejemplo 6.16. Consideremos el [10, 8]-codigo definido sobre GF (11) con ma-triz de comprobacion de paridad

H =

✓1 1 1 1 1 1 1 1 1 11 2 3 4 5 6 7 8 9 10

◆.

Sea C el codigo 10-ario obtenido de este codigo omitiendo las palabras que ten-gan el dıgito 10. Es decir, C consiste en todos los numeros con 10 dıgitos deci-males x = x1x2 . . . x10 que satisfacen las siguientes ecuaciones de comprobacionde paridad:

Pk=10i=1 x

i

⌘ 0(mod 11) yP

k=10i=1 ix

i

⌘ 0(mod 11).Las palabras que forman C se pueden determinar a partir de una matriz

generadora en forma estandar para C. Para ello, vamos a transformar H a suforma estandar y despues aplicaremos el Teorema 6.7:

H =

✓1 1 1 1 1 1 1 1 1 11 2 3 4 5 6 7 8 9 10

◆�!

✓2 3 4 5 6 7 8 9 10 01 2 3 4 5 6 7 8 9 10

◆�!

✓9 8 7 6 5 4 3 2 1 010 9 8 7 6 5 4 3 2 1

◆�!

✓9 8 7 6 5 4 3 2 1 03 4 5 6 7 8 9 10 0 1

◆= H 0.

Luego la matriz generadora de C es

G =

0

BBBBBBBBBB@

2 83 74 6

I8 5 56 47 38 29 1

1

CCCCCCCCCCA

.

35

Page 40: Códigos correctores de errores

Entonces tenemos que C = {(x1, x2, . . . , x8, 2x1+3x2+4x3+5x4+6x5+7x6+8x7 + 9x8, 8x1 + 7x2 + 6x3 + 5x4 + 4x5 + 3x6 + 2x7 + x8)}, con x

i

2 GF (10).Vamos a describir ahora el metodo de decodificacion incompleta por el sındro-

me, que corregira cualquier error y detectara cualquier doble error que surjadebido a la transposicion de dos dıgitos de la palabra.

Supongamos que x = x1x2 . . . x10 es la palabra enviada e y = y1y2 . . . y10 esla recibida. Calculamos el sındrome de y:

S(y) = yHt = (A,B) =

k=10X

i=1

yi

,k=10X

i=1

iyi

!(mod 11).

Supongamos que, para algunos j, k 6= 0, ha ocurrido un error de la siguienteforma:

y1y2 . . . y10 = x1 . . . xj�1, xj

+ k, xj+1 . . . x10,

entonces

A =k=10X

i=1

yi

=k=10X

i=1

xi

+ k ⌘ k (mod 11).

B =k=10X

i=1

iyi

=k=10X

i=1

iyi

+ jk ⌘ jk (mod 11).

Tenemos ası que la magnitud del error, k, viene dada por A y la posicion, j,donde ocurre el error, viene dado por B

A

. Entonces, los pasos de decodificacionson los siguientes:

Si (A,B) = (0, 0), entonces no ha ocurrido ningun error y tenemos que yes la palabra enviada.

Si A 6= 0 y B 6= 0, entonces ha ocurrido un unico error y se corrigerestando A a la B

A

entrada de y.

Si A = 0 o B = 0, pero no ambos a la vez, entonces se han detectado almenos dos errores y no vamos a poder corregirlos.

Por ejemplo, imaginemos que recibimos la palabra y = 1743209561. Entoncestenemos que A = 5 y B = 6. Luego B

A

= 6 · 5�1 = 6 · 9 = 54 = 10. Por lo tanto,debemos restarle a la decima posicion de y la cantidad A = 5, es decir,que enla decima posicion tomaremos 1� 5 = �4 = 7. Ası, x = 1743209567.

Notemos que este metodo es mucho mas rapido que el metodo del vecinomas proximo, que consistıa en comparar el vector recibido con cada palabra delcodigo. Con este metodo no tenemos necesidad de conocer todas las palabrasdel codigo lo que, a la hora de programarlo para usarlo en la vida cotidiana, nosahorra mucha memoria.

36

Page 41: Códigos correctores de errores

7. Codigos de Hamming.

Los codigos de Hamming son una familia importante de codigos correctoreslineales de un solo error, descubiertos en 1950 por Hamming y en 1949 porGolay. Su caracterıstica principal es su facilidad para codificar y decodificar.Los codigos de Hamming estan definidos sobre cualquier cuerpo finito GF (q).Nosotros nos restringiremos primero al caso binario y despues estudiaremosotros casos.

Definicion 7.1. Sea r un entero positivo y H una matriz tal que H 2 M(r ⇥(2r � 1)) y sus columnas son todos los vectores distintos de cero de V (r, 2).Entonces, el codigo que tiene a Hcomo matriz de paridad se denomina codigobinario de Hamming y se denota por Ham(r, 2).

Notemos que:

El codigo Ham(r, 2) tiene longitud n = 2r � 1 y dimension k = n � r.El numero r = n � k es el numero de sımbolos de comprobacion en cadapalabra y se le denomina redundancia del codigo.

Como las columnas de H pueden ser cogidas en cualquier orden, el codigode Hamming Ham(r, 2) es, para cualquier redundancia r, equivalente.

Ejemplo 7.2. Una matriz de paridad para el codigo de Hamming Ham(3, 2) es:

H =

0

@0 0 0 1 1 1 10 1 1 0 0 1 11 0 1 0 1 0 1

1

A .

En este caso hemos cogido las columnas en el orden natural en el que in-crementan los numeros binarios (de uno a siete). Para poner la matriz H enforma estandar tendremos que ordenar las columnas de forma diferente:

0

@0 1 1 1 1 0 01 0 1 1 0 1 01 1 0 1 0 0 1

1

A .

Ahora bien, por el Teorema 6.7 tenemos que una matriz generadora para elcodigo Ham(3, 2) es:

G =

0

BB@

1 0 0 0 0 1 10 1 0 0 1 0 10 0 1 0 1 1 00 0 0 1 1 1 1

1

CCA .

Se puede comprobar que este codigo es equivalente al [7, 4, 3]-codigo perfectodel Ejemplo 4.11.

Esto nos lleva a preguntarnos si todos los codigos binarios de Hamming seranperfectos. El siguiente teorema nos afirma que sı.

Teorema 7.3. El codigo binario de Hamming Ham(r, 2), para r � 2,

1) Es un [2r � 1, 2r � 1� r]-codigo.

2) Tiene distancia mınima 3 (por lo que es un codigo que solo corrige un error).

37

Page 42: Códigos correctores de errores

3) Es un codigo perfecto.

Demostracion. 1) Por definicion, Ham(r, 2)? es un [2r � 1, r]-codigo y, por lotanto, Ham(r, 2) es un [2r � 1, 2r � 1� r]-codigo.2) Como Ham(r, 2) es un codigo lineal, por el Teorema 4.4, es suficiente ver quelas palabras no nulas de Ham(r, 2) tienen peso mayor o igual que 3. Vamos aprobar esto viendo que Ham(r, 2) no tiene palabras de peso 1 o 2.

Supongamos que Ham(r, 2) tiene una palabra x con peso 1, es decir,

x = 0 . . . 010 . . . 0 (con un 1 en la i-esima posicion).

Como x es ortogonal a cada fila de la matriz de comprobacion de paridad H,entonces la entrada i de cada fila de H es cero. Por lo tanto, la i-esima columnade H es el vector nulo, contradiciendo la definicion de H. Luego no hay palabrascon peso 1 en Ham(r, 2).

Supongamos ahora que Ham(r, 2) tiene una palabra con peso 2, es decir,

x = 0 . . . 010 . . . 010 . . . 0 (con unos en las i-esima y j-esima posiciones).

Denotando la fila s-esima de H por [hs1hs2 . . . hsn

], como x es ortogonal acada fila de H, tenemos que

hsi

+ hsj

⌘ 0 (mod 2), para s = 1, 2, . . . , r;

que es equivalente a

hsi

= hsj

(mod 2), para s = 1, 2, . . . , r.

Por lo tanto, la i-esima y la j-esima columnas de H son identicas, contradiciendola definicion de H. Luego no hay palabras con peso 2 en Ham(r, 2).

Ası, d(Ham(r, 2)) � 3. Por otro lado, Ham(r, 2) contiene palabras de peso 3.Por ejemplo, si las tres primeras columnas de H son

0 0 0...

......

0 0 00 1 11 0 1

entonces el vector 11100 . . . 0 es ortogonal a cada fila de H y, por lo tanto,pertenece a Ham(r, 2).

3) Para ver que Ham(r, 2) es un codigo perfecto, es suficiente con ver que severifica la Definicion 3.17. Tomando t = 1, n = 2r � 1 y M = 2n�r, tenemos

2n�r

✓1 +

✓n

1

◆◆= 2n�r(1 + n) = 2n�r(1 + 2r � 1) = 2n.

Como se verifica la Definicion 3.17, entonces Ham(r, 2) es un codigo perfecto.

7.1. Decodificacion con un codigo de Hamming binario.

Como el codigo Ham(r, 2) es un codigo perfecto que corrige un unico error,entonces los coconjuntos lıderes son precisamente los 2r(= n + 1) vectores deV (n, 2) de peso menor o igual que 1.

38

Page 43: Códigos correctores de errores

El sındrome del vector (0, ..., 0, 1, 0, ..., 0) (con un 1 en la j-esima posicion)es (0, ..., 0, 1, 0, ..., 0)HT , que es justamente la traspuesta de la j-esima columnade H.

Ademas, si las columnas de H estan ordenadas en el orden natural en elque incrementan los numeros binarios, es decir, la j-esima columna de H es larepresentacion binaria de j, entonces tenemos el siguiente algoritmo de decodi-ficacion:

1) Cuando un vector y es recibido, se debe calcular su sındrome: S(y) = yHT .

2) Si S(y) = 0, asumimos que y es la palabra que habıa sido enviada.

3) Si S(y) 6= 0, entonces, asumiendo un unico error, S(y) nos proporcionara larepresentacion binaria de la posicion del error y ası el error podra ser corre-gido.

Ejemplo 7.4. Considerando

H 0 =

0

@0 0 0 1 1 1 10 1 1 0 0 1 11 0 1 0 1 0 1

1

A ,

entonces, si y = 1101011, entonces S(y) = 110, indicando un error en la posi-cion seis y ası podemos decodificar y como 1101001.

7.2. Codigos binarios extendidos de Hamming.

Un codigo binario extendido de Hamming, denotado por Ham(r,2), es elcodigo que se obtiene de anadirle al codigo Ham(r, 2) un dıgito de comprobacionglobal.

La distancia mınima aumentara de 3 a 4 y, ademas, el codigo binario exten-dido de Hamming sera un codigo lineal y un [2r, 2r � 1� r, 4]-codigo.

Veremos a continuacion que el codigo extendido Ham(r,2) no es mejor que elcodigo Ham(r, 2) cuando lo usemos para decodificar completamente. En reali-dad, va a ser menos eficiente ya que al tener dıgitos extra para cada palabra,el ratio de transmision de informacion disminuira. Sin embargo, como tiene dis-tancia mınima 4, Ham(r,2) es ideal para decodificaciones incompletas ya quepodra simultaneamente corregir un error y detectar hasta dos errores.

Veamos como podemos calcular la matriz de paridad para el codigo Ham(r,2).Si H es la matriz de paridad del codigo Ham(r, 2), entonces la matriz de paridadH 0 para el codigo extendido de Hamming Ham(r, 2) es:

H 0 =

0

BBBBB@

00

H...0

1 1 . . . 1 1

1

CCCCCA.

La ultima fila nos da la ecuacion de comprobacion global de las palabras, esdecir, x1 + x2 + ...+ x

n+1 = 0.Si H esta tomada de forma que sus columnas vayan aumentando ordenada-

mente el valor de los numeros binarios, tendremos un algoritmo ordenado dedecodificacion incompleta.

39

Page 44: Códigos correctores de errores

Ejemplo 7.5. Ham(3,2) tiene como matriz de paridad

H =

0

BB@

0 0 0 1 1 1 1 00 1 1 0 0 1 1 01 0 1 0 1 0 1 01 1 1 1 1 1 1 1

1

CCA .

El sındrome del vector (0, ..., 0, 1, 0, ..., 0) (con un 1 en la j-esima posicion)es (0, ..., 0, 1, 0, ..., 0)HT , que es justamente la traspuesta de la j-esima columnade H. El algoritmo de decodificacion incompleta funciona como sigue:

Supongamos que recibimos el vector y, cuyo sındrome es S(y) = yHT =(s1, s2, s3, s4). Entonces:

Si s4 = 0 y (s1, s2, s3) = 0, asumimos que no hay errores. Por ejemplo, sirecibimos la palabra y = (1, 0, 0, 0, 0, 1, 1, 1) tenemos que S(y) = (0, 0, 0, 0),es decir, s4 = 0 y (s1, s2, s3) = (0, 0, 0), por lo que asumimos que no haocurrido ningun error.

Si s4 = 0 y (s1, s2, s3) 6= 0, asumimos que al menos han ocurrido dos erro-res. Por ejemplo, si recibimos la palabra y = (0, 1, 1, 0, 1, 0, 0, 1) tenemosque S(y) = (1, 0, 0, 0), es decir, s4 = 0 y (s1, s2, s3) = (1, 0, 0) 6= (0, 0, 0),por lo que asumimos que han ocurrido al menos dos errores.

Si s4 = 1 y (s1, s2, s3) = 0, asumimos un unico error en el ultimo lugar.Por ejemplo, si recibimos la palabra y = (1, 1, 1, 0, 0, 0, 0, 0) tenemos queS(y) = (0, 0, 0, 1), es decir, s4 = 1 y (s1, s2, s3) = (0, 0, 0), por lo queasumimos que hay un error en la ultima posicion, es decir, la palabraenviada es x = (1, 1, 1, 0, 0, 0, 0, 1).

Si s4 = 1 y (s1, s2, s3) 6= 0, asumimos que hay un unico error en laposicion j, donde j es el numero cuya representacion binaria viene dadapor (s1, s2, s3). Por ejemplo, si recibimos la palabra y = (0, 1, 0, 0, 0, 0, 0, 0)tenemos que S(y) = (0, 1, 0, 1), es decir, s4 = 1 y (s1, s2, s3) = (0, 1, 0) 6=(0, 0, 0), por lo que asumimos que hay un error en la segunda posicion, esdecir, la palabra enviada es x = (0, 0, 0, 0, 0, 0, 0, 0).

7.3. Un teorema fundamental.

Antes de definir los codigos de Hamming sobre cuerpos finitos GF (q), vamosa establecer una relacion entre la distancia mınima de un codigo lineal y laindependencia lineal de las columnas de su matriz de paridad.

Teorema 7.6. Supongamos que C es un [n, k]-codigo sobre GF (q) con matrizde paridad H. Entonces, la distancia mınima de C es d si y solo si cualesquierad � 1 columnas de H son linealmente independientes pero hay d columnas queson linealmente dependientes.

Demostracion. Por el Teorema 4.4 la distancia mınima de C es el menor peso delas palabras de C no nulas. Sea x = x1x2 . . . xn

un vector de V (n, q). Entonces,

40

Page 45: Códigos correctores de errores

x 2 C , xHT = 0

, x1H1 + x2H2 + · · ·+ xn

Hn

= 0,

donde H1, H2, . . . , Hn

son las columnas de H.Entonces, para cada palabra x de peso d, existe un conjunto de d colum-

nas de H linealmente dependientes. Por otro lado, si existiese un conjunto ded � 1 columnas de H, H

i1 , Hi2 , . . . , Hid�1 , linealmente dependientes, entoncesexistirıan escalares x

i1 , xi2 , . . . , xid�1 , no todos nulos, tales que

xi1Hi1 + x

i2Hi2 + · · ·+ xid�1Hid�1 = 0.

Pero entonces el vector x = (0 . . . 0xi10 . . . 0xi20 . . . 0xid�10 . . . 0), teniendo

xij en la i

j

-esima posicion, para j = 1, 2, . . . , d � 1, y ceros en el resto deposiciones, satisface xHT = 0 y entonces tenemos una palabra no nula de pesomenor que d. Con esto la implicacion directa y recıproca se demuestran sindificultad.

Este teorema no solo nos proporciona un modo para establecer la distanciamınima de un codigo lineal cuando la matriz H ha sido dada, sino que tam-bien proporciona un medio de construir la matriz de control de paridad paraproporcionar un codigo de distancia mınima garantizada.

7.4. Codigos de Hamming q-arios.

En esta subseccion nos vamos a centrar en codigos con distancia mınima 3.Como C es un codigo con distancia mınima 3, necesitamos que dos columnas desu matriz de control de paridad, H, sean linealmente independientes. Para unaredundancia r fijada, vamos a construir un [n, n� r, 3]-codigo sobre GF (q), conn tan grande como queramos, de forma que podamos encontrar un conjunto devectores no nulos de V (r, q) tal que ninguno sea multiplo de otro.

Cualquier vector no nulo v de V (r, q) tiene exactamente q � 1 multiplos es-calares distintos de cero, formando ası el conjunto {�v | � 2 GF (q),� 6= 0}.Realmente, los qr � 1 vectores no nulos de V (r, q) pueden ser repartidos en(qr � 1)/(q � 1) conjuntos, a los que llamaremos clases. Dos vectores seranmultiplos escalares si y solo si estan en la misma clase.

Ejemplo 7.7. En V (2, 3), tendremos las siguientes clases:{(0, 1), (0, 2)} , {(1, 0), (2, 0)} , {(1, 1), (2, 2)} y {(1, 2), (2, 1)}.

Eligiendo un vector de cada una de las clases, obtendremos un conjuntocon (qr � 1)/(q � 1) vectores, de forma que no son linealmente independientesdos a dos. Usando el Teorema 7.6, tomando estos vectores como las columnasde H, obtendremos una matriz de control de paridad para el [(qr � 1)/(q �1), (qr � 1)/(q � 1) � r, 3]-codigo lineal. Este codigo se denomina codigo q-ariode Hamming y lo denotaremos por Ham(r, q).

Observemos que podemos tomar matrices de control de paridad diferentespara un mismo codigo Ham(r, q), para ciertos r y q dados, pero todas las ma-trices podran ser obtenidas a partir de otra de ellas permutando las columnasy/o multiplicando alguna columna por escalares no nulos. Ası, tenemos que loscodigos de Hamming estan unıvocamente definidos por sus parametros, salvoequivalencia.

41

Page 46: Códigos correctores de errores

Una manera sencilla de escribir la matriz de control de paridad para Ham(r, q)es listar las columnas con las r-tuplas de V (r, q) distintas de cero con la primeraentrada distinta de cero igual a uno.

Ejemplo 7.8. Usando el ejercicio anterior, tenemos que una matriz de controlde paridad para Ham(2, 3) es

H =

✓0 1 1 11 0 1 2

◆.

Teorema 7.9. El codigo q-ario de Hamming, Ham(r, q), es un codigo perfectoque corrige un solo error.

Demostracion. Construimos Ham(r, q) para que sea un (n,M, 3)-codigo con n =q

r�1q�1 y M = qn�r como hemos dicho antes. Tomando t = 1 en la Definicion 3.17tenemos que

qn�r(1 + n(q � 1)) = qn�r(1 + qr � 1) = qn,

luego efectivamente Ham(r, q) es un codigo perfecto.

Corolario 7.10. Si q es potencia de primo y n = (qr � 1)/(q � 1), entonces,para un entero r � 2, tenemos que A

q

(n, 3) = qn�r.

7.5. Decodificando con un codigo q-ario de Hamming.

Como el codigo q-ario de Hamming es un codigo perfecto que corrige un soloerror, los coconjuntos lıderes, a parte del nulo, son precisamente los vectoresde peso 1. El sındrome de los coconjuntos lıderes es, con y = (0, ..., 0, b, 0, ..., 0)y b en la j-esima posicion, S(y) = yHT = bHT

j

, donde Hj

denota la j-esimacolumna de la matriz H.

La decodificacion funciona de la siguiente manera. Una vez recibido el vectory, calculamos su sındrome: S(y) = yHT .

Si S(y) = 0, entonces no ha ocurrido ningun error.

Si S(y) 6= 0, entonces S(y) = bHT

j

, para algun b y algun j y el error secorrige restandole b a la j-esima entrada de y.

7.6. Acortando un codigo.

Acortar un codigo puede ser util si deseamos construir un codigo con unacierta longitud y una distancia mınima dada y conocemos un buen codigo conuna longitud n y una distancia mınima igual a la que deseamos.

Supongamos que C es un (n,M, d)-codigo q-ario. Consideremos una posicionde coordenada fija, la j-esima, y un sımbolo fijo � del alfabeto. Si tomamostodas las palabras del codigo C que tienen a � como j-esima entrada y despuesborramos esa j-esima coordenada de todas esas palabras, obtendremos un nuevocodigo C 0 de longitud n� 1, con menos palabras pero en general con la mismadistancia mınima que C. C 0 se denomina codigo acortado de C.

Si C es un [n, k, d]-codigo lineal y el sımbolo eliminado es el 0, entonces elcodigo acortado C 0 sera un [n� 1, k � 1, d0]-codigo lineal, donde d0 d.

Si C tiene una matriz de control de paridad H, entonces la matriz de controlde paridad del codigo acortado C 0 se obtiene eliminando la columna correspon-diente de H, es decir, si eliminamos la j-esima componente de las palabras delcodigo, entonces tendrıamos que eliminar la j-esima columna de H.

42

Page 47: Códigos correctores de errores

8. Codigos perfectos

Figura 5: Marcel J. E. Go-lay (1902–1989) fue un ma-tematico suizo que aplico lasmatematicas al mundo real.En concreto en el ambitomilitar y en la industria. Es-tudio ingenierıa electrica enZurich, y en 1929 se tras-lado a los Laboratorios Bell,en Nueva York. Despues,entro en el departamento desenales de la armada ame-ricana. En 1963 se fue ala companıa Perkin-Elmer,donde trabajo como investi-gador el resto de su vida.

Recordemos de la seccion 2 que los codigos q-arios correctores de t errores yde longitud n son perfectos si las esferas de radio t con centro en las palabrascubren el espacio (F

q

)n sin solaparse, es decir, un (n,M, 2t+1)-codigo q-ario esperfecto si y solo si la condicion de empaquetamiento de esferas se verifica:

M

⇢1 + (q � 1)n+ (q � 1)2

✓n

2

◆+ · · ·+ (q � 1)t

✓n

t

◆�= qn.

A parte de ser los codigos mas eficientes para los n y d = 2t + 1 dados,los codigos perfectos son muy importantes para los matematicos ya que estanasociados con los homomorfismos de grupos.

El problema de encontrar todos los codigos perfectos lo propuso M. J. E.Golay en 1949 [1], pero no fue resuelto hasta 1973. El problema lo resolvio J.H. van Lint [5] y A. Tietavainen [17] pero solo para alfabetos cuyo numero deelementos es una potencia de primo.

Los codigos perfectos triviales, tambien definidos en la seccion 2, eran loscodigos binarios de repeticion n, con n par, que consistıan en una unica palabrao en todo (F

q

)n.En la seccion anterior tambien definimos los codigos q-arios de Hamming

perfectos con parametros (n,M, d) = ((qr � 1)/(q � 1), qn�r, 3), para cualquierr � 2, r 2 Z y cualquier q potencia de primo. Se puede observar que la condicionde empaquetamiento de esferas se verifica para cualquier q 2 Z, pero solo sepueden construir codigos perfectos para q potencia de primo.

Un acercamiento natural a encontrar todos los codigos perfectos es analizan-do las soluciones de la condicion de empaquetamiento de esferas, para distintosq, M , n y t, es decir, buscando q, n y t de forma que

tX

i=0

(q � 1)i✓n

i

sea potencia de q. Golay encontro solo tres posibles soluciones a esta ecua-cion: (n,M, d) = (23, 212, 7), (n,M, d) = (90, 278, 5) para q = 2 y (n,M, d) =(11, 36, 5) para q = 3.

Golay solo estaba interesado en los codigos lineales: calculo las matricesgeneradoras de los codigos con los parametros (23, 212, 7) y (11, 36, 5). Ademas,Golay demostro el siguiente teorema:

Teorema 8.1. No existe el [90, 78, 5]-codigo binario lineal.

Demostracion. Supongamos que H es una matriz de comprobacion de pari-dad para un [90, 78, 5]-codigo binario. Entonces H es una matriz de dimension12 ⇥ 90, cuyas columnas denotaremos por H1, H2, . . . , H90. Usando el Teorema7.6, cualesquiera 4 columnas de H son linealmente independientes, por lo tantoel conjunto

X = {0, Hi

, Hj

+Hk

| 1 i 90, 1 j 90}es un conjunto de 1+90+

�902

�vectores columna distintos. Pero 1+90+

�902

�= 212,

luego X es el espacio V (12, 2). Por tanto, el numero de vectores con peso imparen X es 211. Vamos a calcular este numero de otra manera. Supongamos que mcolumnas de H tienen peso impar, entonces 90 �m columnas tienen peso par.Por el Lema 3.9 tenemos que

!(Hj

+Hk

) = !(Hj

) + !(Hk

)� 2!(Hj

\Hk

).

43

Page 48: Códigos correctores de errores

Luego !(Hj

+ Hk

) es impar si y solo si !(Hj

) o !(Hk

) son impares. Luego elnumero de vectores con peso impar en X esm+m(90�m). Asım(91�m) = 211,pero entonces tanto m como 91 � m deberıan ser potencias de 2 y esto esimposible para cualquier entero m. Por lo tanto, no existe el [90, 78, 5]-codigobinario.

8.1. El [23,12,7]-codigo binario de Golay.

En este apartado vamos a representar el codigo binario de Golay como el lohacıa: mostrando su matriz generadora. Veremos ası que este codigo realmenteexiste y podremos ver mas facilmente sus propiedades y su distancia mınima.

Por el Teorema 3.10 y el Ejemplo 5.4, sabemos que la existencia del [23, 12, 7]-codigo C implica la existencia del [24, 12, 8]-codigo C 0, y viceversa. Ası, C 0 sedenomina codigo extendido de Golay.

Teorema 8.2. El codigo G24 que tiene como matriz generadora a G = (I12 | A),con

A =

0

BBBBBBBBBBBBBBBBBB@

0 1 1 1 1 1 1 1 1 1 1 11 1 1 0 1 1 1 0 0 0 1 01 1 0 1 1 1 0 0 0 1 0 11 0 1 1 1 0 0 0 1 0 1 11 1 1 1 0 0 0 1 0 1 1 01 1 1 0 0 0 1 0 1 1 0 11 1 0 0 0 1 0 1 1 0 1 11 0 0 0 1 0 1 1 0 1 1 11 0 0 1 0 1 1 0 1 1 1 01 0 1 0 1 1 0 1 1 1 0 01 1 0 1 1 0 1 1 1 0 0 01 0 1 1 0 1 1 1 0 0 0 1

1

CCCCCCCCCCCCCCCCCCA

,

es un [24, 12, 8]-codigo.

Demostracion. Para demostrar este teorema necesitamos mostrar que d(G24) =8 y para ello, gracias al Teorema 4.4, solo necesitamos ver que cada palabrano nula tiene peso mayor o igual que 8. Para comprobar esto, necesitamos lossiguientes lemas:

Lema 8.3. G?24 = G24, es decir, G es dual.

Demostracion. Es facil comprobar que u · v = 0 o, equivalentemente, !(u \ v)es par para todos los pares de filas u y v de G. Por lo tanto, cada fila de Ges ortogonal a las filas de G y, por el Lema 6.1 tenemos que G24 ✓ (G24)?.Entonces, del Teorema 6.2 se sigue que G24 y (G24)? tienen ambos dimension12, luego G24 = (G24)?.

Lema 8.4. (A | I12) es tambien una matriz generadora de G24.

Demostracion. Por el Teorema 6.7, (G24)? tiene matriz generadora (AT | I) y,por el Lema 8.3 y la observacion de que AT = A, obtenemos el resultado.

Lema 8.5. Cada palabra de G24 tiene peso divisible por 4.

44

Page 49: Códigos correctores de errores

Demostracion. Sean u y v cualesquiera dos palabras de G24, entonces !(u\v) ⌘u ·v ⌘ 0 (mod 2), luego G24 es su propio dual. Observemos que todas las filas deG tienen peso divisible por 4. Sean u y v dichas filas. Entonces, por el Lema 3.9,!(u+v) = !(u)+!(v)�2!(u\v). Acabamos de ver que !(u\v) es divisible por2, de donde se sigue que !(u+v) es divisible por 4. Usando el mismo argumentocon una fila u y v, siendo v la suma de dos filas de H, tenemos que la sumade cualesquiera tres filas de G tienen peso divisible por 4. Siguiendo el mismoprocedimiento, cualquier combinacion lineal de filas de G tiene peso divisiblepor 4.

Lema 8.6. G24 no tiene palabras con peso 4.

Demostracion. Escribamos una palabra x = x1x2 . . . x24 de G24 como (L | R),donde L = x1x2 . . . x12 y R = x13 . . . x24. Supongamos que x es una palabra deG24 con peso 4. Entonces ocurre uno de los siguientes casos:

1) !(L) = 0 y !(R) = 4. Esto es imposible ya que podemos ver en la matriz Gque la palabra nula es la unica con !(L) = 0.

2) !(L) = 1 y !(R) = 3. Si !(L) = 1, entonces x es alguna de las filas de G yninguna de ellas tiene !(R) = 3.

3) !(L) = 2 y !(R) = 2. Si !(L) = 2, entonces x es suma de dos filas de Gpero es facil comprobar que dos filas de A no suman 2.

4) !(L) = 3 y !(R) = 1. Usando el Lema 8.4, si !(R) = 1, entonces x tiene queser una fila de (A | I12) y ninguna de ellas tiene peso 4.

5) !(L) = 4 y !(R) = 0. Observando de nuevo la matriz generadora (A | I)tenemos que la unica palabra con !(R) = 0 es la nula.

Una vez vistos estos lemas, la demostracion del Teorema 8.2 se sigue delLema 8.5 y el Lema 8.6.

Ahora bien, el codigo binario de Golay G23 se puede obtener de G24. Bastacon quitarle la ultima componente a cada palabra del codigo. G23 es entoncesun (23, 212, 7)-codigo, que satisface la Definicion 3.17:

212⇢1 + 23 +

✓23

2

◆+

✓23

3

◆�= 223.

Por lo tanto, G23 es un codigo perfecto.

8.2. El [11,6,5]-codigo ternario de Golay.

Igual que en la subseccion anterior, tenemos que si el [12, 6, 6]-codigo G12

existe, entonces el [11, 6, 5]-codigo G11 tambien existe. Veremos primero que G12

existe y, ası, podremos garantizar tambien que G11 existe.

45

Page 50: Códigos correctores de errores

Teorema 8.7. El codigo G12 que tiene como matriz generadora a G = (I6 | A),con

A =

0

BBBBBB@

0 1 1 1 1 11 0 1 2 2 11 1 0 1 2 21 2 1 0 1 21 2 2 1 0 11 1 2 2 1 0

1

CCCCCCA,

es un [12, 6, 6]-codigo.

Figura 6: Jacobus Hendri-cus van Lint (1932–2004)fue un matematico ho-landes. Van Lint fueprofesor en la UniversidadTecnologica de Eindhoven,en la cual fue rector de1991 a 1996. Van Lintrecibio un gran numerode reconocimientos, entreellos estan ser miembro dela Real Academia Holan-desa de Artes y Cienciasy ser miembro honorıficode la Real Sociedad deMatematicas de Holanda.

Demostracion. Es facil comprobar que u · v = 0 para cualesquiera filas u y v deG. De aquı se sigue que (G12)? = G12. Ahora, usando el mismo procedimientoque en el Lema 8.6, tenemos que G12 no tiene palabras con peso menor o igualque 5.

Tenemos ası que G12 existe, luego G11 tambien existe. G11 es entonces un(11, 36, 5)-codigo que verifica la Definicion 3.17:

36⇢1 + 11 +

✓11

2

◆+

✓11

3

◆�= 311.

Por lo tanto, G11 es un codigo perfecto.

8.3. ¿Existen mas codigos perfectos?

Durante mucho tiempo se penso que los unicos codigos perfectos no trivialeseran los codigos de Hamming , Ham(r, q), y los codigos de Golay G23 y G11. Sinembargo, en 1962, J.L. Vasil’ev [18] construyo una familia de codigos perfectosno lineales con los mismos parametros que los codigos binarios de Hamming.Despues, Schonheim (1968) [11] y Lindstrom (1969) [4] dieron codigos no li-neales con los mismos parametros que los codigos de Hamming sobre GF (q),para cualquier q potencia de primo. En todo caso, son conocidos los siguientesresultados:

Teorema 8.8 (van Lint [5] y Tietavainen [17]). . Un codigo perfecto no trivialq-ario, donde q es una potencia de primo, debe tener los mismos parametrosque uno de Hamming o de Golay.

Teorema 8.9 (Lloyd [7]). Si existe un (n,M, 2t + 1)-codigo perfecto sobreGF (q), entonces el polinomio L

t

(x) definido como

tX

j=0

(�1)j(q � 1)t�j

✓x� 1

j

◆✓n� x

t� j

tiene t raıces enteras diferentes en el intervalo 1 x n.

Usando este teorema, tenemos que un codigo perfecto desconocido sobreGF (q) debe cumplir t 11, q 8 y n < 485. Estas condiciones solo las verificanlos codigos perfectos triviales, los codigos de Hamming, los codigos de Golay yel codigo con parametros (n,M, d) = (90, 278, 5), pero usando el Teorema deLloyd, para t = 2 y n = 90, tenemos que L2(x) = 0 , x2 � 91x + 2048 = 0, yesta ecuacion no tiene raıces enteras en x.

46

Page 51: Códigos correctores de errores

9. Codigos cıclicos.

Los codigos cıclicos son una clase importante de codigos por numerosas ra-zones. Desde el punto de vista teorico, los codigos cıclicos poseen un estructuraalgebraica muy buena. Ademas, muchos codigos importantes, como los codigosbinarios de Hamming y los codigos de Golay, son equivalentes a codigos cıclicos.

Definicion 9.1. Un codigo C es cıclico si

1) C es un codigo lineal.

2) Cualquier permutacion cıclica de una palabra de C es tambien una palabrade C, es decir, si a0a1 . . . an�1 2 C entonces a

n�1a0a1 . . . an�2 2 C.

Ejemplo 9.2. El codigo binario C = {000, 101, 011, 110} es un codigo cıclico.

Ejemplo 9.3. El codigo lineal binario C = {0000, 1001, 0110, 1111} no es cıcli-co pero es equivalente a un codigo cıclico. Intercambiando la tercera y la cuartacoordenada obtenemos el codigo cıclico C 0 = {0000, 1010, 0101, 1111}.

Cuando estemos trabajando con codigos cıclicos numeraremos las coordena-das de las palabras como 0, 1, . . . , n�1. Esto es porque es muy util ya que dadoun vector a0a1 . . . an�1 2 V (n, q) le asignaremos el polinomio a0 + a1x + · · · +an�1xn�1.Vamos a hacer ahora un pequeno recordatorio de estructuras algebraicas. A

partir de ahora denotaremos GF (q) por Fq

o simplemente por F . Denotaremospor F [x] al conjunto de polinomios en x con coeficientes en F . Ademas, deno-taremos por F [x]/hf(x)i al conjunto de polinomios de F [x] de grado menor quef(x) y cuya suma y multiplicacion sera en modulo f(x). El conjunto F [x]/hf(x)ise denomina anillo de polinomios sobre F modulo f(x). Si f(x) tiene grado n,entonces el anillo F [x]/hf(x)i esta formado por todos los polinomios de gradomenor o igual que n� 1 y

|F [x]/hf(x)i| = qn.

Recordemos tambien que un polinomio no constante f(x) 2 F [x] se diceirreducible si f(x) 6= a(x)b(x) con a(x), b(x) 2 F [x] no constantes. Por ultimo,recordemos que el anillo F [x]/hf(x)i es un cuerpo si y solo si f(x) es irreduciblesobre F [x].

En lo que resta de seccion vamos a considerar f(x) = xn � 1. Veremos unpoco mas adelante que el anillo F [x]/hxn�1i de polinomios modulo xn�1 sera elmas natural a considerar cuando tratemos los codigos cıclicos. Para simplificarla notacion, vamos a denotar F [x]/hxn � 1i por R

n

.Consideremos un vector a0a1 . . . an�1 2 V (n, q) cuyo polinomio asociado

en Rn

es a(x) = a0 + a1x + · · · + an�1xn�1. Los codigos cıclicos los veremos

como un subconjunto de V (n, q) y de Rn

simultaneamente. Notemos que lasuma y la multiplicacion por escalares de vectores en R

n

se corresponde con lasmismas operaciones en V (n, q). Observemos que ocurre cuando multiplicamosel polinomio a(x) por x. En R

n

tenemos que

x · a(x) = a0x+ a1x2 + . . . an�1xn

= an�1 + a0x+ · · ·+ a

n�2xn�1,

47

Page 52: Códigos correctores de errores

que se corresponde con el vector an�1a0 . . . an�2. Entonces, multiplicar por x se

corresponde con una permutacion cıclica de coordenadas. Si multiplicamos porxm, tendremos m permutaciones de las coordenadas.

Vamos a enunciar a continuacion un teorema que nos va a dar una forma decaracterizar algebraicamente los codigos cıclicos.

Teorema 9.4. Un codigo C definido en Rn

es un codigo cıclico si y solo si Csatisface las siguientes condiciones:

1) a(x), b(x) 2 C ) a(x) + b(x) 2 C.

2) a(x) 2 C y r(x) 2 Rn

) r(x)a(x) 2 C.

Ahora vamos a enunciar un teorema para construir codigos cıclicos de ma-nera sencilla, pero primero recordaremos un concepto de algebra. Sea f(x) unpolinomio en R

n

y sea hf(x)i un subconjunto de Rn

que consiste en todas lasmultiplicaciones de f(x) por otro polinomio (mod xn � 1), es decir,

hf(x)i = {r(x)f(x) (mod xn � 1) | r(x) 2 Rn

}.

Teorema 9.5. Para cualquier f(x) 2 Rn

, el conjunto hf(x)i es un codigocıclico llamado codigo generado por f(x).

Ejemplo 9.6. Sea C = hx2 + 1i en R3, con F = GF (2). Multiplicando x2 + 1por cada uno de los 8 elementos de R3 y reduciendolo modulo x3 � 1, ob-tenemos solo cuatro palabras distintas: 0, x + 1, x2 + 1 y x + x2. EntoncesC = {000, 101, 011, 110}, que es el mismo codigo que el del Ejemplo 9.2.

Veremos a continuacion que, en general, la unica forma de construir codigoscıclicos es la citada anteriormente, es decir, cualquier codigo cıclico puede sergenerado por un polinomio.

Teorema 9.7. Sea C un codigo no nulo en Rn

. Entonces,

1) Existe un unico polinomio monico g(x) de grado mınimo en C.

2) C = hg(x)i.

3) g(x) es un factor de xn � 1.

Demostracion.1) Supongamos que existen dos polinomios monicos y de grado mınimo en

C, g(x) y h(x). Entonces g(x)� h(x) 2 C y tiene menor grado que g(x) y h(x).Obtenemos ası una contradiccion si g(x) 6= h(x), pues si multiplicasemos porun determinado escalar a g(x) � h(x) obtendremos un polinomio monico y degrado menor que el de h(x) y g(x).

2) Supongamos que a(x) 2 C. Por el algoritmo de la division en F [x] tenemosque

a(x) = q(x)g(x) + r(x),

donde o grado(r(x))=0 (ya esta demostrado) o grado(r(x))<grado(g(x)). Pero

r(x) = a(x)� q(x)g(x) 2 C,

y por las propiedades de codigos cıclicos vistas en el Teorema 9.4 tenemos quer(x) = 0, luego a(x) 2 hg(x)i, que era lo que querıamos ver.

48

Page 53: Códigos correctores de errores

3) Por el algoritmo de la division tenemos que

xn � 1 = q(x)g(x) + r(x),

donde r(x) = 0 (de donde tendrıamos directamente que g(x) es un factor de xn�1) o grado(r(x))<grado(g(x)), con g(x) de grado mınimo en C. Pero entoncesr(x) ⌘ �q(x)g(x) (mod xn � 1), luego r(x) 2 hg(x)i. Como g(x) es de gradomınimo, tenemos que r(x) = 0, lo que implica que g(x) es un factor de xn � 1.

Definicion 9.8. En un codigo cıclico C no nulo, el polinomio monico de menorgrado nombrado en el Teorema 9.7, se denomina polinomio generador de C.

Notemos que un codigo cıclico C puede contener polinomios distintos delpolinomio generador que tambien lo generen. Por ejemplo, el codigo del Ejem-plo 9.6 es generado por x2 + 1 pero su polinomio generador es x+ 1.

La tercera parte del Teorema 9.7 nos da un metodo para encontrar todoslos codigos cıclicos de longitud dada n. Lo unico que necesitamos es factorizarxn � 1 en polinomios monicos irreducibles.

Ejemplo 9.9. Vamos a encontrar todos los codigos cıclicos binarios de longitud3. Tenemos que x3 � 1 = (x + 1)(x2 + x + 1), donde x + 1 y x2 + x + 1 sonirreducibles sobre GF (2). Entonces, por el Teorema 9.7, los codigos cıclicosbinarios de longitud 3 son los que siguen:

Polinomio generador Codigo en R3 Codigo en V (3, 2)1 todo R3 todo V (3, 2)

x+ 1 {0, x+ 1, x2 + x, x2 + 1} {000, 110, 011, 101}x2 + x+ 1 {0, x2 + x+ 1} {000, 111}x3 � 1 {0} {000}

Lema 9.10. Sea g(x) = g0 + g1x + · · · + gr

xr el polinomio generador de uncodigo cıclico. Entonces g0 6= 0.

Por definicion, un codigo cıclico es lineal. Serıa muy conveniente que teniendoel polinomio generador g(x) del codigo pudiesemos deducir la dimension delcodigo y la matriz generadora. El siguiente teorema nos va a mostrar comohacer esto.

Teorema 9.11. Supongamos que C es un codigo cıclico con polinomio genera-dor

g(x) = g0 + g1x+ · · ·+ gr

xr

de grado r. Entonces, dim(C) = n� r y una matriz generadora para C es

G =

0

BBBBBB@

g0 g1 g2 . . . gr

0 0 . . . 00 g0 g1 g2 . . . g

r

0 . . . 0

0 0 g0 g1 g2 . . . gr

......

.... . .

. . .. . .

. . . 00 0 . . . 0 g0 g1 g2 . . . g

r

1

CCCCCCA.

Demostracion. Las n�r filas de la matriz G son linealmente independientes de-bido al escalonamiento de los escalares no nulos g0 con todo ceros debajo. Obser-vamos que estas n�r filas representan las palabras g(x), xg(x), x2g(x), . . . , xn�r�1g(x),

49

Page 54: Códigos correctores de errores

luego solo tenemos que ver que cada palabra de C se puede expresar como com-binacion lineal de dichas filas.

La prueba del Teorema 9.7, 2) muestra que si a(x) 2 C, entonces a(x) =q(x)g(x) para algun polinomio q(x), y esto es una igualdad de polinomios enF [x] sin necesidad de reduccion mod(xn � 1). Como grado(a(x)) < n, entoncesgrado(q(x)) < n� r. Luego

q(x)g(x) = (q0 + q1x+ · · ·+ qn�r�1xn�r�1)g(x)

= q0g(x) + q1xg(x) + · · ·+ qn�r�1xn�r�1g(x),

que es una combinacion lineal de las filas de G. Luego ya hemos demostrado loque querıamos.

Ejemplo 9.12. Vamos a encontrar todos los codigos cıclicos terciarios de lon-gitud 4 y calcularemos sus matrices generadoras.

Primero, vamos a descomponer x4�1 en polinomios irreducibles sobre GF (3),

x4 � 1 = (x� 1)(x3 + x2 + x+ 1) = (x� 1)(x+ 1)(x2 + 1).

Luego hay 23 = 8 divisores de x4 � 1 en F3[x] y cada uno genera un codigocıclico. Vamos a verlos:

Polinomio generador Matriz generadora1 (I4)

x� 1

0

@�1 1 0 00 �1 1 00 0 �1 1

1

A

x+ 1

0

@1 1 0 00 1 1 00 0 1 1

1

A

x2 + 1

✓1 0 1 00 1 0 1

(x+ 1)(x� 1) = x2 � 1

✓�1 0 1 00 �1 0 1

(x� 1)(x2 + 1) = x3 � x2 + x� 1��1 1 �1 1

(x+ 1)(x2 + 1) = x3 + x2 + x+ 1�1 1 1 1

x4 � 1�0 0 0 0

9.1. El polinomio de comprobacion y la matriz de com-probacion de paridad de un codigo cıclico.

La matriz generadora dada en el Teorema 9.11 no viene dada en formaestandar. El metodo que nos da el Teorema 6.7 para calcular la forma estandara una matriz de paridad no se puede aplicar a los codigos cıclicos. Sin embargo,se puede calcular una matriz de comprobacion de paridad para un codigo cıclicousando polinomios de comprobacion. Vamos a definir primero este concepto ydespues veremos como calcular la matriz de comprobacion de paridad para uncodigo cıclico a partir de el.

Sea C un [n, k]-codigo cıclico con polinomio generador g(x). Por el Teorema9.7, g(x) es un factor de xn�1, luego xn�1 = g(x)h(x), para un cierto polinomioh(x). Como g(x) es monico, entonces h(x) tambien lo es. Por el Teorema 9.11,g(x) tiene grado n�k, luego h(x) tiene grado k. Este polinomio h(x) se denominapolinomio de comprobacion de C. Este nombre es debido al siguiente teorema:

50

Page 55: Códigos correctores de errores

Teorema 9.13. Supongamos que C es un codigo cıclico en Rn

con polino-mio generador g(x) y polinomio de comprobacion h(x). Entonces un elementoc(x) 2 R

n

es una palabra de C si y solo si c(x)h(x) = 0.

Demostracion. Vamos a demostrar este teorema por doble implicacion.)) Notemos primero que g(x)h(x) = xn � 1 = 0 en R

n

.Luego si c(x) 2 C ) c(x) = a(x)g(x), para algun a(x) 2 R

n

,) c(x)h(x) = a(x)g(x)h(x)

= a(x) · 0= 0.

() Supongamos ahora que C(x) satisface que c(x)h(x) = 0. Por el algoritmode la division tenemos que c(x) = q(x)g(x) + r(x), donde grado(r(x)) < n � ko r(x) = 0. Entonces c(x)h(x) = 0 ) r(x)h(x) = 0, es decir

r(x)h(x) ⌘ 0 (mod xn � 1).

Pero si r(x) 6= 0, entonces el grado(r(x)h(x)) < n�k+k = n, luego r(x)h(x) = 0en F [x]. Contradiccion, luego r(x) = 0, y entonces c(x) = q(x)g(x) 2 C.

Ya hemos probado ambas implicaciones, luego el teorema queda demostrado.

Fijandonos bien en el teorema anterior y teniendo en cuenta que

dim(hh(x)i) = n� k = dim(C?),

podemos pensar que h(x) genera al codigo dual C?, pero en general esto no escierto. Esto es debido a que c(x)h(x) = 0 en R

n

no es lo mismo que dos vectoresde V (n, q) sean ortogonales. Sin embargo, en el siguiente teorema veremos quela condicion c(x)h(x) = 0 en R

n

implica algunas relaciones de ortogonalidad quenos llevara a elegir una matriz de comprobacion de paridad de manera natural.

Teorema 9.14. Supongamos que C es un [n, k]-codigo cıclico con polinomio decomprobacion

h(x) = h0 + h1x+ · · ·+ hk�1x

k�1 + xk.

Entonces,

1) Una matriz de comprobacion de paridad para C es

H =

0

BBBB@

1 hk�1 h

k�2 . . . h0 0 0 . . . 0

0 1 hk�1 . . . . . . h0 0 . . .

...... . . .

. . .. . .

. . . 00 . . . 0 1 h

k�1 . . . h0

1

CCCCA.

2) C? es un codigo cıclico generado por el polinomio

h(x) = 1 + hk�1x+ · · ·+ h0x

k.

Demostracion.1) Por el Teorema 9.13, un polinomio c(x) = c0+c1x+ · · ·+c

n�1xn�1 es unapalabra del codigo si y solo si c(x)h(x) = 0. Ahora, como c(x)h(x) = 0, entoncesen particular los coeficientes de xk, xk+1, . . . , xn�1 deben ser todos cero, es decir,

51

Page 56: Códigos correctores de errores

c0 + c1hk�1 + · · ·+ ck

h0 = 0

c1 + c2hk�1 + · · ·+ ck+1h0 = 0

. . .. . . =

...cn�k�1 + . . . + c

n�1 = 0Ası cualquier palabra c0c1 . . . cn�1 de C es ortogonal al vector

hk

hk�1 . . . h000 . . . 0

y a sus permutaciones cıclicas. Luego las filas de la matriz H dada en el teoremason todas palabras de C?. El escalonamiento de unos con ceros debajo en Hdemuestra que las filas de H son linealmente independientes. El numero de filasde H es n � k, que coincide con la dimension de C?. Luego H es una matrizgeneradora de C?, por lo que es una matriz de comprobacion de paridad de C,que era lo que querıamos ver.

2) Usando el Teorema 9.11 podemos probar que hh(x)i es un codigo cıcli-co con matriz generadora H y, por tanto, que hh(x)i = C?. Vamos a verque h(x) es un factor de xn � 1. Observamos que h(x) = xkh(x�1). Comoh(x�1)g(x�1) = (x�1)n�1, tenemos que xkh(x�1)xn�kg(x�1) = xn(x�n�1) =1� xn, de donde obtenemos que h(x) es un factor de xn � 1.

El polinomio h(x) = xkh(x�1) = 1 + hk�1x+ · · ·+ h0xk se llama polinomio

recıproco de h(x). Sus coeficientes son los de h(x) en orden inverso. Si dividimosel polinomio h(x) por h�1

0 obtenemos el polinomio generador de C? en el casono binario.

9.2. El codigo binario de Golay.

Ya probamos en la seccion 7 la existencia del [23, 12, 7]-codigo binario deGolay perfecto G23 mediante su matriz generadora. Veremos a continuacion queeste codigo de Golay puede ser construido de forma mas natural como un codigocıclico.

Haciendo los calculos se puede ver que la factorizacion de x23 � 1 sobreGF (2) es

x23�1 = (x�1)(x11+x10+x6+x5+x4+x2+1)(x11+x9+x7+x6+x5+x+1)

= (x� 1)g1(x)g2(x).

Sea C1 el codigo generado por hg1(x)i y C2 el codigo generado por hg2(x)i.Por el Teorema 9.11, C1 es un [23, 12]-codigo. Vamos a comprobar a continuacionque la distancia mınima de C1 es 7.

Observamos que g1(x) y g2(x) son recıprocos, luego C2 es equivalente a C1.Ademas, tenemos que x23 � 1 = (x� 1)g1(x)g1(x), donde g1(x) es el recıprocode g1(x). Esto va a ser todo lo que necesitaremos para demostrar que d(C1) = 7.

Los siguientes tres resultados los daremos sin demostracion. Son resultadosque facilitan la demostracion del teorema que veremos a continuacion:

Lema 9.15. Supongamos que xp�1 = (x�1)g1(x)g2(x) sobre GF (2) y que hg1iy hg2i son codigos equivalentes. Sea a(x) una palabra de hg1i con peso impar !.Entonces,

1) !2 � p.

52

Page 57: Códigos correctores de errores

2) Si ademas g2(x) = g1(x), entonces !2 � ! + 1 � p.

Corolario 9.16. Supongamos las hipotesis del Lema 9.15. Si sabemos que ladistancia mınima de hg1i es impar, entonces d satisface la cota de la raız cua-drada

d �pp,

mientras que si g2(x) = g1(x), la cota puede ser mejorada:

d2 � d+ 1 � p.

Usando este corolario tenemos que el [23, 12]-codigo C1 no tiene palabras depeso impar menor que 7, pues 52 � 5 + 1 ⇤ 23. El lema que vamos a enunciar acontinuacion nos va a ayudar a encontrarla.

Lema 9.17. Sea p un numero primo impar y xp � 1 = (x� 1)g1(x)g1(x) sobreGF (2). Sea a(x) una palabra de hg1i con peso ! par. Entonces,

1) ! ⌘ 0 (mod 4).

2) ! 6= 4 a no ser que p = 7.

Ası, ya podemos enunciar el siguiente teorema:

Teorema 9.18. Sea G23 el codigo cıclico binario en R23 con polinomio genera-dor g(x) = x11+x10+x6+x5+x4+x2+1. Entonces G23 es un [23, 12, 7]-codigoperfecto.

Demostracion. Ya hemos observado previamente que

x23 � 1 = (x� 1)g(x)g(x).

Por el Lema 9.15, la mınima distancia de peso impar ! de G23 verifica!2�!+1 � 23, lo que implica que ! � 7. Por otro lado, aplicando el Lema 9.17tenemos que G23 no puede tener palabras de peso par menor que 8. Como g(x)es una palabra de G23 de peso 7, tenemos que d(G23) = 7.

Ademas, como G23 verifica que

212⇢1 + 23 +

✓23

2

◆+

✓23

3

◆�= 223,

que es la definicion de codigo perfecto, tenemos que G23 es un codigo perfecto.

9.3. El codigo ternario de Golay.

Vamos a ver ahora que el codigo ternario de Golay G11 tambien puede serconstruido como codigo cıclico. Empezaremos factorizando x11�1 sobre GF (3).

x11 � 1 = (x� 1)(x5 + x4 � x3 + x2 � 1)(x5 � x3 + x2 � x� 1)

= (x� 1)g1(x)g2(x).

Notemos que g2(x) = �x5g1(x�1), luego hg1i y hg2i son [11, 6]-codigos equi-valentes. Veamos que la distancia mınima de hg1i es 5.

53

Page 58: Códigos correctores de errores

Teorema 9.19. Sea C el codigo ternario hg1i en R11, donde g1(x) = x5 +x4 � x3 + x2 � 1. Sea D el subcodigo de C generado por (x � 1)g1(x) y seaa(x) = a0 + a1x+ · · ·+ a10x10 una palabra de C con peso !. Entonces,

1) a(x) 2 D si y solo siP10

i=0 ai = 0.

2) Si a(x) 2 D, entonces ! ⌘ 0 (mod 3).

3) Si a(x) no esta en D, entonces ! ⌘ 2 (mod 3).

4) Si a(x) no esta en D, entonces ! � 4.

5) ! 6= 3.

6) d(C) = 5.

Demostracion.1) Dado a(x) 2 C multiplo de g(x), tenemos que

a(x) 2 D , a(x) es un multiplo de (x� 1)

, a(1) = 0

,P10

i=0 ai = 0.

Ası, el apartado 1) del teorema queda demostrado.2) Observemos primero que a2

i

⌘ 1 (mod 3) para cada coeficiente no nuloai

. Ası tenemos que ! =P

a2i

(mod 3). Por el Teorema 9.14, 2), el codigo dualD? de D es generado por el polinomio recıproco de g2(x), que es precisamente�g1(x). Entonces D? = hg2(x)i = h�g1(x)i = C. Luego D ⇢ D?, lo quesignifica que D es ortogonal a sı mismo. En particular, si a(x) 2 D entoncesP

a2i

⌘ 0 (mod 3). Es decir, a(x) 2 D ) ! ⌘ 0 (mod 3).3) Usando el Teorema 9.11 tenemos que D es un codigo de dimension 5.

Ademas, D esta contenido en el codigo 6-dimensional C. Como 1 = 1 + x +· · · + x10 esta en C pero no en D, entonces C es la union disjunta de los trescoconjuntos D,1 + D y � 1 + D. Luego cualquier palabra a(x) 2 C que nopertenezca a D es de la forma

a(x) = d(x)± (1 + x+ · · ·+ x10),

para alguna palabra d(x) = d0 + d1x+ · · ·+ d10x10 2 D. Entonces,

!(a(x)) ⌘10X

i=0

(di

± 1)2 ⌘

10X

i=0

d2i

!+ 11± 2

10X

i=0

di

⌘ 11 ⌘ 2 (mod 3).

4) Supongamos que a(x) no pertenece a D. Ahora bien, a(x)a(x�1) es unmultiplo de g1(x)g2(x) = 1. Entonces, por 1), a(1) 6= 0, luego a(x)a(x�1) = ±1.Ası, a(x)a(x�1) tiene peso 11. Pero como mucho !2 coeficientes de a(x)a(x�1)son no nulos, luego !2 � 11. Esto implica que ! � 4.

5) Vamos a proceder por reduccion al absurdo. Supongamos que ! = 3.Entonces con una permutacion cıclica y multiplicando por -1 si es necesario,suponemos que a(x) = 1± xi ± xj . Usando los apartados 2) y 3) de este mismoteorema, a(x) tiene que estar en D y entonces, usando 1), tenemos que a(x) =

54

Page 59: Códigos correctores de errores

1 + xi + xj . Ademas, a(x) 2 D implica que a(x)a(x�1) es un multiplo de (x�1)g1(x)g2(x) = x11 � 1 = 0 en R11. Entonces,

(1 + xi + xj)(1 + x�i + x�j) = 0 , xi + x�i + xj + x�j + xj�i + xi�j = 0.

Como i y j son distintos entre ellos y son no nulos, entonces i ⌘ �j ⌘ i �j (mod 11) ) 2j ⌘ 0 (mod 11), lo que es una contradiccion. Luego hemosdemostrado que ! 6= 3.

6) Usando los apartados 2)-5) tenemos que d(C) � 5 y como g1(x) tienepeso 5, entonces tenemos que d(C) = 5, que es lo que querıamos probar.

El [11, 6, 5]-codigo C del Teorema 9.19 se llama codigo ternario de Golay.Ademas, es un codigo perfecto pues

36⇢1 + 2 · 11 + 22

✓11

2

◆= 311

�,

que es equivalente al codigo ternario de Golay definido en la seccion 7.

9.4. Los codigos de Hamming como codigos cıclicos.

En este apartado vamos a ver que los codigos binarios de Hamming vistosen la seccion 7 son equivalentes a codigos cıclicos.

Teorema 9.20. El codigo binario de Hamming Ham(r, 2) es equivalente a uncodigo cıclico.

Demostracion. Sea p(x) un polinomio irreducible de grado r sobre F2[x]. En-tonces, tenemos que F2[x]/hp(x)i es un anillo de polinomios modulo p(x) decardinal 2r. Como ya sabemos de estructuras algebraicas, todo cuerpo finitotiene un elemento primitivo, luego existe un elemento ↵ 2 F2[x]/hp(x)i tal queF2[x]/hp(x)i = {0, 1,↵,↵2, . . . ,↵2r�2}. Vamos a identificar ahora un elementoa0 + a1x+ · · ·+ a

r�1xr�1 2 F2[x]/hp(x)i con el vector columna

0

BBB@

a0a1...

ar�1

1

CCCA

y consideramos la r ⇥ (2r � 1) matriz binaria

H =�1 ↵ ↵2 . . . ↵2r�2

�.

Sea C el codigo binario que tiene como matriz de control de paridad a H.Como las columnas de H son los distintos vectores no nulos de V (r, 2), C esun codigo de Hamming. Mas exactamente es el siguiente codigo de Hamming:Ham(r, 2). Tomando ahora n = 2r � 1 tenemos que

C = {f0f1 . . . fn�1 2 V (n, 2) | f0 + f1↵+ · · ·+ fn�1↵n�1 = 0}

= {f(x) 2 Rn

| f(↵) = 0 en F2[x]/hp(x)i}.

Si f(x) 2 C y r(x) 2 Rn

, entonces r(x)f(x) 2 C porque r(↵)f(↵) = r(↵)·0 =0. Ası, por el Teorema 9.4, C es cıclico.

55

Page 60: Códigos correctores de errores

Definicion 9.21. Si p(x) es un polinomio irreducible de grado r y x es unelemento primitivo del cuerpo F [x]/hp(x)i, es decir, que genera el grupo cıclicomultiplicativo de F [x]/hp(x)i, entonces p(x) se llama polinomio primitivo.

Teorema 9.22. Si p(x) es un polinomio primitivo sobre GF (2) de grado r,entonces el codigo cıclico hp(x)i es el codigo de Hamming Ham(r, 2).

Demostracion. Si p(x) es primitivo sobre GF (2) de grado r, entonces C ={f(x) 2 R

n

| f(↵) = 0 en F2[x]/hp(x)i} implica que

Ham(r, 2) = {f(x) 2 Rn

| f(x) = 0 en F2[x]/hp(x)i} = hp(x)i.

Vamos a finalizar este trabajo con un ejemplo:

Ejemplo 9.23. El polinomio x3 + x + 1 es irreducible sobre GF (2), luegoF2[x]/hx3 + x + 1i es un cuerpo de orden 8. Ademas, x es un elemento pri-mitivo de este cuerpo, por lo tanto,

F2[x]/hx3 + x+ 1i = {0, 1, x, x2, x+ 1, x2 + x, x2 + x+ 1, x2 + 1}.

Ası, la matriz de comprobacion de paridad para la version cıclica del codigode Hamming Ham(3, 2) es

H =

0

@1 0 0 1 0 1 10 1 0 1 1 1 00 0 1 0 1 1 1

1

A .

Como x3 + x+ 1 es un polinomio primitivo y es un polinomio generador deHam(r, 2), por el Teorema 9.11 una matriz generadora para el codigo es

H =

0

BB@

1 1 0 1 0 0 00 1 1 0 1 0 00 0 1 1 0 1 00 0 0 1 1 0 1

1

CCA .

56

Page 61: Códigos correctores de errores

Conclusiones.

En este trabajo hemos introducido la teorıa de codigos, mostrando nume-rosos ejemplos para asentar correctamente los conceptos que hemos visto. Pararealizar este estudio hemos empleado numerosas herramientas de algebra linealde caracter basico ademas de otras de estructuras algebraicas y de probabilidady estadıstica.

En este trabajo hemos mostrado el interes del desarrollo de teorıas en ma-tematicas (como pueden ser el algebra lineal, las estructuras algebraicas, laestadıstica, la teorıa de la informacion. . . ) por las importantes aplicaciones quetienen, en este caso, a la teorıa de codigos.

Como ya hemos dicho en la introduccion, la teorıa de codigos se aplica con-tinuamente en nuestra vida cotidiana. Por ejemplo, cuando vamos a comprarun producto en un supermercado y el lector del codigo de barras determinaque producto estamos comprando. A lo largo del trabajo tambien hemos vistosus aplicaciones a la investigacion aplicada, en concreto a la astronomıa, por eluso que hacen de los codigos en sus transmisiones las sondas espaciales, comopor ejemplo la Mariner 9, explorando Marte, o la Voyager, explorando Jupiter.

Personalmente, este trabajo me ha hecho reflexionar sobre lo utiles que sonlas matematicas en la vida cotidiana. Y no solo en la vida cotidiana, si no encosas tan importantes como explorar otro planeta. Ademas me ha hecho pensaren lo que aun queda por descubrir y lo necesaria que es la investigacion paraque esto ocurra.

57

Page 62: Códigos correctores de errores

58

Page 63: Códigos correctores de errores

Referencias

[1] M. J. E. Golay, Notes on digital coding, Proc. IEEE 37, 657 (1949).

[2] R. W. Hamming, Error detecting and error correcting codes, The Bell Sys-tem Technical Journal 29, 147-160 (1950).

[3] R. Hill, A First Course in Coding Theory, Clarendon Press (1986).

[4] B. Lindstrom, On group and nongroup perfect codes in q symbols, Math.Scand. 25, 149-158 (1969).

[5] J. H. van Lint, A survey of perfect codes, Rocky Mountain Journal ofMathematics 5, 199-224 (1975).

[6] J. H. van Lint, Introduction to coding theory, Springer-Verlag, Nueva York(1982).

[7] S. P. Lloyd, Binary block coding, The Bell System Technical Journal 36,517-535 (1957).

[8] R. J. McElicee, The theory of information and coding, Addison-Wesley,Reading, Mass (1977).

[9] C. Polcino Milies, Breve introducao a Teoria dos Codigos Correctores deErros, Sociedade Brasileira de Matematica, Coloquio de Matematica daRegiao Centro-Oeste (3 a 6 de novembro de 2009).

[10] A. Quiros Gracian, La Teorıa de Codigos: una introduccion a las Matemati-cas de la transmision de informacion, Universidad Autonoma de Madrid.

[11] J. Schonheim, On linear and non-linear single.error-correcting q-nary per-fect codes, Info. and Control 12, 23-26 (1968).

[12] C. E. Shannon, A mathematical theory of communication, The Bell SystemTechnical Journal 27, 379-423 y 623-656 (1948).

[13] C. E. Shannon, Communication theory of secrecy systems, The Bell SystemTechnical Journal 28, 657-715 (1949).

[14] C. E. Shannon, Prediction and entropy of printed English, The Bell SystemTechnical Journal 30, 50-64 (1951).

[15] C. E. Shannon, Certain results in coding theory for noisy channels, Infor-mation and Control 1(1), 6-25 (1957).

[16] C. E. Shannon y W. Weaver, The mathematical theory of communication,University of Illinois Press, Urba, Illinois (1949).

[17] A. Tietavainen, On the nonexistence of perfect codes over finite fields,SIAM Journal Appl. Math. 24, 88-96 (1973).

[18] J. L. Vasil’ev, On nongroup closepacked codes, Prob. Kibernat 8, 375-378(1962).

[19] D. Welsh, Codes and Cryptography, Oxford University Press (1988).

59