Código de línea

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 28 de enero de 2021; la verificación requiere 1 edición .

En matemáticas y teoría de la información, un código de línea  es un tipo de código de bloque utilizado en circuitos de detección y corrección de errores. Los códigos lineales, en comparación con otros códigos, permiten implementar algoritmos más eficientes para codificar y decodificar información.

Fundamentos

En el proceso de almacenar datos y transmitir información a través de redes de comunicación, inevitablemente ocurren errores. El control de integridad de datos y la corrección de errores son tareas importantes en muchos niveles de trabajo con información (en particular, las capas física , de enlace de datos y de transporte del modelo OSI ).

En los sistemas de comunicación, son posibles varias estrategias para tratar los errores:

Códigos de detección y corrección de errores

Códigos de corrección: códigos que se utilizan para detectar o corregir errores que ocurren durante la transmisión de información bajo la influencia de interferencias , así como durante su almacenamiento.

Para ello, al escribir (transmitir) a los datos útiles, añaden información redundante especialmente estructurada , y al leer (recibir), se utiliza para detectar o corregir errores. Naturalmente, el número de errores que se pueden corregir es limitado y depende del código específico utilizado.

Estrechamente relacionados con los códigos de corrección de errores están los códigos de detección de errores . A diferencia del primero, el segundo solo puede establecer la presencia de un error en los datos transmitidos, pero no corregirlo.

De hecho, los códigos de detección de errores utilizados pertenecen a las mismas clases de códigos que los códigos de corrección de errores. De hecho, cualquier código de corrección de errores también se puede usar para detectar errores (al hacerlo, podrá detectar más errores de los que pudo corregir).

De acuerdo con el método de trabajo con datos, los códigos de corrección de errores se dividen en códigos de bloque , que dividen la información en fragmentos de longitud constante y procesan cada uno de ellos por separado, y códigos convolucionales , que trabajan con datos como un flujo continuo.

Códigos de bloque

Deje que la información codificada se divida en fragmentos de longitud de bits, que se convierten en palabras de código de longitud de bits . Entonces, el código de bloque correspondiente generalmente se denota . En este caso, el número se denomina tasa de código .

Si el código deja los bits originales sin cambios y agrega comprobaciones , dicho código se llama sistemático , de lo contrario, no sistemático .

Puede configurar el código de bloque de diferentes maneras, incluida una tabla donde cada conjunto de bits de información está asociado con un bit de la palabra de código. Sin embargo, un buen código debe cumplir al menos los siguientes criterios:

Es fácil ver que estos requisitos se contradicen entre sí. Es por eso que hay una gran cantidad de códigos, cada uno de los cuales es adecuado para su gama de tareas.

Casi todos los códigos utilizados son lineales . Esto se debe al hecho de que los códigos no lineales son mucho más difíciles de estudiar y es difícil que proporcionen una facilidad aceptable de codificación y decodificación.

Espacios lineales

Matriz generadora

Sean los vectores la base del espacio lineal . De acuerdo con la definición de base , cualquier vector puede representarse como una combinación lineal de vectores base: , o en forma matricial , como:

,

donde se llama matriz generadora del espacio lineal .

Esta relación establece una conexión entre los vectores de coeficientes y los vectores . Al enumerar todos los vectores de coeficientes , puede obtener todos los vectores . En otras palabras, la matriz genera un espacio lineal.

Matriz de cheques

Otra forma de definir espacios lineales es describirlos en términos de una matriz de verificación.

Sea  un subespacio lineal k-dimensional de un espacio n-dimensional sobre un campo finito y  sea un complemento ortogonal de . Entonces, según uno de los teoremas del álgebra lineal, la dimensión es . Por lo tanto, hay r vectores base en . Que la base esté en .

Entonces cualquier vector satisface el siguiente sistema de ecuaciones lineales :

O en forma matricial :

donde está la matriz de control.

El sistema reducido de ecuaciones lineales debe considerarse como un sistema de controles para todos los vectores del espacio lineal, por lo que la matriz se denomina matriz de control.

Formal definición

Un código lineal de longitud n y rango k es un subespacio lineal C de dimensión k del espacio vectorial , donde  es un campo finito de q elementos. Tal código con un parámetro q se llama código q-ario (por ejemplo, si q = 5, entonces este es un código 5-ario). Si q = 2 o q = 3, entonces el código es binario o ternario , respectivamente.

Un código lineal (bloque)  es un código tal que el conjunto de sus palabras de código forma un subespacio lineal bidimensional (llamémoslo ) en un espacio lineal bidimensional , isomorfo al espacio de vectores de bits .

Esto significa que la operación de codificación corresponde a la multiplicación del vector de bits original por una matriz no singular , denominada matriz generadora .

