Teoría elemental de códigos: codificación y decodificación
1. Teoría elemental de códigos
Codificación y decodificación
Gloria Serrano Sotelo
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.1/32
ı
2. Introducción
Los canales de transmisión que utilizamos para enviar,
recibir y almacenar datos no son perfectos, lo que ocurre,
por ejemplo, con los CD’s, teléfonos móviles y
transmisiones espaciales. Es necesario detectar cuando ha
ocurrido un error en el proceso de transmisión y, si es
posible, corregirlo para conseguir que el mensaje recibido
sea lo más parecido posible al mensaje original enviado.
La teoría de códigos tiene como objetivo encontrar buenos
sistemas de codificación y decodificación que permitan
detectar y corregir los errores que se producen en la
transmisión de datos.
La codificación consiste en añadir información extra a los
mensajes que se quieren transmitir a través del canal con
el objetivo de minimizar los efectos del ruido, controlando
los errores que éste produce, es decir, consiguiendo un
sistema fiable de transmisión. ´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.2/32
ı
3. Introducción
u x y u
ˆ
Codificador Canal Decodificador
Ruidoso
Los mejores códigos conocidos para la comunicación
sobre canales con ruido son
• Los códigos lineales, como los Reed-Solomon
utilizados en los CD’s.
• Los códigos convolucionales utilizados en
transmisiones espaciales.
• Los Turbo códigos, que concatenan códigos lineales y
convolucionales y se utilizan en telefonía móvil.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.3/32
ı
4. Algunos códigos conocidos
Veremos algunos ejemplos de códigos conocidos y
utilizados comúnmente, que no necesitan transmitir gran
cantidad de información, tan sólo detectar errores
producidos por el fallo humano.
• Número de identificación fiscal (NIF).
• International Standard Book Number (ISBN).
• Códigos de las cuentas bancarias.
• Códigos de las tarjetas de crédito (CODABAR).
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.4/32
ı
5. Número de identificación fiscal (NIF)
En el NIF los números del DNI son los dígitos de
información y la letra es el dígito de control, que se
obtiene calculando el resto de dividir el número por 23 y
buscando la letra que le corresponde en la tabla siguiente.
Resto 0 1 2 3 4 5 6 7 8 9 10 11 12
Letra T R W A G M Y F P D X B N
Resto 13 14 15 16 17 18 19 20 21 22
Letra J Z S Q V H L C K E
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.5/32
ı
6. Número de identificación fiscal (NIF)
Ejemplos
• Calcula el NIF de los siguientes DNI
◮ (a) 10561021 ; (b) 07797571
◮ (c) 70863649 ; (d) 70873047
• Calcula el dígito borrado en los siguientes NIF
◮ (a) 230?34-Z? ; (b) 708730?8-C?
◮ (c) 105?1134-N ; (d) 0?854325-D
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.6/32
ı
7. International Standard Book Number (ISBN)
El ISBN es un número de 10 dígitos
a1 a2 a3 a4 a5 a6 a7 a8 a9 a10
con la condición
10a1 + 9a2 + 8a3 + 7a4 + 6a5 + 5a6 + 4a7 + 3a8 + 2a9 + a10 = 0 (módulo 11)
El dígito a10 es el dígito de control que se incluye como
información redundante para que la operación anterior sea
un múltiplo de 11.
Para a10 se necesitan 11 símbolos, por lo que además de los
10 dígitos se utiliza la letra X para representar el número
10 correspondiente al dígito de control.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.7/32
ı
8. International Standard Book Number (ISBN)
Ejemplos
• Calcula el dígito de control de los siguientes ISBN
◮ A course in Error-Correcting Codes. Justensen and Høholdt. ISBN
3-03719-001-?
◮ Handbook of Coding Theory. ISBN 0-444-81472-?
◮ Introduction to Coding Theory. J. H. van Lint. ISBN 0-540-54894-?
◮ Coding Theory and Cryptography. David Joyner. ISBN
3-540-66336-?
• Calcula el dígito que falta en los siguientes ISBN
◮ La divina proporción. Luca Pacioli. ISBN 84-7600-7?7-6
◮ El tío Petros y la conjetura de Goldbach. ISBN 84-?06-9877-1
◮ Los judíos. J. Mosterín. ISBN 84-206-5837-5
◮ El viento de la luna. A. Muñoz Molina. ISBN 8?-322-1227-X
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.8/32
ı
9. Códigos de las cuentas bancarias
El número de una cuenta bancaria es una sucesión de 20
dígitos del 0 al 9, de la forma
a3 a4 a5 a6 − a7 a8 a9 a10 − a0 b0 − b1 b2 b3 b4 b5 b6 b7 b8 b9 b10
tal que
4a3 + 8a4 + 5a5 + 10a6 + 9a7 + 7a8 + 3a9 + 6a10 + a0 = 0 (mod 11)
b1 + 2b2 + 4b3 + 8b4 + 5b5 + 10b6 + 9b7 + 7b8 + 3b9 + 6b10 + b0 = 0 (mod 11)
Los dígitos a0 b0 son los de control. Si a0 y b0 deben ser 10
se escribe sólo un 1.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.9/32
ı
10. Códigos de las cuentas bancarias
Ejemplo
Calcula los dígitos de control de las siguientes cuentas
bancarias de solidaridad con Kosovo
Banesto: 0030-1292-cc-0002222271
BCH: 0049-0001-cc-2411399144
BBV: 0182-2370-cc-0010022227
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.10/32
ı
11. Códigos de las tarjetas de crédito (CODABAR)
El número de una tarjeta de crédito es del tipo
a1 a2 a3 a4 − a5 a6 a7 a8 − a9 a10 a11 a12 − a13 a14 a15 a16
tal que se verifica
2(a1 + a3 + a5 + a7 + a9 + a11 + a13 + a15 ) + (a2 + a4 + a6 +
a8 + a10 + a12 + a14 + a16 )+ número de dígitos en posición
impar mayores que 4 = 0 (mod 10).
Este código puede corregir un error y recuperar dos dígitos
que se hayan borrado, de modo que cuando se hace
referencia a un número de tarjeta de crédito (en una
factura, un extracto bancario,...) para mantenerlo oculto
con seguridad se deben ocultar al menos 3 de sus dígitos.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.11/32
ı
12. Códigos de las tarjetas de crédito (CODABAR)
Ejemplo
• Averigüa si son válidos los siguientes números de
tarjetas de crédito
◮ 4599-8834-3278-8311
◮ 4599-8834-3278-8511
• Halla el número borrado de las siguientes tarjetas de
crédito
◮ 1007-8606-2?90-1234
◮ 6540-98?0-7654-0103
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.12/32
ı
13. Códigos lineales
´ ´
Codigo de triple repeticion
x → (x, x, x)
Palabras código: x(1, 1, 1), con x ∈ Fq .
Codificador G = 1 1 1
´
Codigo binario de control de paridad
(x, y, z) → (x, y, z, x + y + z)
1 0 0 1
Codificador G = 0 1 0 1
0 0 1 1
Palabras código: (x, y, z)G, con x, y, z ∈ F2 .
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.13/32
ı
14. Códigos lineales
• Un codificador lineal sobre Fq es una matriz de orden
k × n, k ≤ n, con coeficientes en Fq .
Las k filas de esta matriz generan un subespacio
vectorial de Fn . Los vectores de este subespacio son
q
las palabras del código.
• Un código lineal de longitud n y dimensión k sobre Fq
es un subespacio vectorial C de dimensión k de Fn .
q
El número de bits de redundancia es n − k .
• Un codificador o matriz generadora del código lineal
C es una matriz G de orden k × n cuyas filas forman
una base de C , las palabras base del código.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.14/32
ı
15. Matriz generadora y codificación
Ejemplos
• Para los códigos binarios de triple repetición y control
de paridad, calcula las palabras base del código y
codifica, en cada caso, los siguientes mensajes 0 y
101.
• Para el código de matriz generadora
1 1 1 1
G = 1 1 0 0
1 0 0 1
◮ Codifica los mensajes 011 y 111.
◮ Comprueba que G es una matriz generadora del código
binario de control de paridad anterior
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.15/32
ı
16. Matriz de control
H es una matriz de control del código lineal C de matriz
generadora G si cumple que G · H t = 0.
Podemos redefinir el código lineal C en términos de la
matriz de control así:
C = {x ∈ Fn | xH t = 0}
q
Ejemplo
Calcula matrices de control para los códigos binarios de
triple repetición y control de paridad.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.16/32
ı
17. Distancia y peso mínimo. Control de
errores
• La distancia entre dos palabras código
x = (x1 , . . . , xn ), x′ = (x′1 , . . . , xn ) ∈ C viene dada
por
d(x, x′ ) = #{i | xi = x′i }
• El peso de una palabra x = (x1 , . . . , xn ) viene dado
por el número de componentes no nulas, esto es
w(x) = #{i | xi = 0}
Por ejemplo, el peso de (1, 0, 1, 0) es 2.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.17/32
ı
18. Distancia y peso mínimo. Control de
errores
• Distancia d de un código C
d = min{d(x, x′ ) | x, x′ ∈ C, x = x′ }
Si C es un código lineal d coincide con el peso mínimo
de las palabras código no nulas
d = min{d(x, x′ ) = w(x−x′ ) | x, x′ ∈ C, x−x′ = 0}
• Si d > t se pueden detectar errores de peso ≤ t
• Si d > 2t se pueden corregir errores de peso ≤ t.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.18/32
ı
19. Matriz generadora. Matriz de control
Ejemplo
1 1 1 0
Dado el codificador G = sobre F3 ,
1 0 2 2
calcula:
• La longitud, la dimensión y las palabras base del
código lineal ternario que define.
• La distancia del código. Averigua qué tipo de errores
detecta y si corrige alguno.
• Una matriz de control.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.19/32
ı
20. Distancia. Matriz de control
La matriz de control permite calcular la distancia.
Sea C(n, k, d) un código lineal con matriz de control H :
• La distancia d del código coincide con el número
mínimo de columnas de H que son linealmente
dependientes.
• Cota de Singleton: d ≤ n − k + 1
• Un código lineal es óptimo o MDS si su distancia d
alcanza la cota de Singleton.
(El código del ejemplo anterior es MDS)
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.20/32
ı
21. Matriz de control. Detección de
errores
La matriz de control permite detectar errores:
• Si H es una matriz de control del código, las palabras
x del código quedan determinadas por la condición
xH t = 0.
• En el canal de transmisión
u x y u
ˆ
Codificador Canal Decodificador
Ruidoso
si se recibe la palabra y , se detecta error en la
transmisión cuando yH t = 0, es decir, cuando y no es
una palabra código.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.21/32
ı
22. Síndromes. Control de errores
Sea H una matriz de control del código lineal C(n, k, d)
• Síndrome de la palabra y ∈ Fn :
q
S(y) = yH t
• Si y es una palabra código su síndrome es cero.
• Si dos palabras y , z tienen el mismo síndrome su
diferencia y − z es una palabra del código.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.22/32
ı
23. Síndromes. Control de errores
Ejemplo
Para la transmisión a través de un canal con ruido se ha
utilizado un código lineal binario con matriz de control
1 1 1 0 1 0 0
H = 1 1 0 1 0 1 0
1 0 1 1 0 0 1
y se han recibido las palabras 0111000 y 1010100.
No se detecta error en la primera pero sí en la segunda.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.23/32
ı
24. Síndromes. Corrección de errores
Sea C un código lineal de parámetros n, k y d.
• Si d > 2t, dos errores diferentes de peso ≤ t no
pueden tener el mismo síndrome.
Corrección de errores (d > 2t)
Sea y la palabra recibida:
• Si S(y) = 0, y es del código y no hay error.
• Si S(y) = 0 y su síndrome procede de un error e de
peso ≤ t, yH t = eH t , y − e es una palabra del
código, la palabra corregida.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.24/32
ı
25. Códigos de Hamming
Hamq (r) es el código lineal sobre Fq con r bits de
redundancia definido por la matriz de control cuyas
columnas son todas las palabras no nulas y no
proporcionales de Fr .
q
Los parámetros de Hamq (r) son:
qr − 1
• Longitud n =
q−1
• Dimensión k = n − r
• Distancia d = 3
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.25/32
ı
26. Códigos de Hamming
Ejercicios
1. Construye un código binario con dos dígitos de
redundancia que corrija errores de peso 1 y sea M DS .
2. Para el código binario de Hamming Ham2 (3)
• Codifica las palabras 1110 y 1010.
• Decodifica las palabras 0111000, 1010100, 1101001.
3. Para el código ternario de Hamming Ham3 (2)
• Codifica las palabras 10 y 21
• Decodifica las palabras 2011, 1122, 1220.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.26/32
ı
27. Códigos convolucionales
Los códigos convolucionales surgen después de los
códigos de bloques y no requieren codificadores muy
complicados.
Estos códigos fueron introducidos por Elias en 1955.
Su creciente aplicación radica en parte en los métodos de
decodificación, puesto que se pasó de algoritmos que eran
independientes de la memoria del código al algoritmo de
Viterbi (1971), cuya complejidad crece exponencialmente
con la memoria, pero que es mucho más fiable como
método de decodificación, puesto que no borra datos como
los algoritmos secuenciales y además el tiempo de
decodificación es fijo.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.27/32
ı
28. Códigos convolucionales
En 1970 Forney da la construcción algebraica en su
trabajo “Convolutional Codes I: Algebraic Structure”, que
es una referencia principal desde entonces.
En 1977 McEliece presenta el libro “The theory of
information and coding”, en el que se incluye la teoría de
códigos convolucionales y el algoritmo de Viterbi.
Es en el artículo de 1998 “The algebraic theory of
convolutional codes”, recogido en el libro “Handbook of
coding theory”, donde desarrolla y amplía con detalle la
teoría de Forney.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.28/32
ı
29. Códigos convolucionales
Uno de las principales aplicaciones de los códigos
convolucionales es la transmisión de información en el
espacio exterior (deep-space).
Las transmisiones a través del espacio exterior están muy
limitadas en potencia, pero no generalmente en ancho de
banda.
Si hay una disminución de la ratio señal ruido,
SN R = Ruido de transmisoralareceptor , con la misma potencia se
Potencia que llega
receptor
cubren distancias mayores.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.29/32
ı
30. Códigos convolucionales
Los sistemas de comunicación en las naves espaciales
transmiten:
• Informaciones telemétricas: datos científicos con o sin
imágenes, datos GSE, etc.
• Órdenes de la estación terrestre a la nave.
• “Tracking”: seguimiento de la velocidad, posición y
otros datos de la nave a través de los datos que ésta
envía a tierra.
En el canal telemétrico, donde la razón del código
(proporción entre información y redundancia más
información) es relativamente alta, se utilizan códigos
convolucionales y de bloques.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.30/32
ı
31. Códigos convolucionales
En las misiones espaciales Pionner 10 y 11 a Júpiter y
Saturno en 1972-73 se utilizó un código convolucional de
razón 1/2 y memoria 31.
Es a partir del algoritmo de Viterbi cuando el estándar
planetario se convierte en un código convolucional de
memoria menor, memoria 6 y razón 1/2.
El estándar planetario se utilizó por primera vez en la
misión Voyager 1 (1980-81) concatenado con un código
lineal Reed-Solomon y después en las misiones Galileo
(1986) y Voyager 2 (1989) concatenando el estándar con
otros códigos convolucionales y de bloques.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.31/32
ı
32. Códigos convolucionales
Los códigos convolucionales se utilizan también en la
construcción de los turbo códigos, que fueron introducidos
en 1983 por Berrou, Glavieux y Thitimajshima.
´ ´ ´
Teor´a elemental de codigos Codificacion y decodificacion– p.32/32
ı