reed-solomon error correction adiciona informação redundante na mensagem original –bytes de...

29
Reed-Solomon Error Correction Reed-Solomon Error Correction Adiciona informação redundante na mensagem original Bytes de paridade Permite que o receptor detecte e corrija erros que possam ter ocorridos durante a transmissão TT083 – Conceitos de Televisão

Upload: internet

Post on 22-Apr-2015

110 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Reed-Solomon Error Correction Reed-Solomon Error Correction

• Adiciona informação redundante na mensagem original– Bytes de paridade

• Permite que o receptor detecte e corrija erros que possam ter ocorridos durante a transmissão

TT083 – Conceitos de Televisão

Page 2: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Códigos Reed SolomonCódigos Reed Solomon

• Código: RS(n,k)– n: Comprimento do bloco em símbolos– k: Símbolos de dados– n – k: símbolos de paridade = 2t– t: Número máximo de símbolos com erros que podem ser

corrigidos– m: número de bits por símbolo

Page 3: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Campo de GaloisCampo de Galois

• Elementos do campo de Galois– Baseados no elemento primitivo, denotados por

é normalmente escolhido como 2

– 0, 0, 1, 2, …, N-1

• N=2m – 1

– Também conhecido como GF(2m)• m = 4 GF(16)

• m = 8 GF(256)

– Elementos podem ser mostrados na forma de polinômio• am-1xm-1 + … + a1x +a0

– Coeficientes am-1 até a0 podem ser 0 ou 1

– GF(16): a3x3 + a2x2 + a1x + a0

• a3a2a1a0 correspondem aos valores 0000 até 1111

Page 4: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Campo de GaloisCampo de Galois

• Adição/Subtração (XOR)– (am-1xm-1 + … + a1x +a0) + (bm-1xm-1 + … + b1x +b0) = cm-1xm-1 + … + c1x +c0

• ci = ai + bi

– ci = 0 para ai = bi

– ci = 1 para ai bi

– Ex.: (x3 + x) + (x3 + x2 + 1)• 1010 (10) +• 1101 (13)• 0111 (7)• x2 + x1 + x

Page 5: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Campo de GaloisCampo de Galois

• Polinômio gerador de campo– Polinômio primitivo, p(x) de ordem m

• Ex.: GF(16)– p(x) = x4 + x + 1

• Multiplicação e divisão– (x3 + x)(x3 + x2 + 1) = x6 + x5 + x3 + x4 + x3 + x = x6 + x5 + x4 + x

– Para completar, o resultado tem que ser dividido por p(x)x6 x5 x4 x3 x2 x1 x0

Dividendo 1 1 1 0 0 1 0

Divisor x2 1 0 0 1 1

1 1 1 1 1

Divisor x 1 0 0 1 1

1 1 0 0 0

Divisor 1 1 0 0 1 1

1 0 1 1 = x3 + x + 1

– Divisão = Multiplicação pelo inverso do divisor

Page 6: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Construindo um código Reed-SolomonConstruindo um código Reed-Solomon

• Polinômio gerador de código– g(x) = (x + 0)(x + 1)…(x + 2t-1)– Exemplo baseado num código (15,11)

• g(x) = (x + 0) (x + 1) (x + 2) (x + 3) = (x + 1) (x + 2) (x + 4) (x + 8)

= x4 + 15x3 + 3x2 + x + 12

• Reed-Solomon Encoding– Mensagem

• Polinômio M(x)

– M(x) = Mk-1xk-1 + ...+ M1x + M0

– Palavra de Código• Polinômio T(x)

– T(x) = M(x) xn-k +r(x)

– Base para correção de erro• M(x) xn-k = g(x) q(x) + r(x)

