Está en la página 1de 8

Conferencia #16: ”Códigos de bloque”

Sumario:
Distancia de código.
Límite de Hamming.
Códigos algebraicos.
Código de Hamming. Ejemplo.
Bibliografía:
“Equipos electrónicos para la transmisión de datos” Juan V. Lorenzo.
Editorial Pueblo y Educación.

Habíamos hablado que los códigos de bloque y la codificación redundante en


general incorporaba, como su nombre lo indica, cierta redundancia a las palabras
del mensaje, esa redundancia era un grupo de bits que no portaban información
esencial y que su único objetivo era el de detectar y corregir los errores que
pudieran producirse durante la transmisión.

Analicemos los casos siguientes:


m1 mensaje 1
m2 mensaje 2
a)
m1 0 0

m2 1 1
TX RX

En el extremo receptor (RX) es imposible detectar errores porque ambas


combinaciones son válidas.
Duplicando el número de dígitos para la codificación (introduciendo redundancia)

b)

m1 00 00
01
10

m2 11 11

Se detecta que ha ocurrido error, pero no puede corregirse. En le caso que se


transmita 00 y se reciba 11no se detecta que ha ocurrido un error doble.

c) 000
m1 000 001
010
100
110
m2 111 101
011
111
Se detectan errores simples y se pueden corregir por mayoría. No se detecta la
ocurrencia de un error triple.

Concepto de distancia de código:


La distancia de código se designa con la letra d y es la cantidad de dígitos
diferentes que como mínimo existen entre dos palabras válidas del código.
En los casos anteriores.
m1. 0
m2 1 d = 1
m1 00
m2 11 d = 2
m1 000
m2 111 d = 3
Si llamamos k a la multiplicidad de los errores que ocurren:

Si d = k El código no puede ni detectar ni corregir errores. (caso a)


Si d = k+1 El código es capaz de detectar errores de multiplicidad k pero no puedo
corregirlos.
Si d = 2k+1 El código es capaz de detectar hasta errores de multiplicidad 2k y
puede corregir errores de multiplicidad k.

Ejemplo:
Caso c)
d = 3 d = 2+1 es capaz de detectar errores de multiplicidad 2k y puede corregir
errores de multiplicidad k.
d = 2(1)+1 es capaz de detectar dobles y corregir simples.

La forma anterior de detección y corrección de errores mediante el código de


repetición no es la forma más adecuada ya que se introduce redundancia
descontroladamente afectando seriamente la eficiencia del código obtenido.

Cuantos dígitos de chequeo emplear de la forma más óptima posible.


Para proteger m dígitos de información hacen falta b dígitos de chequeo, que dan
un total de n bits.
n = m+b
La proporción en la que deben ser añadidos estos dígitos la expresa el llamado
límite de Hamming que plantea:
 
2 3 k

2 b  1  n  n  n  ...  n Límite de Hamming para corrección de errores de
multiplicidad k.

Donde nr 
n!
r!  n  r !
El límite de Hamming expresa la relación óptima que tiene que existir entre la
cantidad de dígitos de chequeo, la cantidad total de dígitos de la palabra código y
la multiplicidad de los errores que se desean corregir.
Para el caso de errores simples, que son los más probables, k = 1 y el límite se
reduce a
2b  n+1 Relación entre m, b y n para corrección de errores simples.

Veamos la siguiente tabla:


m 1 2 3 4 5 6 ... 11 ... 8192
b 2 3 3 3 4 4 ... 4 ... 13
n 3 5 6 7 9 10 … 15 … 8205
m 33.3% 40% 50% 57% 55% 60% 73.3% 99.8%
E ff 
n

Esta tabla verifica 2b  n+1 y da la relación entre b, m y n para la corrección de


errores simples.
OBSERVAR: Como a medida que aumenta el número de bits de información, el
número de bits de chequeo necesarios para protegerlos aumenta también, pero en
una proporción mucho menor.
Para proteger contra errores simples bloques de 1 KByte de información
(10248=8192 bits) solo se requieren 13 bits de chequeo.
Conclusión. Cuando el número de bits de información, m aumenta también, la
razón b/m disminuye y esto hace que aumente la eficiencia del código.

Códigos algebraicos (de forma general)


Son una clase importante dentro de los códigos de bloque y se sustentan en el
álgebra de codificación.
Las reglas del álgebra de codificación son el producto y la suma módulo 2.
X Y X  X·Y
Y
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

En este tipo de código la palabra de código típica esta formada de la siguiente


manera:
m1m2m3...mkc1c2...cr
Los k primeros bitios son de información, los r últimos bitios son de chequeo.
Cada uno de los r bits de chequeo es el bit de paridad de determinada
combinación de los bits del mensaje.
Las combinaciones por las que se sacan los valores de los bits de chequeo vienen
por un sistema de ecuaciones lineales que caracteriza al código:

a11m1  a12 m 2  ....  a1k m k  b11c 1  ....  b1r c r  0



a 21m1  a 22 m 2  ....  a 2k m k  b 21c 1  ....  b 2r c r  0

   
a r1m1  a r 2 m 2  ....  a rk m k  b r1c 1  ....  b rr c r  0
donde aij y bij son coeficientes binarios 1 y 0.

Este
  
sistema se puede representar más convenientemente de forma matricial así:
AT  0
a 11 a 12  a 1k b 11 b 12  b 1r 
 
 a 21 a 22  a 2k b 21 b 21  b 2r 
Donde A =
    
 
 a r1 a r 2  a rk b r1 b r 2  b rr 
