Está en la página 1de 23

Detección y corrección de errores

Los errores en los troncales digitales son raros. Pero son


comunes en los local loops y en la transmisión inalámbrica.

En algunos medios (por ejemplo, el radio) los errores ocurren en


grupos (en vez de individualmente). Un grupo inicia y termina con bits
invertidos, con algún subconjunto (posiblemente nulo) de los bits
intermedios también invertidos.

Ventaja:
Si tuviésemos una taza de 0,001 errores por bit y bloques de
1000 bits, la mayoría de los bloques tendrían errores. Pero con los
errores en grupos, no.

Desventaja:
Los errores en grupo son más difíciles de detectar.

Enfoques:

La corrección de errores. Transmitir información redundante


que permite deducir que debía ser un carácter transmitido.
La detección de errores. Transmitir solamente suficiente información
para detectar un error.

Términos:

Un codeword de n bits consiste en m bits de dato y r bits de


redundancia o chequeo.
La distancia de Hamming de dos codewords es el número de bits
distintos. Es decir, haga el XOR de los codewords y cuenta el número
de unos.

Normalmente todos los 2m mensajes de dato son legales, pero


no los 2n codewords debido a la manera en que se calcula los bits de
chequeo.

Se pueden construir todos los codewords legales y entonces


encontrar los dos con la distancia de Hamming mínima. Esta es la
distancia de Hamming del código.

Para detectar d errores se necesita un código de distancia de


Hamming de d+1, porque entonces d errores únicos de bit no pueden
cambiar un codeword válido a otro codeword válido.
Para corregir d errores se necesita una distancia de 2d+1. Aun cuando
hay d cambios, el codeword original todavía está más cerca que
cualquier otro.
Ejemplos:

Un código usa un solo bit de paridad que se añade así que el


número de unos es par. Tiene una distancia de dos y puede detectar
los errores únicos.

Un código tiene los cuatro codewords 0000000000,


0000011111, 1111100000, y 1111111111. La distancia es cinco; el
código puede corregir dos errores. Por ejemplo, interpreta
0000000111 como 0000011111.
Supon que queremos corregir los errores de un bit. Necesitamos un
código con una distancia de tres. Dado m, ¿qué debe ser r?

Hay 2m mensajes legales. Cada uno tiene n codewords ilegales a


una distancia de uno que se forman invirtiendo individualmente cada
uno de los n bits del codeword.
Entonces cada uno de los 2m mensajes necesita n+1 patrones de bit
propios.

Tenemos 2n codewords posibles. Entonces, 2m(n+1) <= 2n, o


usando n = m+r, m+r+1 <= 2r.

Dada m tenemos un límite inferior del número de bits de


chequeo r. El código de Hamming logra este límite.

Se pueden usar un código de corrección para los errores de un


bit para corregir los errores en grupo usando un truco: Transmite los
datos como las columnas de un matriz donde cada fila tiene su propio
bits de chequeo.

Códigos de detección de errores

Aunque se usa a veces la corrección de errores, normalmente se


prefiere la detección de errores ya que es más eficiente.

Por ejemplo, asume que tenemos un canal con una taza de


errores de 10-6 por bit (es decir, un bit en cada 106). Usamos mensajes
de 1000 bits de dato.

Para la corrección debemos añadir 10 bits por mensaje. En la


transmisión de 106 bits de dato mandamos 10.000 bits de chequeo
para detectar y corregir el un bit de error que esperamos.

Para la detección usamos solamente un bit de paridad por


mensaje. Para 106 bits de dato usamos solamente 1000 bits. Pero uno
de los mensajes tiene un error, así que tenemos que retransmitirlo
con su bit de paridad (1001 bits). En total usamos 2001 bits para este
esquema.
Si usamos un solo bit de paridad y tenemos un grupo de errores,
la probabilidad de detección es solamente 1/2. Podemos aumentar la
capacidad a detectar un grupo de errores usando el truco de la
transmisión de un matriz de k×n: Se transmiten los datos por
columna, y cada fila tiene un bit de paridad. Podemos detectar los
errores en grupo hasta n, el número de filas. No podemos detectar
n+1 si el primer bit y el último bit son invertidos y todos los otros son
correctos. Si tenemos muchos errores en el bloque la probabilidad de
aceptarlo es solamente (1/2)n.

Códigos de corrección de errores


Enviar información redundante junto con cada bloque de datos a
enviar al receptor para deducir que carácter se envío

Códigos de detección de errores


Enviar información junto con los datos que permita deducir que
en un error ocurrió, pero no cual, y pida una retransmisión

Error: un error en datos binarios es definido como un valor incorrecto


en uno o más bits

Single error: valor incorrecto en un solo bit

Múltiple error: uno o más bits incorrectos

D (I,J): distancia entre I e J


