u ni dad i ztapalapa148.206.53.84/tesiuami/uam1249.pdf · dlvlslÓn de ciencias basicas e...

55
UNIVERSIDAD AUT~NOMA METRQPOLITAN~ u NI DAD I ZTAPALAPA DlVlSlÓN DE CIENCIAS BASICAS E INGENIERíA INGENIERíA EN ELECTRóNICA EN COMUNICACIONES PROVECTO TERMINAL CODIFICADOR - DECODIFICADOR CORRECTOR DE ERRORES REED - SOLOMON PROFESOR: ALUMNOS: MORALES CORONA TERESA c2L Z2O iG '3 REBOLLO PEDRAZA ADRIAN MANUEL 46 .L\?%q 3

Upload: vuongphuc

Post on 25-Sep-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

UNIVERSIDAD A U T ~ N O M A METRQPOLITAN~

u NI DAD I ZTAPALAPA

DlVlSlÓN DE CIENCIAS BASICAS E INGENIERíA

INGENIERíA EN ELECTRóNICA EN COMUNICACIONES

PROVECTO TERMINAL

CODIFICADOR - DECODIFICADOR CORRECTOR DE ERRORES REED - SOLOMON

PROFESOR:

ALUMNOS:

MORALES CORONA TERESA c2L Z2O i G '3 REBOLLO PEDRAZA ADRIAN MANUEL 46 . L \ ? % q 3

INDICE

Temas: Pagina

Introducción. Obietivo. Antecedentes. Códigos AlfanumBricos.

Código ASCII. Caracteres del código ASCII extendido. Códigos con aplicaciones a control. Cubos-N y distancia. Códigos para detectar y corregir errores. Códigos detectores de errores. Códigos para corrección de errores y detección de errores múltiples. Códigos de Hamming. Códigos de suma de verificación. Códigos m de n.

BCH.

Código Reed-Solomon.

Modelo de un Sistema de Comunicaciones. Detección de errores.

Redundancia. Corrección de errores.

Objetivos de la Transmisión Digital de la Información.

Codificación del canal.

1 2 3 3 4 4 4 5 7 7 9 12 15 15 15

17

18

19 19 19

20

20

Campos Finitos {Campo de Galois}. Generación de un Campo de Galois (q).

Código Reed-Solomon. Algoritmo Teórico.

Codificación. Canal. Polinomio de erratas.

Calculo de Síndromes. Calculo del polinomio localizador de borrados z(x) . Calculo de los síndromes de Forney, T(x) . Algoritmo de Berlekamp (calculo de ~ ( x ) ) . Calculo de las raíces inversas de ~ ( x ) , búsqueda de Chien. Calculo de valores de erratas. Ejemplo prclctico con un RS(75,9 ), donde n = 15 y k = 9.

Decodificación.

Implementación en hardware de un codec corrector de errores Reed-Solomon. Codificador. Interfaz. Decodificador.

Figura 12. Esquema del Codificador. Figura 13. Diagrama del Codificador. Figura 14. Control del Codificador. Figura 15. Buffer usado para contaminar la informaci6n. Figura 16. Diagrama de la lnterfaz Serie / Paralelo. Figura 17. Esquema del Decodificador.

21 21

23 23 24 24 25 25 25 25 25 25 26 26 26

36 36 41 42

46 47

49 50 51

48

Bibliografia 52

Codificador y decodificador corrector de errores Reed-Solomon

En la transmisión desde naves espaciales o a través de satélites de comunicaciones se emplea la teoría de códigos correctores. Como ejemplo podemos mencionar el Mariner 4 cuando en 1965 envió a la Tierra las primeras imágenes del planeta Marte, a pesar del gran avance, las fotografías recibidas, comparadas con las de hoy día carecían de alta calidad. Poco después (1 969-72) los Mariner 6, 7 y 9 enviaron a la tierra nuevas imbgenes, las im6genes enviadas fueron de gran calidad comparadas con las primeras, pero no se asemejan a la calidad actual. La razón principal de esta mejora fue que para la transmisión de las últimas se había utilizado un potente código corrector, capaz de corregir hasta 5 bits erróneos de cada secuencia de 32. Los grandes avances actuales en la transmisión digital no serían posibles sin el desarrollo de los códigos correctores, el teléfono móvil, la televisión digital, los sistemas de navegación aérea, ... deben en buena parte su éxito al uso sistem6tico de sistemas de codificación que, mediante el uso de una cierta redundancia en la informacih a transmitir, consiguen recuperar la información esencial aún cuando las condiciones de la transmisión sean sumamente adversas.

Los códigos correctores forman hoy parte de nuestra vida cotidiana, est6n presentes en nuestro NIF, en los códigos de barras, en el ISBN de los libros, ... Han hecho posible, entre otras cosas que un disco compacto suene (y bastante bien) a pesar del polvo, de pequeñas rayas y de errores tanto en la lectura como en el grabado de la información. El potente sistema de dos códigos de Reed-Solomon concatenados sigue mostr6ndose como un est6ndar muy útil (a pesar de los 20 años transcurridos desde la aparición de los compact disc), siendo todavía el utilizado en los modernos CD-R y DVD.

1

Codificador y decodificador corrector de errores Reed-Solomon

O B J ETIVO

lmplementar el diseño tebrico de un Reed-Solomon (7,3) a un diseño en hardware, usando filtros IIR y dispositivos TTL, realizando el codificador, el decodificador y una interfaz inteligente que nos permita conectar el codificador con el decodificador. Dicha interfaz debe permitir seleccionar entre el codificador, el decodificador o ambos y decidir el tipo de transmisibn de datos entre serie o paralelo.

2

Codificador y decodificador corrector de errores Reed-Solomon

ANTECEDENTES

Los circuitos electrónicos básicos procesan las señales analógicas mediante combinaciones de dos estados que podemos llamar O y 1 (cada estado representa un bit), a estas combinaciones de bits les asignamos una representación determinada, como podría ser el caso de tomar 2 bits y representar con la combinación de ellos los números decimales O, 1 , 2 y 3 de la siguiente forma el O decimal corresponde a la combinación de bits 00, el 1 decimal a la combinación O1 , el 2 decimal a 1 O y el 3 decimal a 1 l .

En general podemos decir que un conjunto de cadenas de n bits ordenados según un patrón Único, en el que las diferentes cadenas de bits representan diferentes tipos de información como pueden ser números, letras, u otros símbolos se llama CODIGO, puede que haya o no alguna relación aritmética entre los valores de los bits en una palabra de código y lo que representa.

Ejemplos de algunos códigos existentes:

Código decimal BCD (decimal codificado binario), que codifica los dígitos por sus representaciones binarias sin signo de 4 bits del O000 al 1 O01 , y las palabras del código restante no se usan (1 O1 O al 1 1 1 l), el código Gray, es un código sin pesos y no aritm6tico; es decir un código sin valor ya que las posiciones de los bits en los grupos de código no tienen ningún valor especifico asignado por la posición, que pertenece a una clase de códigos llamada códigos de cambio minirno, en los cuales sólo un bit del grupo de código cambia cuando pasa de una palabra a la siguiente, es decir sólo varía un bit de un código al siguiente cambio, este código se usa en dispositivos de entrada y salida y en algunos tipos de convertidores de analógico a digital.

Códigos Alfanumbricos

Además de números es necesario manejar información de tipo texto, como lo son las letras del alfabeto, signos de puntuaci6n y símbolos especiales, estos códigos se denominan códigos alfanuméricos. Como mínimo un c6digo alfanum6rico debe poder representar los 10 dígitos decimales, y las 26 letras del alfabeto es decir al menos 36 elementos lo que requiere mínimo 6 bits, pero como deben poder representarse letras mayúsculas y minúsculas, signos de puntuación y símbolos especiales se requiere de más bits. Un código completo de este tipo puede incluir 26 letras minúsculas, 26 mayúsculas, 1 O dígitos, 7 signos

3

Codificador y decodificador corrector de errores Reed-Solomon

de puntuación y entre 20 y 40 caracteres más, cómo +, /, #, -, *, %, etc. Esta cantidad requiere 7 bits para cada combinación de código, con lo que existen 128 posibles combinaciones. El código ASCII es el código alfanumérico más usado.

Código ASCII

El código de caracteres más comúnmente usado, por ser universalmente aceptado es el código ASCII (American Standard Code for Information Interchange, código estándar americano para el intercambio de información). Este código dispone de 128 caracteres que se representan mediante un código binario de 7 bits. Los primeros 32 caracteres ASCII son comandos no gráficos, que nunca se imprimen o presentan en pantalla, y solo se utilizan para propósitos de control. Los demás caracteres son símbolos gráficos que pueden imprimirse o mostrarse en pantalla, e incluyen las letras del alfabeto (mayúsculas y minúsculas), los 1 O dígitos decimales, los signos de puntuación y otros símbolos comúnmente utilizados.