• M(x) xn-k + r(x) = g(x) q(x)

)(

)()(

)(

)(

xg

xrxq

xg

xxM kn

Page 7: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Construindo um código Reed-Solomon (Cont.)Construindo um código Reed-Solomon (Cont.)

• Exemplo– Mensagem: 11 símbolos de 4 bits para um código (15, 11)

• 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11

– Representação polinomial• x10 + 2x9 + 3x8 + 4x7 + 5x6 + 6x5 + 7x4 + 8x3 + 9x2 + 10x + 11

– Mensagem é multiplicada por x4 (M(x) xn-k)• M(x)x4 =x14 +2x13 +3x12 +4x11 +5x10 +6x9 +7x8 +8x7 +9x6 +10x5 +11x4

– Esse polinômio é dividido por g(x) = x4 + 15x3 + 3x2 + x + 12

Page 8: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Construindo um código Reed-Solomon (Cont.)Construindo um código Reed-Solomon (Cont.)

• M(x) x4 = (x14 + 2x13 + 3x12 + 4x11 + 5x10 + 6x9 + 7x8 + 8x7 + 9x6 + 10x5 + 11x4) • g(x) = x4 + 15x3 + 3x2 + x + 12

• Produz um resto r(x) = 3x3 + 3x2 + 12x + 12

• T(x) = M(x) xn-k +r(x) = x14 +2x13 +3x12 +4x11 +5x10 +6x9 +7x8 +8x7 +9x6 +10x5 +11x4 +3x3 +3x2 +12x +12

)()()()( xrxgxqxxM kn

)(

)()(

)(

)(

xg

xrxq

xg

xxM kn

Page 9: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

0010 (2)1111 (15)1101 (13) OPERAÇÃO “OU EXCLUSIVO”

+0 0 00 1 11 0 11 1 0

Resultados da adição de 2 campos de elementos. Resultados da adição de 2 campos de elementos.

ADIÇÃO“OU EXCLUSIVO”

GF(16) GF(16) P(x)= xP(x)= x44+x++x+11

G(x)=xG(x)=x44 + 15x + 15x3 3 + 3x+ 3x2 2 + x + 12+ x + 12

Exemplo anterior: x14 x13 x12 x11 x10 x9.......... 1 2 3 4 5 6 ...........x10 1 15 3 1 12 0 13 0 5 9 6 . . . . . .

Page 10: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Resultados da MULTIPLICAÇÃO de 2 campos de Resultados da MULTIPLICAÇÃO de 2 campos de elementos. elementos.

GF(16) GF(16) P(x)= xP(x)= x44+x++x+11

G(x)=xG(x)=x44 + 15x + 15x3 3 + 3x+ 3x2 2 + x + 12+ x + 12

13 x 3 = (1 1 0 1 ) . (0 0 1 1) = (x3 +x2+1).(x+1) =(x4+2x3+ x2+x+1)Divide-se por p(x) x4 x3 x2 x1 x0

1 0 1 1 1 (14) 1 0 0 1 1 (p(x)) 0 1 0 0 (4)

Para a multiplicação de 2 campos, multiplica-se primeiramente os dois polinômios, A soma dos fatores deve respeitar a lógica Booleana onde 1 1=0, 0 0=0, logo neste Caso x3 + x3 =0, depois divide-se pelo polinômio P(x).

Page 11: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Teoria de correção de erroTeoria de correção de erro

• Introdução de erros– R(x) = T(x) + E(x)

• Onde E(x) = En-1xn-1 + ... + E1x + E0

– Coeficientes En-1 ... E0 valores de erro de m bits representado por GF(2m)

• Se mais que t = (n-k)/2 valores E são diferentes de 0

– A capacidade de correção de erro é excedida e os erros não são mais corrigidos

• No Exemplo: t = (15 – 11)/2 = 2

Page 12: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Processo de decodificaçãoProcesso de decodificação

• Síndrome– A primeira etapa do processo de decodificação é dividir o

polinômio recebido por cada um dos fatores (x + i)=

– S(x) = S2t-1x2t-1 + ... + S1x + S0

• Método Horner

– Acha os valores da síndrome, substituindo x = i no R(x)• S0 = R(0)

• S1 = R(1)

• ...

• S(2t-1) = R((2t-1))

– Propriedades da síndrome• O valores da síndrome são dependentes do erro

• Quando não ocorre erro, todos os valores de síndrome são zero

ii

ii x

SxQ

x

xR

)(

)(

Page 13: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Incluindo erros no exemploIncluindo erros no exemplo

• Limite de Correção:• T=n-k/2 , para o exemplo: t=(15 – 11)/2= 2 erros.• Cada erro de m-bits, (m=4 bits neste exemplo)

• E(x) = E9x9 + E2x2 (2 erros de 4 bits)– E9 = 13 e E2 = 2

– R(x) = (x14 +2x13 +3x12 +4x11 +5x10 +6x9 +7x8 +8x7 +9x6 +10x5 +11x4

+3x3 +3x2 +12x +12) + (13x9 +2x2)

= x14 +2x13 +3x12 +4x11 +5x10 +11x9 +7x8 +8x7 +9x6 +10x5 +11x4 +3x3 +1x2 +12x +12

Page 14: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Calculo da síndromeCalculo da síndrome

• S0 = R(0)– S0 = (0)14 + 2(0)13 + 3(0)12 + 4(0)11 + 5(0)10 + 11(0)9 + 7(0)8 +

8(0)7 + 9(0)6 + 10(0)5 + 11(0)4 + 3(0)3 + 1(0)2 + 12(0)1 + 12 = 15

– S1 = R(1) = 3

– S2 = R(3) = 4

– S3 = R(2) = 12

• O polinômio da síndrome:S(x) = S2t-1x2t-1 + ... + S1x + S0

S(x) = s3x3 + s2x2 + s1x + s0

S(x) = 12x3 + 4x2 + 3x + 15

Page 15: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Polinômio localizador de errosPolinômio localizador de erros

– Polinômio localizador de erros (x) (x) = (1 + X1x)(1 + X2x)...(1 + Xvx) = 1 + 1x + ... + v-1xv-1 + xv

– v é a ordem do polinômio (x) que representa a quantidade de erros recebidos

– Coeficientes do polinômio localizador de erro• Método baseado no Algoritmo de Euclides

– Encontrar o MDC de dois números

Page 16: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Polinômio localizador de erros (Cont.)Polinômio localizador de erros (Cont.)

– O método de Euclides requer dois polinômios S(x) e (x) • Polinômio da síndrome

– S(x) = S2t-1x2t-1 + ... + S1x + S0

• Polinômio magnitude do erro (x) = v-1xv-1 + ... + 1x + 0

• Equação chave (pode ser rescrita para) (x) = [S(x) (x)] mod x2t

0 = s0

1 = s1 + s01

• ... v-1 = sv-1 + sv-21 + ... + s0v-1

• Aplicando método de Euclides

– MDC de S(x) e x2t

• O algoritmo consiste em dividir x2t por S(x) para produzir um resto• O processo continua até que o resto seja menor que t

Page 17: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Polinômio localizador de erros (Cont.)Polinômio localizador de erros (Cont.)

• Para o exemplo– O MDC dos dois números x2t=x4 e S(x) = 12x3 + 4x2 + 3x + 15

(x) = 14x2 + 14x +1 0 = s0 = 15

1 = s1 + s01 = 3.15 + 14 = 6

(x) = 6x + 15

Page 18: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Resolvendo o polinômio localizador de erroResolvendo o polinômio localizador de erro

• Após calcular os valores (1 ... v) do polinômio localizador de erro– É possível encontrar as raízes

• Então a função será zero se x = x1

-1, x2-1, ... O que identifica

a posição do erro

– Que é x =-e1, -e2, ...

• Para o exemplo (x) = 14x2 + 14x +1

– Para ej=14, i.e., x= -14

(-14) = 14(-14)2 + 14(-14) +1= 14 (1)2 + 14(1) +1= 11 2 + 11 1 + 0

= 13 + 12 + 0

= 13 + 15 + 1 = 3

– Valor diferente de zero indica que a 1a posição não tem erro

)...()()( 122

111

XxXXxXx

Page 19: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Resolv. o polinômio localizador de erro (cont.)Resolv. o polinômio localizador de erro (cont.)

• Para o exemplo (cont.)– Erro nas posições 6 e 13

Page 20: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Calculando os valores de erroCalculando os valores de erro

• Usando equação de Forney

– Onde ’ é a derivada de

• Para o exemplo (x) = 14x2 + 14x +1 (x) = 6x + 15 ’(xj

-1) = 14

)(

)(1'

1

j

jjj X

XXY

14

156 1

j

jj

XXY

1314

156 99

jY 214

156 22

jY

Page 21: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Correção do erroCorreção do erro

• Os erros podem ser corrigidos adicionando os valores de Y aos símbolos recebidos nas posições localizadas pelos valores X

• No exemplo

Page 22: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

Versão simplificadaVersão simplificada

• Versão do código (15, 11) pode ser reduzida para, por exemplo, (12, 8)– Basta setar os primeiros três termos da mensagem para 0

Page 23: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

DVB-TDVB-T

• Versão do código (255, 239) simplificada para (204, 188)

• p(x) = x8 + x4 + x3 + x2 + 1• g(x) = (x + 20)(x + 21)…(x + 215)

= x16 + 59x15 + 13x14 + 104x13 + 189x12 + 68x11 + 209x10 + 30x9 + 8x8 + 163x7 + 65x6 + 41x5 + 229x4 + 98x3 + 50x2 + 36x + 59

Page 24: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

ReferênciaReferência

• Reed-Solomon Error CorrectionC.K.P. Clarke– http://www.bbc.co.uk/rd/pubs/whp/whp031.shtml

Page 25: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

MATLAB – CAMPO DE GALOISMATLAB – CAMPO DE GALOIS

• ADIÇÃO DE POLINÔMIOSd=gf(13,4) (d = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal) Array elements = 13

e=gf(3,4)e = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal)Array elements = 3

