d, entonces podemos detectar y corregir los errores que afecten a t bits de cada codeword, siendo : As si la distancia de un cdigo es 5 entonces podemos detectar y corregir errores en 2 bits.
entonces :
c = ( m1 m2 ..........mk ) * G = ( m1 m2 ..........mk qk+1 qk+2 .............qn ) Luego se evidencia que el codeword est formado po k bits de nuestro mensaje y n-k bits para el testeo. Sea una matriz generadora : donde se observa que I es de 2 x 2 luego k=2 y n=8, con esto M=2k=22=4 codewords que forman el cdigo. Para obtenerlo probamos con todas las combinaciones posibles : m =( 0 0 ) => c0 =( 0 0 0 0 0 0 0 0 ) m =( 0 1 ) => c1=( 0 1 1 1 1 1 0 0 ) m =( 1 0 ) => c2 =( 1 0 0 1 1 1 1 1 ) m =( 1 1 ) => c0 =( 1 1 1 0 0 0 1 1 ) Se puede observar que la distancia de este cdigo es d=5 y por tanto d=2*t+1 => t=2, luego se pueden detectar y corregir 2 bits errneos. Veamos cmo se detectan y corrigen estos errores. Para ello obtenemos la matriz nula de la siguiente manera : Si G = ( Ik, P ) entonces H = ( PT , In-k ) de forma que si P es de ( k x (n-k) ) Ik de ( k x k ), entonces PT es de ( (n-k) x k ) obligando a In-k a ser de ( (n-k) x (n-k) ) y por tanto H es de ( (n-k) x n ).Pues bien se puede comprobar que G * HT = 0 ( k x (n-k) ). Veamos un ejemplo : Sea
Se observa que
s = m * G * HT pero como G * HT = 0 entonces : s=m*0=0 luego se observa que el sndrome de un codeword es nulo. Imaginemos ahora que el vector transmitido es el codeword c y el recibido es c ms un error e, osea r = c + e, calculemos el sndrome de r : s = r * HT = ( c + e ) * HT = c * HT + e * HT = e * HT 0 Luego, cuando el sndrome de un vector recibido no es nulo, entonces, hemos detectado un error. Una vez detectado, la correccin se obtiene haciendo : c=r+e como sabemos que podemos corregir t bits errneos del codeword como mximo, conocemos el tipo de errores que podemos corregir y los sndromes que daran a priori por lo que podemos identificar un sndrome con un error. El sndrome lo obtenemos de s = r * HT miramos en una tabla a qu error corresponde y corregimos el vector mediante c = r + e. Veamos todo con un ejemplo. Sea la matriz generadora de donde podemos obtener k=2, n=5 y M=4, dichos vectores son : c0 = ( 0 0 0 0 0 ) c1 = ( 1 0 1 1 0 ) c2 = ( 0 1 0 1 1 ) c3 = ( 1 1 1 0 1 ) Tambin podemos obtener H :
La distancia del cdigo es d=3=2*t+1 => t=1 luego seremos capaces de detectar errores de 1 bit. Por ejemplo en el primer bit por la izquierda : c0 codeword recibido 00000 10000 c1 10110 00110 c2 01011 11011 c3 11101 01101 sndrome 000 110
donde e = ( 1 0 0 0 0 )
los dems posibles errores de un bit y sus sndromes se pueden ver el la siguiente tabla :
c0 codeword recibido recibido recibido recibido 00000 01000 00100 00010 00001
Observamos que si el error se ha cometido en un bit, el sndrome identifica unvocamente el error cometido. Por ejemplo imaginemos que hemos recibido el vector r = ( 0 1 0 0 1 )
Vamos a la tabla y vemos que el sndrome calculado se corresponde con error en el segundo bit por la derecha, osea, e = ( 0 0 0 1 0 ) luego el codeword recuperado ser : c=e+r=(01011)
p( )= - multiplicamos por :
2
+ +1=0
2
= +1
= =
= +1 = +1
2
ste ser :
2
p(x) = ( x+1 ) ( x+ ) ( x+
Con el polinomio generatriz g(x) se puede obtener la matriz generatriz G, veamos cmo con un ejemplo. Sea g(x)= x4+x3+x2+1 supongamos un cdigo (7,3), pues las filas de G vienen dadas por la frmula : fila( j ) = xn-j + rn-j (x) 1<= j <= k donde rj (x) es el resto de dividir xj entre g(x). Para nuestro ejemplo :
fila( 2 ) = x5 + r5 (x)
Siendo
En el caso de cdigos Reed-Solomon el polinomio generatriz g(x) es del tipo : Sean las races del polinomio generatriz g(x) 1, , 2, 3 ,definidos sus coeficientes en un campo finito GF(23) por lo que k=3 y sea el polinomio que define la base x3+x+1 cuya raz primitiva es . Veamos qu tipo de cdigo define esto y como se codifica, detecta y corrige errores : El polinomio x3+x+1 tiene por raz por lo que 3+ +1=0 de aqu obtenemos que la base llegar como mximo hasta 2 ya que 3 se puede poner en funcin de elementos de menor grado porque - 3= 3= +1, luego obtenemos que los pesos son ( 2 1) que nos indica que codificamos los smbolos con tres bits. 3= +1 multiplicamos por : 4= 2+ multiplicamos por y operamos : 5= 3+ 2= 2+ +1 multiplicamos por y operamos : 6= 3+ 2+ = +1+ 2+ = 2+1
multiplicamos por : 7= 3+ = +1+ =1 multiplicamos por : 8= multiplicamos por : 9= multiplicamos por : y as sucesivamente.
10 2
= 3= +1
; 3+ 2= +1+ 2=
g(x)=(x2+ 3x+ ) (x2+ 5x+ 5) = x4+ 5x3+ 5x2+ 3x3+ 8x2+ 8x+ x2+ 6 x+ 6 g(x)=x4+( 5+ 3)x3+( 5+ 8+ )x2+( 8+ 6)x+ 5+ 3= 2+ +1+ +1= 5+ 8+ = 5+ + = 8+ 6= + 2+1=
5 5 2 6
bueno ya tenemos nuestro polinomio generatriz de grado m=4 por tanto m=n-k => n=7 y la distancia del cdigo ser d=m+1=4+1=5.Se trata de un cdigo (7,3) pero ahora son smbolos y no bits, esto es, cada codeword es de 7 smbolos, de los cuales 3 smbolos son el mensaje que interesa codificar, cada smbolo es de 3 bits segn se obtiene de los pesos ( 2 1) por tanto, cada codeword consta de 7x3=21 bits.