Caracteres del código ASCII extendido

Además de los 128 caracteres estándar, existen 128 caracteres adicionales que fueron adoptados por IBM para utilizarlos en sus computadoras. Debido a que estos caracteres del código ASCII extendido se usan también en otras aplicaciones distintas a las de la computadora, este código extendido se ha convertido en un estándar no oficial. El código ASCII extendido está formado por caracteres que pertenecen a las siguientes categorías:

0 Caracteres alfabéticos no ingleses. Símbolos no ingleses. Letras griegas Símbolos matemáticos. Caracteres para gráficos. Caracteres grcificos de barras.

0 Caracteres sombreados.

Códigos con aplicaciones a control

No todos las palabras codificadas representan datos, en los sistemas digitales a menudo se encuentran aplicaciones en donde una cadena de bits es usada para controlar una acción, para verificar una condición o para representar el estado presente del hardware, el código que más se usa para estas aplicaciones es el código binario simple. Si hay n acciones, condiciones o estados diferentes podemos representarlos con un código binario b = [log, nl (función entero mayor), por IO que b es el entero más pequeño tal que 2' 2 n .

4

Codificador y decodificador corrector de errores Reed-Solomon

Pero un código binario a pesar de tener en cada palabra el menor número de bits no siempre es la mejor elección para codificar acciones, condiciones o estados.

Cubos-N y distancia

Una cadena de n bits puede visualizarse geométricamente, como un vértice de un objeto llamado cubo n, la figura 1 muestra cubos n para n=l ,2 ,3 y 4. Un cubo n tiene 2" vértices, cada uno de los cuales esta rotulado con una cadena de n bits. Las aristas se dibujan entre vértices adyacentes cuyos rótulos difieren del vértice dado en solo un bit. M6s a116 de n=4, los cubos n son realmente difíciles de dibujar.

10 1 1

O Cubo 1 1 60 dl

cubo 2

cubo 3

1 l J 0 1 1 1 1

01) o 01.1 1 l q l ó l o p

o o p -~ OQl 1 1 1'00 , 1 i o 1

o y o 1 a b - 1600 1601

'Figura l . cubos n para n= 1,2,3 y 4

Para valores razonables de n, los cubos n facilitan la visualización de ciertos códigos y de los problemas de minimización lógica. Por ejemplo, el problema de diseñar un código Gray de n bits es equivalente a encontrar una ruta a lo largo de los vértices de un cubo n ,

* Tomada de: DiseAo Digital Principios y Prkticas; John F. Wakerly; Prentice Hall.

5

Codificador y decodificador corrector de errores Reed-Solomon

que visite cada vértice exactamente una vez. A continuación se presentan la figura 2 con las rutas para los códigos Gray de 3 y 4 bits.

110 111 .. ..

o 1 o o1 1 . . . ~ ~ ~ . 1 O0

0-

161

'Figura 2. Recorrido en orden del c6digo Gray (a) cubo 3, (b) cubo 4

Los cubos también proporcionan una interpretación geométrica para el concepto de distancia también llamada la distancia de Hamming. La distancia entre dos cadenas de n bits es el número de posiciones de bits en que difieren. Para un solo cubo n, la distancia es la longitud mínima de una ruta entre los dos vértices correspondientes. Dos vértices adyacentes tienen distancia l . Los vértices O01 y 1 O0 en el cubo 3 tienen distancia 2. El concepto de distancia es fundamental en el diserío de los códigos detectores de error.

Un subcubo m de un cubo n es un conjunto de 2"' vértices en los que n-m de los bits tienen el mismo valor de cada vértice y los restantes m bits toman todas las 2"' combinaciones. Por ejemplo, los vértices (000, O1 O, 100, 1 1 O) forman un subcubo 2 de un cubo 3. Este subcubo puede también denotarse con una sola cadena xx0, donde "xN denota que ese bit particular toma cualquier valor y es llamado un no importa; cualquier vértice cuyos bits coinciden en las posiciones que no son x pertenece a este subcubo. El concepto de subcubos es particularmente útil para visualizar algoritmos que minimizan el costo de funciones lógicas combinacionales.

* Tomada de: DiseAo Digital Principios y Prácticas; John F. Wakerly; Prentice Hall

6

Codificador y decodificador corrector de errores Reed-Solomon

Códigos para detectar y corregir errores.

Un error en un sistema digital es la distorsión del valor correcto del dato, a algún otro valor. Un error es ocasionado por una falla física. Las fallas pueden ser temporales y permanentes. Por ejemplo, un rayo cósmico puede ocasionar una falla temporal de un circuito de memoria, cambiando el valor de un bit almacenado ahí. Permitir que un circuito se caliente demasiado o se dañe con la electricidad estática puede ocasionar una falla permanente, de modo que ya no trabaje correctamente.

Los efectos de las fallas en los datos se predicen mediante los modelos de error. El modelo de error mds simple, se llama el modelo de error independiente. En este modelo se supone que una sola falla física afecta solo a un bit de los datos; el dato distorsionado se dice que contiene un error individual. Múltiples fallas pueden ocasionar errores múltiples, dos o m6s bits erróneos, pero se supone que los errores múltiples son menos probables que los errores individuales.

Códigos detectores de errores

Recordando que un código que usa cadenas de n bits no necesita contener 2" palabras de código validas; este es el caso de los siguientes códigos. Un código detector de error tiene la propiedad de que la alteración de una palabra de código probablemente producirá una cadena de bits que no es una palabra de código.

Un sistema que usa un código detector de errores genera, transmite y almacena sólo palabras de código. Por lo tanto, los errores en una cadena de bits pueden detectarse mediante una regla simple, si la cadena de bits es una palabra de código, se supone que es correcta; si no es una palabra de código, 6sta contiene un error.

Un código de n y sus propiedades de detección de errores bajo el modelo de error independiente puede explicarse fácilmente en términos de un cubo n. Un código es simplemente un conjunto de los vértices del cubo n. A fin de que el código detecte todos los errores individuales, ningún vértice de palabra de código puede ser inmediatamente adyacente a otro vértice de palabra de código.

Por ejemplo la figura 3 inciso a) muestra un código de 3 bits con 5 palabras código. La palabra de código 1 1 1 es inmediatamente adyacente a las palabras de código 1 1 O y O1 l . Ya que una falla individual cambiaria 1 1 1 a 1 1 O o O1 1 , este código no detecta todos los errores individuales, como se muestra en la figura 3 inciso b). Ningún error individual puede cambiar una palabra de código en otra.

7

Codificador y decodificador corrector de errores Reed-Solomon

do0 O0 1

110

O00 O0 1

0 Palabra de código X Palabra que no pertenece al código

'Figura 3. Palabras de código en dos códigos de 3 bits diferentes; (a) distancia mínima= 1, no detecta todos los errores individuales ; (b) distancia minima=2, detecta todos los errores individuales.

Un código detecta todos los errores individuales si la distancia minima entre todos los pares posibles de palabras del código es 2.

En general, necesitamos n+l bits para construir un código detector de errores individuales con 2" palabras de código. Los primeros n bits de una palabra de código, llamados bits de información, pueden ser cualquiera de las 2" cadenas de n bits. Para obtener un código de distancia minima 2, se agrega otro bit llamado el bit de paridod este es cero si hay un número par de unos entre los bits de información y 1 en el caso contrario. Esto se ilustra en las dos primeras columnas de la tabla 1 , para un código con 3 bits de información. Una palabra código de n+l bits vdlida tiene un número par de unos y a este código se le conoce como código de paridad par. También puede construirse un código en el que el número total de unos en una palabra de n+l bit sea impar, a este se le conoce como un código de paridad impar y se muestra en la tercera columna de la tabla. A estos códigos tambi6n se les conoce como códigos con un bit de paridad, ya que cada uno de ellos hace uso de un bit de paridad individual.

Los códigos con un bit de paridad no detectan errores en dos bits, ya que cambiar 2 bits no afecta la paridad. Sin embargo, los códigos pueden detectar errores en cualquier número impar de bits. Por ejemplo, si se cambian 3 bits en una palabra de código, entonces la palabra resultante tiene la paridad incorrecta y no es una palabra del código. Esto no nos ayuda mucho. Bajo el modelo de error independiente, los errores de 3 bits son mucho menos probables que los errores de 2 bits que no son detectables por lo que para fines prácticos la capacidad de detección de error de los códigos de paridad un bit es útil solo para errores de un bit. Otros códigos, con distancia mínima mayor pueden usarse para detectar errores múltiples.

Tomada de: Disefio Digital Principios y Prácticas; John F. Wakerly; Prentice Hall

8

Codificador y decodificador corrector de errores Reed-Solomon

I o1 1 I o11 o I o11 1 I 1 O0

110 1 110 o 110 101 1 101 o 1 o1 100 o 100 1

1 1 1 o 111 1 1 1 1

'Tabla l . Códigos distancia 2 con tres bits de información