Número de posiciones de bits en los cuales las palabras I e J
son diferentes
W (P): peso de la palabra P
Número de bits dentro de P iguales a 1

Ejemplos

Considerar las siguientes palabras

I = 01101100
J = 11000100

El peso de cada una es


w(I) =
w(J) =

La distancia entre las dos es


d(I,J) =
Distancia mínima

Sea un código con palabra de n bits

La distancia mínima (distancia Hamming) de un código es el


número de bits en los cuales dos caracteres de un código difieren

Ejemplo: código de 4 caracteres y 5 bits

A 0 0 0 0 0
B 1 1 1 0 0
C 0 0 1 1 1
D 1 1 0 1 1

La redundancia

Distancia mínima: 3 bits

Se tienen 3 bits redundantes

Ejemplo detección error:

Dato enviado: 11011 (D)


Dato recibido: 11000
11000 no es confundido con ningún otro carácter
2 bits erróneos en una letra no causarán confusión con ningún otro
carácter

Errores en dos o menos bits pueden detectarse con una distancia


mínima de 3

Errores en tres o más bits no siempre se pueden detectar en un


código de distancia mínima de 3

un error en 3 bits en la letra B del ejemplo anterior puede


convertirla en A
Código de detección de errores.-

Se aplican a las señales Binarias, y se dividen en dos.

1. - Por BIT de paridad.- Es el más utilizado.

2. - Por BIT de parada.- aparte de detectar los errores, intenta


corregirlo.

No se utiliza un circuito para mandar el estado de un bit, se usa


un registro más y una vez llegada y comprobada la información y si es
correcto todo se desecha el registro de estado.

Código de detección de errores. Detecta el error y busca cual es


el BIT que esta fallando, para arreglarlo.

Registros.- Grupo de celdas binarias agrupadas entre si, para obtener


un código especificó
Los puntos esenciales del modelo de prevención de errores en la
calidad se presentan en los siguientes pasos:

1. Identificar las fuentes de los errores en la calidad revisando los


procesos, la captura de datos, las causas y los efectos de problemas
potenciales.

2. Analizar los errores en la calidad para determinar los factores que


causan el error. Después de una cuidadosa revisión y análisis de
datos, de métodos, de procedimientos y de operaciones, se deben
identificar los tipos y localización de errores, el personal responsable,
las herramientas, las máquinas o los materiales.

3. Pensar en soluciones alternativas y remedios para la corrección de


los errores. El razonamiento, el conocimiento y la experiencia deben
ser utilizados para seleccionar el remedio correcto para la corrección
de error en la calidad.

4. Ejecutar el remedio para la corrección del error en la calidad y


observar los resultados. La visualización y estudio de los datos
proporciona un mecanismo de realimentación para saber si los errores
han sido o no corregidos y si se ha conseguido una mejora como
resultado de remedio aplicado. El estudio de los datos puede
proporcionar áreas adicionales para la mejora.

5. Centrarse en mejorar continuamente por medio de caminos


sistemáticos y organizados para realizar el trabajo. Alentar, a nivel
individual y colectivo, un buen ambiente en el trabajo.
Verificación de Errores

 Se pueden producir errores en cualquiera de las fases del


proceso de desarrollo de un programa:
o validación: consiste en comprobar que tanto el algoritmo
como el programa cumplen la especificación del
problema; responde a la pregunta: estamos resolviendo el
problema correcto?
o verificación: se refiere a la comprobación de que son
correctos y completos; responde a la pregunta: estamos
resolviendo el problema de forma correcta?
 Una parte importante de la verificación y la validación es la
ejecución del programa con distintos conjuntos de datos:
o modo interactivo: el usuario introduce los valores de los
datos durante la ejecución del programa (desde el
teclado), y se muestra la salida producida por el programa
directamente al usuario (normalmente en una pantalla).
o procesamiento por lotes: el usuario debe preparar un
archivo que contenga el programa, los datos y quizá
ciertas ordenes; la ejecución se lleva a cabo sin ninguna
interacción con el usuario.
 Los errores pueden detectarse en distintas fases del procesamiento
del programa y provocar la detención del proceso.
o errores sintácticos o errores en tiempo de compilación:
por ejemplo, puntuación incorrecta o palabras claves
escritas incorrectamente; se detectan en tiempo de
compilación y normalmente hacen imposible completar la
compilación y ejecutar el programa.
o errores en tiempo de ejecución: por ejemplo, dividir por
cero en una expresión aritmética; pueden no ser
detectados hasta que ha comenzado la ejecución del
programa.
o errores lógicos: surgen en el diseño del algoritmo o en la
codificación del programa que implemente el algoritmo;
no ocurre ningún error durante la compilación o la
ejecución del programa, pero la salida producida no es
correcta.
 El proceso de prueba consiste en ejecutar un programa varias
