Códigos Bowes-Chowdhury-Hokvingham (códigos BCH) : en la teoría de la codificación, se trata de una amplia clase de códigos cíclicos que se utilizan para proteger la información de errores (consulte Detección y corrección de errores ). Se diferencia por la posibilidad de construir un código con propiedades correctivas predeterminadas, a saber, la distancia mínima del código. Un caso especial de códigos BCH es el código Reed-Solomon .
Un código BCH es un código cíclico que puede ser dado por un polinomio generador . Para encontrarlo en el caso de un código BCH, es necesario determinar de antemano la longitud del código (no puede ser arbitrario) y la distancia mínima requerida . Puede encontrar un polinomio generador de la siguiente manera.
Sea un elemento primitivo del campo (es decir ), sea , un elemento del campo de orden , . Entonces, un polinomio normalizado de grado mínimo sobre un campo cuyas raíces son potencias sucesivas de un elemento para algún número entero (incluyendo 0 y 1) es un polinomio generador de un código BCH sobre un campo con longitud y distancia mínima .
Expliquemos por qué el código resultante tendrá exactamente esas características (longitud del código , distancia mínima ). De hecho, como lo muestra Sagalovich [1] , la longitud del código BCH es igual al orden de los elementos si , e igual al orden de los elementos si . Como no nos interesa el caso (tal código no puede corregir errores, solo detectarlos), la longitud del código será igual al orden del elemento , es decir, igual a . La distancia mínima puede ser mayor que cuando las raíces de las funciones mínimas [2] de los elementos son los elementos que expanden la sucesión, es decir, los elementos .
El número de símbolos de verificación es igual al grado , el número de símbolos de información , el valor se denomina distancia constructiva del código BCH. Si , entonces el código se llama primitivo , de lo contrario, no primitivo .
Al igual que para el código cíclico, el polinomio de código se puede obtener del polinomio de información de grado máximo , multiplicando y :
Para encontrar el polinomio generador, es necesario realizar varios pasos [3] :
Sea , la longitud de código requerida y la distancia mínima . Tome — un elemento primitivo del campo , y — cuatro potencias consecutivas del elemento . Pertenecen a dos clases ciclotómicas sobre el campo al que corresponden los polinomios irreducibles y . Entonces el polinomio
tiene elementos como raíces y es un polinomio generador del código BCH con parámetros .
Sea , y sea un elemento primitivo de . Después
Cada elemento del campo se puede asignar a 4 bits , por lo que una palabra de código equivale a 60 = 15 × 4 bits, por lo que un conjunto de 44 bits se asigna a un conjunto de 60 bits. Podemos decir que dicho código funciona con fragmentos de información.
Para la codificación con códigos BCH, se utilizan los mismos métodos que para la codificación con códigos cíclicos.
Los códigos BCH son códigos cíclicos, por lo que se les aplican todos los métodos utilizados para decodificar códigos cíclicos. Sin embargo, existen algoritmos mucho mejores desarrollados específicamente para los códigos BCH [4] .
La idea principal en la decodificación de códigos BCH es utilizar los elementos del campo final para numerar las posiciones de la palabra clave (o, de manera equivalente, en el orden de los coeficientes del polinomio asociado). A continuación se muestra una enumeración de este tipo para el vector correspondiente al polinomio .
valores | ||||
localizadores de posición |
Sea la palabra recibida asociada al polinomio , donde el polinomio de error se define como: , donde es el número de errores en la palabra recibida. Los conjuntos y se denominan valores de error y localizadores de error, respectivamente, donde , y .
Los síndromes se definen como los valores del polinomio recibido en los ceros del polinomio de código generador:
donde _
Para encontrar el conjunto de localizadores de errores, introducimos el polinomio localizador de errores
cuyas raíces son iguales a los recíprocos de los localizadores de errores. Entonces es válida la siguiente relación entre los coeficientes del polinomio localizador de errores y los síndromes [5] :
Los siguientes métodos son conocidos para resolver este sistema de ecuaciones con respecto a los coeficientes del polinomio localizador de errores ( sistema clave de ecuaciones ).
Este algoritmo se ve mejor como un proceso iterativo de construcción de un registro mínimo de retroalimentación (desplazamiento) que genera una secuencia conocida de síndromes . Su objetivo real es construir un polinomio del menor grado que satisfaga la ecuación
La solución de esta ecuación es equivalente a la condición
El proceso iterativo de construcción de dicho polinomio es el Algoritmo de Berlekamp-Massey .
Este método se basa en el conocido algoritmo de Euclides para encontrar el máximo común divisor de dos números (mcd), solo que en este caso no estamos buscando el mcd de dos números, sino de dos polinomios. Denotemos el polinomio de valores de error como , donde el polinomio sindrómico es igual a . Del sistema de ecuaciones se sigue que . El problema esencialmente se reduce a determinar cuál satisface la última ecuación y al mismo tiempo el grado no es mayor . De hecho, tal solución dará el algoritmo de Euclides extendido aplicado a polinomios y , donde . Si en el enésimo paso el algoritmo euclidiano extendido produce una solución tal que , entonces , y . En este caso, el polinomio encontrado ya no participa en la decodificación (se busca solo como auxiliar). De esta manera, se encontrará el polinomio localizador de errores .
Deje que el código BCH sobre el campo de longitud y con una distancia constructiva esté dado por un polinomio generador , que tiene entre sus elementos raíces : un número entero (por ejemplo, 0 o 1). Entonces cada palabra clave tiene la propiedad de que . La palabra recibida se puede escribir como , donde es el polinomio de error. Deje que los errores ocurran en las posiciones ( es el número máximo de errores corregibles), entonces , y son las magnitudes de los errores.
Puedes componer el síndrome th de la palabra aceptada :
La tarea es encontrar el número de errores , sus posiciones y sus significados para los síndromes conocidos .
Supongamos para empezar que es exactamente igual a . Escribimos los síndromes en forma de un sistema de ecuaciones no lineales en forma explícita:
Denote por el localizador del -ésimo error, y por — la magnitud del error, . En este caso, todos son diferentes, ya que el orden del elemento es , y por lo tanto, cuando se conoce , se puede definir como .
Compongamos un polinomio de localizadores de errores :
Las raíces de este polinomio son los elementos inversos a los localizadores de errores. Multiplica ambos lados de este polinomio por . La igualdad resultante será válida para :
Si sustituimos aquí , entonces obtenemos una igualdad que es válida para todos y para todos :
Por lo tanto, para cada , puedes escribir tu propia igualdad. Si se suman , entonces obtenemos una igualdad que es válida para cada uno :
Dado que (es decir, cambia dentro de los mismos límites que antes), el sistema de ecuaciones para síndromes se transforma en un sistema de ecuaciones lineales :
o, en forma matricial,
dónde
Si el número de errores es realmente igual a , entonces este sistema tiene solución y se pueden encontrar los valores de los coeficientes . Si el número es , entonces el determinante de la matriz será igual a . Esta es una señal de que el número de errores es menor . Por tanto, es necesario componer un sistema, suponiendo el número de errores igual a , calcular el determinante de la nueva matriz , etc. hasta establecer el verdadero número de errores.
Después de resolver el sistema clave de ecuaciones, se obtienen los coeficientes del polinomio localizador de errores. Sus raíces (los elementos inversos a los localizadores de errores) se pueden encontrar simplemente iterando sobre todos los elementos del campo . Para ellos, encuentre elementos que sean inversos a la multiplicación: estos son localizadores de errores . Este proceso es fácil de implementar en hardware.
Usando los localizadores, puede encontrar las posiciones de error ( ), y los valores de error del sistema para síndromes, al aceptar . Decodificación completada.