Códigos para corrección de errores y detecci6n de errores múltiples

AI usar más de 1 bit de paridad de acuerdo con algunas reglas bien elegidas se puede crear un código cuya distancia mínima es mayor que 2. Antes de mostrar como puede construirse, veremos como puede usarse tal código para corregir errores individuales o detectar errores múltiples.

Supóngase que un código tiene una distancia máxima de 3. La figura 4 muestra un fragmento del cubo n para tal código. Como se muestra, existen al menos dos palabras que no son palabras del código entre cada par de palabras del código. Ahora supóngase que se transmiten palabras de código y asúmase que las fallas afectan a lo más un bit de cada palabra de código transmitida originalmente que a cualquier otra. Por lo tanto, cuando se reciba una palabra que no sea del código, se puede corregir el error al cambiar dicha palabra recibida por la palabra de código m6s próxima, como lo indican las flechas en la figura. Decidir que palabra del c6digo se transmitió originalmente para producir la palabra recibida se conoce como decodificación, y el hardware que hace esto es un decodificador corrector de errores.

Un código que se usa para corregir errores se llama código corrector de errores. En general si un código tienen distancia mínima 2c+ 1 , puede usarse para corregir errores que afectan hasta c bits (c=l en el eiemplo precedente). Si la distancia mínima del código es 2c+d+ 1, este puede usarse para corregir errores hasta en c bits y para detectar errores hasta en d bits adicionales.

Por ejemplo en la figura 5 inciso (a) se muestra un fragmento del cubo n para un código con una distancia mínima 4 (c= 1 y d= 1). Los errores de bit individual que producen las palabras que no pertenecen al código 00101010 y 1 1 O1001 1 pueden corregirse. Sin embargo, un error que produce 1 O1 O001 1 no puede corregirse, porque ningún error de bit individual puede producir esta palabra y uno de dos errores de 2 bits pudo haberlo producido. Así el código puede detectar un error de 2 bits pero no puede corregirlo.

Tomada de: Disefio Digital Principios y Prkticas; John F. Wakerly; Prentice Hall

9

Codificador y decodificador corrector de errores Reed-Solomon

Cuando se recibe una palabra que no pertenece al código, no se sabe que palabra del código se transmitió originalmente, s610 sabemos que palabra del código es la m6s próxima a lo que hemos recibido. Por lo que, como se muestra en la figura (b) un error de 3 bits puede corregirse con un valor incorrecto. La posibilidad de cometer esta clase de error puede ser aceptable si es muy improbable que ocurran estos errores de 3 bits. Por otra parte, si esta interesado por errores de 3 bits, puede cambiarse la política de decodificación para el código. En vez de tratar de corregir errores, sólo se marcan todas aquellas palabras como errores irrecuperables. Por lo que, como se muestra en (c), puede usarse la misma distancia 4 para detectar hasta 3 errores de bits, pero sin corregirlos (c=O, d=3)

/-ó- om1010

1001011/ 1

010101 ~ / o m m 1 1

O01 101 1

-

111

Palabra de código

Palabra que no pertenece al código

'Figura 4 . Algunas palabras código no lo son en un c6digo de 7 bits con distancia 3

* Tomada de: DiseAo Digital Principios y Prtícticas; John F. Wakerly; Prentice Hall

10

Codificador y decodificador corrector de errores Reed-Solomon

Errores de 2 bits detectables

/ j ',

de 1 a 3 bits

'Figura 5. Palabras de código y otras que no lo son en un código de 8 bits distancia 4: (a) correcci6n de errores de 1 bit y detecci6n de errores de 2 bits; (b) "corrección" incorrecta de un error de 3 bits; (c) no hay corrección pero se detectan errores hasta de 3 bits.

Tomada de: DiseAo Digital Principios y Prácticas; John F. Wakerly; Prentice Hall

11

Codificador y decodificador corrector de errores Reed-Solomon

Cbdigos de Hamming

En 1950, R. W. Hamming describió un método general para construir códigos con una distancia mínima de 3, ahora llamados códigos de Hamming. Para cualquier valor de i, su método da un código de 2' -1 bits con i bits de paridad y 2'-1 -i bits de información. Se obtiene códigos de distancia 3 con un número más pequeño de bits de información al suprimir bits de información de un código de Hamming con un número mayor de bits.

Las posiciones de los bits en una palabra código de Hamming están enumeradas de 1 a 2'-1. Cualquier posición cuyo número sea una potencia de 2 es un bit de paridad, y las restantes posiciones son bits de información. Cada bit de paridad se agrupa con un subconjunto de los bits de información según se especifica con una matriz de verificación de paridad. Como se muestra en la figura 6 inciso (b), cada bit de paridad se agrupa con las posiciones de información cuyos números tienen un 1 en el mismo bit cuando se expresan en binario. Por ejemplo, el bit de paridad 2 (O1 O) se agrupa con los bits de información 3(01 l ) , 6( 1 1 O) y 7( 1 1 1). Para una combinacibn dada de valores de bits de información, cada bit de paridad se elige para que en el número total de unos en su grupo sea par.

Posición del bit

7 6 5 4 3 2 1 ~~

. ~ ~,

C

7 6 5 3

C '

4 2 1

P I 'Figura 6. Matrices de verificaci6n de paridad para códigos Hamming de 7 bits: (a) con las posiciones de los

bits en orden num6rico; (b) con bits de paridad y de información separados.

* Tomada de: Diseiio Digital Principios y Prácticas; John F. Wakerly; Prentice Hall

12

Codificador y decodificador corrector de errores Reed-Solomon

Tradicionalmente, las posiciones de bit de una matriz de verificación de paridad y las palabras de código resultantes se recomiendan para que todos los bits de paridad estén a la derecha, como en la figura 6 inciso (b). Las primeras dos columnas de la tabla 2 presentan las palabras de código resultantes.

Puede probarse que la distancia mínima de un código de Hamming es 3 al probar que deben cambiarse al menos 3 bits para que una palabra de código se convierta en otra palabra del código. Esto es, se probara que un cambio de 1 o 2 bits en una palabra de código no da una palabra del código. Si se cabía un bit de una palabra de código, en la posición, luego se cambia la paridad de cada grupo que contiene la posici6n. Ya que cada bit de información esta contenido a1 menos en un grupo, al menos un grupo tiene paridad incorrecta y el resultado es una palabra incorrecta.

iQué sucede si se cambian dos bits, en la posición j y k ? Los grupos de paridad que

contengan ambas posiciones j y k aún tendrán paridad correcta, ya que la paridad no se

afecta cuando un número par de bits se cambia. Sin embargo, ya que j y k son diferentes,

su representación binaria difiere en al menos un bit, correspondientes a uno de los grupos de paridad. Este grupo tiene sólo un bit cambiado, resultando una paridad incorrecta y una palabra que no pertenece al código.

Si se entendió esta prueba, también debe verse como las reglas de numeración de las posiciones para construir un código de Hamming son una consecuencia simple de

'Tabla 2. Palabras códigos en códigos de distancia 3 mínima y de Hamming con 4 bits de información.

* Tomada de: DiseiIo Digital Principios y Prácticas; John F. Wakerly; Prentice Hall

13

Codificador y decodificador corrector de errores Reed-Solomon

la prueba. Para la primera parte de la prueba (errores de un bit), se requiere que los números de posición sean diferentes de cero. Y para la segunda parte (errores de 2 bits), se requiere que dos posiciones no tengan el mismo número. Por lo que, con un número i de posiciones, puede construirse un código de Hamming con hasta 2'-1 posiciones de bits.

La prueba también sugiere como puede diseñarse un decodificador corrector de errores para una palabra de código de Hamming. Primero, se verifican todos los grupos de paridad; si todos tienen paridad par, se supone que la palabra recibida es correcta. Si uno o más grupos tienen paridad par, entonces se supone que ha ocurrido un error individual. El patrón de grupos que tienen paridad par (llamado el sindrome) debe coincidir con una de las columnas de la matriz de verificación de paridad, se supone que la correspondiente posición del bit contiene el valor incorrecto y se complementa. Por ejemplo, usando el código definido por la figura 6 inciso (b) supóngase que se recibe la prueba O1 O101 l . Los grupos A y B tienen paridad impar, correspondiente a la posición 6 de la matriz de verificación de paridad (el síndrome es 1 1 O, o 6). AI complementar el bit en la posición 6 de la palabra recibida, se determina que la palabra correcta es O001 O1 1 .

Un código de Hamming de distancia 3 puede modificarse fácilmente para incrementar su distancia mínima a 4. Sólo agréguese otro bit de paridad, elegido para que la paridad de todos los bits, incluyendo el nuevo, sea par. Como en el código de paridad par de 1 bit, este bit asegura que todos los errores que afecten a un número impar de bits sea detectable. En particular, cualquier error de 3 bits es detectable. Ya se demostró que errores de 1 y 2 bits se detectan por otros bits de paridad, así que la distancia mínima del código modificado debe de ser 4.