veces con datos de entrada distintos para los que se conoce los
resultados correctos. Este proceso es importante para evaluar la
corrección de un programa. Los datos de prueba deben
seleccionarse cuidadosamente, de forma que se pruebe cada
parte del programa.
Códigos Polinomiales

Un método más usado es el código polinomial (también llamado


el cyclic redundancy code, o CRC). Se trata los strings de bits como
polinomios con coeficientes de solamente 0 y 1. Un mensaje de k bits
con un grado de k-1 corresponde a

bit0xk-1 + ...+ bitnxk-1-n + ...+ bitk-1x0


La aritmética con estos polinomios es módulo 2 sin llevar, es
decir la adición y la sustracción son equivalentes a XOR. La división
usa XOR en ves de sustracción y A se divide en B si el número de bits
en B es mayor de o igual a el número en A.

El remitente y el receptor usan el mismo polinomio de


generación, G(x), con bits alto y bajo de 1.

Para calcular el checksum de r bits, que también es el grado de


G(x). Añade r bits de 0 a M(x), el mensaje, produciendo xrM(x).

Divide xrM(x) por G(x), produciendo un resto.

Transmite T(x) = xrM(x) - resto. T(x) es divisible por G(x). Sus últimos
r bits son el checksum.

Si hay errores en la transmisión recibiremos T(x)+E(x) en vez


de T(x). El receptor divide T(x)+E(x) por G(x). Ya que el resto debido
a T(x) es 0, el resto obtenido es completamente debido a E(x). Si E(x)
tiene G(x) como un factor, el resto será 0 y no detectaremos el error,
de otro modo, sí.

Si hay un error de un bit, E(x) = x i. Si G(x) tiene más de un


término, no puede dividir E(x). Entonces podemos detectar todos los
errores de un bit.

Con dos errores tendremos E(x) = xi + xj = xj(xi-j+1). Podemos


usar un G(x) que no divide xk+1 para cualquier k hasta el valor
máximo de i-j (que es la longitud del marco). Por ejemplo, x 15+x14+1
no divide xk+1 para k<32768.

Si x+1 es un factor de G(x), podemos detectar todos los errores


que consisten en un número impar de bits invertidos. Prueba por
contradicción: Asume que E(x) tiene un número impar de términos y
es divisible por x+1. Entonces E(x) = (x+1)Q(x) por algún Q(x). E(1)
= (1+1)Q(1) = (0)Q(1) = 0. Pero E(1) debe ser 1 porque consiste en
la suma de un número impar de 1's.

Podemos detectar todos los errores en grupo con longitudes


menos de o igual a r.
Si el grupo tiene una longitud de k, lo podemos escribir como
xi(xk-1+...+1) (i ubica el grupo en el marco). Si G(x) contiene un
término de x0, xi no puede ser un factor y G(x) no puede ser igual a x k-
1
+...+1 (el grado k-1 es menos de r). Si el grupo tiene una longitud de
r+1, la probabilidad que el grupo es G(x) es la probabilidad que los r-1
bits intermedios del grupo son iguales (por definición el primer y el
último bits del grupo son 1), que es (1/2)r-1.

Para los grupos con longitudes mayor de r+1, la probabilidad es


(1/2)r.

Estándares internacionales:

CRC-12 = x12 + x11 + x3 + x2 + x + 1


CRC-16 = x16 + x15 + x2 + 1
CRC-CCITT = x16 + x12 + x5 + 1

Los dos últimos detectan todos los errores de uno y dos bits, los
errores con un número impar de bits invertidos, los grupos de errores
con longitudes menos de o igual a 16, 99,997% con longitudes de 17,
y 99,998% con longitudes mayor o igual a 18.

Control de Paridad
Cuando se implementa un sistema de paridad en un sistema
informático, se almacena un bit de paridad por cada 8 bits de datos.
Existen dos métodos de control de paridad: paridad par y paridad
impar, dependiendo de que aquello que se controle sea el número de
ceros o de unos en cada grupo de ocho bits en memoria. El método de
control de paridad tiene sus limitaciones. Por ejemplo, un sistema de
control de paridad, puede detectar errores, pero no corregirlos.
Incluso puede darse el caso de que varios bits sean erróneos y el
sistema no detecte error alguno.

Ejemplo de Control de Paridad


1. Control de paridad vertical.
2. La cinta tienen 9 pistas, en las que 8 son de datos y una es de
paridad.
3. Control de paridad horizontal.

Por cada 512 bytes de datos de cinta, se utiliza 1 byte de control de


paridad.

Control de paridad por carácter:

consiste en hacer el número de unos que aparecen en el dato


(byte) par o impar. Puede fijarse también la paridad a un valor de 1
(Mark) ó 0 (Space).

Control de paridad por Matriz de caracteres:

se determina la paridad de filas y columnas, y se envían los bits


de control por filas. Permite tanto la detección como la corrección de
los errores.
Servicios de Retransmisión de Telecomunicaciones

