A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Reed-Solomon Error Correction

Apresentações semelhantes


Apresentação em tema: "Reed-Solomon Error Correction"— Transcrição da apresentação:

1 Reed-Solomon Error Correction
TT083 – Conceitos de Televisão 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

2 Có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

3 Campo 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

4 Campo 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

5 Campo de Galois Polinômio gerador de campo Multiplicação e divisão
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 Divisor  x Divisor  x Divisor  = x3 + x + 1 Divisão = Multiplicação pelo inverso do divisor

6 Construindo 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 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)

7 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

8 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

9 Resultados da adição de 2 campos de elementos.
GF(16) P(x)= x4+x+1 G(x)=x4 + 15x3 + 3x2 + x + 12 Exemplo anterior: x14 x13 x12 x11 x10 x .x ADIÇÃO “OU EXCLUSIVO” + 0 0 0 0 1 1 1 0 1 1 1 0 0010 (2) 1111 (15) 1101 (13) OPERAÇÃO “OU EXCLUSIVO”

10 Resultados da MULTIPLICAÇÃO de 2 campos de elementos.
GF(16) P(x)= x4+x+1 G(x)=x4 + 15x3 + 3x2 + x + 12 13 x 3 = ( ) . ( ) = (x3 +x2+1).(x+1) =(x4+2x3+ x2+x+1) Divide-se por p(x) x4 x3 x2 x1 x0 (14) (p(x)) (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).

11 Teoria de correção de erro
Introdução de erros R(x) = T(x) + E(x) Onde E(x) = En-1xn E1x + E0 Coeficientes En 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

12 Processo 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 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

13 Incluindo 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

14 Calculo da síndrome S0 = R(0)
O polinômio da síndrome: S(x) = S2t-1x2t S1x + S0 S(x) = s3x3 + s2x2 + s1x + s0 S(x) = 12x3 + 4x2 + 3x + 15

15 Polinô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

16 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 S1x + S0 Polinômio magnitude do erro (x) = v-1xv 1x + 0 Equação chave (pode ser rescrita para) (x) = [S(x) (x)] mod x2t 0 = s0 1 = s1 + s01 ... v-1 = sv-1 + sv-2 s0v-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

17 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 + s01 = = 6 (x) = 6x + 15

18 Resolvendo 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 = = 3 Valor diferente de zero indica que a 1a posição não tem erro

19 Resolv. o polinômio localizador de erro (cont.)
Para o exemplo (cont.) Erro nas posições 6 e 13

20 Calculando 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

21 Correçã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

22 Versã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

23 DVB-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) = x x x x x x x x9 + 8x x7 + 65x6 + 41x x4 + 98x3 + 50x2 + 36x + 59

24 Referência Reed-Solomon Error Correction C.K.P. Clarke

25 MATLAB – CAMPO DE GALOIS
ADIÇÃO DE POLINÔMIOS d=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) 3 d+e ans = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal) 14 13+3=14

26 MATLAB – CAMPO DE GALOIS
Formando Tabela A = gf(ones(16,1)*[ ],4); B = gf([ ]'*ones(1,16),4); A+B ans = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal) Array elements = Resposta:

27 MATLAB – CAMPO DE GALOIS
Multiplicação de Polinômios Polinômio Grau do Polinômio irredutível p(x). A = gf([ ],4); % A= (x3+x) B= gf([ ],4); % B= (x3+x2+1) C=conv(A,B) % A*B p(x) Resposta: C = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal) Array elements = = x6 + x5 + x4 + x

28 MATLAB – CAMPO DE GALOIS
Resposta: G = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal) Array elements = = x4 + 15x3 + 3x2 +x + 12 Gerando g(x) N= 15 tamanho do código + mensagem K= 11 tamanho da mensagem = 2 (definido) N=15 <= 2m-1 logo m=4 G(x)= (x+1).(x+2).(x+4).(x+8) Matlab: A=gf([ ],4); % (x+1) B=gf([ ],4); % (x+2) C=gf([ ],4); % (x+4) D=gf([ ],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) Polinômio gerador de código (g(x))

29 MATLAB – CAMPO DE GALOIS
UTILIZANDO OS COMANDOS PARA CODIFICAÇÃO: Resposta: ans = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal) Array elements = 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 dados h=gf([ ],4); %multiplicaçao de g(x)* x^10 e soma i=gf([ ],4); t=conv(g,i); u=h+t; %multiplicaçao de g(x)* 13x^9 e soma j=gf([ ],4); v=conv(g,j); s=u+v; %saida = entrada + codigo saida=h+cod; gen=saida; CÓDIGO SAÍDA Mensagem Código


Carregar ppt "Reed-Solomon Error Correction"

Apresentações semelhantes


Anúncios Google