Sea  un subespacio ortogonal con respecto a , y  sea una matriz que define la base de este subespacio. Entonces para cualquier vector es cierto:

.

Propiedades y teoremas importantes

Distancia mínima y poder corrector

La distancia de Hamming ( métrica de Hamming ) entre dos palabras de códigoesel número de bits diferentes en las posiciones correspondientes, es decir, el número de "unidades" en el vector.

La distancia mínima del código de línea es el mínimo de todas las distancias Hamming de todos los pares de palabras clave.

El peso de un vector   es la distancia de Hamming entre este vector y el vector cero, en otras palabras, el número de componentes distintos de cero del vector.

Teorema 1:

La distancia mínima de un código de línea es igual al mínimo de los pesos de Hamming de las palabras de código distintas de cero:

Prueba:

La distancia entre dos vectores satisface la igualdad , donde  es el peso de Hamming del vector . Del hecho de que la diferencia de dos palabras de código cualesquiera de un código lineal es también una palabra de código de un código lineal, se sigue el enunciado del teorema:

La distancia mínima de Hamming es una característica importante de un código de bloque lineal. Define otra característica no menos importante: la capacidad correctiva :

, aquí los paréntesis angulares denotan redondeo "hacia abajo".

El poder de corrección determina cuál es el número máximo de errores en una palabra de código que se puede garantizar que el código corrija.

Vamos a explicar con un ejemplo. Supongamos que hay dos palabras de código A y B, la distancia de Hamming entre ellas es igual a 3. Si se transmitió la palabra A y el canal introdujo un error en un bit, se puede corregir, ya que incluso en este caso la palabra recibida está más cerca de palabra de código A que B. Pero si el canal introdujo errores de dos bits, el decodificador puede suponer que se transmitió la palabra B.

El número de errores detectados es el número de errores en los que el decodificador puede detectar una situación de error (y, por ejemplo, iniciar la retransmisión del mensaje). este numero es

.

Teorema 2 (sin demostración):

Si alguna columna de la matriz de verificación H de un código lineal (n, k) es linealmente independiente, entonces la distancia mínima del código es al menos d. Si hay d columnas linealmente dependientes, entonces la distancia mínima del código es exactamente d.

Teorema 3 (sin demostración):

Si la distancia mínima de un código lineal (n, k) es d, entonces cualquier columna de la matriz de verificación H es linealmente independiente y hay d columnas linealmente dependientes.

Códigos de Hamming

Históricamente, los " códigos de Hamming " deberían llamarse códigos de R. Fisher y se introdujeron en 1942 (Fisher RA The Theory of Confuding in Factor to Thr Theory). Los códigos de Hamming  son los códigos lineales más simples con una distancia mínima de 3, es decir, capaces de corregir un error. El código de Hamming se puede representar de tal manera que el síndrome

, donde  es el vector aceptado,

será igual al número de posición en el que ocurrió el error. Esta propiedad hace que la decodificación sea muy fácil.

Código Reed-Muller

El código Reed-Muller  es un código de bloque binario lineal. Con cierto método de construcción, puede ser sistemático. En general, el código Reed-Muller no es cíclico. Los códigos Reed-Muller vienen dados por los siguientes parámetros: para cualquier valor dey, llamado orden del código, menor que:

longitud de la palabra clave longitud de la parte de información longitud de la pieza de prueba distancia mínima de código

El código Reed-Muller se determina utilizando una matriz generadora que consta de vectores base, que se construye de acuerdo con la regla:

sea  ​​un vector, todos los componentes del cual son iguales a 1; sean  las filas de una matriz cuyas columnas son todos conjuntos binarios de longitud

El código Reed-Muller de orden th contiene vectores y todos los productos componentes o un número menor de estos vectores como base.

Método general para codificar códigos de línea

Un código lineal de longitud n con k símbolos de información es un subespacio lineal k-dimensional, por lo que cada palabra clave es una combinación lineal de los vectores base del subespacio :

.

O usando la matriz generadora:

, dónde

Esta relación es la regla de codificación según la cual la palabra de información se asigna al código.

Método general para detectar errores en código lineal

Cualquier código (incluido el no lineal) se puede decodificar utilizando una tabla regular, donde cada valor de la palabra recibida corresponde a la palabra transmitida más probable . Sin embargo, este método requiere el uso de tablas enormes ya para palabras de código de longitud relativamente pequeña.

Para códigos lineales, este método se puede simplificar significativamente. En este caso, para cada vector recibido , se calcula el síndrome . Dado que , donde  es la palabra clave y  es el vector de error, entonces . Luego, utilizando la tabla de síndromes, se determina un vector de error, con la ayuda de la cual se determina la palabra de código transmitida. En este caso, la mesa es mucho más pequeña que cuando se usa el método anterior.

