Códigos BCH Abstract.- In this paper I present the importance of BCH codes. When we reach objectives such as protection against the noise and the efficient use of the communication channel, is evidently the use of treating the information in a especial way. The structure of design of corrective codes of errors has the purpose to build codes with redundancy reasonable and quick decoding. Introducción [2] Para hablar de los códigos BCH, se debe tener, idea de lo que son los códigos cíclicos, para la corrección de errores, los cuales forman hoy parte de nuestra vida cotidiana. [5] El álgebra lineal y los polinomios sobre cuerpos finitos proporcionan los primeros métodos sistemáticos para el diseño y uso de códigos en la corrección de errores. La teoría elemental de extensiones de cuerpos finitos permite desarrollar posteriormente los códigos de Reed-Solomon y BCH, su implementación en numerosos procesos estandarizados hace de ellos la clase de códigos más importante en cuanto a sus aplicaciones. El uso, de paquetes de cálculo matemático permite la simulación de los algoritmos básicos en los procesos de codificación y descodificación. Como resultado de los problemas físicos que ocasionan el ruido, los errores tienden a presentarse como ráfagas, mas que aisladamente. El hecho de que los errores se presenten como ráfagas tiene ciertas ventajas y desventajas con respecto a los errores aislados, de un solo BIT. Por el lado de las ventajas, los datos del ordenador siempre se envían en bloques de bits, la desventaja de la ocurrencia de los errores en ráfaga es que son mucho más difíciles de detectar y corregir que los errores aislados y, también, son más difíciles de modelar analíticamente. Códigos BCH [4]- Estos códigos fueron descubiertos por Hocquenghem en 1.959 y también por Bose y RayChaudhuh en 1.960. De las iniciales de sus nombres es de donde viene el nombre que se les da a estos códigos. [2]- Son 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 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 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 1 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ón de 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 sistemas 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 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 más significativo. [3]- Los más comunes son los llamados BCH primitivos los cuales tienen: Longitud del bloque: n=2m –1 ( m mayor o igual a 3) Numero de bits del mensaje: kn-mt Distancia mínima 2t+1 Cada código BCH es un código corrector de t errores. Los códigos Hamming correctores de un error pueden ser descritos como códigos BCH. [1] Tasa de Bit Erróneo para códigos Hamming Golay y BCH [4] Formas de corrección de Errores Hemos visto anteriormente que los códigos de Hamming corrigen los errores de peso menor o igual que uno. Podemos modificar los códigos de Hamming para corregir dos errores, pero para eso tenemos que aumentar la distancia mínima. Esto lo podemos hacer de dos formas: 2 1. Aumentando la longitud de las palabras. En este caso corregir un error en una palabra de longitud cinco o corregir dos errores en una palabra de longitud diez es más o menos equivalente y no introduce mejoras sustanciales en el código. 2. Separando más las palabras del código. Este método será el que utilizaremos, y para conseguirlo eliminaremos palabras del código, con lo que obtendremos un subcódigo de un código de Hamming con una distancia mínima mayor, lo que nos permitirá corregir hasta errores de peso dos. Desarrollo de BCH [4] Para poder desarrollar la teoría de estos códigos se debe utilizar algunas propiedades de un cierto tipo de matrices, "las matrices de Vandermonde".Tamaño (n*n). Estos códigos serán subcódigos de los códigos de Hamming. Para ello eliminaremos palabras de los códigos de Hamming con el objetivo de obtener un nuevo código con una distancia mínima mayor. La forma de eliminar palabras será añadiendo nuevas condiciones al código, o lo que es lo mimo añadir nuevas filas a la matriz de control. Estas nuevas filas que añadiremos no serán combinaciones lineales de las filas de la matriz de control, ya que no estaríamos, haciendo nada. Matemáticamente estaremos añadiendo nuevas ecuaciones implícitas al código, con lo cual reduciremos su dimensión, y como consecuencia el número de palabras del código. Las nuevas filas que añadiremos serán una función no lineal de las filas de la matriz de control. Al utilizar funciones no lineales tenernos un cierto control sobre la distancia mínima, ya que esta variará según la función que estemos utilizando. Conclusiones [4]- Los errores que detecta y corrige el código BCH (k, t) tienen síndromes distintos. Podemos utilizar el algoritmo de los síndromes que vimos en los códigos lineales para corregir errores. Estos códigos son lineales, ya que son subcódígos de los códigos de Hamming, que son lineales, y además los hemos definido como aquellos códigos que tienen una determinada matriz de control, matriz del subespacio incidente a un subespacio vectorial que será el código BCH(K, t). -Como los códigos BCH(K, t) son t-perfectos, es decir corrigen todos los errores de peso menor o igual que i, tendremos que su distancia mínima será mayor o igual que 2. t + 1. dmin > 2.t + 1 - El código BCH(K, t) detecta y corrige todos los errores de peso menor o igual que t. Todos los errores que detecta y corrige el código BCH(K, t) están determinados de forma única. [5]- Un buen código es aquel en el que los codewords(mensajes válidos que lo forman los mensajes) están tan separados que la probabilidad de que los errores conviertan al codeword deseado en otro codeword es muy pequeña. Según esto, la detección de errores se limita a responder a la pregunta: "¿Es el mensaje recibido un codeword o no ?" Si es un codeword, uno supone que no hay errores, de esta 3 manera la probabilidad de no detectar un error es la probabilidad de que los posibles errores conviertan un codeword en otro. Cuando se detecta un error existen dos métodos para corregirlo: 1. El receptor rechaza el mensaje recibido y solicita al transmisor que retransmita el mensaje. 2. El receptor corrige el error al encontrar el codeword válido más próximo al mensaje recibido. Este procedimiento se llama forward error correction (FEC). Bibliografía [1]http://www.gr.ssr.upm.es/rcii/listatps.htm [2]http://info.pue.udlap.mx/~lgojeda/apuntes/sistcom/codigos.htm [3]http://www.ma.usb.ve/coordinacion/Programas.htm [4] http://sis.ucsm.edu.pe/sistemas/cursos/Cripto/Cripto/Tcodigos.ps [5] www.mac-cie.uva.es/~cureemm/codigos 4