Tema 5
Tema 5
Teoría de la codicación
En este último capítulo realizaremos una breve introducción a la teoría de la codicación,
estudiando los conceptos fundamentales y las bases de los códigos lineales.
Denición 5.1.1. Sea A un conjunto no vacío. A este conjunto A lo llamaremos alfabeto y diremos
que los elementos de A son símbolos del alfabeto. De este modo, si n ∈ N, deniremos una palabra
de longitud n (en el alfabeto A) como una secuencia o cadena de n símbolos de A.
Ejemplo 5.1.2. El conjunto A = {1, 2, ∗, #, &} es un alfabeto y 111, 12, 2&, ∗, & ∗ 21# son
palabras en ese alfabeto.
En este caso, la palabra 111 tiene longitud 3, las palabras 12, 2& tienen longitud 2, ∗ tiene
longitud 1 y & ∗ 21# tiene longitud 5.
Denición 5.1.3. Sea A un alfabeto. Denimos un código C sobre el alfabeto A como cualquier
conjunto formado por palabras en el alfabeto A. Si m ∈ N y A es un alfabeto con m símbolos del
alfabeto, diremos entonces que C es un código m-ario.
Ejemplo 5.1.4.
1. Si consideramos como alfabeto el abecedario usual, entonces las palabras del diccionario de
la Real Academia Española es un código sobre el abecedario.
Denición 5.1.6. Sea A un alfabeto y sea n ∈ N. Un código C sobre el alfabeto A se dirá que es
un código bloque de longitud n si todas las palabras de C tienen longitud n.
Ejemplo 5.1.7. Si A = {0, 1}, entonces C = {000, 010, 111, 101} es un código bloque (binario) de
longitud 3.
108
CAPÍTULO 5. TEORÍA DE LA CODIFICACIÓN 109
Observación 5.1.8. Para que se puede establecer una comunicación se necesita un emisor, que
enviará un mensaje, un canal a través del cual será enviado el mensaje, y un receptor.
Emisor y receptor deben acordar un alfabeto y un código que contendrá las palabras que
consituirán los mensajes o las unidades de mensajes a intercambiar. El tipo de código a elegir en
cada entorno dependerá de muchos factores.
Hablamos de existencia de ruido en un canal cuando hay cierta probabilidad de que durante la
transmisión de un mensaje se produzca un error que modique su contenido.
Ejemplo 5.1.9. Consideremos el alfabeto A formado por las letras de nuestro abecedario y sea C
el código formado por las palabras del diccionario de la Real Academia Española.
Si suponemos que dos personas que se encuentran físicamente están teniendo una conversación,
podemos considerar el aire como canal, y el ruido del canal podría ser el viento.
1. Supongamos que una de las palabras recibida por uno de los interlocutores es palo.
En este caso, no podríamos detectar un error en esta palabra, ya que palo ∈ C . Sin embargo,
el ruido del canal podría haber dado lugar a la recepción de esta palabra, siendo la palabra
emitida pato o pelo.
Si recibimos la palabra 0001, entonces detectamos un error en la plabra 0001, ya que 0001 ∈
/ C.
Si intentamos corregir el error, tendríamos que sustituir la palabra recibida por otra palabra
de C tal que la probabilidad de recibir esta palabra sea máxima.
En este caso, las palabras 0000 y 0101 tiene ambas la misma probabilidad máxima al sistituir
0001 por cualquiera de ellas, ya que tan solo cambia un dígito entre 0001 y 0000 o 0101.
Por lo tanto, o bien la palabra emitida fue 0000, o bien fue 0101.
CAPÍTULO 5. TEORÍA DE LA CODIFICACIÓN 110
Denición 5.2.1. Sea n ∈ N y sea A un alfabeto. Sean x = x1 x2 ...xn e y = y1 y2 ...yn dos palabras
de longitudn sobre el alfabeto A, es decir, xi , yi ∈ A para todo i = 1, 2, ..., n. Denimos la distancia
de Hamming entre x e y (o de x a y ), y lo denotamos por d(x, y), como
Ejemplo 5.2.2.
1. Si A es el alfabeto formado por las letras de nuestro abecedario, entonces
d(matematicas, macemoticas) = 2
y
d(natillas, patillas) = 1.
Proposición 5.2.3. Sea n∈N A un alfabeto. Si denotamos por An al conjunto de todas las
y sea
palabras de longitud n en el alfabeto A, entonces la distancia de Hamming es una distancia en el
conjunto An , es decir, la aplicación d : An × An −→ R denida por
para todo x = x1 x2 ...xn , y = y1 y2 ...yn ∈ An , con xi , yi ∈ A para todo i = 1, 2, ..., n, verica las
siguientes propiedades:
para todo x = x1 x2 ...xn , y = y1 y2 ...yn ∈ An , con xi , yi ∈ A para todo i = 1, 2, ..., n, está bien
denida, ya que a cada elemento de An × An le corresponde un único valor de R.
{i ∈ {1, 2, ..., n} : xi ̸= xi } = ∅.
{i ∈ {1, 2, ..., n} : xi ̸= yi } = ∅,
2. Es evidente que
Luego
Sea k ∈ {i ∈ {1, 2, ..., n} : xi ̸= zi }, es decir, k ∈ {1, 2, ..., n} es tal que xk ̸= zk . Vamos a ver
que
k ∈ {i ∈ {1, 2, ..., n} : xi ̸= yi } ∪ {i ∈ {1, 2, ..., n} : yi ̸= zi }.
Distinguiremos dos casos:
Luego
y, por tanto,
d(x, z) ≤ d(x, y) + d(y, z).
A esta forma de proceder se le denomina argumento del vecino más próximo. Nótese que el
vecino mas próximo no tiene por qué ser la palabra que se ha enviado. Además, como vimos en el
ejemplo anterior, tampoco tiene por qué ser único.
Denición 5.2.5. Sea A un alfabeto y sea C un código bloque sobre A. Llamaremos distancia
mínima de C al número
d(C) = mín{d(x, y) : x, y ∈ C, x ̸= y}.
CAPÍTULO 5. TEORÍA DE LA CODIFICACIÓN 112
Ejemplo 5.2.6. Sea A = {0, 1} y consideremos el código bloque C = {00000, 01010, 11000, 11101}.
En este caso, la distancia mínima de C es 2.
Ejemplo 5.2.8. Sea A = {0, 1} y consideremos el código bloque C = {00000, 01101, 10110, 11011}.
En este caso, como d(C) = 3, entonces el código C detecta 2 errores, ya que siempre que en
la transmisión de una palabra de C se produzcan 2 errores el receptor lo detectará, por no haber
palabras en C con distancia de Hamming igual a 2. Del mismo modo, se tiene que el código C
detecta 1 error.
Sin embargo, el código C no corrige 2 errores, ya que al transmitir 00000 ∈ C podríamos recibir
01001 ∈
/ C , pero d(01001, 01101) = 1 < 2 = d(01001, 0000), con lo que el vecino más próximo de
01001 es 01101, en lugar de ser el mensaje original 00000.
Teorema 5.2.9. Sea A un alfabeto y sea C un código bloque sobre A con distancia mínima d=
d(C). Entonces se verica:
Demostración.
′
2. Supongamos ahora que se envía la palabra x ∈ C y, durante su transmisión, se producen r
′ ′ ′ ′ ′
d−1
errores, con 0 < r ≤
′
d−1 2d−1 ,recibiéndose la palabra x , es decir, d(x, x ) = r , con 2r ≤ d − 1,
por ser r ≤ y 2 ≤ d − 1.
2 2
′
Veamos que el único vecino más próximo a x es x por reducción al absurdo. Supongamos
′ ′ ′
que existe z ∈ C , con z ̸= x, tal que d(z, x ) ≤ d(x, x ) = r .
Ejemplo 5.2.10. En el ejemplo anterior, teníamos el código C = {00000, 01101, 10110, 11011}
sobre el alfabeto A = {0, 1}.
Vimos que este código C no corregía 2 errores. Sin embargo, aplicando el teorema anterior,
3−1
tenemos que el código C corrige 1 error, ya que d(C) = 3 y
2
= 1.
Denición 5.3.1. Sean ∈ N y sea C un código bloque binario de longitud n. Diremos que C es
n
un código lineal (binario) si C es un subespacio vectorial de Z2 .
Observación 5.3.2. Aunque nosotros vamos a trabajar con códigos lineales binarios (subespacios
n n
vectoriales de Z2 ), se pueden denir códigos lineales sobre Zp para cualquier número primo p.
Ejemplo 5.3.3.
1. El código bloque binario C = {000, 010, 111, 001} no es lineal ya que, si representamos
010 ≡ (0, 1, 0) ∈ Z32 y 111 ≡ (1, 1, 1) ∈ Z32 , entonces
2. El código C ′ = {000, 011, 101, 110} sí es lineal, ya que B = {011, 110} es base de C ′ , es decir,
3. El código bloque C ′′ = {1111, 0101, 1010} no es un código lineal ya que, aunque 0101+1010 =
1111, se tiene que 0000 ∈/ C ′′ .
Observación 5.3.4. Para comprobar si un código bloque binario C es lineal, basta vericar que
x+y ∈C para todo x, y ∈ C .
n
Observación 5.3.6. Si B = {v1 , v2 , ..., vm }, con m= dim(C) ≤n= dim(Z2 ), es una base de un
código lineal C, entonces cada palabra de C se expresa de forma única como combinación lineal
de los elementos de B, es decir,
Esto puede expresarse en forma matricial utilizando una matriz generadora del código C,
v11 v12 ... v1n
v21 v22 ... v2n
λ1 v1 + λ2 v2 + ... + λm vm = λ1 λ2 ... λm
...
,
... ... ...
vm1 vm2 ... vmn
Por lo tanto, conociendo una matriz generadora de un código C, podemos obtener todas las
palabras del código. Además, si dim(C) = m, entonces C tendrá 2m palabras, ya que el espacio
vectorialZm m m
2 tiene P R(2, m) = 2 elementos y C es isomorfo a Z2 .
Gracias a la matriz generadora de C , sabemos que C tiene dimensión 4 y, por tanto, |C| =
24 = 16. Además, como la matriz generadora tiene 7 columnas, entonces las 16 palabras de C tiene
longitud 7, es decir, C es un código bloque de longitud 7.
Por la observación anterior, cada una de estas 16 palabras será el resultado de multiplicar los
P R(2, 4) = 24 = 16 elementos de Z42 por la matriz G:
0 0 0 0 G= 0 0 0 0 0 0 0 ,
0 0 0 1 G= 0 0 0 1 0 1 1 ,
0 0 1 0 G= 0 0 1 0 1 0 1 ,
0 0 1 1 G= 0 0 1 1 1 1 0 ,
0 1 0 0 G= 0 1 0 0 1 1 0 ,
0 1 0 1 G= 0 1 0 1 1 0 1 ,
0 1 1 0 G= 0 1 1 0 0 1 1 ,
0 1 1 1 G= 0 1 1 1 0 0 0 ,
CAPÍTULO 5. TEORÍA DE LA CODIFICACIÓN 115
1 0 0 0 G= 1 0 0 0 1 1 1 ,
1 0 0 1 G= 1 0 0 1 1 0 0 ,
1 0 1 0 G= 1 0 1 0 0 1 0 ,
1 0 1 1 G= 1 0 1 1 0 0 1 ,
1 1 0 0 G= 1 1 0 0 0 0 1 ,
1 1 0 1 G= 1 1 0 1 0 1 0 ,
1 1 1 0 G= 1 1 1 0 1 0 0 ,
1 1 1 1 G= 1 1 1 1 1 1 1 .
Por lo tanto, existe una matriz H ∈ M(n−m)×n (Z2 ) tal que (x1 , x2 , ..., xn ) ∈ C si y solo si
x1 0
x2 0
H ... = ... .
xn 0
xn 0
Observación 5.3.10. Como a partir de una base de un subespacio vectorial podemos determinar
sus ecuaciones cartesianas y viceversa, entonces a partir de una matriz generadora de un código
podremos obtener una matriz de control del código y viceversa. Además, como ni la base ni las
ecuaciones cartesianas de un subespacio vectorial son únicas, entonces estas matrices no son únicas.
Ejemplo 5.3.11.
1. Sea C un código lineal binario con matriz de control
1 1 0 0 0 0 1
H = 0 1 1 0 0 1 1 .
0 0 0 1 0 1 1
Vamos a determinar una matriz generadora del código C a partir de la matriz de control H.
Para ello, necesitamos determinar una base de C como subespacio vectorial de Z72 .
CAPÍTULO 5. TEORÍA DE LA CODIFICACIÓN 116
es una base de C.
Luego
1 1 1 0 0 0 0
0 0 0 0 1 0 0
G=
0
0 1 1 0 1 0
0 1 0 1 0 0 1
es una matriz generadora de C.
Vamos a calcular una matriz de control del código C a partir de la matriz generadora G.
CAPÍTULO 5. TEORÍA DE LA CODIFICACIÓN 117
Como
1 0 0 0 1 1 1
0 1 0 0 1 1 0
G=
0
0 1 0 1 0 1
0 0 0 1 0 1 1
es una matriz generadora del código C, entonces
es una base de C.
Por lo tanto, si (x1 , x2 , x3 , x4 , x5 , x6 , x7 ) ∈ C , entonces la matriz
x1 x2 x3 x4 x5 x6 x7
1 0 0 0 1 1 1
0 1 0 0 1 1 0
0 0 1 0 1 0 1
0 0 0 1 0 1 1
tiene rango 4, con lo que todos los menores de orden 5 deben ser cero.
Luego
x1 x2 x3 x4 x5
1 0 0 0 1
0 1 0 0 1 = 0 ⇔ x1 + x2 + x3 + x5 = 0,
0 0 1 0 1
0 0 0 1 0
x1 x2 x3 x4 x6
1 0 0 0 1
0 1 0 0 1 = 0 ⇔ x1 + x2 + x4 + x6 = 0,
0 0 1 0 0
0 0 0 1 1
x1 x2 x3 x4 x7
1 0 0 0 1
0 1 0 0 0 = 0 ⇔ x1 + x3 + x4 + x7 = 0,
0 0 1 0 1
0 0 0 1 1
con lo que
x1 + x2 + x3 + x5 = 0
x1 + x2 + x4 + x6 = 0
x1 + x3 + x4 + x7 = 0
Ejercicios
1. Si C n, denimos el peso de x = x1 x2 ...xn ∈ C , y lo
es un código bloque de longitud
denotamos por ω(x), como ω(x) = |{xi ̸= 0 : i = 1, 2, ..., n}|. Demostrar que si C es un código
lineal binario, entonces d(C) = mín{ω(x) : x ∈ C, x ̸= 0}.
2. Sea C un código lineal binario y sea H una matriz de control del código C . Demostrar que,
n t t t
dados dos vectores x, y ∈ Z2 , se tiene que x + y ∈ C ⇔ Hx = Hy , donde Hx es el vector
n t
de Z2 obtenido tras realizar la multiplicación matricial HX (denominado síndome de x).
1 0 0 0 1 1 1
0 1 0 0 1 1 0
G=
0
.
0 1 0 1 0 1
0 0 0 1 0 1 1
1 1 0 1 1 0 0
H = 1 0 0 1 0 1 0 .
0 1 1 0 0 0 1
1 1 0 ... 0
1 0 1 ... 0
H=
... ... ...
.
... ...
1 0 0 ... 1
1 0 0 1 1 1 0
G = 0 1 0 1 1 0 1 .
0 0 1 1 0 1 1
CAPÍTULO 5. TEORÍA DE LA CODIFICACIÓN 119
0 1 1 1 1 0 0 0
1 0 1 1 0 1 0 0
H=
1
.
1 0 1 0 0 1 0
1 1 1 0 0 0 0 1