Códigos cíclicos lineales

A pesar de que la corrección de errores en los códigos lineales ya es mucho más fácil que la corrección en la mayoría de los códigos no lineales, para la mayoría de los códigos este proceso sigue siendo bastante complicado. Los códigos cíclicos , además de una decodificación más sencilla, tienen otras propiedades importantes.

Un código cíclico es un código lineal con la siguiente propiedad: si es una palabra de código, entonces su permutación cíclica también es una palabra de código.

Las palabras de un código cíclico se representan convenientemente como polinomios. Por ejemplo, una palabra clave se representa como un polinomio . En este caso, el desplazamiento cíclico de la palabra clave es equivalente a multiplicar el polinomio por el módulo .

En adelante, salvo que se indique lo contrario, supondremos que el código cíclico es binario , es decir, ... puede tomar los valores 0 o 1 .

Polinomio generador

Se puede demostrar que todas las palabras de código de un código cíclico particular son múltiplos de cierto polinomio generador . El polinomio generador es un divisor .

Con la ayuda de un polinomio generador, la codificación se realiza mediante un código cíclico. En particular:

Códigos CRC

Los códigos CRC (comprobación de redundancia cíclica - verificación redundante cíclica) son códigos sistemáticos diseñados no para corregir errores, sino para detectarlos. Utilizan el método de codificación sistemática descrito anteriormente: la "suma de control" se calcula dividiendo por . Dado que no se requiere corrección de errores, la validación de la transmisión se puede realizar de la misma manera.

Así, la forma del polinomio g(x) especifica un código CRC específico. Ejemplos de los polinomios más populares:

nombre clave la licenciatura polinomio
CRC-12 12
CRC-16 dieciséis
CRC- CCITT dieciséis
CRC-32 32

Códigos BCH

Los códigos Bose-Chowdhury-Hockwingham (BCH) son una subclase de códigos cíclicos binarios. Su característica distintiva es la capacidad de construir un código BCH con una distancia mínima no inferior a la dada. Esto es importante porque, en términos generales, determinar la distancia mínima del código es una tarea muy difícil.

Matemáticamente, la construcción de códigos BCH y su decodificación utilizan la descomposición del polinomio generador en factores en el campo de Galois .

Códigos Reed-Solomon

Los códigos Reed-Solomon (códigos RS) son en realidad códigos BCH no binarios , es decir, los elementos del vector de código no son bits, sino grupos de bits. Los códigos Reed-Solomon son muy comunes y funcionan con bytes ( octetos ).

Ventajas y desventajas de los códigos de línea

+ Debido a la linealidad, para memorizar o enumerar todas las palabras del código, basta almacenar en la memoria del codificador o decodificador una parte significativamente menor de ellas, es decir, solo aquellas palabras que forman la base del espacio lineal correspondiente. Esto simplifica enormemente la implementación de dispositivos de codificación y decodificación y hace que los códigos lineales sean muy atractivos desde el punto de vista de las aplicaciones prácticas.

— Aunque los códigos lineales, por regla general, se adaptan bien a ráfagas de errores raras pero grandes , su eficiencia con errores frecuentes pero pequeños (por ejemplo, en un canal con AWGN ) es menos alta.

Evaluación del desempeño

La eficiencia de los códigos está determinada por la cantidad de errores que puede corregir, la cantidad de información redundante que debe agregarse y la complejidad de la implementación de la codificación y decodificación (tanto hardware como software ).

Códigos atados y perfectos de Hamming

Que exista un código de bloque binario con capacidad correctiva . Entonces se cumple la siguiente desigualdad (llamada cota de Hamming ):

.

Los códigos que satisfacen este límite de igualdad se dice que son perfectos . Los códigos perfectos incluyen, por ejemplo, los códigos de Hamming. Los códigos con gran poder correctivo que se usan a menudo en la práctica (como los códigos Reed-Solomon) no son perfectos.

Ganancia de energía

Cuando se transmite información a través de un canal de comunicación, la probabilidad de error depende de la relación señal/ruido en la entrada del demodulador, por lo que a un nivel de ruido constante, la potencia del transmisor tiene una importancia decisiva. En los sistemas satelitales y móviles, así como en otros tipos de comunicaciones, la cuestión del ahorro de energía es aguda. Además, en ciertos sistemas de comunicación (por ejemplo, el teléfono), las restricciones técnicas no permiten un aumento ilimitado de la potencia de la señal.

Dado que la codificación de corrección de errores permite la corrección de errores, su aplicación puede reducir la potencia del transmisor, dejando sin cambios la tasa de información. La ganancia de energía se define como la diferencia entre las relaciones s/n en presencia y ausencia de codificación.

Aplicación

Se aplican códigos de línea:

Literatura

Véase también