Los códigos de Hamming de distancia 3 y 4 comúnmente se usan para detectar y corregir errores en las memorias de las computadoras, especialmente en las grandes computadoras en las que ocurre la mayor parte de las fallas en los circuitos de la memoria. Estos códigos son especialmente atractivos para palabras anchas de memoria, ya que el número requerido de bits de paridad crece lentamente con el ancho de la palabra de memoria. Como se muestra en la tabla 3.

Bits de C6digos distancia 4 mínima Códigos distancia 3 mínima informacibn Total de bits Bits de paridad Total de bits Bits de paridad

1 2

- <16 5 5 15 4 1 1 1 5 8 4 1 7 3 14

4 3 3

I 2 6

I 128 8 I 1 2 7 7 5 120 I 6 4 7 5 63 6 157 I 3 2 6 531 5

~~~ ~~

'Tabla 3. Longitud de palabras en códigos de Hamming de distancia 3 y 4.

* Tomada de: Diseiio Digital Principios y Prácticas; John F. Wakerly; Prentice Hall

14

Codificador y decodificador corrector de errores Reed-Solomon

Códigos de suma de verificación

La operación de la verificación de la paridad que se ha usado en las subsecciones previas son esencialmente sumas modulo 2 de bits, la suma módulo 2 de un grupo de bits es O si el número de unos en el grupo es par, y 1 si éste es impar. La técnica de suma modular puede extenderse a otras bases distintas de 2 para formar dígitos de verificación.

Por ejemplo, una computadora almacena información como un conjunto de bytes, 8 bits. Cada bit puede considerarse que tiene un valor decimal entre O y 255. Por lo que podemos usar suma módulo 256 para verificar los bytes. Formamos un byte de verificación individual, llamado suma de verificación, esto es, la suma módulo 256 de todos los bits de información. El código como suma de verificación resultante puede detectar cualquier error de un byte, ya que tal error ocasionará que la nueva suma de los bytes difiere de la suma de verificación.

Un código con suma de verificación puede combinarse con un código de paridad impar de un bit, para formar un código corrector de errores, de distancia 4 , bidimensional para un sistema de memoria de computadora.

Códigos m de n

Los códigos 1 de n y m de n que se mencionaron anteriormente tienen una distancia mínima de 2, puesto que cambiar un sólo bit cambia el número total de unos en una palabra de código y por tanto se produce una palabra que no pertenece al código.

Estos códigos tienen una propiedad de detección de error útil, la detección de errores múltiples unidireccionales. En un error unidireccional, todos los bits erróneos cambian en la misma dirección (los “O” cambian a “ 1 ” y viceversa). Esta propiedad es muy útil en sistemas donde el mecanismo de error predominante tiende a cambiar a los bits a la misma dirección.

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 una de las más importantes clases de códigos de bloques lineales. En este código, los datos se dividen en bloques de k bits de información: cada bloque representa cualquiera de los dos a la k de distintos mensajes. El codificador 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ñadidos 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.

15

Codificador y decodificador corrector de errores Reed-Solomon

La codificación de bloque es usada en la mayoría de los sistemas celulares del mundo. Para 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 BCH. Aquí 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 también tienen una distancia de cinco (48, 36, 5). En ambos canales el bit de más a la izquierda se designa como el m6s significativo.

16

Codificodor y decodificador corrector de errores Reed-Solomon

C Ó D I G O REED-SOLOMON

Es un conjunto de estructuras para la corrección de errores con una amplia gama de aplicaciones tales como:

Corrección de errores en dispositivos de almacenamiento (por ejemplo:

Comunicaciones móviles. Comunicaciones digitales en ambientes ruidosos.

Compact Disk, DVD, etc.) y para códigos puros.

Descripci6n general

0 El código Reed-Solomon se describe como RS(255,255-2t) con símbolos de 8 bits, otras palabras de código o longitud de símbolos puede ser generados.

0 La palabra código puede ser reducida a (S, S-2t) donde S<255. 0 La paridad sobrepasa sus 2t símbolos (bytes) por palabra de código. 0 Corrige t símbolos incorrectos en cualquier punto de la palabra código.

La función de codificación RS toma cualquier arreglo de k símbolos como datos de entrada y regresa a un arreglo de n símbolos (una palabra código Reed-Solomon).

Arquitectura:

0 Codificación y decodificación en el dominio del tiempo 0 Decodificación rdpida usando los algoritmos de Berlekamp-Massey,

Es de alta confiabilidad y eficiencia. búsqueda de Chien y Forney.

1 Code Data Rate

Los códigos Reed-Solomon son un subconjunto de los códigos BCH y códigos de bloques lineales. Un código Reed-Solomon esta especificado como RS (n, k) con S símbolos.

Eiemplo: Un código Reed-Solomon muy popular es RS(255,223) con símbolos de 8 bits. Cada palabra decodificada puede contener 255 bytes de palabra código, de los cuales 223 bytes son información y 32 bytes son paridad.

Para este código:

n = 255, k = 223, S = 8 2t = 32, t = 16, puede corregir hasta 16 errores.

17

Codificador y decodificador corrector de errores Reed-Solomon

MODELO D E U N SISTEMA DE COMUNICACIONES

La comunicación de datos es el proceso de transferir información digital entre dos o más puntos. La información se define como el conocimiento o forma del conocimiento. La información que se procesa y se organiza se llaman datos. Los datos pueden ser cualquier información alfabética, numbrica o simbólica, incluyendo los símbolos alfanumbricos, etc.(Se mencionaron en la sección Antecedentes). En la fuente y el destino, los datos están en forma digital. Sin embargo, durante la transmisión, los datos pueden estar en forma digital o analógica.

En un sistema de comunicaciones, como en una red telefónica, de televisión o de computadoras, etc. Se puede modelar como un diagrama de bloques, como el que se presenta en la siguiente figura.

Tx

F p ) y F ' [x) nunca son iguales

¡(x) = Polinomio de información, palabra, vector etc. C(x) = Polinomio, palabra, o vector del código. R(x) = Polinomio, palabra, o vector recibido. E(x) = Polinomio, palabra o vector de error

Figura 7. Diagrama a bloques simplificado de un modelo de sistemas de comunicaciones electrhicas.

18

Codificador y decodificador corrector de errores Reed-Solomon

La figura 7 nos muestra la relación entre la información de la fuente original, el transmisor, el medio de transmisión, el receptor y la información recibida en el destino.

Un sistema de comunicaciones electrónicas consiste de tres secciones primarias: un transmisor (Tx), un medio de transmisión (canal) y un receptor (Rx). El transmisor convierte la información original de la fuente a una forma más adecuada para la transmisión, el medio de transmisión proporciona un medio de conexión entre el transmisor y el receptor, el receptor convierte la información recibida a su forma original y la transfiere a su destino. La información original puede originarse de una variedad de fuentes diferentes y ser de forma analógica o digital.

Un circuito de comunicación de datos puede ser tan corto, de unos cuantos metros, o tan largo de varios miles de metros; el medio de transmisión puede ser tan sencillo como un pedazo de cable, o tan complejo como un sistema de microondas, satélite o fibra óptica. Por lo tanto, debido a las características, no ideales del canal, que están asociadas con cualquier sistema de comunicación es inevitable que ocurran errores y es necesario desarrollar e implantar procedimientos para el control de errores. El control de errores puede dividirse en dos categorías generales: detección de errores y corrección de errores.

Detección de errores

La detección de errores es el proceso de monitorear la información recibida y determinar cuando un error de transmisión a ocurrido. Las técnicas de detección de errores no identifican cual bit (o bits) es erróneo, solamente indican que a ocurrido un error. El propósito de la detección de errores no es impedir que ocurran errores, pero previene que los errores no detectados ocurran. Cómo reaccione un sistema a los errores de transmisión, depende del sistema y varia considerablemente. Las técnicas de detección de errores más comunes usadas para los circuitos de comunicación de datos son: Redundancia, codificación de cuenta exacta, paridad chequeo de redundancia vertical y longitudinal y chequeo de redundancia cíclica, etc.

Redundancia

La redundancia involucra transmitir cada carácter dos veces. Si el mismo carácter no se recibe dos veces sucesivamente, a ocurrido un error de transmisión. El mismo concepto puede usarse para los mensajes. Si la misma secuencia de caracteres no se recibe dos veces sucesivamente, en exactamente el mismo orden, a ocurrido un error de transmisión.

Corrección de errores

Esencialmente hay tres métodos de corrección de errores: sustitución de símbolos, retransmisión y seguimiento de corrección de un error.

19

Codificador y decodificador corrector de errores Reed-Solomon

7. Sustitución de simbolos.- Se diseño para usarse en un ambiente humano: en donde hay un ser humano, en la terminal de recepción, para analizar los datos recibidos y tomar decisiones sobre su integridad.