Los Servicios de Retransmisión de Telecomunicaciones (TRS, la sigla en


inglés) permiten a los usuarios de teléfonos estándar hablar con personas que
tienen impedimentos auditivos o del habla. En virtud del Título IV de la Ley
para Americanos con Incapacidades, todas las compañías de teléfono deben
proporcionar servicios de retransmisión gratis ya sea directamente o a través de
programas estatales en los 50 estados, el Distrito de Columbia, Puerto Rico y
todos los territorios estadounidenses. Las empresas, agencias de gobiernos,
familiares, amigos y empleadores de personas con impedimentos auditivos o
del habla hacen y reciben llamadas retransmitidas todos los días.

¿Como Funciona El servicio TRS?

El servicio TRS utiliza operadores, llamados "asistentes de


comunicaciones" (CA, la sigla en inglés) para facilitar las llamadas telefónicas
entre las personas con impedimentos auditivos o del habla y otros individuos.
Las reglas de la Comisión Federal de Comunicaciones (FCC) exigen a las
compañías de teléfono proporcionar el servicio TRS a nivel nacional, las 24
horas del día, los 7 días de la semana, sin costo adicional para las personas que
originan la llamada. Las conversaciones se retransmiten en tiempo real y los CA
no están autorizados a revelar el contenido de las mismas. No existen
limitaciones en cuanto al tipo, duración o naturaleza de las llamadas realizadas
a través del servicio de retransmisión.

¿Qué es un TTY (Teléfono de Texto)?

Los TTY también reciben el nombre de teléfonos de texto (o teletipo).


Los TTY tienen un teclado de máquina de escribir que le permite a las personas
escribir sus conversaciones telefónicas a través de un enlace de texto vi
direccional. La conversación se lee en una pantalla iluminada y/o en formato de
papel en el TTY.

¿Qué Tipos de TRS hay disponible?

Hay varios tipos de TRS. Cualquiera de estos puede ser iniciado por un
individuo con un impedimento auditivo o del habla, o por un usuario de teléfono
convencional.
TRS de Texto-a-Voz – Este tipo de TRS utiliza a un CA que dice lo que escribe
el usuario del TTY, y escribe lo que responde el usuario del teléfono de voz. El
primer paso en este tipo de TRS es la llamada del usuario del TTY al centro de
TRS. Esto equivale a recibir una llamada de "tono de marcar". Luego, la
persona que llama da al CA el número de teléfono al que desea llamar. El CA
hace una llamada de voz a la persona que se está llamando. El CA actúa como
"enlace" en la conversación, convirtiendo todos los mensajes del TTY de la
persona que llama en mensajes de voz, y todos los mensajes de voz de la
persona llamada en mensajes escritos para el usuario del TTY. El proceso se
invierte cuando el que inicia la llamada es el usuario del teléfono de voz.
Traspaso de voz – El TRS de traspaso de voz (VCO) le permite a una persona
con impedimentos auditivos, pero que quiere usar su propia voz, hablar
directamente a la persona llamada y recibir la respuesta en formato de texto a
través del CA. No se requiere que ninguna de las partes mecanografíe el texto.
Este servicio es particularmente útil para las personas mayores que tienen
impedimentos auditivos, pero que aún pueden hablar.

Traspaso de audición – El TRS de traspaso de audición (HCO) le permite a una


persona con impedimentos del habla escribir su parte de la conversación en un
TTY. El CA lee estas palabras a la persona llamada, y la persona que hace la
llamada puede escuchar las respuestas directamente de la otra parte.

Retransmisión de voz-a-voz – Con esta opción, una persona con impedimentos


del habla utiliza a un CA especialmente capacitado para entender una variedad
de dificultades del habla. El CA repite lo que dice la persona que hace la
llamada, de una manera tal que las palabras se entiendan claramente. Para
esta opción no se necesita un teléfono especial.

Servicios de retransmisión de video – Este tipo de TRS permite a los individuos