d+e ans = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal) Array elements = 14

13+3=14

Page 26: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

MATLAB – CAMPO DE GALOISMATLAB – CAMPO DE GALOIS

• Formando TabelaA = gf(ones(16,1)*[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15],4);B = gf([0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]'*ones(1,16),4);A+B

Resposta: ans = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal) Array elements = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 0 3 2 5 4 7 6 9 8 11 10 13 12 15 14 2 3 0 1 6 7 4 5 10 11 8 9 14 15 12 13 3 2 1 0 7 6 5 4 11 10 9 8 15 14 13 12 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 5 4 7 6 1 0 3 2 13 12 15 14 9 8 11 10 6 7 4 5 2 3 0 1 14 15 12 13 10 11 8 9 7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 9 8 11 10 13 12 15 14 1 0 3 2 5 4 7 6 10 11 8 9 14 15 12 13 2 3 0 1 6 7 4 5 11 10 9 8 15 14 13 12 3 2 1 0 7 6 5 4 12 13 14 15 8 9 10 11 4 5 6 7 0 1 2 3 13 12 15 14 9 8 11 10 5 4 7 6 1 0 3 2 14 15 12 13 10 11 8 9 6 7 4 5 2 3 0 1 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Page 27: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

MATLAB – CAMPO DE GALOISMATLAB – CAMPO DE GALOIS