Es la matriz del código que contiene r filas (tanta como dígitos de chequeo) y n
columnas (tantas como dígitos tiene la palabra codificada de salida).
 m1 
m 
 2
 
 
 m k 
El vector columna T =   representa la palabra codificada para la transmisión.
c1
 
c2 
 
 
 c r 
Todas las palabras de código deben satisfacer la condición:
  
AT  0
El valor de los bits de chequeo se calculará de manera que se verifique esta
condición para cada una de las palabras del mensaje a codificar.
 
T es la palabra que se transmite y se recibe de manera general un vector R que

en caso
 
de transmisión sin errores debe ser igual a T .
Si A  R  0 Significa que la palabra recibida no es válida y que en ellas hay al
menos
 
un error.
Si A  R  0 Puede significar que no hubo error o que ocurrieron una palabra de
código en otra también válida (esto tiene muy poca probabilidad de ocurrencia).
   
Si ocurren errores, la palabra recibida R puede escribirse como R  T  E

T : palabra transmitida libre de errores.

E : palabra de error, tiene un 1 en cada posición donde halla ocurrido un error y
un 0 en las demás posiciones.
Ejemplo:
Si se transmite:
1 1 0
1 1 0
        
T  0 y se recibe R  0 entonces E  0
     
1 1 0
0 1  1

La corrección del error se realiza mediante la determinación de la matriz síndrome


  
S  A  R , palabra de origen médico cuyo significado es el conjunto de síntomas
que caracterizan una enfermedad. De la interpretación de esta matriz síndrome se
obtiene la información de la información de la posición donde ocurrió el error para
de esa forma corregirlo.

Para que esto sea posible, la matriz A del código debe cumplir las siguientes
requisitos:
- Todas las columnas de A deben ser diferentes entre si y ninguna debe estar
compuesta por ceros solamente.
- Debe tener tantas filas como dígitos de chequeo (r).
- Debe tener tantas columnas como dígitos totales tenga la secuencia
codificada de salida (n).

Ejemplo concreto de código algebraico:


El código de Hamming.
Este código fue propuesto por R. W. Hamming en 1950 y permite mediante una
asignación de valores adecuada a los elementos de la matriz A, obtener 
la
posición del error simple directamente de la lectura del vector síndrome S .

Construyamos la matriz de Hamming para el código corrector de errores simples


con k = 4 bits de información, r = 3 bits de chequeo y n = 7.

10 A las columnas de la matriz A se le asignan los valores en binario de la posición


de sus columnas.
0 0 0 1 1 1 1
A  0 1 1 0 0 1 1 r filas = 3
 1 0 1 0 1 0 1

n columnas = 7

20 Los dígitos de chequeo, que van entremezclados con los dígitos de información
se asignan a las columnas de a matriz A que tengan un solo 1.
C0 C1 m1 C2 m2 m3 m4

0 0 0 1 1 1 1
A  0 1 1 0 0 1 1  Los dígitos de información se asignan por orden a
 
1 0 1 0 1 0 1
 
las columnas que van quedando.

De tal forma que el vector T tiene la forma
c0 
c 
C C m C m m m   
1
0 1 1 2 2 3 4

 0 0 0 1 1 1 1  1
 m
 0 1 1 0 0 1 1   c 2    0 esto es   
A, T  0
  
 1 0 1 0 1 0 1  m 2 
  
m 3 
m 
 4

30 Efectuando, obtenemos el siguiente sistema de ecuaciones


c 2  m 2  m 3  m 4  0

c 1  m 2  m 3  m 4  0
c  m  m  m  0
0 2 3 4
De donde despejando c0, c1 y c2 se obtiene como calcular los bits de chequeo para
secuencia de datos.
c 2  m2  m3  m4
c1  m2  m3  m4
c 0  m2  m3  m4
Codifiquemos la secuencia
1 0 1 0
m1m2m3m4

Calculemos los bits de chequeo para esta secuencia:


c 2  0  1 0  1
c1  1 1 0  0
c 0  1 0  0  1
La palabra codificada transmitida será:
c0  1
c  0
 1  
 m1  1
   
T   c 2  T  1
m 2  0
   
m 3  1
m  0
 4  
supongamos que se recibe la palabra R con un error simple en la posición
correspondiente a m1.
1
0
 
0 Error
 
O sea R  1
0
 
1
0
 
  
El cálculo de la matriz Síndrome se hace por S  A  R
 1
0
 
0 0 0 1 1 1 1 0 0
 
S  0 1 1 0 0 1 1  1   1
 1 0 1 0 1 0 1 0  1
 
 1
0
 
Las multiplicaciones son normales y las sumas son módulo 2.
0
S   1 Leído de arriba hacia abajo S = 011 = 3, lo que indica que el error ocurrió
 1
en la tercera posición de la palabra recibida.
C0 C1 m1 C 2 m 2 m3 m 4 
S  1 0 0 1 0 1 0
 

Error en la posición 011

S fue distinto de cero, por lo que ocurrió un error.


 
Si S  0 puede que no hayan ocurrido errores o que hayan ocurrido tantos errores
que se haya convertido en otra válida también, poco probable.

Para el caso de que se trabaje con m = 5, b = 4 y n = 9.


Hay 4 dígitos de chequeo para proteger solo 5 dígitos de información. Con 4
dígitos de chequeo pueden protegerse 
hasta 11 dígitos de información. Si en este
caso al calcular la matriz síndrome, S , esta da un avlor en binario que no
corresponde a ninguna columna de la matriz A (que tendría n = 9 columnas)
significará que ocurrieron errores múltiples y la recuperación sería por
retransmisión.

También podría gustarte