que hablan por señas realizar llamadas retransmitidas a través de los CA, que
pueden interpretar sus llamadas. La persona que hace la llamada habla por
señas al CA a través de equipo de video y el CA interpreta en voz alta las señas
a la persona llamada y le responde por señas a la otra persona. La FCC no
exige este tipo de servicio de retransmisión, pero se ofrece voluntariamente por
ciertos programas de TRS. Esta opción es útil para las personas que usan el
Lenguaje por Señas Americano (ASL en inglés), y para las personas que no
pueden escribir fácilmente en un TTY, tales como niños que hablan por señas
usando el ASL.
Servicios de retransmisión en español – Las compañías de teléfono deben
proporcionar servicios de retransmisión interestatales (entre estados) en
español. Si bien la retransmisión en español no se requiere para llamadas intra-
estatales (dentro del estado), muchos estados con una población hispana
numerosa ya ofrecen este servicio voluntariamente.
Acceso 7 – 1 – 1 a TRS
De la misma manera que se llama al 4-1-1 para obtener información, a
partir de octubre de 2001 se podrá marcar el 7-1-1 para conectarse con un
servicio de retransmisión en cualquier parte de los Estados Unidos. El 7-1-1
facilitará las llamadas de retransmisión para las personas que están de viaje,
porque no tendrán que recordar los diferentes números de retransmisión de
cada estado.
¡No cuelgue!
Algunas personas cuelgan cuando reciben una llamada de retransmisión
porque piensan que el CA es un "telemarketer". Si descuelga el auricular y
escucha que dicen: "Hola, este es el servicio de retransmisión. ¿Ha recibido
alguna vez una llamada de retransmisión?", por favor, no cuelgue.
¡Felicitaciones! Está a punto de hablar por teléfono con una persona sorda, con
impedimentos auditivos o del habla.
El código Hamming

Inventado por Richard Hamming en 1950

Basado en dos conceptos:

Redundancia: mensaje es dividido en dos partes


Los bits de datos del mensaje
Los bits de redundancia para verificar el mensaje

El concepto de paridad

Valor de los bits de redundancia


Bit paridad par: el bit tiene el valor de tal forma
que el peso de la palabra sea par
Bit paridad impar: el bit tiene el valor de tal forma
que el peso de la palabra sea impar

Ejemplo envío/recepción con Hamming

Datos a enviar: 0011


Palabra codificada Que llego :

1000011 1000011

Palabra
Datos
codificada
recibidos
Después
Enviadade quitar
(Dígitos
Redundancia:
negrillas son0011
Redundantes)
Ejemplo código Hamming: emisión

Tamaño palabra de datos: 4 bits (a0a1a2a3)

Número bits paridad/redundancia: 3 (x1x2x3)


Formato palabra codificada a enviar:

x1 x2 a0 x3 a1 a2 a3
Cálculo valores bits de paridad:

x1 => x1 a0 a1 a3
x2 => x2 a0 a2 a3
x3 => x3 a1 a2 a3

Ejemplo código Hamming: recepción

Palabra codificada que llega

c1 c2 c3 c4 c5 c6 c7
Es necesario decodificar la palabra
Se tienen que verificar bits paridad c1c2 y c4

Las formulas para verificar los bits de paridad son:

e1 => c1 c3 c5 c7
e2 => c2 c3 c6 c7
e3 => c4 c5 c6 c7
Verificando si hubo error

Si (e1 = e2 = e3 = 0) entonces
No hubo error en la transmisión
Sino
Error, el bit erróneo corresponde al equivalente decimal
de (e3e2e1)2:
001: 1 101: 5
010: 2 110: 6
011: 3 111: 7
100: 4

Código Hamming de corrección automática de errores

Este sistema inventado por Richard W. Hamming (1950) asocia


bits de paridad par con combinaciones únicas de bits de datos. Este
método permite detectar y corregir con seguridad hasta un bit por
cada bloque de información transmitida.

A cada n bits de datos se le añaden k bits de paridad de tal


forma que el carácter transmitido tiene n+k bits de longitud. Los bits
se numeran de izquierda a derecha (el 1º bit es el más significativo).
Todo bit cuyo número sea potencia de 2 es un bit de paridad, los
restantes serán bits de datos. Los bits de dato se acomodan en sus
posiciones y los bits de paridad se calculan de modo que tengan una
paridad par sobre los bits cuyo número de bit formen, por ejemplo: El
bit 1 (paridad) es determinado por los bits de datos: 3 (1+2=3), 5
(1+4=5), 7 (1+2+4=7), 9 (1+8=9), etc...

De esta forma cada bit está verificado por una combinación


única de bits de paridad, de modo que analizando los errores de
paridad se puede determinar que bit es el que ha invertido su estado.
A continuación se dan algunos ejemplos que muestran cómo se
pueden localizar los bits alterados:

Paridad incorrecta en El error está en el bit


los bits número
4 4
1 y 45
1, 2 y 47
1y8 9
En el caso que exista más de un error en el bloque de
información se llegan a producir varias situaciones que pueden llevar
a la "corrección" de un bit no alterado (Ej: si cambian los bits 1 y 2
llevan a la corrección del bit sano 3), entre muchas otras situaciones.
Una variante del código Hamming es adicionarle 1 bit de paridad
global. De esta forma es posible tener la seguridad de detección de 2
errores, manteniendo la capacidad de corrección si se produce sólo 1
error.

Desventajas del código Hamming

La cantidad de bits de paridad empleados en la transmisión de


la información le restan eficiencia al proceso. Se define la eficiencia de
transmisión con la siguiente fórmula:

Suponiendo que se desea transmitir bloques de 8 bits de