• Multiplicação de Polinômios

A = gf([1 0 1 0],4); % A= (x3+x)B= gf([1 1 0 1],4); % B= (x3+x2+1)C=conv(A,B) % A*B

Resposta:

C = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal) Array elements = 1 1 1 0 0 1 0 = x6 + x5 + x4 + x

Polinômio

Grau do Polinômio irredutível p(x).

p(x)

Page 28: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

MATLAB – CAMPO DE GALOISMATLAB – CAMPO DE GALOIS

• Gerando g(x)N= 15 tamanho do código + mensagemK= 11 tamanho da mensagem= 2 (definido)N=15 <= 2m-1 logo m=4G(x)= (x+1).(x+2).(x+4).(x+8)

Matlab:A=gf([0 0 1 1],4); % (x+1)B=gf([0 0 1 2],4); % (x+2)C=gf([0 0 1 4],4); % (x+4)D=gf([0 0 1 8],4); % (x+8)E=conv(A,B); % (x+1).(x+2)F=conv(E,C); % (x+1).(x+2).(x+4)G=conv(F,D); % (x+1).(x+2).(x+4).(x+8)

Resposta:G = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal)

Array elements = 1 15 3 1 12

= x4 + 15x3 + 3x2 +x + 12

Polinômio gerador de código (g(x))

Page 29: Reed-Solomon Error Correction Adiciona informação redundante na mensagem original –Bytes de paridade Permite que o receptor detecte e corrija erros que

MATLAB – CAMPO DE GALOISMATLAB – CAMPO DE GALOIS

UTILIZANDO OS COMANDOS PARA CODIFICAÇÃO:UTILIZANDO OS COMANDOS PARA CODIFICAÇÃO:

function gen=gen(x)% m=4% g(x)=(x+1).(x+2).(x+4).(x+8)a=gf([1 1],4);b=gf([1 2],4);c=gf([1 4],4);d=gf([1 8],4);e=conv(a,b);f=conv(e,c);g=conv(f,d);%entrada de dadosh=gf([1 2 3 4 5 6 7 8 9 10 11 0 0 0 0],4);%multiplicaçao de g(x)* x^10 e soma i=gf([1 0 0 0 0 0 0 0 0 0 0],4);t=conv(g,i);u=h+t;%multiplicaçao de g(x)* 13x^9 e soma j=gf([0 13 0 0 0 0 0 0 0 0 0],4);v=conv(g,j);s=u+v;%saida = entrada + codigo saida=h+cod;gen=saida;

Resposta:ans = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal) Array elements =

0 0 0 0 0 0 0 0 0 0 0 3 3 12 12

CÓDIGO

1 2 3 4 5 6 7 8 9 10 11 3 3 12 12

SAÍDA

Mensagem Código