2. Retransmisión.- Como su nombre lo implica, es volver a enviar un mensaje, cuando es recibido un error, y la terminal de recepción automáticamente pide la retransmisión de todo el mensaje.

3. Seguimiento de corrección de error.- El seguimiento de corrección de error (FEC), es el Único esquema de corrección de error que detecta y corrige los errores de transmisión, del lado receptor sin pedir retransmisión. Con FEC, se agregan bits al mensaje, antes de la transmisión. Algunos códigos de corrección de errores son el código de Hamming, el BCH, el Reed-Solomon, el Faire Burton, etc.

OBJETIVOS DE LA TRANSMISI~N DIGITAL DE LA INFORMACIÓN.

Transmisión fiable (control de errores ) ,-> Codificación de canal. Transmisión rdpida ( compresión ) Codificación de fuente.

0 Transmisión segura ( privacidad ) ”-+ Criptografía. -

C O D I F I C A C I ~ N DEL CANAL

0 Protege la información frente a degradaciones del canal. 0 Añade redundancia de forma inteligente. 0 Detecta y/o corrige errores que produce el canal.

20

Codificador y decodificador corrector de errores Reed-Solomon

CAMPOS FINITOS {CAMPO DE GALOIS}

El Campo de Galois es una aplicación del álgebra de Reed Miller y es una herramienta indispensable para trabajar con los códigos correctores de errores.

Generación de un Campo de Galois (9)

p es un número primo Donde q = p" ; ; siempre p = 2

n es entero

1 ) El polinomio primitivo e irreducible del orden n, se representa de la siguiente manera.

P(x)=x"+x+ 1

2) Por ejemplo un polinomio primitivo e irreducible de orden 3.

Campo de Galois 23 (CG (23))

Este campo lo podemos generar a partir de los siguientes pasos:

Para a3

1) x = a en P(x) 2) P(x) = o

P ( ~ ) = o = ~ ~ +a+l

a3 = a+l

a =a.a a4 =a2 +a a5 = a(a2 +a) = a2 +a3 a6=a +a

a7=a +a

4 3

3 4

4 5

21

Codificador y decodificador corrector de errores Reed-Solomon

CG(23) se representa de la siguiente manera:

Tabla Campo de Galois ( z3)

Donde O es el elemento nulo ya a a son raíces primitivas. 2 1 0

22

Codificador y decodificador corrector de errores Reed-Solomon

CÓDIGO REED-SOLOMON

A partir de aquí analizaremos el algoritmo teórico del código Reed-Solomon y su aplicación en hardware.

El código Reed-Solomon, es un código detector corrector de errores, al cual se le considera un código lineal ( dado que la suma de 3 palabras del código es una palabra del código), cíclico y de bloque

Algoritmo Teórico En un código Reed-Solomon (n, k) que corrige t errores, donde n>k; n es el número de elementos de redundancia y k es el número de elementos de información.

La distancia se calcula de la siguiente manera:

d = 2t + 1, t entero d 2 2e + f + 1 ; donde e es el error y no se sabe posición ni valor y f es

el borrado en el se conoce la posición pero no el valor