información, se necesitan 4 bits de paridad para ello, con lo que se
tiene un total de 12 bits. La eficiencia sería:

La eficiencia de este tipo de transmisión resulta de 66.66%


debida solamente al plan de codificación. Además, dependiendo del
método de transmisión puede decaer todavía más.
Distancia Mínima de un Código
Tomamos una n-tupla v = ( v 0, v1, ..., vn-1). El peso Hamming ( o
simplemente peso ) de v, que se denota como w(v), se define como el
número de componentes distintas de cero de v. Por ejemplo, el peso
de v = ( 1 0 0 1 0 1 1 ) es 4.

Sean v y w dos n-tuplas, la distancia Hamming ( o simplemente


distancia ) entre v y w, que se denota como d(v,w), se define como el
número de dígitos en el mismo sitio que tienen diferentes. Por
ejemplo, la distancia Hamming entre v = ( 1 0 0 1 0 1 1 ) y w = ( 0 1 0
0 0 1 1 ) es 3; tienen diferentes las posiciones cero, uno y tres.
  La distancia Hamming es una función métrica que satisface la
desigualdad triangular. Sean v,w y x tres n-tuplas, entonces:

d(u,w) + d(w,x) >= d(v,x).

La demostración de esta desigualdad se deja como ejercicio.


De todo esto se deduce que la distancia Hamming entre dos n-
tuplas, v y w, es igual a el peso Hamming de la suma de v y w, esto es,
  d(v,w) = w( v + w )

Por ejemplo, la distancia Hamming entre v = ( 1 0 0 0 1 0 1 1 ) y


w = ( 1 1 1 0 0 1 0 ) es 4 y el peso de v + w = ( 0 1 1 1 0 0 1 ) es
también 4.

Dado un código bloque C, se puede calcular la distancia


Hamming entre cualquiera dos palabras código distintas. La  distancia
mínima de C ( dmin) se define como:

dmin = min { d(v,w) : v,w pertenecen a C, v distinto de w }.

Sea C un código lineal, la suma de dos vectores es también un


vector código. Por lo tanto, la distancia Hamming entre dos vectores
código en C es igual al peso Hamming de un tercer vector código en C.
De esto obtenemos que:

dmin = min { d(v,w) : v,w pertenecen a C, v distinto de w }=


= min { w(x) : x pertenece a C, x distinto de 0 } = wmin.

wmin es el peso mínimo del código lineal C. De lo cual obtenemos el


siguiente teorema:

Teorema 5.3.1.

La distancia mínima de un código lineal de bloque es igual al


mínimo peso de sus palabras distintas de cero.

Teorema 5.3.2

Sea C un código lineal (n,k) con su matriz de comprobación de


paridad H . Para cada vector código de peso Hamming l, existen l
columnas de H tales que el vector suma de esas columnas es igual al
vector cero. Recíprocamente, si existen l columnas de H cuyo vector
suma es el vector cero, existe un vector código con peso Hamming l
en C.

Demostración.

Vamos a escribir la matriz de comprobación de paridad de la


siguiente forma:
H = [ h0, h1, ..., hn-1],

donde hi representa la i-ésima columna de H. Sea v = ( v0, v1, ...,


vn-1) un vector código de peso l. Entonces, v tiene l componentes
distintos de cero. Sean vi1, vi2, ..., vil las l componentes distintas de
cero de v, donde 0 <= i1 < i2 < ... < il <= n - 1. Entonces vi1 = vi2 = ...
= vil = 1.
Como v es un vector código, se debe cumplir:

0 = v HT = v0h0 + v1h1 + ... + vn-1hn-1 = vi1hi1 + vi2hi2 + ... + vilhil = hi1 +


hi2 + ... + hil.

Esto prueba la primera parte del teorema.

Ahora suponemos que hi1, hi2, ..., hil son las l columnas de H tales que
hi1 + hi2 + ... + hil = 0.

Formamos una n-tupla x = ( x0, x1, ..., xn-1 ) cuyas componentes


distintas de cero son xi1, xi2, ..., xil. El peso Hamming de x es l.
Consideramos el producto

x HT = x0h0 + x1h1 + ... + xn-1hn-1 = xi1hi1 + xi2hi2 + ... + xilhil = hi1 + hi2 +
... + hil.

Por la suposición inicial x HT = 0. Por lo tanto, x es un vector


código de peso l en C. Esto prueba la segunda parte del teorema.

Corolario 1. Sea C es un código bloque lineal cuya matriz de


comprobación de paridad es H . Si no d - 1 o menos columnas de H
suman 0, el código tiene un peso mínimo de por lo menos d.

Corolario 2. Sea C un código lineal cuya matriz de comprobación de


paridad es H . El peso mínimo ( o la mínima distancia ) de C es igual al
menor número de columnas de H que suman 0.

Vamos a considerar el código lineal dado en la tabla 5.1 . Su


