Código lineal
En teoría de codificación, un código lineal es un código de corrección de errores para el cual cualquier combinación lineal de palabras clave también es una palabra clave. Los códigos lineales se dividen tradicionalmente en códigos de bloque y códigos convolucionales, aunque los códigos turbo pueden verse como un híbrido de estos dos tipos. Los códigos lineales permiten algoritmos de codificación y decodificación más eficientes que otros códigos (cf. síndrome de decodificación).
Los códigos lineales se utilizan en la corrección de errores directos y se aplican en métodos para transmitir símbolos (por ejemplo, bits) en un canal de comunicaciones de modo que, si se producen errores en la comunicación, el destinatario de una comunicación pueda corregir o detectar algunos errores. bloque de mensajes. Las palabras de código en un código de bloque lineal son bloques de símbolos que se codifican utilizando más símbolos que el valor original que se va a enviar. Un código lineal de longitud n transmite bloques que contienen n símbolos. Por ejemplo, el código Hamming [7,4,3] es un código binario lineal que representa mensajes de 4 bits utilizando palabras de código de 7 bits. Dos palabras de código distintas se diferencian en al menos tres bits. Como consecuencia, se pueden detectar hasta dos errores por palabra de código, mientras que se puede corregir un solo error. Este código contiene 24=16 palabras en código.
Definición y parámetros
A código lineal de longitud n y dimensión k es un subespacio lineal C con dimensión k del espacio vectorial Donde es el campo finito con q elementos. Tal código se llama un q- código diario. Si q = 2 o q = 3, el código se describe como un código binario, o un Código ternario respectivamente. Los vectores en C se llaman codewords. El tamaño de un código es el número de palabras clave e iguales qk.
El peso de una palabra clave es el número de sus elementos que no son cero y el distancia entre dos palabras clave es la distancia Hamming entre ellos, es decir, el número de elementos en los que difieren. La distancia d del código lineal es el peso mínimo de sus codewords no cero, o equivalentemente, la distancia mínima entre las distintas palabras clave. Un código lineal de longitud n, dimensión k, y distancia d se llama un [n,k,dCódigo (o, más precisamente, código).
Queremos dar la base estándar porque cada coordenadas representa un "bit" que se transmite a través de un "canal ruidoso" con una pequeña probabilidad de error de transmisión (un canal simétrico binario). Si se utiliza alguna otra base, este modelo no se puede utilizar y la métrica Hamming no mide el número de errores en la transmisión, como queremos.
Generador y matrices de verificación
Como subespacio lineal , todo el código C (que puede ser muy grande) puede ser representado como el lapso de un conjunto de codewords (conocido como base en álgebra lineal). Estas palabras clave de base a menudo se collan en las filas de una matriz G conocida como matriz para el código C. Cuando G tiene la matriz de bloques , donde denota los matriz de identidad y P matriz, entonces decimos que G está en formulario estándar.
Una matriz H representando una función lineal cuyo núcleo C se llama matriz de verificación de C (o a veces una matriz de verificación de paridad). Equivalentemente, H es una matriz cuyo espacio nulo es C. Si C es un código con una matriz generadora G en forma estándar, Entonces es una matriz de verificación para C. El código generado por H se llama Código dual de C. Puede verificarse que G es un matriz, mientras que H es un matriz.
La linealidad garantiza que la distancia mínima de Hamming d entre una palabra de código c0 y cualquiera de las otras palabras de código c ≠ c0 es independiente de c0. Esto se deduce de la propiedad de que la diferencia c − c0 de dos palabras de código en C también es una palabra de código ( es decir, un elemento del subespacio C), y la propiedad de que d(c, c0) = d(c − c0, 0). Estas propiedades implican que
En otras palabras, para encontrar la distancia mínima entre las palabras de código de un código lineal, sólo sería necesario mirar las palabras de código distintas de cero. La palabra de código distinta de cero con el peso más pequeño tiene entonces la distancia mínima a la palabra de código cero y, por tanto, determina la distancia mínima del código.
La distancia d de un código lineal C también es igual al número mínimo de columnas linealmente dependientes de la matriz de verificación H.
Prueba: Porque... , que equivale a , donde es columna of . Quitar esos artículos con , esos con dependen linealmente. Por lo tanto, es al menos el número mínimo de columnas dependientes linealmente. Por otra parte, considere el conjunto mínimo de columnas dependientes linealmente Donde es el índice de columna. . Ahora considera el vector tales que si . Nota porque . Por lo tanto, tenemos , que es el número mínimo de columnas dependientes linealmente en . The claimed property is therefore proven.
Ejemplo: códigos Hamming
Como la primera clase de códigos lineales desarrollados con propósito de corrección de errores, los códigos Hamming han sido ampliamente utilizados en sistemas de comunicación digital. Para cualquier entero positivo , existe un Código de adelgazamiento. Desde , este código Hamming puede corregir un error de 1 bit.
Ejemplo: El código del bloque lineal con la matriz del generador siguiente y la matriz de verificación de paridad es un Código de adelgazamiento.
Ejemplo: códigos Hadamard
El código de Hadamard es un código lineal y es capaz de corregir muchos errores. El código Hadamard se puede construir columna por columna: el columna es los bits de la representación binaria del entero , como se muestra en el siguiente ejemplo. Código Hadamard tiene una distancia mínima y por lo tanto puede corregir errores.
Ejemplo: El código del bloque lineal con la siguiente matriz del generador es un Código de Hadamard: .
El código Hadamard es un caso especial del código Reed-Muller. Si tomamos la primera columna (la columna de todo cero) , tenemos código simple, que es el Código dual de código Hamming.
Algoritmo del vecino más cercano
El parámetro d está estrechamente relacionado con la capacidad de corrección de errores del código. La siguiente construcción/algoritmo ilustra esto (llamado algoritmo de decodificación vecino más cercano):
Entrada: A vector recibido V .
Producto: Una palabra clave dentro más cercana , si hay.
- Empezando con , repetir los siguientes dos pasos.
- Enumerar los elementos de la bola de (Hamming) radio alrededor de la palabra recibida , denotado .
- Para cada uno dentro , comprobar si dentro . Si es así, regresa. como la solución.
- Incremento . Fail sólo cuando por lo que la enumeración es completa y no se ha encontrado ninguna solución.
Decimos que un lineal es - corrección de terror si hay en la mayoría de una palabra clave , para cada dentro .
Notación popular
Los códigos en general son a menudo denotados por la carta C, y un código de longitud n y de rango k (es decir, tener n palabras clave en su base y k filas en sus matriz) se conoce generalmente como un (n, k) código. Los códigos de bloqueo lineales se denotan con frecuencia como [n, k, d] códigos, donde d se refiere a la distancia mínima Hamming del código entre cualquier dos palabras clave.
(La notación [n, k, d] no debe confundirse con la notación (n, Notación M, d) utilizada para indicar un código no lineal de longitud n, tamaño M (es decir, tener palabras de código M) y distancia mínima de Hamming d).
Enlace singleton
Lemma (Singleton bound): Cada linear [n,k,d] código C satisfies .
Un código C cuyos parámetros satisfacen k+d=n+1 se llama distancia máxima separable o MDS. Estos códigos, cuando existen, son en cierto sentido los mejores posibles.
Si C1 y C2 son dos códigos de longitud n y si hay una p permutación en el grupo simétrico Sn (c)1,...n) en C1 si y sólo si (cp.1),...p(n)) en C2Entonces decimos C1 y C2 son permutación equivalente. En mayor generalidad, si hay una matriz monomial que envía C1 isomorfa a C2 entonces decimos C1 y C2 son equivalente.
Lema: Cualquier código lineal es una permutación equivalente a un código que está en forma estándar.
Teorema de Bonisoli
Se define que un código es equidistante si y sólo si existe una d constante tal que la distancia entre dos palabras de código distintas del código sea igual a d. En 1984, Arrigo Bonisoli determinó la estructura de códigos lineales de un peso sobre campos finitos y demostró que cada código lineal equidistante es una secuencia de códigos Hamming duales.
Ejemplos
Algunos ejemplos de códigos lineales incluyen:
- Códigos de repetición
- Códigos de paridad
- Códigos cíclicos
- Códigos de Hamming
- Código Golay, ambas versiones binarias y ternarias
- Códigos polinomio, de los cuales los códigos BCH son un ejemplo
- Reed – Códigos Salomón
- Códigos Reed-Muller
- Códigos de geometría algebraica
- Códigos binarios de Goppa
- Códigos de paridad de baja densidad
- Códigos de expansión
- Códigos multidimensionales de verificación de paridad
- Códigos de letras
- Códigos Turbo
Generalización
También se han considerado espacios de adelgazamiento sobre alfabetos no de campo, especialmente sobre anillos finitos, sobre todo anillos Galois sobre Z4. Esto da lugar a módulos en lugar de espacios vectoriales y códigos lineales (identificados con submódulos) en lugar de códigos lineales. La métrica típica usada en este caso la distancia Lee. Hay una isometría gris entre (es decir, GF(2)2m) con la distancia Hamming y (también denotado como GR(4,m)) con la distancia Lee; su principal atracción es que establece una correspondencia entre algunos códigos "buenos" que no son lineales sobre como imágenes de códigos lineales de anillo de .
Más recientemente, algunos autores también se han referido a estos códigos sobre anillos simplemente como códigos lineales.