reed-solomon error correction adiciona informação redundante na mensagem original –bytes de...
TRANSCRIPT
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
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
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
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
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
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
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
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
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 . . . . . .
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).
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
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
)(
)(
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
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
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
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
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
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
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
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
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
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
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
ReferênciaReferência
• Reed-Solomon Error CorrectionC.K.P. Clarke– http://www.bbc.co.uk/rd/pubs/whp/whp031.shtml
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
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
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)
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))
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