matriz de comprobación de paridad es la siguiente:

Se ve que todas las columnas de H son distintas de cero y que


ninguna de ellas es igual a otra. Por consiguiente, no hay dos
columnas que sumen 0. Entonces, el peso mínimo de este código es
por lo menos 3. Por otro lado, las columnas cero, dos y seis suman 0.
Por lo tanto, el peso mínimo del código es 3. Y, aplicando el
teorema 5.3.1. Concluimos que la distancia mínima es 3.
Los corolarios 1 y 2 se utilizan generalmente para determinar la
distancia mínima o establecer un límite inferior en la distancia mínima
de un código lineal bloque.

Códigos de Hamming

Los códigos Hamming fueron la primera clase de códigos


ideados para corrección de errores. Estos códigos y sus variaciones
han sido ampliamente usados para control de errores en
comunicación digital y en sistemas de almacenaje de información.
  Para cualquier entero positivo m>=3, existe un código Hamming con
los siguientes parámetros:

Longitud del Código: n=2m-1


Número de símbolos de información: k=2m-m-1
Número de símbolos de comprobación de
n-k=m
paridad:
Capacidad de corrección de errores: t=1(dmin=3)

La matriz de comprobación de paridad H de este código consta


de todas las m-tuplas no nulas como columnas. En forma sistemática,
las columnas de H están ordenadas de la siguiente forma: H=[I mQ],
donde Im es una matriz identidad m x m y la submatriz Q consta de 2m-
m-1 columnas, las cuales son las m-tuplas de peso 2 o más. Estas
columnas pueden ser colocadas en cualquier orden sin afectar a la
propiedad de distancia y distribución de peso del código. En forma
sistemática, la matriz generadora del código es G=[Q T I2m-m-1] , donde
QT es la traspuesta de Q y I2m-m-1 es una matriz identidad de orden 2 m-
m-1.
Como las columnas de H son no nulas y distintas, dos columnas
no pueden sumar cero. Se sigue que la mínima distancia de un código
Hamming es al menos 3. Como H consta de todas las m-tuplas no
nulas como columnas, el vector suma de dos columnas cualesquiera,
hi y hj, debe ser también una columna de H, hl. Así
hi+ hj+ hl= 0.

De aquí se sigue que la mínima distancia de un código Hamming


es exactamente 3. Así, el código es capaz de corregir todos los
patrones de error con un error simple o de detectar todos los patrones
de error de dos errores o menos.
Si formamos una matriz típica para el código Hamming de longitud
2m-1, se pueden usar todas las (2m-1)-tuplas de peso 1 como líderes
de coconjunto. El número de (2 m-1)-tuplas de peso 1 es 2 m-1. Como n-
k=m, el código tiene 2m coconjuntos.
Así, el vector 0 y las (2m-1)-tuplas de peso 1 forman todos los
líderes de los coconjuntos de la matriz típica. Esto nos dice que un
código Hamming corrige solamente los patrones de error simple y
ningún otro. Esta es una construcción muy interesante. Un código
corrector de errores de peso t se llama código perfecto si su matriz
típica tiene todos los patrones de error de peso t o menor y ningún
otro como líderes de coconjunto. Así, los códigos Hamming forman
una clase de códigos perfectos de corrección de errores simples.
Podemos borrar cualesquiera l comunas de la matriz de
comprobación de paridad H de un código Hamming. Esto da como
resultado una matriz H' de orden m x (2 m-l-1). Usando H' como matriz
de comprobación de paridad, obtenemos un código Hamming
recortado con los siguientes parámetros:
Longitud del Código: n=2m-l-1
Número de símbolos de información: k=2m-m-l-1
Número de símbolos de comprobación de
n-k=m
paridad:
Distancia mínima: dmin=3

Si borramos las columnas apropiadas de H, obtenemos un


código Hamming recortado de distancia mínima 4. Por ejemplo, si
borramos de la submatriz Q todas las columnas de peso impar,
obtenemos una matriz de peso m x 2m-1: H'=[Im Q'] ,donde Q' consta
de 2m-1-m columnas de peso par. Como todas las columnas de H' tiene
peso par, no hay tres columnas que sumen cero. No obstante, para
una columna hi de peso 3 en Q', existen tres columnas h j, hl, hs en Im
tal que hi + hl + hj + hs = 0. Así, el código Hamming recortado con H'
como matriz de comprobación de paridad tiene distancia mínima
exactamente 4.

El código Hamming recortado de distancia 4 puede ser usado


para corregir todos los patrones de error simple y simultáneamente
detectar todos los patrones de error doble. Cuando un error simple
ocurre durante la transmisión de un vector código, el síndrome
resultante es distinto de cero y contiene un número par de unos. No
obstante, cuando ocurre un error doble, el síndrome es también
distinto de cero, pero consta de un número impar de unos.
Basándonos en estos hechos, la decodificación puede ser realizada de
la siguiente manera:

