Lección 12: Codificación de Canal. Parte II Gianluca Cornetta, Ph.D. Dep. de Ingeniería de Sistemas de Información y Telecomunicación Universidad San Pablo-CEU Contenido Códigos de Bloque Lineales Detección y Corrección de Error 04/04/2013 © 2012 Gianluca Cornetta, Comunicaciones Digitales 2 Códigos de Bloque Lineales Un código de bloque lineal es una clase de códigos con control de paridad de tipo (n, k): La operación de codificación consiste en transformar un bloque de k dígitos de un alfabeto dado en un bloque codificado de n dígitos Cuando el alfabeto consiste de sólo dos elementos {0, 1}, el código se denomina binario Los mensajes de k bits (dentro de un conjunto de 2k secuencias) se denominan k-tuplas Los bloques de n bits forman 2n posibles secuencias denominadas n-tuplas La operación de codificación asigna de forma unívoca a cada una de las 2k k-tuplas una de las posibles 2n ntuplas 04/04/2013 © 2012 Gianluca Cornetta, Comunicaciones Digitales 3 Códigos de Bloque Lineales El conjunto Vn de las 2n n-tuplas define un espacio vectorial sobre el campo binario de dos elementos {0, 1} El campo binario tiene asociadas dos operaciones: suma módulo 2 y multiplicación Addition 00=0 01=1 10=1 11=0 Multiplication 00=0 01=0 10=0 11=1 La suma módulo 2 se indica indistintamente con el símbolo o con + Un subconjunto S de Vn es un subespacio si cumple con las siguientes condiciones: El vector formado por todos ceros pertenece a S La suma de dos vectores de S es también un elemento de S(es decir si Vi , Vj S Vk= Vi Vj S –propiedad de clausura) Un conjunto Vn de 2k n-tuplas es un código de bloque lineal si y solo si es un subespacio del espacio vectorial de todas las n-tuplas El objetivo de diseño de un código es: Minimizar el número de bits de redundancia para reducir el exceso de banda Aumentar la distancia entre los elementos del conjunto (es decir, el número de 0 y 1 que difieren) para aumentar la tolerancia a errores de transmisión 04/04/2013 © 2012 Gianluca Cornetta, Comunicaciones Digitales 4 Códigos de Bloque Lineales En general, un código (n, k) se puede generar fácilmente de forma tabular (lookup table) con una ROM en las que cada entrada se forma añadiendo a los k bits de mensaje, (n-k) bits de redundancia procurando cumplir con las propiedades del vector nulo y de clausura Cuando k es elevado este enfoque no es práctico y es preferible generar los códigos en vez de almacenarlos en una memoria Un conjunto {U} de 2k palabras de código es un subespacio vectorial k-dimensional del espacio vectorial binario n-dimensional por lo que es siempre posible encontrar una base (es decir, un conjunto ntuplas de linealmente independientes) de k n-tuplas V1,V2,…,Vk que puede generar todos los elementos de {U}, es decir: U m1V1 m2 V2 mk Vk Donde los mi ={0,1} (con i=1,…, k) son los dígitos del mensaje 04/04/2013 © 2012 Gianluca Cornetta, Comunicaciones Digitales 5 Códigos de Bloque Lineales Es posible definir una matriz kn G generadora del código: V1 v11 v12 v1n v v v2 n G V2 21 22 V v k k1 vk 2 vkn Por otro lado, el mensaje m es una matriz 1k, es decir, m=m1,m2,…, mk Codificar un mensaje m generando un código U equivale a realizar la siguiente operación: U=mG Por ejemplo, dada la siguiente matriz generadora: V1 1 1 0 1 0 0 G V2 0 1 1 0 1 0 V 1 0 1 0 0 1 3 Generar un código (6, 3) para el mensaje m=[1 1 0] equivale a: V1 G 1 1 0V2 1 V1 1 V2 0 V3 110100 011010 000000 101110 V 3 04/04/2013 © 2012 Gianluca Cornetta, Comunicaciones Digitales 6 Códigos de Bloque Lineales Un código de bloque lineal sistemático (n, k) es una correspondencia de un espacio k-dimensional a uno n-dimensional tal que parte de la secuencia generada coincide con los k bits del mensaje. Los (n-k) bits restantes son los bits de paridad La matriz generadora de un código sistemático es: p11 p G P | I k 21 pk1 p12 p22 p1,n k p2 , n k pk 2 pk , n k 1 0 0 0 1 0 0 0 1 P (de dimensiones k(n-k)) es la matriz de paridad, Ik es la matriz identidad kk y pij ={0,1} Un código formado por la n-tupla U=u1,u2,…, un que codifica un mensaje formado por la k-tupla m=m1,m2,…, mk se obtiene de la siguiente manera: u1 , u2 ,un m1 m2 p11 p mk 21 pk1 p12 p22 p1,n k p2 , n k pk 2 pk , n k 1 0 0 0 1 0 0 0 1 Donde: m p m2 p1i mk pki ui 1 1i mi n k 04/04/2013 for i 1,, n k for i n k 1,, n © 2012 Gianluca Cornetta, Comunicaciones Digitales 7 Códigos de Bloque Lineales Un vector de código sistemático puede expresarse como: U p1 p2 pnk m1 m2 mk parity bits Donde: message bits p1 m1 p11 m2 p21 mk pk1 p2 m1 p12 m2 p22 mk pk 2 pn k m1 p1,n k m2 p2,n k mk pk ,n k Por ejemplo, para el código un código (6, 3) del ejemplo anterior se obtiene: U m1 m2 1 1 0 m3 0 1 1 1 0 1 P 04/04/2013 parity bits message bits 1 0 0 0 1 0 m1 m3 m1 m2 m2 m3 m m m3 1 2 0 0 1 u u u6 u u u 4 5 2 1 3 I3 © 2012 Gianluca Cornetta, Comunicaciones Digitales 8 Códigos de Bloque Lineales En el proceso de decodificación se utiliza una matriz de control de paridad H Para cada matriz G kn existe una matriz H (n-k)n tal que las filas de G son ortogonales a las filas de H, es decir GHT=0 Donde: 0 es la matriz nula k(n-k) HT es la matriz transpuesta de H con dimensiones n(n-k) H I nk 1 0 I nk 0 | PT p11 PT p21 pk1 0 1 0 p12 p22 pk 2 1 p1,n k p2 , n k pk ,n k 0 0 U es un código generado por G si y sólo si UHT=0, de hecho: UH T p1 p1 Donde: 04/04/2013 p2 p2 pnk pnk 0 p1 m1 p11 m2 p21 mk pk1 p2 m1 p12 m2 p22 mk pk 2 pn k m1 p1,n k m2 p2,n k mk pk ,n k © 2012 Gianluca Cornetta, Comunicaciones Digitales 9 Códigos de Bloque Lineales Sea r=r1,r2,…,rn el vector recibido (es decir, una de las posibles 2n ntuplas) resultante de la transmisión de U=u1,u2,…,un (es decir, una de las posibles 2k n-tuplas), es decir r=U+e e=e1,e2,…,en es el patrón de error introducido por el canal, es decir, ei=1 si y sólo si ri ui (lo que se recibe es distinto de lo que se ha transmitido) Existen pues 2n-1 patrones de error potenciales en el espacio de 2n ntuplas El síndrome S de r es definido como S=rHT Por consiguiente el síndrome es el resultado de un control de paridad realizado sobre r para determinar si el vector recibido pertenece al conjunto de códigos utilizados Si el control tiene éxito positivo S=0 Si r contiene errores detectables S tiene algunos valores no nulos Si r contiene errores corregibles S tiene algunos valores no nulos que permiten identificar el patrón de error 04/04/2013 © 2012 Gianluca Cornetta, Comunicaciones Digitales 10 Códigos de Bloque Lineales Sabiendo que r=U+e =UHT+eHT=0+eHT=eHT se obtiene S=(U+e)HT El test del síndrome da el mismo resultado tanto si se realiza sobre el vector corrupto recibido r como si se realiza sobre el patrón de error e que lo causado Es interesante evidenciar dos importantes propiedades de la matriz H: Ninguna columna de H puede ser nula, en caso contrario un error en la posición correspondiente a la columna nula no afecta S y por tanto es indetectable Todas las columnas de H deben ser únicas, en caso contrario los error en las posiciones correspondientes a las columnas idénticas serían indetectables 04/04/2013 © 2012 Gianluca Cornetta, Comunicaciones Digitales 11 Códigos de Bloque Lineales Existe una correspondencia unívoca entre código corrupto y patrón de error, por tanto, el test del síndrome no sólo permite detectar errores sino también corregirlos Es posible organizar las 2n n-tuplas que representan los vectores recibidos en forma matricial Esta matriz se denomina matriz estándar y tiene las características siguientes: La primera fila contiene todos los códigos empezando por el código nulo U1 La primera columna contiene todos los posibles patrones de error (U1 es el código nulo pero puede considerarse también como el patrón de error e1, el patrón que representa la recepción sin errores, es decir r=U) La matriz contiene todas las 2n n-tuplas del espacio Vn, cada n-tupla aparece sólo en una posición (ninguna falta y ninguna es replicada) 2k n-tuplas Coset leaders 04/04/2013 U1 e 2 e3 ej e 2nk U2 U 2 e2 U 2 e3 U2 e j U 2 e 2 nk Uj U j e2 U j e3 Uj ej U j e 2 nk U 2k U 2k e 2 U 2k e3 2n/2k=2n-k cosets U 2k e j U 2k e 2nk © 2012 Gianluca Cornetta, Comunicaciones Digitales 12 Códigos de Bloque Lineales El algoritmo de decodificación prueba a sustituir un código corrupto recibido (una n-tupla cualquiera excepto las de la primera fila) con un código valido que se encuentra en la primera posición de la columna correspondiente Por ejemplo si se recibe Ui + ej y el error ej causado por el canal es líder del coset, el vector recibido será decodificado correctamente como Ui Un coset es un conjunto de números que tienen una característica en común, el mismo síndrome Cada coset es identificado unívocamente por su síndrome S, por lo que S puede utilizarse para estimar el patrón de error Si es el líder del coset (es decir, el patrón de error de los elementos del j-ésimo coset), entonces Ui + ej es una n-tupla de este coset El síndrome de esta n-tupla puede escribirse como: S Ui e j HT Ui HT e j HT 0 e j HT e j HT 04/04/2013 © 2012 Gianluca Cornetta, Comunicaciones Digitales 13 Códigos de Bloque Lineales Para corregir un error se sigue el procedimiento siguiente: Calcular el síndrome de r utilizando S=rHT Encontrar el líder del coset ej cuyo síndrome es igual a rHT Se asume que ej es el patrón de error generado por el canal Obtener el código esperado realizando la operación U = r + ej En aritmética módulo dos suma y resta son equivalentes por lo que esta operación equivale a restar el error ej al mensaje r recibido En el caso de un código (6, 3) el conjunto Vn tiene 64 n-tuplas,por lo que, una vez acotados los 6 posibles patrones de error sencillo, todavía queda la posibilidad de poder corregir un patrón adicional 000000 000001 000010 000100 001000 010000 100000 010001 110100 110101 110110 110000 111100 100100 010100 100101 04/04/2013 011010 011011 011000 011110 010010 001010 111010 001011 101110 101111 101100 101010 100110 111110 001110 111111 101001 101000 101011 101101 100001 111001 001001 111000 011101 011100 011111 011001 010101 001101 111101 001100 110011 110010 110001 110111 111011 100011 010011 100010 © 2012 Gianluca Cornetta, Comunicaciones Digitales 000111 000110 000101 000011 001111 010111 100111 010110 14 Códigos de Bloque Lineales Dada una matriz generadora G de un código (n, k), la tabla que permite estimar el patrón de error a partir del síndrome se construye a partir de la relación Sj=ejHT con j=1,…,2n-k Cada fila de la tabla contiene el síndrome Sj y su respectivo patrón de error ej El decodificador calcula el síndrome S=rHT relativo al vector recibido r El decodificador busca en la tabla un Sj tal que Sj=S para determinar el patrón de error ej que lo ha generado ej=ê es una estimación del error El decodificador suma ê a r (una suma módulo 2 equivale a una resta) para obtener una estimación Û del código transmitido: ˆ r eˆ U e eˆ U e eˆ U Si el error estimado es igual al error real (es decir, e=ê) entonces Û=U; en caso contrario la estimación es equivocada y el error indetectable En el caso de códigos pequeños como el (6, 3) la implementación del decodificador es muy sencilla. Por ejemplo, el código considerado en los ejemplos anteriores tiene un síndrome S=rHT igual a: S r1 04/04/2013 r2 r3 r4 r5 1 0 0 r6 1 0 1 0 1 0 1 1 0 0 0 s1 r1 r4 r6 1 s r r r 0 2 2 4 5 1 s3 r3 r5 r6 1 © 2012 Gianluca Cornetta, Comunicaciones Digitales 15 Códigos de Bloque Lineales 04/04/2013 © 2012 Gianluca Cornetta, Comunicaciones Digitales 16 Detección y Corrección de Error No todos los códigos recibidos pueden ser detectados correctamente Se define peso de Hamming w(U) del código U el número de elementos de U no nulos Se define distancia de Hamming d(U,V) entre dos vectores U y V el número de elementos por los que difieren, es decir: U 100101101 d U, V 6 V 011110100 Observe que U+V=111011001 es un vector tal que los elementos en las posiciones en las que U y V difieren valen 1 Por construcción resulta que d(U,V)= w(U+V) Asimismo resulta que w(U) =d(U,0) La mínima distancia de Hamming de un conjunto de códigos caracteriza la robustez del mismo (es decir su capacidad de detectar y corregir errores) Si U y V son palabras de código de un espacio Vn también está W=U+V en Vn, por tanto: d(U,V)= w(U+V) = w(W) La distancia mínima dmin puede calcularse simplemente observando el peso de cada elemento del conjunto (excepto el vector nulo) 04/04/2013 © 2012 Gianluca Cornetta, Comunicaciones Digitales 17 Detección y Corrección de Error Para detectar cuál es el código recibido, el detector aplica el algoritmo de máxima verosimilitud (maximum likelihood) sobre el vector recibido r: Pr | Ui max Pr | U j U j Para un canal binario simétrico (Binary Symmetric Channel –BSC) la verosimilitud P(r|Ui) es inversamente proporcional a la distancia de Hamming entre r y Ui El decodificador escoge Ui si y sólo si: d r, Ui min d r, U j U j El decodificador determina la distancia de Hamming entre r y todos los posibles códigos Uj y selecciona Ui tal que: d r, Ui d r, U j for i, j 1,, M and i j 04/04/2013 © 2012 Gianluca Cornetta, Comunicaciones Digitales 18 Detección y Corrección de Error Transmito U y recibo r1. El vector recibido cae en la región de decisión de U por lo que el decodificador detecta este código Si r1 es el resultado de un error sencillo la estimación realizada es correcta, pero si r1 es el resultado de un error cuádruple la estimación es incorrecta Un error quíntuple hace que el símbolo estimado es V (es decir, un símbolo correcto) por lo que el error es indetectable En este ejemplo la distancia entre los dos códigos válidos (U y V) es dmin=5, y es posible detectar y corregir hasta errores dobles 04/04/2013 © 2012 Gianluca Cornetta, Comunicaciones Digitales 19 Detección y Corrección de Error La máxima capacidad de corrección de error t es definida como: d 1 t min 2 Un código de bloque lineal (n, k) con capacidad de corregir errores de clase t puede corregir también un único error de clase t +1 Un código de bloque lineal que puede corregir sólo hasta errores de clase t se denomina código perfecto La probabilidad PM de error de mensaje en un canal binario simétrico con probabilidad de transición (es decir, probabilidad de error de bit p) es: PM n nj p 1 p j n j j t 1 Se trata de un valor limitado superiormente que se vuelve igual al límite superior en el caso de decodificadores que sólo detectan hasta errores de clase t (bounded distance decoders) La probabilidad de error de bit PB es: 1 PB n 04/04/2013 n j nj p j 1 p j t 1 n j © 2012 Gianluca Cornetta, Comunicaciones Digitales 20 Detección y Corrección de Error Un código de bloque con distancia mínima de Hamming dmin garantiza la capacidad de detectar hasta errores de clase e: e d min 1 En un espacio de 2n n-tuplas existen 2n-1 posibles patrones de error Si el vector recibido es igual a uno de los posibles códigos válidos el error es indetectable, por tanto existen 2k-1 posibles patrones de errores indetectables El número de errores detectables es (2n-1) - (2k-1) =2n-2k Se define con Aj el número de palabras de código de peso j de un código de bloque lineal (n, k) A0,A1 ,…,An representan las distribuciones de pesos del código Si el código se utiliza para detectar errores en canales binarios simétricos, la probabilidad de error indetectable es: n Pnd A j p j 1 p n j j 1 Si la distancia mínima del código es dmin, los valores A1 ,…,Admin-1 son nulos 04/04/2013 © 2012 Gianluca Cornetta, Comunicaciones Digitales 21 Detección y Corrección de Error Es posible buscar una solución de compromiso entre el máximo t de un código y su capacidad de corregir errores Un código de bloque lineal con distancia mínima de Hamming dmin puede corregir simultáneamente errores y detectar simultáneamente errores ( ) si: d min 1 Cuando ocurre un número de errores menor o igual a t, el código puede detectarlos y corregirlos Cuando ocurre un número de errores superior a t e inferior a e + 1, el código puede detectarlos pero sólo puede corregir un subconjunto de ellos Por ejemplo, si dmin= 7 + = 6, por tanto existen las siguientes posibilidades: Detect () 3 4 5 6 04/04/2013 Correct () 3 2 1 0 © 2012 Gianluca Cornetta, Comunicaciones Digitales 22 Detección y Corrección de Error Un detector puede ser diseñado con la capacidad de cancelar la recepción de un símbolo en el caso de ambigüedad o de malfuncionamiento transitorio del canal de comunicación Estos tipos de canal se caracterizan por un alfabeto de entrada de Q símbolos y por uno de salida de Q + 1 símbolos El símbolo adicional es el indicador de cancelación (erasure flag) Cuando un detector realiza un error de símbolo, necesita dos parámetros para corregirlo: la posición del error y el valor correcto del símbolo (en el caso de símbolos binarios sólo la posición) Si el detector declara un símbolo como cancelado, aunque el valor correcto del símbolo no se conoce a priori, la posición del símbolo cancelado es sabida La decodificación de códigos cancelados puede ser más sencilla de la corrección de errores Asumiendo que sólo haya símbolos cancelados, un código con distancia mínima de Hamming dmin puede corregir los símbolos cancelados si : d min 1 d min 1 Esta condición es mucho más ventajosa de la de corrección de error: t(dmin -1)/2 Asumiendo que haya símbolos cancelados y símbolos erróneos, un código con distancia mínima de Hamming dmin puede corregir todos los símbolos cancelados y erróneos si : d min 2 1 El algoritmo de corrección es el siguiente: Se sustituyen las posiciones canceladas con ceros y se decodifica el código Se sustituyen las posiciones canceladas con unos y se decodifica el código De los dos valores decodificados se elige el que lleva a un mínimo número de correcciones en las posiciones restantes 04/04/2013 © 2012 Gianluca Cornetta, Comunicaciones Digitales 23