El propósito de la teoría de codificación de canales es encontrar códigos que transmitan rápidamente, contengan muchas palabras de código válidas y puedan corregir o al menos detectar muchos errores. Si bien no se excluyen mutuamente, el desempeño en estas áreas es una compensación. Por lo tanto, diferentes códigos son óptimos para diferentes aplicaciones. Las propiedades necesarias de este código dependen principalmente de la probabilidad de que ocurran errores durante la transmisión. En un CD típico, el deterioro es principalmente polvo o arañazos.
Los CD utilizan codificación Reed-Solomon entrelazada para distribuir los datos sobre el disco.
Aunque no es un código muy bueno, un código de repetición simple puede servir como un ejemplo comprensible. Supongamos que tomamos un bloque de bits de datos (que representan el sonido) y lo enviamos tres veces. En el receptor examinaremos las tres repeticiones poco a poco y votaremos por mayoría. El giro en esto es que no solo enviamos los bits en orden. Los intercalamos. El bloque de bits de datos se divide primero en 4 bloques más pequeños. Luego pasamos por el bloque y enviamos un bit desde el primero, luego el segundo, etc. Esto se hace tres veces para extender los datos sobre la superficie del disco. En el contexto del código de repetición simple, esto puede no parecer efectivo. Sin embargo, se conocen códigos más potentes que son muy eficaces para corregir el error de «explosión» de un rasguño o una mancha de polvo cuando se utiliza esta técnica de entrelazado.
Otros códigos son más apropiados para diferentes aplicaciones. Las comunicaciones en el espacio profundo están limitadas por el ruido térmico del receptor, que es más de naturaleza continua que de naturaleza explosiva. Del mismo modo, los módems de banda estrecha están limitados por el ruido, presente en la red telefónica y también se modelan mejor como una perturbación continua. Los teléfonos celulares están sujetos a un rápido desvanecimiento. Las altas frecuencias utilizadas pueden causar un desvanecimiento rápido de la señal incluso si el receptor se mueve unos pocos centímetros. Una vez más, hay una clase de códigos de canal que están diseñados para combatir el desvanecimiento.
Código lineareditar
El término teoría de codificación algebraica denota el subcampo de teoría de codificación donde las propiedades de los códigos se expresan en términos algebraicos y luego se investigan más a fondo.
La teoría de codificación algebraica se divide básicamente en dos tipos principales de códigos:
- Códigos de bloque lineales
- Códigos convolucionales
Analiza las siguientes tres propiedades de un código, principalmente:
- Longitud de la palabra de código
- Número total de palabras de código válidas
- La distancia mínima entre dos palabras de código válidas, utilizando principalmente la distancia de Hamming, a veces también otras distancias como la distancia de Lee
Códigos de bloque lineareditar
Los códigos de bloque linear tienen la propiedad de linealidad, es decir, la suma de dos palabras de código cualesquiera es también y se aplican a los bits de origen en bloques, de ahí el nombre de códigos de bloque lineales. Hay códigos de bloque que no son lineales, pero es difícil probar que un código es bueno sin esta propiedad.
Los códigos de bloques lineales se resumen por sus alfabetos de símbolos (por ejemplo, binarios o ternarios) y parámetros (n,m,dmin) donde
- n es la longitud de la palabra de código, en símbolos,
- m es el número de símbolos de origen que se utilizarán para codificar a la vez,
- dmin es la distancia mínima de hamming para el código.
Hay muchos tipos de códigos de bloque lineales, como los códigos cíclicos
- (p. ej., Códigos Hamming)
- Códigos de repetición
- Códigos de paridad
- Códigos polinómicos (por ejemplo, códigos BCH)
- Códigos Reed–Solomon
- Códigos geométricos algebraicos
- Códigos Reed–Muller
- Códigos perfectos
Los códigos de bloque están vinculados al problema de embalaje de esfera, que ha recibido cierta atención a lo largo de los años. En dos dimensiones, es fácil de visualizar. Toma un montón de centavos sobre la mesa y empújalos juntos. El resultado es un patrón hexagonal como un nido de abejas. Pero los códigos de bloque dependen de más dimensiones que no se pueden visualizar fácilmente. El poderoso código Golay (24,12) utilizado en las comunicaciones en el espacio profundo utiliza 24 dimensiones. Si se usa como código binario (que normalmente es), las dimensiones se refieren a la longitud de la palabra de código como se definió anteriormente.
La teoría de la codificación utiliza el modelo de esfera N-dimensional. Por ejemplo, cuántos centavos se pueden empacar en un círculo en una mesa, o en 3 dimensiones, cuántos mármoles se pueden empacar en un globo terráqueo. Otras consideraciones introduzca la elección de un código. Por ejemplo, el embalaje hexagonal en la restricción de una caja rectangular dejará espacio vacío en las esquinas. A medida que las dimensiones se hacen más grandes, el porcentaje de espacio vacío se hace más pequeño. Pero en ciertas dimensiones, el embalaje utiliza todo el espacio y estos códigos son los llamados códigos «perfectos». Los únicos códigos perfectos útiles y no triviales son los códigos Hamming distance – 3 con parámetros satisfactorios (2r – 1, 2r – 1-r, 3), y los códigos Golay binarios y ternarios.
Otra propiedad de código es el número de vecinos que puede tener una sola palabra de código.Una vez más, considere los centavos como un ejemplo. Primero empacamos los centavos en una cuadrícula rectangular. Cada centavo tendrá 4 vecinos cercanos (y 4 en las esquinas que están más lejos). En un hexágono, cada centavo tendrá 6 vecinos cercanos. Cuando aumentamos las dimensiones, el número de vecinos cercanos aumenta muy rápidamente. El resultado es que el número de formas en que el ruido hace que el receptor elija un vecino (por lo tanto, un error) también aumenta. Esta es una limitación fundamental de los códigos de bloque, y de hecho de todos los códigos. Puede ser más difícil causar un error a un solo vecino, pero el número de vecinos puede ser lo suficientemente grande como para que la probabilidad total de error realmente sufra.
Las propiedades de los códigos de bloque lineal se utilizan en muchas aplicaciones. Por ejemplo, la propiedad de singularidad syndrome-coset de los códigos de bloque lineal se utiliza en la conformación de enrejado, uno de los códigos de conformación más conocidos.
Códigos convolucionaleseditar
La idea detrás de un código convolucional es hacer que cada símbolo de palabra de código sea la suma ponderada de los diversos símbolos de mensaje de entrada. Esto es como la convolución utilizada en los sistemas LTI para encontrar la salida de un sistema, cuando se conoce la entrada y la respuesta de impulso.
Así que generalmente encontramos la salida del codificador convolucional del sistema, que es la convolución del bit de entrada, en comparación con los estados del codificador de convolución, registros.
Fundamentalmente, los códigos convolucionales no ofrecen más protección contra el ruido que un código de bloque equivalente. En muchos casos, generalmente ofrecen una mayor simplicidad de implementación sobre un código de bloque de igual potencia. El codificador es generalmente un circuito simple que tiene memoria de estado y alguna lógica de retroalimentación, normalmente puertas XOR. El decodificador se puede implementar en software o firmware.
El algoritmo de Viterbi es el algoritmo óptimo utilizado para decodificar códigos convolucionales. Hay simplificaciones para reducir la carga computacional. Se basan en buscar solo los caminos más probables. Aunque no son óptimos, generalmente se ha encontrado que dan buenos resultados en entornos con poco ruido.
Los códigos convolucionales se utilizan en módems de banda sonora (V. 32, V. 17, V. 34) y en teléfonos móviles GSM, así como en dispositivos de comunicación satelitales y militares.