El Campo de Galois se calcula utilizando el polinomio primitivo con un número n aleatorio KG(2") }.

Polinomio primitivo e irreducible del orden n

P(x)=x"+x+ 1

Calculo de g(x) y h(x). d-1

g(x) = r I ( x -a') i=l n

h(x) = U(. - a') r=d

necesitamos saber el valor de la distancia d para poder calcular e y f, dado el número de errores t calculamos d de la siguiente forma:

d = 2 t + 1

cuando conocemos el valor de d, se tiene que cumplir la siguiente desigualdad.

23

Codificador y decodificador corrector de errores Reed-Solomon

d > 2 e + f + l

Por ejemplo:

Dado t = 3, d = 7 los valores de e y f pueden ser:

Si calculamos g(x) y h(x) con el valor de d = 7

i=l n

h(x) = n ( x - a') i=7

El grado de g(x) = n - k . Si consideramos unRS(15,9), sabemos que n = 15 y k = 9

Codificacibn

r 1 = c h , C n - + j l , donde ie [ l , ..., n-k]

Canal

En el canal están presentes E(x) y F(x) , donde E(x) representa los errores y F(x) representa los borrados por ejemplo:

E(x) = a 2 x l 1 + a 5 x 3 ; donde los exponentes en las alfas (a) nos dan el valor del error y el valor de las exponenciales de las x nos da la posición del error.

F(x) = a x10 + aI4x

24

Codificador y decodificador corrector de errores Reed-Solomon

Polinomio de erratas

Decodificación

Calculo de Síndromes.

Si = (R =a') donde i ~ [ l , ...., 2t]

Calculo del polinomio localizador de borrados z(x) c

Calculo de los síndromes de Forney, T(x)

T(x) = [(1+ S(x))z, (x) + 11 mod x d

Algoritmo de Berlekamp (calculo de (~ (x ) )

(0) cT(x) = 1, e , =o, do = Tf+, I para n = O, m = -1

formula de discrepancia:

Existen dos casos:

Caso 1 .-

@+I) (n) Si d, = O , entonces o(x) =a(x) y e,+, = - e n I donde n es la variable que incrementa.

caso 2.-

(n+U (n) ( m ) Si d, z O I entonces ~ ( x ) = a(x)- d,d:x"-m o(x) y n+l = max{t,,f, + n - m} el valor de m debe cumplir las 3 condiciones siguientes:

25

Codificador y decodificador corrector de errores Reed-Solomon

1) - l l m < n 2) dm # O 3) m - sea máximo.

Esto continua hasta que: n < t +l.+, -1 -[ $1. Calculo de las raíces inversas de a(x) / búsqueda de Chien.

Este calculo se obtiene evaluando a(x) para x = a"donde i es la posición del error de

E(x) -

Calculo de valores de erratas.

a) Polinomio evaluador de erratas R(x).

R(x) = (1 + T(x)k(x) mod X d

XJ+f "R(x;') n(.,;y1- b) Calculo de valores de erratas YJ = ; j E [l,(e+ y)], donde x j son los

'fJ

errores de borrados.

Ejemplo práctico con un RS(7 5,9 1, donde y1 = 15 y k = 9.

Sea : i(x) = a 6 x 7 + a 9 x 6 + a 3 x 2 + al3

~ ( x ) = a9x I4 + a'Ox

~ ( x ) = a x +a0x7 14 11

Para t = 3 errores, la distancia d = 2t + 1 I es d = 7 I se debe cumplir que:

d > 2 e + f + l

Ahora al sustituir d = 7 la formula queda de la siguiente manera:

7 2 2 e + f + l

26

Codificador y decodificador corrector de errores Reed-Solomon

La siguiente tabla muestra los valores posibles que pueden ser tomados por e (error) y f (borrado) para poder satisfacer la desigualdad anterior.

Una vez determinado el par de valores, el siguiente paso es el calculo de g(x) o h(x) , en este

ejemplo mostraremos el calculo de h(x) .

Iniciamos calculando h(x) con la siguiente ecuacibn

n

h(x) = n ( x - a‘) i=d

como n = 15 y d = 7 , entonces

15

h(x) = n ( x - a’) i=7

desarrollando la ecuacibn

h(x) = ( X - a 7 ) ( x - a ’ ) ( ~ - a9) (x - ~ ‘ O ) ( X - CZ”)(X - a ” ) ( ~ - CZ”)(X - a “ ) ( ~ - a’,)

después de realizar todas las multiplicaciones encontramos que

h(x) = x9 + a ” x 8 + d 2 x 7 + a x6 + a 8 x 5 + a 4 x 4 + a 4 x 3 + a 7 x 2 + aI2x + a9

donde:

h, = a

h, = a h2 =a

h, = a h, =al2

h, = a 9 8

I 12

Ahora encontramos C(x)

27

Codificador y decodificador corrector de errores Reed-Solomon

xn-ki(x) = x6(a6x7 + a 9 x 6 + a 3 x 2 + al3) = a6xI3 + a9xI2 + a3x8 + aI3x6

a partir de aquí obtenemos los siguientes valores de C(x)

C13 = a6

c,, = o C, =al3 C,, = O C, = O c,, = a9 C, = a3

los valores faltantes de C(x) se encuentran con:

9-1

c6+ = hjC15-,-j j=O

Para i = l

C, = hocl4 + h,c13 + h2C12 + h3Cl, + h4Clo + h5C9 + h6C8 + h,C7 + h8C6 = a 12 a 6 + a 7 a 9 + a a 3 + a 10 a 13

=a3 +a’ +a4 +a8 =a6

Para i = 2

C, = hocl3 + h,cl2 + h2Cll + h,Clo + h4C9 + h,C8 + h6c7 + h7C6 + kc5 = a 12 a 6 + a 7 a 9 + a a 3 + a 10 a 13

= a 3 + a 1 + a 4 + a 8 = a 6

3

C, = hoc,, + h,Cl, + h2ClO + h3C9 + h4C8 + h,C, + h6C6 + h7C5 + h8C4 =a9a9+a4a3 +aaI3+a 12 a 6 + a 10 a 5

=a3 +a7 +al4 +a3 +ao =a4

Para i = 4

C, = hocll + h,Clo + h2C9 + h3C8 + h4C, + h5C6 + h6C, + h,C4 + h,C3 = a 4 a 3 + a a 8 13 + a a 6 + a 12 a 5 + a 10 a 4

=a7 +a6 + a 7 + a 2 +al4 = a O

Para

28

Codificador y decodificador corrector de errores Reed-Solomon

Para i = 5

C, = hoC,, + h,C9 + h2C, + h3C7 + h4C6 + h,C, + h6C4 + h7C, + h,C, =a7a5+a a +a8a6+a a5+a a +a a = al0 +a2 +a'4 +a6 +a+a" = a 4

4 13 12 4 10 o

Para i = 6

C, = hoc, + h,C, + h2C7 + h,C6 + h4C, + h,C4 + h6C3 + h7C2 + h,C, =a a +a a + a 4 a 6 + a g a 5 +aa4+a a +a a =a0 +a2 +a'' +al3 +a5 +al2 +al4 = a 12

12 3 4 13 12 o 10 4

~ 1 3 =a6

C, =ao C, = O c,, =a9

C, =a4 C, = a 3

c,, = o c, = a 4 c, =a13 C,, = O C, =al2 C, =a 6

Tabla de valores de C(X) completa.

C ( X ) = a6xI3 + a9xI2 + a 3 x g + aI3x6 + a 6 x 5 + a 5 x 4 + a 4 x 3 + aox2 + a 4 x + al2

Polinomio de erratas

p(x ) = ~ ( x ) + F ( x ) = a9xI4 +a x + a0x7 + al'x 14 1 1

Calculo del síndrome

29

Codificador y decodificador corrector de errores Reed-Solomon

S, = a9aZ8 + a6a26 + a9a24 + ai4a22 + a3ai6 + a0a'4 + a13a', + a6a" +aja8 + a4a6 + a0a4 + a2a2 + al2 S , =a7 +a2 +a3 +a6 +a4 +a '4 +a" +a' +al3 +a" +a4 +a4 +a" = a o

S, = a9a4= + a6a39 + a9a3, + a'4a33 + a3aZ4 + a0a2' +a"a" + a6a'5 + a5a12 + a4a9 + aoa6 + a2a3 +a'? S 3 - -a5' +a4' +a45 +a4' +a2' +a2' +a3' +a2' +a'? +a'3 +a6 +a5 +aL2 =al4

S(X) = a 4 x 6 + a 4 x 5 + a12x4 + aI4x3 + a o x 2 + a'Ox

Calculo de polinomio localizador de borrados

f z(x) = n ( x - x,) = ( x - d l ) ( x - a ' ) ; donde los valores de x, son datos del borrado F(X)

j =1

= x2 -(a11 +a7)x+a18 = x 2 + a 8 x + a 3

invirtiendo

z ( x ) = a 3 x 2 + a 8 x + 1 donde z2 =a3, z, = a 8 , z = a O ,

Calculo de los síndromes de Forney

d=7, t=3.

T(x ) = [(1+ S(x))z, (x) + l ]modxd

30

Codificador y decodificador corrector de errores Reed-Solomon

a 4 x 6 + a'lx' + a12x4 + a14x3 + a o x 2 + a lox + 1

a 3 x 2 + a'x + 1

a 7 x g + a14x7 + aI6x6 + aI7x5 + a 3 x 4 + d 3 x 3 + a 3 x 2 a'2x7 + aI9x6 + a20x5 + aZ2x4 + a 8 x 3 + aI8x2 + a ' x

a4x6 +al1x5 +a12x4 +a4x3 +aox2 +a"x+l

a 7 x 8 + a 5 x 7 + a o x 6 + a 6 x 5 + a 6 x 4 + a 0 x 3 + a o x 2 +m + I

por lo tanto tenemos

T(x) = aox6 + a6x5 + a 6 x 4 + a0x3 + a o x 2 +m

Calculo de a(x) polinomio de Berlekamp

Para n = O O

do = T3 = 1 ~ ( x ) = 1

d-, = 1 a ( x ) = l (-1)

m=-1

n = l , m = O

31

Codificador y decodificador corrector de errores Reed-Solomon

k'2=m~{l,0+1-O} C , = 1 donde n<3+1-1- ~~ 3 1 < 2 comosecumplese [:I continua con el algoritmo.

Ahora para n = 2 , m = O

d, =a6 +a6(a6)=a6 +a" =a 4

(3) (2) ('o) a(.) = a(x)- d,di1x2 a(x) = 1 + a 6 x - a 4 x 2

(3 ) o(x) = a 4 x 2 + a 6 x + I

t 3 = max{1,0+ 2 -O} =j . e 3 = 2, 2 c 3 + 2 - 1 - 1, 2 < 3, por lo que se continua con

el algoritmo.

Para n =3, m = 2

d3 =a0 +a6a6 +a6a4 =a0 +a" +al0 =a 14

(4) (3) (2) a(x) = a(x) - d3di1x a(x) = a 4 x 2 + a 6 x + 1 - a'4a-4x(l + a'x)

= a 4 x 2 + a 6 x + 1 -a l0x + a16x2

(4) a(x) = a o x 2 + a 7 x + 1

t 4 =max{2,1+3-2} a . e4 = 2 ,

n < t + t , , + l - l - [i], 3<3+2-1-1, 3 3 < 3 nosecumple

por lo tanto se termina con el algoritmo y

a(x) = a o x 2 + a 7 x + 1

32

Codificador y decodificador corrector de errores Reed-Solomon

Calculo de las raíces inversas de a(x) , búsqueda de Chien

Para encontrar las raíces inversas a(x) = a(a") / es decir la potencia de acorresponde al valor de las potencias de las x de E(x) .

E(x) = a9x14 + al0x I donde x1 = al4 y x2 = a son las posiciones de los errores.

Calculo de erratas Q(x).

Q(x) = (1 + T(x))o(x)mod xd , d = 7

a o x 6 + a 6 x 5 + a 6 x 4 + a 0 x 3 + a o x 2 +a x + 1 a o x 2 + + 1

a o x 8 + a6x7 + a6x6 + a 0 x 5 + a 0 x 4 + a'x3 + a o x 2 a7x7 +a13x6 +a13x5 + a 7 x 4 + a 7 x 2 + a 8 x 2 + a 7 x

aox6 + a 6 x 5 + a6x4 + a0x3 + a 0 x 2 +a x + I

a o x 8 + a10x7 + ox6 + ox5 + a 5 x 4 + a 3 x 3 + a 8 x 2 + a14x + 1

~ ( x ) = a 5 x 4 + a 3 x 3 + a o x 2 + a14x + 1

Calculo de los valores de erratas de Yd

donde

x1 = a x3 =a

x2 =a x4 =a xj [ 14

1

33

Codificador y decodificador corrector de errores Reed-Solomon

~ ( a l ~ ) = a a +a a +a a +a a + I =asa1' +a a +a a +a28 +I =a' +ao +a6 +a'3 +ao =a 4

5 56 3 42 8 28 14 14

3 12 8 13

Y , = a a =a 6 4 10

y2 = - - - - - n(a-14)= a3n(a> = al3 [,'a4 + a3a3 + a8a2 + al4a + 11 al2 al4

y2 =a9[a9+a6 +alo +ao +a0]=a9

y3 = --~(a8)= a6 a13 + a3a24 + + al4aS + aO] a8

y3 =al3[a7 +al2 +a9 +a7 +ao]=al5 =a O

y4 = - ~ n ( a ~ ) = a3 a3 T[a 5 a 16 +a 3 a 12 +a8a8 +a 14 a 4 +a0] a a

34

Codificador y decodificador corrector de errores Reed-Solomon

Y , =a9(a6 +ao +a1 +a3 +ao)=a 9 a 5 = a 14

Los resultados se resumen en la siguiente tabla:

I Y, = alo I x , = a a'Ox 1 1

Y , = a x2 = a a9xI4 Y3 = a x3 = a a0x7

9 14

O 7

I y4 = al4 I x , = al1 I al4xl1 I

Finalmente

p(x) = a'Ox + a9x14 + a0x7 + a x 14 11

Por lo tanto vemos que si detecta y si corrige.

35

Codificador y decodificador corrector de errores Reed-Solomon

IMPLEMENTACIÓN EN HARDWARE DE UN CODEC CORRECTOR DE

ERRORES REED-SOLOMON

Nuestro codec Reed -Solomon (7,3) se compone de las siguientes tres etapas:

1. Codificador 2. lnterfaz 3. Decodificador

CODIFICADOR

Para implementar el diseño del codificador en hardware, el primer paso es obtener h(x) o g(x) en este caso se obtendrá g(x) .

g(x) = gmxm + gm_,xm-l + ...... + g,x O

representado gráficamente de la siguiente manera. 3 bits

i(x1 "-/L I

Figura 8. Representación de g(x) = gmxR + gm-,xm" + ...... + goxo mediante un filtro IIR

Para el codec Reed-Solomon (7,3) se trabajo sobre el Campo de Galoa 8 (GF(23)), la tabla 4 nos muestra la representación de este Campo de Goloa.

36

Codificador y decodificador corrector de errores Reed-Solomon

I Símbolo I Representaci6n I Representaci6n I binaria polinomial en z

ao 1 O0 1 a'

Z2 1 O0 a2 Z o1 o

I a3 I o 1 1 I z+ 1 I 1 1 0 z2+z I 1 1 1 z2+z+1 I

t " 1 I

n6 1 0 1 z2+ 1

Tabla 4.Representaci6n binaria y polinomial en z

Y con el siguiente polinomio generador:

donde los elementos del campo son expresados como polinomios en z. Alternativamente los elementos del campo son expresados en términos del elemento primitivo a = z .

&)= x4 + a3x3 +x2 +a x + a3

El codificador tiene como salida la información i(x)+ redundancia. La figura 9 muestra el codificador que produce la redundancia y es implementado con filtros IIR. Todos los caminos de datos son de 3 bits de ancho en paralelo durante todo el recorrido como se vera más adelante.

Figura 9. DiseÍío deg(x) = x4 + a 3 x 3 + x' + a x + a3 en filtros IIR

El almacenamiento de registro de cambio octal esta dado por tres registros de cambio almacenados en paralelo.

37

Codificador y decodificador corrector de errores Reed-Solomon

La multiplicación por (z+ 1 ) que es por a3 y (z) que es por a, del circuito en los caminos de retroalimentación son simples entradas y salidas de circuitos lógicos de 3 bits, los cuales se implementan con compuertas Ex-or como se describe más adelante.

El diseño del producto de ax y a3 se determina de la siguiente manera:

ax = a2x2 + alxl +a,

a3 = a , x + I = x + I a2x2 + a,x + a,

x + l a2x3 + a1x2 + a,x

a2xL + a,x + a, a2x3 + x’(a, + a2)+ x(a, +a, )+ a,

pero anteriormente vimos que x 3 = x + 1 , sustituyendo en el resultado anterior nos queda lo siguiente:

a2(x+1)+x2(a1 +a2)+x(ao +a,)+a,

al factorizar este nuevo polinomio llegamos a:

este polinomio se puede representar de la siguiente manera:

x c2 + X C 1 +e , 2

con c2 = (a2 + a,), c1 =(a2 + a, + a,), e, = (a2 + a,).

Análogamente podemos calcular el producto de ax y a

ax = a2x +a,x +a,

a = a , x = x

2 1

a2xL + a,x + a,

X

a2x3 + a,x2 + a,x

nuevamente como x 3 = x + 1 , entonces podemos escribir este polinomi0 como

a2 (x + I)+ a1x2 + a,x

38

Codificador y decodificador corrector de errores Reed-Solomon

desarrollando el producto y factorizando llegamos a

u p 2 +(u, +u2). + u2 = x 2 c2 + xc, + c,

con c2 = u,, c, = (u, +u2), c, = u 2 . Esto se puede comprender mejor observando la figura

1 O. Todas las sumas son Ex-or.

figura 1 O. Representaci6n gr6fica de los productos.

Para ilustrar el comportamiento del codificador se propone una (x)= x 2 a 4 + a 4 , ( la i(x) debe ser una palabra de 3 símbolos (cada símbolo es de 3 bits) como máximo) y realizamos una corrida, para determinar el síndrome como lo muestra la figura 1 l .

a o a "" 4 4 ,3 bits ..

I -1 I

O O O O

ao a a4 ao 5

a3 a3 a4 CP

a6 _" O aclic----- sindrome

Figura 1 l . Corrida del codificador.

39

Codificador y decodificador corrector de errores Reed-Solomon

La entrada al codificador es la información a4 O ~z~ , que en binario se expresa como: 1 1 O, 000, 1 1 O respectivamente, el primer símbolo en entrar es el que multiplica a la x de potencia más alta, los registros deben estar limpios, es decir deben contener O00 cada uno.

Cuando entra el primer símbolo a4 (1 1 O) este se suma con el contenido del ultimo registro

(de izquierda a derecha) y el resultado se retroalimenta multiplicándose primero con a3y almacen6ndose en el primer registro (de izquierda a derecha), lo que contenía este primer registro se suma con la multiplicación de la información retroalimentada por a y se almacena en el segundo registro y lo que contenía este segundo registro se suma con la

multiplicacibn de la información retroalimentada con a' y se almacena en el tercer registro, a su vez lo que contenía este tercer registro se suma con la multiplicación de la información

de retroalimentación con a3 y se almacena en el cuarto registro y lo que contenía el cuarto registro se retroalimenta y el procesa se repite durante 3 pulsos de reloj. Finalmente lo que se dirige al canal es la información, durante los 3 primeros pulsos de reloj (interruptor posición l), durante los siguientes 4 pulsos de reloj se conmuta el interruptor (posición 2) dejando pasar la redundancia.

AI final de los 7 pulsos de reloj se obtiene una ráfaga de 7 símbolos, llamada

C(x)= a6 + a 6 x + a 3 x 3 + a 4 x 4 + a 4 x 6 , que es nuestra palabra codificada.

La tabla 5 resume los estados de los registros y la salida del codificador en los 3 primeros pulsos de reloj.

Tabla 5. Estados de los registros durante los 3 primeros pulsos de reloj, interruptor en posici6n l .

La tabla 6 resume los resultados durante los siguientes 4 pulsos.

Tabla 6. Estados de los registros durante los siguientes 4 pulsos, interruptor en posici6n 2

40

Codificador y decodificador corrector de errores Reed-Solomon

La figura 12 muestra un esquema general de cómo debe implementarse el codificador, para tres bits en paralelo, el Multiplexor 1 tiene la función de multiplexar la información de usuario y la del decodificador en caso de retroalimentar la salida de este hacia el Multiplexor1 .

La figura 13 muestra el circuito lmplementado con TTL’s, del codificador, Mux 1 multiplexa la información del decodificador y la del usuario. Como es necesario mantener los registros limpios Mux 2 multiplexa entre ceros y la información retroalimentada, (siempre que se prende el sistema es necesario limpiar los registros) adem6s Mux 2 se encarga de mandar ceros a los registros después de tres pulsos de reloj para que el síndrome se dirija hacia el canal después de la información, los ceros introducidos desplazan la información al registro siguiente hasta terminar desplazando a la salida del codificador todo el síndrome junto con la información como se resume en las tablas 5 y 6 vistas anteriormente.

La figura 14 muestra el diseño con componentes TTL para controlar el codificador, este sistema realiza la automatización de entrada de informacibn, o limpieza de los registros cuando se enciende el codificador y funciona de la siguiente manera: el 74LS163 comenzara a contar a partir de que todos los registros usados se encuentren limpios, de 1 binario a 3 binario (O01 a O1 1) mantiene el Mux 2 en alto para que pase la información, del cuarto pulso al séptimo se mandan ceros para limpiar el codificador y permitir que el síndrome sea desplazado hacia la salida rumbo al canal, además controla al Mux 3 y Mux 4, el Mux 3 multiplexa la información de usuario (o la retroalimentación del decodificador) y el síndrome obtenido del decodificador, en tres y cuatro pulsos de reloj respectivamente, Mux 4 Multiplexa la información proveniente de Mux 3 y ceros para limpiar los registros del buffer.

El buffer es un circuito que para fines pr6cticos consideraremos parte del canal, se diseño con la finalidad de poder contaminar la información que viaje por el canal, y probar que el decodificador realiza eficazmente la tarea de detectar y corregir hasta dos errores tal y como se muestra en la figura 15.

INTERFAZ

La figura 16 corresponde al circuito que controla la información que viaja por el canal. Éste circuito es la interfaz entre el codificador, el canal y el decodificador, su función consiste en convertir la información del codificador de paralelo a serie para que pueda viajar por el canal y regresarla de serie a paralelo para que sea recibida por el decodificador.

La interfaz se divide en dos partes, la primera corresponde a la conversión de paralelo a serie y esta integrada con un contador y un registro de corrimiento de entrada en paralelo que realiza la conversión de paralelo a serie, el bit menos significativo del dato paralelo se conecta a la entrada del registro de corrimiento más próxima a la salida así que los bits se transmiten serialmente en el orden del menos significativo al mas significativo.

Esta interfaz se activa sólo hasta que el buffer esta lleno, es necesario mencionar que para que el registro de corrimiento convierta los 3 bits de paralelo a serie, se necesitan 3 pulsos de reloj, por consiguiente tres pulsos de reloj para la interfaz corresponde a un pulso de reloj

41

Codificador y decodificador corrector de errores Reed-Solomon

para el codificador y decodificador, una vez lleno el buffer se activa el registro de corrimiento y se convierte el primer bit paralelo a serie, en el mismo pulso de reloj, para el siguiente pulso de reloi se convierte el segundo bit y para el tercer pulso se convierte el tercer bit y el estado del codificador cambia, colocando los siguientes tres bits en paralelo a las entradas respectivas del registro de corrimiento y así sucesivamente hasta 7 pulsos de reloj del codificador (21 pulsos de reloj para el registro de corrimiento) con lo que toda la palabra C(x) es transmitida en serie por el canal.

La segunda parte de la interfaz consiste en convertir la información serial a paralelo, para lo que usamos un registro de corrimiento con salida en paralelo. Además de los datos y los pulsos de reloj se debe contar con una sincronización que identifique el principio y final de cada palabra C(x), esta sincronización esta dada por el contador del codificador.

DECODIFICADOR

El esquema del decodificador se muestra en la figura 17, si realizáramos la decodificación de C(x) con una corrida semejante a la hecha en el codificador no apreciaríamos como el

decodificador puede detectar y corregir los errores. Para poder apreciar como el decodificador es capaz de detectar hasta 3 errores y corregir dos, contaminaremos a C(x) cuando pase por el buffer (figura 15), de manera que se generen dos errores y decodificaremos a R(x) = C(x)+ e(.), con e(.) = a 4 x 4 + a3 .

R(x) = C(x)+ e(x) = a6 + a 6 x + a 3 x 3 + a 4 x 4 + a4x6 + a 4 x 4 + a3 , simplificando

R(x) = a 4 x 6 + a 3 x 3 + a 6 x + a4.

Comprobaremos que la salida del decodificador será C(x) .

Un total de 21 pulsos de reloj son necesarios para que este decodificador corrija todos los errores. El primer conjunto de 7 pulsos de reloj calcula el síndrome. El segundo conjunto de 7 pulso de reloj corrige al menos un error y algunas veces ambos errores. El tercer conjunto de 7 cambios de reloi corrige el segundo error si este todavía no se corrige.

En la tabla 7 se muestra la operación de decodificación en detalle. Para cada pulso de reloj, se listan en la tabla, el registro del síndrome y el buffer de información. En los primeros 7 pulsos de reloj S1 (ver figura 17) se encuentra en la posición 1 es decir no hay retroalimentación hacia el registro de información, en el séptimo pulso de reloi, el registro del síndrome contiene al síndrome, y el registro de información contiene a la palabra R(x) .

42

Codificador y decodificador corrector de errores Reed-Solomon

A partir del octavo pulso de reloj S1 se cierra y se retroalimenta la información del registro. Del catorceavo pulso de reloj y hasta el veintiunavo pulso de reloj S1 se abre y nuevamente no hay retroalimentación hacia el registro de información.

El multiplexor 2 bloquea la entrada de la información al decodificador durante los siguientes 14 pulsos de reloj, enviando ceros.

El decodificador cuenta con un sistema llamado trampa de error, el cual se activara, a partir del octavo pulso de reloj, si es detectado algún error. Este es un modelo con al menos dos símbolos distintos de cero y con uno de los símbolos diferentes de cero en el lugar más a la derecha. “ A s í un modelo debería siempre ocurrir al menos una vez en el segundo cambio de 7 pulsos de reloi, si no ocurren más de 2 errores”.

En el treceavo pulso de reloi se activa por primera vez la trampa de error, se observa en la tabla 7 que en este pulso se cumple el modelo, y cuando el error esta atrapado, vemos el 4 segmento del símbolo del modelo del error cíclicamente cambiado (e,,e,,e,,e,) .

Como el error es atrapado, e, es corregido en la información del registro y este conjunto es

igual a cero en el registro del síndrome, durante el catorceavo pulso. Después de 14 pulsos de reloj el registro del síndrome contiene el síndrome del modelo de error restante. El proceso se repite hasta el tercer conjunto de 7 cambios, despues del cual la corrección de error esta completa.

Si el síndrome es inicialmente diferente de cero pero no error, es atrapado durante el segundo conjunto de 7 cambios, entonces más de dos errores ocurrirán (pero lo contrario no es verdad).

En la figura 17 el multiplexor 1 tiene como finalidad dejar pasar la información del usuario o del codificador, el multiplexor 2 deja pasar la información del multiplexor 1 o bien ceros para limpiar los registros de corrimiento, el multiplexor 3 deja pasar la información del multiplexor 1 durante los primeros 7 pulsos de reloj, después deja pasar la retroalimentación, cuando S1 se cierra en los siguientes 7 pulsos de reloj, esto es del séptimo al catorceavo pulso de reloi, finalmente deia pasar ceros del catorceavo al veintiunavo pulso de reloj, cuando Slabre nuevamente, el multiplexor 4 deja pasar la información del multiplexor 3 o bien limpia los registros de corrimiento, las compuertas vistas son parte del control de la trampa de error, los flip-flop controlan los cambios de los multiplexores en los tiempos que se requieren y son controlados por un contador que va de O a 21 binario.

43

Codificador y decodificador corrector de errores Reed-Solomon

Tabla 7. Decodificación.

g ( x ) = x 4 + a 3 x 3 + x 2 + a x + a 3

C(x)=a4x6+a4x4+a3x3+a6x+a6 e(x)=a4x4+a3 R(x) = a4x6 + a3x3 + a6x+ a4

I Cambio I Reaistro del Síndrome \ Información del registro

1,5,4 10000000 ~~~

¡u u ' 1 a4000000

00a40000 a a a a 3 3 4 6 0 ~ 4 0 0 0 0 0

5

0 ~ 3 0 0 ~ a a a2aa6a 12 a300a4a4a60 a30a4a6 1 1 0 0 ~ 4 ~ 4 ~ 6 0 ~ 3 aa5a4 1 10 0 ~ 4 ~ 4 ~ 6 0 ~ 3 0 a 1 a3a5 9

a a a a 8 a4a60a300a4 a60a3a6 Síndrome 7 a 3 0 a 3 0 0 a 4 0 a 4 0 0 a 6 6

a2aa3a5

2 2 6 5 a4a4a60a300

4 4 6

13

O000 20 a6a6 I o a3 a40 a4 O000 19

a3 a40 a4 a6a60 O000 18 a40 a4 a6a60a3 O000 17 o a4 a6a60a30 000a4 Trampa de error 16 a4 a 6 a 6 0 a 3 0 0 0oa40 15

a6a60a300a4 oa400 14 a60a300a4a4 a400a3 Trampa de error

I21 I O000

En esta tabla 7 la información en rojo a partir del quinceavo pulso indica la salida del decodificador que es la información corregida C(x) .

44

Codificador y decodificador corrector de errores Reed-Solomon

Tabla 7. En binario (Decodificación).

14 O00 110 O00 O00 O00 101 101 O00 o11 O00 15 O00 O00 110 O00 O00 O00 101 101 O00 110 1 6 O00 O00 O00 1 1 O Trampa de O00 O00 O00 1 O1 1 O 1 O00

17 O00 O00 O00 O00 O00 O00 O00 O00 101 101 18 O00 O00 O00 O00 O00 O00 O00 O00 O00 1 o1 19 O00 O00 O00 O00 O00 O00 O00 O00 O00 O00 20 O00 O00 O00 O00 O00 O00 O00 O00 O00 O00 21 O00 O00 O00 O00 O00 O00 O00 O00 O00 O00

error.

O00 I O00 I O00 I O00 I

O00 I O00 I o11 10001

1101 101 I 1101 1101

O00 I O00 I o11 10001

101 I O00 I

~

101 101 O00 101 O00 O00

45

o

Multiplexor 1 I -

46

I/:

47

"I P O m

I

L o w

48

Buffer P

ar o

Salidas hacia la intetfaz Y

Hacia Inversores 1

49

4 I

I

I

r

rl I

I L

L

_ . . . . . . . 51

BIBLIOGRAFíA

Sistemas Digitales Principios y Aplicaciones; Tocci, 6" edición, editorial Prentice Hall.

Fundamentos de Sistemas Digitales; T. L. Flovd, 6" edición, editorial Prentice Hall.

Sistemas de Comunicaciones Electr6nicas; Tomasi, 2" edición, editorial Prentice Hall.

Diseño Digital Principios y Practicas, John F. Wakerly, editorial Prentice Hall

Motorola, Fast and LS l T L Data.

http://campus.uab.es/-2059673/doc - codi4.htrn

http://iunqla.dit.upm.es/-trdt/apunte/t6.html

http://mailweb.udlap.mx/-Igoieda/apuntes/sistcom/codiqos.htm

http://web.usc.es/-elusive/simula3.html

52