Códigos Cíclicos - Engenharia Eletrica

Propaganda
Códigos Cíclicos: Definição
TÉCNICAS DE CODIFICAÇÃO DE SINAIS
• Um código de bloco linear é um código cíclico se cada
deslocamento cíclico das palavras-código é também uma
palavra-código. Vantagens:
– Descrição algébrica elegante
• c(x) = m(x)g(x), g(x) → polinômio gerador
• c(x)h(x) = 0 mod (xn − 1) → h(x) polinômio de verificação de
paridade
• c(β1) = 0, ..., c(βt) = 0, onde βi ∈ GF(pm)
CÓDIGOS CÍCLICOS
– Codificação e cálculo de síndromes utilizando registradores de
deslocamento
– Correção de surtos de erros
– Correção de erros aleatórios através da solução de equações de
polinômios
Evelio M. G. Fernández - 2010
Deslocamentos Cíclicos de n-uplas e Polinômios
Deslocamentos Cíclicos de n-uplas e Polinômios
x·v(x): deslocamento cíclico no tempo ou rotação à direita sujeita à condição,
C: (n, k), C: SubEsp Vn
Se v = (v0 , v1 , K , vn −1 ) ∈ C : código cíclico, então deslocamentos
cíclicos de v também pertencem a C, isto é:
x n = 1 ou x n − 1 = 0
→ x ⋅ v(x ) = v0 x + v1 x 2 + L + vn −1 {
x n −1 x
=1
= vn −1 + v0 x + v1 x 2 + L + vn − 2 x n −1 = v1 (x ) ∈ C
(vn −1 , v0 , v1 , v2 ,K , vn− 2 ) ⎫
(vn −2 , vn −1 , v0 , v1 ,K, vn−3 )⎪⎪
multiplicação módulo x n −1
⎬∈C
⎪
(v1 , v2 K vn−2 ,K, vn−1 , v0 )⎭⎪
M
M
x v(x ) = xv1 (x )
2
= vn −1 x + v0 x 2 + v1 x 3 + L + vn −3 x n −1 + vn −2 {
xn
=1
Representação Polinomial:
v = (v0 , v1 ,K , vn −1 ) ↔ v( x ) = v0 + v1 x + v2 x + L + vn −1 x
2
onde: x = variável auxiliar
vi ∈ GF(q); q primo.
n −1
= vn − 2 + vn −1 x + v0 x 2 + v1 x 3 + L + vn −3 x n −1
= v2 (x ) ∈ C : Código Cíclico
{v(x ), xv(x ), x v(x ),K}mod x
2
n
−1 ∈ C
Isto é, para ∀i o polinômio x i v(x ) mod x n −1∈C .
1
Corpos Finitos
Corpos Finitos
• Um corpo finito com q elementos é chamado de GF(q)
(Galois Field)
• Teorema: A característica, λ, de um corpo finito é um
número primo
• GF(p) = inteiros com aritmética módulo um número primo,
p
• Teorema: Seja a um elemento diferente de zero em GF(q).
Então, a(q−1) = 1
• GF(pm) = polinômios sobre GF(p) com aritmética módulo
um polinômio primo de grau m (extension field)
• Teorema: Seja a um elemento diferente de zero em GF(q).
Seja n a ordem de a. Então, n divide q−1
• Todo corpo finito é o espaço vetorial de m-uplas sobre o
corpo GF(p) de inteiros com aritmética módulo um número
primo p. Portanto, GF(q) = GF(pm)
• Resultado: Se a ordem de a for q−1, então a é um elemento
primitivo de GF(q)
Aritmética de Corpos Finitos
Aritmética de Corpos Finitos
• Polinômios com uma variável X e coeficientes em um
corpo F (denotados por F[x]), são expressões da forma
f ( X ) = f 0 + f1 X + f 2 X 2 + L + f n X n
• O grau de f(X) é a maior potência de X (com coeficiente de
X ≠ 0)
• Polinômio mônico: O coeficiente da maior potência de X é
1 ⇒ Todos os polinômios diferentes de zero sobre GF(2)
são mônicos
• Para qualquer dividendo f(X) ∈ F[x] e divisor diferente de
zero, g(X) ∈ F[x] existirão um par de polinômios únicos
q(X), cociente e r(X), resto, tal que
Definição:
Seja p(X) um polinômio de grau m sobre GF(2). Se p(X) não
for divisível por nenhum polinômio sobre GF(2) de grau
m – 1 ou menos, então p(X) é irredutível sobre GF(2).
Resultado:
Qualquer polinômio irredutível sobre GF(2) de grau m divide
X2
m
−1
+1
f ( X ) = q( X )g ( X ) + r ( X ), onde deg r ( X ) < deg g ( X )
2
Aritmética de Corpos Finitos
Definição:
Seja p(X) um polinômio irredutível de grau m sobre GF(2);
então, p(X) divide Xn + 1 para n = 2m – 1. Se este valor de n
for o menor inteiro positivo para o qual p(X) divide xn + 1,
então p(X) é um polinômio primitivo de grau m sobre GF(2)
000 001 010 011 100 101 110 111
000 000 001 010 011 100 101 110 111
001 001 000 011 010 101 100 111 110
010 010 011 000 001 110 111 100 101
011
100
101
110
010
101
100
111
001
110
111
100
000
111
110
101
111
000
001
010
110
001
000
011
101
010
011
000
+
0
1
2
3
4
5
6
7
0
0
1
2
3
4
5
6
7
1
1
2
3
4
5
6
7
0
2
2
3
4
5
6
7
0
1
3
3
4
5
6
7
0
1
2
4
4
5
6
7
0
1
2
3
5
5
6
7
0
1
2
3
4
6
6
7
0
1
2
3
4
5
7
7
0
1
2
3
4
5
6
×
0
1
2
3
4
5
6
7
0
0
0
0
0
0
0
0
0
1
0
1
2
3
4
5
6
7
2
0
2
4
6
0
2
4
6
3
0
3
6
1
4
7
2
5
4
0
4
0
0
0
4
0
4
5
0
5
2
3
4
1
6
3
6
0
6
4
6
0
6
4
2
7
0
7
6
1
4
3
2
1
Operação de “Multiplicação” das 3-uplas
Soma Módulo-2 (Bit-a-Bit)
011
100
101
110
Produto Módulo-8
Soma Módulo-8
100
011
010
001
111 111 110 101 100 011 010 001 000
001 010 011 100 101 110 111
001 001 010 011 100 101 110 111
010 010 100 110 011 001 111 101
011 011 110 101 111 100 001 010
100 100 011 111 110 010 101 001
101 101 001 100 010 111 011 110
110 110 111 001 101 011 010 100
111 111 101 010 001 110 100 011
3
Construção de GF(2m)
Representação
Definição:
111 ⇔ α 2 + α + 1
110 ⇔ α 2 + α
101 ⇔ α 2 + 1
100 ⇔ α 2
011 ⇔ α + 1
010 ⇔ α
001 ⇔ 1
000 ⇔ 0
Um elemento de GF(2m) de ordem 2m – 1 é um elemento
primitivo.
⇒ se α é um elemento primitivo em GF(2m), então as
potências distintas de α geram todos os elementos (diferentes
de zero) de GF(2m).
Definição:
Um polinômio irredutível, p(x), de grau m sobre GF(2) é um
polinômio primitivo se tiver como raiz um elemento
primitivo de GF(2m)
Propriedades de GF(2m)
Teorema:
Teorema:
Seja f(X) um polinômio com coeficientes em GF(2). Seja β
um elemento de GF(2m). Se β é uma raiz de f(X), então para
qualquer l ≥ 0 ,
l
β 2 é também uma raiz de f(X)
O elemento
Propriedades de GF(2m)
β2
l
é chamado de conjugado de β.
Os 2m – 1 elementos diferentes de zero de GF(2m) compõem
todas as raízes de X 2
m
−1
+1
→ O elemento 0 de GF(2m) é a raiz de X. Portanto,
Corolário:
m
Os elementos de GF(2m) compõem todas as raízes de X 2 + X
⇒ β pode ser uma raiz de um polinômio sobre GF(2) de grau
menor que 2m
4
Propriedades de GF(2m)
Polinômio Gerador
Definição:
Seja β um elemento de GF(2m). O polinômio minimal, φ(X),
de β é o polinômio de menor grau com coeficientes em GF(2)
tal que φ(β) = 0.
Teorema:
Sejam φ(X) o polinômio minimal de um
elemento β em
e
GF(2m) e e o menor inteiro tal que β 2 = β . Então:
e −1
(
φ (X ) = ∏ X + β 2
i =0
i
)
Polinômio Gerador
Seja C um código cíclico (n, k) sobre GF(q)
• Existe um polinômio mônico g(x), chamado de polinômio
gerador, tal que uma n-upla c(x) é uma palavra-código se e
somente se g(x) for um divisor de c(x).
• O polinômio gerador é único.
• O grau do polinômio gerador é n − k.
• g(x) é o polinômio código de menor grau entre todos os
polinômios código.
• O polinômio gerador é um divisor de xn − 1.
Matriz Geradora não Sistemática
g ( x ) = 1 + g1 x + g 2 x 2 + L + g n − k x n − k
c( x ) = a ( x) g ( x ) mod x n − 1∈C : ( n, k )
• Código cíclico C: (n, k) gerado por g(x) de grau r = n − k
onde:
Grau [c(x)] ≤ n – 1.
Grau [g(x)] = n – k.
Grau [a(x)] ≤ k – 1.
a(x): polinômio em x associado à mensagem a ser codificada em c(x).
Seja a ( x) = a0 + a1 x + a2 x 2 + L + ak −1 x k −1
a ( x ) g ( x ) = a0 {
g ( x) + a1 xg ( x) + L + ak −1 x k −1 g ( x)
123
1
424
3
∈C
∈C
∈C
⎡ g (x ) ⎤ ⎡ g 0
⎢ xg ( x ) ⎥ ⎢ 0
⎥=⎢ M
M
G=⎢
⎢ x k − 2 g ( x )⎥ ⎢ 0
⎢ k −1
⎥ ⎢
⎣ x g ( x )⎦ ⎣ 0
g1 L g r 0 0 0 0 ⎤
g 0 g1 L g r 0 0 0 ⎥
M O O L O O M⎥
0 0 g 0 g1 L g r 0 ⎥
⎥
0 0 0 g 0 g1 L g r ⎦
Portanto:
a(x)g(x) = combinação linear de palavras código que resulta em uma outra
palavra código de C.
5
Código Cíclico Sistemático
Procedimento para Codificação Sistemática
⎛
⎞
⎜
⎟
v = ⎜ b0 , b1 ,K, bn −k −1 , m0 , m1 ,K, mk −1 ⎟
1
4
4
2
4
4
3
1
4
4
2
4
4
3
⎜ n− k bits de cheque
⎟
k
bits
de
mensagem
⎜
⎟
⎝ de paridade
⎠
1. m( x) x n −k = ?
2. Resto da divisão
Seja m(x): polinômio-mensagem,
3. b( x) + x n− k m( x) = v( x)
m( x) = m0 + m1 x + L + mk −1 x k −1
→ v(x): polinômio código de código sistemático.
EXEMPLO:
v( x) = b0 + b1 x + L + bn − k −1 x n− k −1 + m0 x n− k + m1 x n − k +1 + L mk −1 x k −1
1444424444
3 1444442444443
b( x)
m( x) = 1 + x 3 , g ( x) = 1 + x + x 3 , código cíclico C: (7, 4).
x n− k m ( x )
Se v(x) = a(x)g(x)
⇒
x n − k m( x )
= b( x ) ?
g ( x)
Palavra código correspondente à m(x)?
x n − k m( x )
b( x )
= a ( x) −
g ( x)
g ( x)
a(x) tal que a(x)g(x) = v(x)?
Polinômio de Verificação de Paridade
Codificador de um Código Cíclico (n, k)
x − 1 = h( x ) g ( x)
n
ou:
(
)
h( x) g ( x) mod x n − 1 = 0
g(x): polinômio gerador de C: (n, k)
h(x): polinômio de verificação de paridade de C: (n, k)
Grau [g(x)] = n – k
Grau [h(x)] = k
Teorema 4.7 (Lin & Costelo, pág. 94):
Seja C: (n, k) um código cíclico q-ário com polinômio gerador g(x), em
GF(q). O código dual de C é também cíclico e é gerado pelo polinômio
( ),
hk ( x) = x h x
k
−1
b0
b1
b2
bn-k-2
bn-k-1
x n− k m( x )
onde hk (x) é o polinômio recíproco do polinômio de
verificação de paridade do código C.
6
Codificador do Código Cíclico (7, 4)
Circuito de Cálculo das Síndromes
r(x)
s0
Cálculo de Síndromes Código (7, 4)
s1
sn-k-1
Capacidade de Detecção de Erros
• Um código cíclico (n, k) é capaz de detectar qualquer surto
de erros de comprimento n − k ou menor, incluindo surtos do
tipo end-around.
• A fração de surtos não detectáveis de comprimento n − k +1
é 2 − (n − k − 1)
• Para l > n − k +1, a fração de surtos não detectáveis de
comprimento l é 2 − (n − k)
7
Decodificação de Códigos Cíclicos
Decodificação de Códigos Cíclicos
• Passo 1: Calcular a síndrome de r(x) e armazenar r(x) no registrador
• Passo 2: Determinar padrão de erro. A saída do detector é 1 se e
somente se a síndrome no registrador corresponde a um padrão de erro
corrigível contendo um erro na posição xn − 1
• Passo 3: O buffer e o registrador de síndrome são deslocados uma
posição à direita. A saída do detector faz a correção do primeiro
símbolo (se en − 1 = 1) e também é realimentada no registrador de
síndrome. Nova síndrome corresponde à r(x) deslocado
• Passo 4: Detectar se xn − 2 (agora na última posição) é um símbolo
errado. Repetir passos 2 e 3. O segundo símbolo é corrigido da mesma
forma que o anterior.
• Passo 5: Decodificar o vetor recebido símbolo a símbolo da forma
descrita anteriormente
Decodificador de Meggitt para o Código Cíclico (7, 4)
Processo de
Correção de Erros
8
BCH bound
Códigos Cíclicos Binários vistos a partir de GF(2m)
• Teorema: Seja g(x) o polinômio gerador de um código
cíclico binário de comprimento n = 2m − 1 com zeros β1,..., βr
em GF(2m). O polinômio c(x) sobre GF(2) é um polinômio
código se e somente se
c(β1) = c(β2) = ··· = c(βr) = 0
onde c(βi) é avaliado em GF(2m)
Se um código cíclico linear é construído de forma que:
• Cada palavra-código tem n bits;
• β é um elemento de ordem n em GF(2m);
• O polinômio gerador do código, g(x), inclui, entre suas
raízes, (δ - 1) potências consecutivas de β.
Então,
• É garantido que o código tem distância mínima igual a δ ou
maior.
Construção de Códigos BCH
• Para cada raiz β incluída em g(x), existe um polinômio
minimal f(r)(x) que tem βr como raiz [i.e., f(r)(βr) = 0] e com
coeficientes em GF(2).
r
• O polinômio gerador, com coeficientes binários, que
contém todas as raízes necessárias pode ser obtido como
sendo o mínimo comum múltiplo (LCM) de todos os
polinômios minimais correspondentes às raízes utilizadas:
Tipos de Códigos BCH
• Se β é um elemento primitivo de GF(2m), o código BCH
resultante é chamado de código BCH primitivo e as suas
palavras-código têm comprimento 2m – 1 bits.
• Se β não é um elemento primitivo de GF(2m), o código
BCH resultante é chamado de código BCH não primitivo
e as suas palavras-código têm comprimento igual à ordem
de β.
• Se b = 0, a primeira das (δ - 1) potências de β será β1 = β,
⇒ código BCH no sentido estrito.
• Se b ≠ 0, ⇒ código BCH no sentido amplo.
g(x) = LCM{f(b+1)(x), f(b+2)(x), ..., f(b+δ-1)(x)}
9
Códigos BCH Binários Primitivos
Elementos de GF(24)
Para qualquer m ≥ 3 e t ≤ 2m − 1, existe um código BCH
com os seguinte parâmetros:
n = 2m − 1 ,
n − k ≤ mt,
dmin ≥ 2t + 1
O polinômio gerador do código, g(x), é o polinômio de
menor grau sobre GF(2) contendo
α , α 2 , α 3 ,L , α 2t
como raízes, onde α é um elemento primitivo de GF(2m)
Decodificação de Códigos BCH
1. Computar as síndromes S = (S1, S2, ..., S2t) a partir
de r(x)
2. Determinar σ(x) a partir de S1, S2, ..., S2t
3. Determinar as localizações dos erros, β1, β2, ..., βυ
encontrando as raízes de σ(x) e corrigir os erros
em r(x)
Códigos BCH Primitivos sobre GF(q)
Seja α um elemento primitivo em GF(qm ).
O polinômio gerador, g(x), de um código BCH qário primitivo corretor de t erros é o polinômio de
menor grau sobre GF(q) contendo α , α 2 , α 3 ,L , α 2t
como raízes. Seja φi(x) o polinômio minimal de αi,
1 ≤ i ≤ 2t. Então,
g(x) = LCM{φ1(x), φ2(x), ..., φ2t(x)}
10
Códigos de Reed-Solomon
Um código de Reed-Solomon (ou código RS) é
um código BCH primitivo (não binário) de
comprimento n = q – 1 sobre GF(q). O polinômio
gerador desse código tem a forma
(
)(
) (
Desempenho de Códigos
RS sobre GF(26) com
n = 31, considerando
modulação 32-FSK
)
g (x ) = x − α x − α 2 L x − α 2t
= g 0 + g1 x + g 2 x 2 + L + g 2t −1 x 2t −1 + x 2t
onde α é um elemento primitivo de GF(q), d é a
distância mínima do código e gi ∈ GF(q)
Desempenho de Códigos
RS sobre GF(26) com
n = 31, considerando
modulação 32-FSK
Desempenho de Códigos RS com R = 7/8
11
Desempenho de Códigos RS com n = 64
Decodificador de Códigos BCH q-ários
Desempenho de Códigos RS com n = 31 e Modulação BPSK
Desempenho de Códigos de Reed-Solomon
12
Download