Si el síndrome s es cero, asumimos que el error no existió.


Si s es distinto de cero y consta de un número par de unos, asumimos
que el error ocurrido fue un error simple. El patrón de error del error
simple que corresponde a s se suma al vector recibido para la
correccíon de errores.
Si s es distinto de cero y contiene un número impar de unos, se
ha detectado un patrón de error no corregible.
La distribución de peso de un código Hamming de longitud n=2 m-1 es
conocida. El número de vectores código de peso i, A i, es simplemente
el coeficiente de zi en la expansión del polinomio siguiente:
Este polinomio es el enumerador de peso para los códigos Hamming.
Ejemplo 5.4

Sea m=3. Entonces n=23-1=7 y el enumerador de peso para el código


Hamming (7,4) es:

Así, la distribución de peso para el código Hamming (7,4) es:

A0=1, A3= A4=7, A7=1.

El código dual de un código Hamming (2m-1, 2m-m-1) es un


código lineal (2m-1,m). Este código tiene una distribución de pesos
muy simple; consta de la palabra código nula y de las 2 m-1 palabras
código de peso 2m-1. Así, su enumerador de peso es

Si un código Hamming se usa para detección de errores sobre


un BSC, la probabilidad de un error sin detectar, P u(E), puede ser
calculada obteniendo:

La probabilidad PU(E) para los códigos Hamming satisface el


límite superior 2-(n-k) = 2-m para pL=1/2

Código de Hagelbarger:

Un código circumvolucional que permite a explosiones de error ser corregido a


condición de que hay intervalos sin error relativamente largos entre las explosiones de
error. Nota: En el código de Hagelbarger, los pedacitos insertados del cheque de paridad
se separan hacia fuera en tiempo de modo que una explosión de error no sea probable
afectar más de uno de los grupos en quienes se comprueba la paridad.

BCH
 
Es una generalización de los códigos Hamming que permiten la corrección de
múltiples errores. estos son una potente clase de códigos cíclicos que proporcionan una
gran selección de bloques de longitud, índice de código, tamaño de alfabeto y
capacidad de corrección de error.
 
El código BCH (Bose-Chaudhuri-Hocquenghem) es uno de los más importantes
clases de códigos de bloques lineales. En este código, los datos se dividen en bloques
de k bitis de información: cada bloque representa cualquiera de los dos a la k de
distintos mensajes. El codificaddor añade (n-k) bits y construye un bloque de n bits de
longitud, que se conocen como bits de código. Estos (n-k) bits añafdidos son conocidos
como bits redundantes, bits de paridad o bits de chequeo y no se usan para transmitir
información. Este código es conocido como del tipo (n-k). La razón (n-K)/K dentro de
un bloque se le conoce como la redundancia del código, y la razónde los bits de datos al
número total de bits, k/, se le conoce como la razón de código.
 
La codificación de bloque es usada en la mayoría de los sistremas celulares del
mundo. E AMPS (Adcance Mobile Pone Service) en Estados unidos, la longitud de
palabra para el canal de forwading signaling es de 40 bits de longitud. Cada palabra
codificada de 40 bits, contiene 28 bits de datos y 12 bits de chequeo, y forma un (40,
28, 5) código BCHAquí la distancia entre palabras código es de cinco. En el canal de
reverse control la palabra se forma codificando 35 bits de datos en una palabra de
código BCH de (48, 36) que tambien tienen una distancia de cinco (48, 36, 5). En
ambos canales el bit de más a la izquierda se designa como el más significativo.
 
El código BCH es una generalización de los códigos Hamming que permiten la
corrección de múltiples errores. Estos son una potente clase de códigos cíclicos que
proporcionan una gran selección de bloques de longitud, índice de código, tamaño de
alfabeto y capacidad de corrección de error.

Bibliografía

webdia.cem.itesm.mx/ac/rogomez/ SlidesEspe/EjemCodeErrores.ppt
http://www.166.114.106.9/~peredo/INF-110/virtualcurvir/
codigo_de_deteccion_de_errores_y.htm - 3k

http://www.ucm.es/info/dsip/clavel/courses/ip0203/node22.html -
6k -

http://www.cs.virginia.edu/~knabe/iic3512/apuntes_5.html

http://www.irc-euro.org/pc/componentes/memoria.htm

http://www.geocities.com/cruzcruzjl/standares.html

http://www.fcc.gov/cgb/consumerfacts/spanish/sp_trs.html

http://translate.google.com/translate?hl=es&sl=en&u=http://
glossary.its.bldrdoc.gov/fs-1037/dir-017/_2524.htm&prev=/search
%3Fq%3DHagelbarger%26hl%3Des%26lr%3D%26ie%3DUTF-
8%26oe%3DUTF-8%26sa%3DG

También podría gustarte