Un código cíclico es un código de bloque lineal que tiene la propiedad de ciclicidad, es decir, cada permutación cíclica de una palabra de código es también una palabra de código. Se utiliza para transformar información para protegerla de errores (consulte Detección y corrección de errores ).
Sea una palabra de longitud n sobre un alfabeto de elementos de un campo finito y sea un polinomio correspondiente a esta palabra en una variable formal . Se puede ver que esta correspondencia es un isomorfismo de espacios lineales. Dado que las "palabras" consisten en letras del campo, se pueden sumar y multiplicar (elemento por elemento), y el resultado estará en el mismo campo. El polinomio correspondiente a la combinación lineal del par de palabras y es igual a la combinación lineal de los polinomios de estas palabras .
Esto nos permite considerar el conjunto de palabras de longitud n sobre un campo finito como un espacio lineal de polinomios de grado máximo n − 1 sobre el campo .
Si es una palabra código obtenida por un desplazamiento cíclico de un bit a la izquierda de la palabra , entonces el polinomio correspondiente se obtiene a partir del anterior multiplicando por x :
, utilizando el hecho de queDesplazamiento a la derecha e izquierda, respectivamente, por bits:
Si es un polinomio arbitrario sobre el campo y es una palabra de código de un código cíclico , entonces también es una palabra de código de este código.
Un polinomio generador de un código cíclico es un polinomio distinto de cero de , cuyo grado es el más pequeño y el coeficiente en el grado más alto .
Teorema 1Si es un código cíclico y su polinomio generador, entonces el grado es , y cada palabra de código se puede representar de manera única como
donde el grado es menor o igual a .
Teorema 2— polinomio generador del código cíclico — es un divisor del binomio .
ConsecuenciasPor lo tanto, cualquier polinomio divisor puede ser elegido como polinomio generador . El grado del polinomio seleccionado determinará el número de símbolos de verificación , el número de símbolos de información .
Los polinomios son linealmente independientes, de lo contrario para distinto de cero , lo cual es imposible.
Entonces, las palabras de código se pueden escribir, como para los códigos lineales, de la siguiente manera:
donde es la matriz generadora , es el polinomio de información.
La matriz se puede escribir en forma simbólica:
Para cada palabra clave de un código cíclico, . Por lo tanto, la matriz de verificación se puede escribir como
Después
Con la codificación no sistemática, la palabra clave se obtiene como el producto de un polinomio de información por uno generador:
Se puede realizar multiplicando polinomios.
Con la codificación sistemática, la palabra de código se forma en forma de un subbloque de información y una verificación:
Deje que la palabra de información forme las potencias más altas de la palabra de código, luego
Entonces se sigue de la condición
Esta ecuación define la regla de codificación sistemática. Se puede implementar utilizando filtros lineales multiciclo (MLF) .
Como divisor , elegimos un polinomio generador de tercer grado , luego el código resultante tendrá una longitud , el número de símbolos de verificación (el grado del polinomio generador) , el número de símbolos de información , la distancia mínima .
Generando matriz de código:
donde la primera línea es un polinomio con coeficientes en orden ascendente.
Las líneas restantes son desplazamientos cíclicos de la primera línea.
Comprobar matriz :
donde la i -ésima columna, a partir de la 1a, es el resto de la división por el polinomio , escrito en grados ascendentes, a partir de la parte superior.
Entonces, por ejemplo, la cuarta columna es , o en notación vectorial .
Es fácil comprobar eso .
Como polinomio generador , puedes elegir el producto de dos divisores :
Entonces cada palabra clave se puede obtener usando el producto del polinomio de información con el grado de la siguiente manera:
Por ejemplo, una palabra de información corresponde a un polinomio , luego a una palabra de código , o en forma de vector .