Escolar Documentos
Profissional Documentos
Cultura Documentos
1.1. INTRODUÇÃO
No contexto das comunicações, a teoria da informação fornece uma modelagem matemática
que permite responder duas questões fundamentais:
1. Qual é a complexidade irredutível abaixo da qual um sinal não pode ser comprimido?
2. Qual é a máxima taxa de transmissão para uma comunicação confiável em um canal
ruidoso?
As respostas para as duas questões acima definem bem as duas principais vertentes da teoria
da informação: codificação de fonte e codificação de canal.
∑p
k =0
k = 1.
Além disso, admita que os símbolos emitidos pela fonte sejam estatisticamente
independentes. Uma fonte com tais propriedades é definida como fonte discreta sem memória.
1
1. Limites Fundamentais da Teoria da Informação
O termo sem memória tem o sentido de que o símbolo emitido a qualquer tempo é
independente de uma escolha prévia.
NOTA 1
1. I (sk ) = 0 para pk = 1
2. I (sk ) ≥ 0 para 0 ≤ pk ≤ 1
3. I (sk ) > I (sl ) então pk < pl
4. I (sk sl ) = I (sk ) + I (sl )
H (S ) = E [I (sk )]
K −1
1 (1.2)
H (S ) = ∑ pk log 2
k =0 pk
H(S) que é definida como entropia. A entropia determina a quantidade média de informação
por símbolo (evento) da fonte. Também pode ser enendida como uma medida da informação
contida numa mensagem.
2
1. Limites Fundamentais da Teoria da Informação
PROPRIEDADES DA ENTROPIA
Limitantes:
0 ≤ H (S ) ≤ log 2 K (1.3)
Consequências:
Nos canais de comunicação digital, uma fonte de grande interesse é a fonte binária sem
memória. Para essa fonte é interessante o entendimento do comportamento da entropia em
função da probabilidade de ocorrência dos eventos "0" e "1". Esse comportamento é mostrado
no Exemplo 1.1.
EXEMPLO 1.1
Considere uma fonte discreta sem memória que emite os símbolos s0 = 0 e s1 = 1, com
probabilidades p0 e p1, respectivamente. A entropia desta fonte é
K −1
1 1 1
H (S ) = ∑ pk log 2 = p0 log 2 + p1 log 2 ,
k =0 pk p0 p1
mas p1 = 1 – p0.
1 1
H (S ) = p0 log 2 + (1 − p0 ) log 2
p
0 1 − p 0
1. Quando p0 = 0, H(S) = 0.
2. Quando p1 = 1, H(S) = 0.
3. A entropia é máxima quando p1 = p0 = ½.
3
1. Limites Fundamentais da Teoria da Informação
H(p0)
1
p0
0
0,5 1
Probabilidade de símbolo
No caso específico dos sistemas de comunicações digitais é conveniente que dois requisitos
funcionais sejam satisfeitos:
O comprimento médio das palavras códigos de uma codificação de fonte é determinado por
K −1
L = ∑ pk lk . (1.5)
k =0
4
1. Limites Fundamentais da Teoria da Informação
Dada uma fonte discreta sem memória de entropia H(S), o comprimento médio das palavras
códigos para um esquema de codificação livre de distorção é limitado como
L ≥ H (S ) . (1.6)
H (S )
η= . (1.7)
L
Uma vez que o Teorema da Codificação de Fonte admite que L = H (S ) , então o maior valor
possível para a eficiência de codificação de fonte é igual a unidade.
CÓDIGOS PREFIXOS
Um código prefixo é um código de fonte que apresenta decodificação inequívoca, ou seja, sua
decodificação não resulta em ambiguidade. Um código prefixo é aquele que nenhuma palavra
código é prefixo para qualquer outra palavra código.
DEFINIÇÃO: Um prefixo, com i bits, é a parte inicial de qualquer palavra código com n bits,
sendo i ≤ n.
5
1. Limites Fundamentais da Teoria da Informação
A decodificação de um código prefixo pode ser feita de acordo com uma árvore de decisão. A
árvore de decisão pode ser construída de acordo com as seguintes regras:
1. A partir de um estado inicial criam-se dois ramos. Para um ramo é atribuído o bit "0" e
para o outro um bit "1".
2. Se houver uma palavra código com apenas um bit, o ramo correspondente à palavra
código deve ser terminado com o símbolo correspondente.
3. O(s) ramo(s) não terminado em símbolo deve ser bifurcado em novos dois ramos. Para
um ramo é atribuído o bit "0" e para o outro um bit "1".
4. Se houver uma palavra código com dois bits, o ramo correspondente à palavra código
deve ser terminado com o símbolo correspondente.
5. O(s) ramo(s) não terminado em símbolo deve ser bifurcado em novos dois ramos. Para
um ramo é atribuído o bit "0" e para o outro um bit "1".
6. Este procedimento se repete até que todos os ramos terminem em símbolos.
Para o Código II, a árvore de decisão está apresentada na Figura 1.2. Note que sua
decodificação é inequívoca e instantânea.
s0
0
s1
Estado inicial 0
s2
1
0
1
1 s3
6
1. Limites Fundamentais da Teoria da Informação
Uma condição necessária, mas não suficiente, para que um código possa ser um código
prefixo é atender a desigualdade de Kraft-McMillan, definida como:
K −1
∑2
k =0
−lk
≤1 (1.8)
• Para o Código I:
K −1
∑2
k =0
−l k
= 2 −1 + 2 −1 + 2 −2 + 2 −2 = 1,5
∑2
k =0
−lk
= 2 −1 + 2 −2 + 2−3 + 2 −3 = 1
∑2
k =0
−lk
= 2 −1 + 2 −2 + 2−3 + 2−4 = 0,9375
Observações:
ALGORITMO DE HUFFMAN
EXEMPLO 1.2
Suponha uma fonte discreta sem memória S = {s0, s1, s2, s3, s4} com probabilidades P(S = sk)
= {0,4; 0,2; 0,2; 0,1; 0,1}. Um código prefixo pode ser obtido de acordo com o conjunto de
regras apresentadas a seguir (algoritmo de Huffman).
7
1. Limites Fundamentais da Teoria da Informação
s0 0,4
s1 0,2
s2 0,2
0
s3 0,1
1
s4 0,1
s0 0,4 0,4
s1 0,2 0,2
0
s2 0,2 0,2
0 1
s3 0,1 0,2
1
s4 0,1
3. O procedimento é repetido até que restem apenas dois símbolos, aos quais são atribuídos
novamente os bits 0 e 1.
8
1. Limites Fundamentais da Teoria da Informação
0
s0 0,4 0,4 0,4 0,6
0 1
s1 0,2 0,2 0,4 0,4
0 1
s2 0,2 0,2 0,2
0 1
s3 0,1 0,2
1
s4 0,1
4. As palavras códigos binárias são obtidas fazendo o caminho inverso, a partir da última
coluna, em direção a primeira coluna, anotando-se os bits encontrados em cada percurso,
até cada símbolo listado na primeira coluna, conforme mostrado nas figuras a seguir.
0
s0 0,4 0,4 0,4 0,6
0 1
s1 0,2 0,2 0,4 0,4
0 1
s2 0,2 0,2 0,2 s0 = 00
0 1
s3 0,1 0,2
1
s4 0,1
9
1. Limites Fundamentais da Teoria da Informação
0
s0 0,4 0,4 0,4 0,6
0 1
s1 0,2 0,2 0,4 0,4
0 1
s2 0,2 0,2 0,2 s1 = 10
0 1
s3 0,1 0,2
1
s4 0,1
0
s0 0,4 0,4 0,4 0,6
0 1
s1 0,2 0,2 0,4 0,4
0 1
s2 0,2 0,2 0,2 s2 = 11
0 1
s3 0,1 0,2
1
s4 0,1
0
s0 0,4 0,4 0,4 0,6
0 1
s1 0,2 0,2 0,4 0,4
0 1
s2 0,2 0,2 0,2 s3 = 010
0 1
s3 0,1 0,2
1
s4 0,1
10
1. Limites Fundamentais da Teoria da Informação
0
s0 0,4 0,4 0,4 0,6
0 1
s1 0,2 0,2 0,4 0,4
0 1
s2 0,2 0,2 0,2 s4 = 011
0 1
s3 0,1 0,2
1
s4 0,1
s0 00
s1 10
s2 11
s3 010
s4 011
K −1
L = ∑ pk lk = 0,4(2) + 0,2(2) + 0,2(2) + 0,1(3) + 0,1(3)
k =0
L = 2,2 bits/símbolo
K −1
1 1 1 1
H (S ) = ∑ pk log 2 = 0,4 log 2 + 0,2 log 2 + 0,2 log 2 +
k =0 pk 0,4 0,2 0,2
1 1
+ 0,1 log 2 + 0,1 log 2
0,1 0,1
H (S ) = 2,12193 bits/símbolo
11
1. Limites Fundamentais da Teoria da Informação
H (S ) 2,12193
η= = ⇒ η = 0,9645
L 2,2
A árvore de decisão para o código do Exemplo 1.2 está mostrada na Figura 1.3.
S0
0 S
0
0 1
1 S
1 0 S
1
S
* * *
O processo de codificação de Huffman não é único. Pelo menos duas variações no processo
de codificação são possíveis.
Qualquer que seja a forma arbitrada para a codificação, o comprimento médio do código
sempre será o mesmo, entretanto, a colocação de símbolos combinados com mesma
probabilidade que outro(s), na posição mais alta da coluna, resulta em uma menor variância
do comprimento das palavras códigos.
( )
K −1
2
σ = ∑ pk l k − L .
2
(1.9)
k =0
12
1. Limites Fundamentais da Teoria da Informação
NOTA 2
Conclusão: Este exemplo mostra que o algoritmo de Huffman produz um código prefixo com
comprimento médio próximo da entropia e inequivocamente decodificável.
Conforme mostrado pelo Primeiro Teorema de Shannon é possível obter um código cujo
comprimento médio das palavras códigos seja igual a entropia, ou seja,
L = H (S ) . (1.10)
Entretanto, isso é uma casualidade uma vez que é necessário que a correspondência
estabelecida por (1.11) ocorra para todas as probabilidades e suas respectivas palavras
códigos. Para esta condição particular, diz-se que o código prefixo está casado com a fonte.
Note que o Código II é um código que atende esta condição, ou seja, é um código prefixo
casado com a fonte.
Quando um código não é casado com a fonte é possível obter um comprimento médio das
palavras códigos tão próximos da entropia quanto desejado por meio de um código prefixo
estendido. Para isso é necessário estender a fonte original S para uma fonte Sn, ou seja, o
comprimento médio das palavras códigos aproxima-se da entropia na medida em que o valor
de n é aumentado na fonte estendida. Como o número de símbolos de uma fonte estendida Sn
é Kn, a diminuição do comprimento médio do código tem como preço um aumento da
complexidade de decodificação.
Considere a fonte discreta sem memória S = {s0, s1, ... , sK-1} com um número de símbolos
K = 3 e com probabilidades P(S = sk) = pk, para k = 0, 1, ... , K-1, logo
S = {s0 , s1 , s2 }
13
1. Limites Fundamentais da Teoria da Informação
Blocos s0 s0 s0 s1 s0 s2 s1 s0 s1 s1 s1 s2 s2 s0 s2 s1 s2 s2
Símbolos σ0 σ1 σ2 σ3 σ4 σ5 σ6 σ7 σ8
Probabilidades p0. p0 p0. p1 p0. p2 p1. p0 p1. p1 p1. p2 p2. p0 p2. p1 p2. p2
Então,
S 2 = {σ 0 , σ 1 , K , σ 8 }
é chamada de fonte estendida que tem Kn símbolos, onde n é o número de símbolos da fonte
discreta que, combinados, compõem cada novo símbolo da fonte estendida, ou seja,
K n = 32 = 9 símbolos
A entropia da fonte estendida é
H (S n ) = nH (S ) (1.12)
EXEMPLO 1.3
Suponha uma fonte discreta sem memória S = {s0, s1, s2} com probabilidades
P(S = sk) = {0,6; 0,3; 0,1}. Admita que essa fonte deva ser codificada com um código prefixo
com eficiência igual ou maior do que 0,95.
Codificação da fonte S
0
s0 0,6 0,6
0
s0 = 0
s1 0,3 0,4 s1 = 10
1 s2 = 11
s2 0,1
1
K −1
L = ∑ pk lk = 0,6(1) + 0,3(2) + 0,1(2)
k =0
L = 1,4 bits/símbolo
K −1
1 1 1 1
H (S ) = ∑ pk log 2 = 0,6 log 2 + 0,3 log 2 + 0,1 log 2
k =0 pk 0,6 0,3 0,1
H (S ) ≅ 1,295 bit/símbolo
14
1. Limites Fundamentais da Teoria da Informação
H (S ) 1,295
η= = ⇒ η = 0,925 A eficiência está abaixo da especificação.
L 1,4
Codificação da fonte S2
Blocos s0 s0 s0 s1 s0 s2 s1 s0 s1 s1 s1 s2 s2 s0 s2 s1 s2 s2
Símbolos σ0 σ1 σ2 σ3 σ4 σ5 σ6 σ7 σ8
Probabilidades 0,36 0,18 0,06 0,18 0,09 0,03 0,06 0,03 0,01
σ8 0,01 0,28
1 1
σ0 = 00 σ3 = 11 σ6 = 0111
σ1 = 10 σ4 = 0100 σ7 = 010100
σ2 = 0110 σ5 = 01011 σ8 = 010101
K −1
L = ∑ pk lk = 0,36 × 2 + 0,18 × 2 + 0,06 × 4 + 0,18 × 2 + 0,09 × 4 + 0,03 × 5 + 0,06 × 4
k =0
+ 0,03 × 6 + 0,01× 6
L = 2,67 bit/símbolo
15
1. Limites Fundamentais da Teoria da Informação
( ) 1
K −1
1 1 1 1
H S 2 = ∑ pk log 2 = 0,36 log 2 + 0,18 log 2 + 0,18 log 2 + 0,09 log 2
k =0 pk 0,36 0,18 0,18 0,09
1 1 1
+ 0,06 log 2 + 0,06 log 2 + 0,03 log 2 +
0,06 0,06 0,03
1 1
+ 0,03 log 2 + 0,01 log 2
0,03 0,01
( )
H S 2 = 2,59 bit/símbolo
Ou, simplesmente,
H (S 2 ) = 2 H (S ) = 2 × 1,295 = 2,59 bit/símbolo
η=
( )
H S2
=
2,59
⇒ η = 0,97 A eficiência atende à especificação.
L 2,67
* * *
CODIFICAÇÃO DE LEMPEL-ZIV
000101110010100101. . .
Posição numérica 0 1 2 3 4 5 6 7 0
Subsequências 0 1
Blocos codificados - -
16
1. Limites Fundamentais da Teoria da Informação
Posição numérica 0 1 2 3 4 5 6 7 0
Subsequências 0 1 00
Blocos codificados - - 000 0
Posição numérica 0 1 2 3 4 5 6 7 0
Subsequências 0 1 00 01
Blocos codificados - - 0000 0001
Posição numérica 0 1 2 3 4 5 6 7 0
Subsequências 0 1 00 01 011
Blocos codificados - - 0000 0001 0111
Posição numérica 0 1 2 3 4 5 6 7 0
Subsequências 0 1 00 01 011 10
Blocos codificados - - 0000 0001 0111 0010
Posição numérica 0 1 2 3 4 5 6 7 0
Subsequências 0 1 00 01 011 10 010
Blocos codificados - - 0000 0001 0111 0010 0110
Posição numérica 0 1 2 3 4 5 6 7 0
Subsequências 0 1 00 01 011 10 010 100
Blocos codificados - - 0000 0001 0111 0010 0110 1010
Posição numérica - 1 2 3 4 5 6 7 0
Subsequências - 1 00 01 011 10 010 100 101
Blocos codificados - - 0000 0001 0111 0010 0110 1010 1011
Para a sequência não codificada 00 01 011 10 010 100 101..., obteve-se a sequência
codificada 0000 0001 0111 0010 0110 1010 1011...
17
1. Limites Fundamentais da Teoria da Informação
A partir das premissas acima é possível verificar como o decodificador compõe o seu próprio
livro de código e como a decodificação é feita observando-se exclusivamente os blocos
codificados recebidos. Esta questão está colocada como exercício proposto no final do
capítulo.
NOTA 3
Em uma primeira análise, pode-se chegar à conclusão que este algoritmo não compacta nada,
pelo contrário. Essa é uma ideia falsa uma vez que a sequência utilizada é muito curta para o
algoritmo reconhecer padrões de repetição. Conforme mencionado no livro texto, na prática,
são utilizados blocos com 12 bits, o que resulta em 4096 posições no livro código. Além
disso, o algoritmo de Lempel-Ziv reconhece redundância entre caracteres, o que não ocorre
com o algoritmo de Huffman. Particularmente eficiente para compactação de textos, o
algoritmo de Lempel-Ziv pode atingir uma compactação de 43% contra 55% do algoritmo de
Huffman, para textos em inglês.
X {x 0 , x1 , ..., x J −1 } X Y Y {y 0 , y1 , ..., y K −1 }
p(yk|xj)
Alfabeto de entrada Alfabeto de saída
18
1. Limites Fundamentais da Teoria da Informação
p ( yk | x j ) = P (Y = yk | X = x j ) para todos j e k.
Note que os alfabetos X e Y não necessariamente têm o mesmo tamanho. Tanto pode ocorrer
X ≥ Y como X ≤ Y.
p ( y0 | x0 ) p ( y1 | x0 ) L p ( y K −1 | x0 )
p( y | x ) p ( y1 | x1 ) L p( y K −1 | x1 )
P= 0 1
(1.13)
M M M
p ( y0 | xJ −1 ) p ( y1 | xJ −1 ) L p ( y K −1 | xJ −1 )
K −1
∑ p(y
k =0
k | xj )=1 para todos os j. (1.14)
J −1
p( yk ) = ∑ p( yk | x j ) p(x j ) para k = 0, 1, ... , K – 1 (1.16)
j =0
EXEMPLO 1.4
Um canal de grande interesse teórico e prático é o canal binário simétrico. Este canal é um
caso especial do canal discreto sem memória quando J = K = 2. O alfabeto de entrada do
canal possui dois símbolos (x0 = 0, x1 = 1) e o de saída também dois símbolos (y0 = 0, y1 = 1).
O canal é simétrico porque a probabilidade de se receber 1 quando um 0 é transmitido é a
mesma de se receber 0 quando um 1 é transmitido. Esta probabilidade condicional é
representada por p. O diagrama da probabilidade de transição de um canal simétrico binário é
mostrado na figura a seguir.
19
1. Limites Fundamentais da Teoria da Informação
1-p
x0 = 0 y0 = 0
x1 = 1 y1 = 1
1-p
p10 = P( y = 1 | x = 0 )
p01 = P( y = 0 | x = 1)
p10 = p01 = p
* * *
J −1 1
H ( X | Y = y k ) = ∑ p( x j | y k ) log 2 . (1.17)
j =0 p ( x j | y k )
Que é uma variável aleatória e assume valores H(X|Y = y0), ... , H(X|Y = yK-1) com
probabilidades p(y0), ... , p(yK-1), respectivamente.
A média da entropia H(X|Y = yk), sobre o alfabeto de saída Y, representada pela notação
H(X|Y), é dada por:
20
1. Limites Fundamentais da Teoria da Informação
K −1
H ( X | Y ) = ∑ H ( X | Y = yk ) p( y k )
k =0
K −1 J −1 1
=∑ ∑ p ( x j | y k ) p ( y k ) log 2 (1.18)
k =0 j =0 p ( x j | y k )
K −1 J −1 1
=∑ ∑ p( x , y j k ) log 2
k =0 j =0 p( x j | y k )
Logo,
I ( X ;Y ) = H ( X ) − H ( X | Y )
(1.19)
I (Y ;X ) = H (Y ) − H (Y |X )
Onde H(Y) é a entropia da saída do canal e H(Y|X) é a entropia da saída do canal, dada
uma entrada de canal. Fazendo as substituições adequadas e algumas manipulações,
obtém-se
K −1 J −1
p( y k | x j )
I ( X;Y ) = I (Y;X ) = ∑ ∑ p ( x j | y k ) p ( y k ) log 2 . (1.20)
k =0 j =0 p( y k )
I ( X ;Y ) = I (Y ;X ) (1.21)
I ( X ;Y ) ≥ 0
I ( X ;Y ) = H ( X ) + H (Y ) − H (Y , X ) (1.22)
21
1. Limites Fundamentais da Teoria da Informação
C = max I ( X ;Y ) ≥ 0 (1.23)
{ p ( x j )}
A capacidade de canal C é medida em bits por uso do canal ou bits por transmissão.
Note que a capacidade de canal C depende apenas das probabilidades de transições p(yk|xj),
que define o canal. O cálculo de C envolve a maximização da informação mútua I(X|Y) sobre
a variável J [i.e., as probabilidades de entrada p(x0), ... , p(xj-1)]. Em geral, o problema
variacional da determinação da capacidade de canal C é uma tarefa desafiadora.
EXEMPLO 1.5
Conforme já apresentado,
K −1 J −1
p ( yk | x j )
I ( X;Y ) = I (Y;X ) = ∑ ∑ p( x j | yk ) p ( yk ) log 2
k =0 j =0 p ( yk )
Logo,
C = 1 + p log 2 p + (1 − p) log 2 (1 − p)
Usando a função entropia definida anteriormente (1.4), repetida abaixo por conveniência, i.e.,
H( p ) = − p log 2 p − (1 − p ) log 2 (1 − p )
chega-se finalmente a
C = 1 − H( p) . (1.24)
22
1. Limites Fundamentais da Teoria da Informação
Capacidade de canal
C
1
p
0
0,5 1
Probabilidade de transição
Figura 1.6 - Capacidade de canal de um canal binário discreto sem memória em função da
probabilidade de transição.
1. Quando o canal é livre de ruído, ou seja p = 0, a capacidade de canal C assume o seu valor
máximo de um bit por uso do canal.
2. Quando a probabilidade condicional de erro é p = ½ devido ao ruído, a capacidade de canal
assume seu menor valor que é zero, enquanto a entropia assume seu maior valor que é 1
(máxima incerteza). Neste caso o canal é dito não utilizável.
23
1. Limites Fundamentais da Teoria da Informação
Transmissor Receptor
Ruído
Até aqui a variável tempo não foi considerada na discussão sobre a capacidade de canal.
Admitindo que uma fonte emita símbolos a cada Ts segundos e que a entropia da fonte, H(S),
é a medida de bits por símbolo transmitido, então H(S)/Ts têm a dimensão de bits por
segundo. Por outro lado, C é a capacidade de canal em bits por uso do canal. Admitindo ainda
que o canal possa ser utilizado durante Tc segundos, então a capacidade de canal dividida pelo
tempo de utilização tem a dimensão de bits por segundo, que representa a máxima taxa de
transferência de informação pelo canal.
24
1. Limites Fundamentais da Teoria da Informação
Suponha uma fonte discreta sem memória com alfabeto S e entropia H(S) bits por
símbolo de fonte que produz um símbolo a cada Ts segundos. Seja um canal discreto sem
memória que tem uma capacidade de C bits por uso do canal e é usado a cada Tc
segundos. Então se
H (S) C
≤ (1.25)
Ts Tc
deve existir um esquema de codificação de tal forma que a saída da fonte pode ser
transmitida pelo canal com uma taxa de erros arbitrariamente baixa.
O parâmetro C/Tc é chamado de taxa crítica. Quando a igualdade é obtida diz-se que o
sistema está transmitindo na taxa crítica. Inversamente, se
H (S) C
>
Ts Tc
não é possível transmitir informação pelo canal com taxa arbitrariamente baixa.
1. O teorema não mostra como construir bons códigos. Ele deve ser interpretado no
sentido de uma prova de existência, i. e., desde que a limitação imposta pelo teorema
seja satisfeita, então a existência do código é possível.
2. O teorema não apresenta um resultado preciso para a probabilidade de erro depois da
decodificação de canal. Ele indica que a probabilidade de erro tende para zero
conforme o comprimento do código aumenta, mais uma vez, desde que a limitação
imposta pelo teorema seja satisfeita.
25
1. Limites Fundamentais da Teoria da Informação
Considere uma fonte discreta sem memória que emite símbolos 0’s e 1’s, com probabilidades
iguais, a cada Ts segundos. Considere também que a entropia da fonte é igual a um bit por
símbolo de fonte e, portanto, a fonte emite informação a uma taxa de 1/Ts bits por segundo.
Considere ainda a existência de um codificador de canal cujo código possui uma taxa
decodificação r, sendo r definido como:
k
r= ,
n
Como
Tc
r=
Ts
então
r ≤C.
Ou seja, para r < C, deve existir um código capaz de permitir uma transmissão com taxa de
erro tão baixa quanto se queira.
EXEMPLO 1.6
26
1. Limites Fundamentais da Teoria da Informação
SOLUÇÃO:
H( p ) = − p log 2 p − (1 − p ) log 2 (1 − p )
Como p = 0,1
log 0,1 log 0,9
C = 1 − − 0,1 − 0,9
log 2 log 2
C = 0,531
Conforme apresentado
k
r= ≤C
n
k ≤ nC
Como n = 7
k = nC = 7 × 0,531 = 3,72
k =3
* * *
Considere uma variável aleatória contínua X com função densidade de probabilidade fX(x).
Por analogia com a entropia para variáveis discretas pode-se escrever que
∞
1
h( X ) = ∫f
−∞
x ( x) log 2 dx ,
f x ( x)
(1.27)
∞
1
h( X ) = ∫f
−∞
x (x) log 2 dx ,
f x ( x)
(1.28)
27
1. Limites Fundamentais da Teoria da Informação
Considere agora um par de variáveis aleatórias contínuas X e Y. Mais uma vez, por analogia
ao que foi definida para variáveis discretas, a informação mútua torna-se
∞ ∞
f ( x | y)
I ( X ;Y ) = ∫∫f
− ∞ −∞
X,Y ( x, y ) log 2 X
f x ( x)
dx dy (1.29)
Também por analogia, as seguintes propriedades para a informação mútua são válidas:
1. I ( X ; Y ) = I (Y ; X )
2. I ( X ; Y ) ≥ 0
3. I ( X ; Y ) = h( X ) − h( X | Y ) = h(Y ) − h(Y | X )
∞ ∞
1
h( X | Y ) = ∫∫f
−∞ −∞
X,Y ( x, y ) log 2 dx dy .
f x ( x | y)
(1.30)
K = 2 BT ,
onde Xk é uma amostra do sinal transmitido em um canal perturbado com ruído Gaussiano
branco aditivo (AWGN) de média zero e densidade espectral de potência N0/2. As amostras
do sinal recebido são representadas pelas variáveis aleatórias contínuas Yk, k = 1, 2, ... , K,
estatisticamente independentes, de forma que
Yk = X k + N k k = 1, 2, K , K ,
onde Nk representa a amostras de ruído Gaussiano com média zero e densidade espectral de
potência dado por
28
1. Limites Fundamentais da Teoria da Informação
σ 2 = N0B . (1.31)
O canal descrito pelas duas últimas equações é chamado de canal Gaussiano sem memória,
discreto no tempo e é modelado conforme mostrado na figura a seguir.
Xk Σ Yk
Nk
Figura 1.8 - Modelagem do canal gaussiano sem memória discreto no tempo.
C = max {I ( X k ; Yk ) : E[ X k2 ] = P} , (1.32)
fX k ( x)
onde a maximização é feita com relação a fXk (x). Por conveniência a informação mútua I(Xk;
Yk) pode ser escrita como
I ( X k ; Yk ) = h(Yk ) − h(Yk | X k )
Uma vez que Xk e Nk são variáveis aleatórias independentes e sua soma é igual a Yk a entropia
diferencial condicional de Yk, dado Xk, é igual a entropia diferencial de Nk, conforme mostrado
a seguir.
h( N k ) = h(Yk | X k )
Consequentemente,
I ( X k ; Yk ) = h(Yk ) − h( N k ) .
e a entropia diferencial de Nk é
29
1. Limites Fundamentais da Teoria da Informação
1
h( N k ) = log 2 (2πeσ 2 )
2
Com o canal sendo usado K vezes para a transmissão de K amostras em T segundos, então a
capacidade de informação por unidade de tempo é obtida multiplicando-se a equação
apresentada acima por K/T. Como K = 2BT e σ2 = N0B, então a capacidade de canal por
unidade de tempo torna-se:
P
C = B log 2 1 + bits por segundo. (1.34)
N 0 B
Assim o terceiro e mais famoso teorema de Shannon pode ser enunciado da forma como
apresentado a seguir.
P
C = B log 2 1 + ,
N 0 B
O teorema implica que, para uma dada relação sinal/ruído, é possível transmitir a uma taxa de
C bits por segundo com probabilidade de erro arbitrariamente baixa empregando um esquema
de codificação de canal suficientemente complexo. Por outro lado, não é possível transmitir a
uma taxa maior do que C bits por segundo com qualquer esquema de codificação sem uma
probabilidade de erro definida. Assim, o Teorema da Capacidade de Canal define um limite
fundamental para a taxa de transmissão livre de erros para um canal gaussiano com uma dada
relação sinal/ruído e largura de faixa limitada. Para alcançar este limite, no entanto, o sinal
deve ter propriedades estatísticas semelhantes à do ruído gaussiano.
30
1. Limites Fundamentais da Teoria da Informação
S
C = B log 2 1 + bits por segundo. (1.35)
N
EXEMPLO 1.7
Considere um canal AWGN limitado em faixa (B = 3,4 kHz) e uma potência de recepção
(saída do canal) igual a 1pW. Determine a capacidade do canal, considerando que o mesmo
está submetido a uma temperatura equivalente de ruído igual a 290 K. Determine também a
relação sinal-ruído em dB.
SOLUÇÃO:
P
= B log 2 1 +
P S
C = B log 2 1 + = B log 2 1 +
N0 B kTB N
S P 1×10−12
= = − 23
= 73,49 ×103
N kTB 1,38 ×10 × 290 × 3,4 ×10
3
(
log 1 + 73,49 ×103
C = 3,4 × 103
)
log 2
C = 54,96 kbit/s
S
= 10 log 73,49 ×10
3
dB
N
S
= 48,66 dB
N dB
CONCLUSÃO:
* * *
31
1. Limites Fundamentais da Teoria da Informação
P = Eb C ,
onde Eb é a energia transmitida por bit. Assim (1.34) pode ser reescrita como
C E C
= log 2 1 + b .
B N0 B
Equivalentemente, a relação entre a energia por bit e a densidade espectral de ruído Eb/N0 em
termos de C/B para o sistema ideal é
C
Eb 2 B − 1
= .
N0 C
B
Com a expressão acima é possível traçar a curva que estabelece a relação entre a eficiência de
largura de faixa Rb/B e a relação Eb/N0, que é chamado de diagrama da eficiência de largura
de faixa. A forma genérica deste diagrama é mostrada na Figura 1.9, onde a curva intitulada
"limite da capacidade" corresponde ao sistema ideal no qual Rb = C.
100
10
Limite da
Eficiência de BW capacidade
Rb=C
0.1
0 10 20 30
Eb/N0 em
dB
Figura 1.9 - Eficiência × Largura de Faixa para Rb = C.
32
1. Limites Fundamentais da Teoria da Informação
O limite é representado por uma fronteira entre a região em que é possível uma transmissão
livre de erros (Rb < C) e a região em que isso não é possível (Rb > C) em um plano da
eficiência de largura de faixa em função da relação entre a energia de bit e a densidade
espectral de ruído, conforme apresentado a seguir.
Um exemplo disso são as fontes de sinais contínuos, como por exemplo, o sinal de voz. Neste
caso, os sistemas de comunicação geralmente impõem restrições quanto ao comprimento das
palavras códigos, acarretando na limitação do número de níveis de quantização do sinal.
Assim, a aproximação de um sinal contínuo para um número reduzido de níveis discretos
produz erros de quantização severos cuja consequência é a degradação da qualidade do sinal
por meio da introdução, no sinal transmitido, de um ruído de quantização com amplitude
significativa.
Neste caso, o problema é definido como codificação de fonte com um critério de fidelidade. A
teoria da distorção-taxa encontra aplicações em dois tipos de situação:
Se vista de forma adequada, a teoria da distorção-taxa pode ser vista como uma extensão
natural dos teoremas de codificação de Shannon. Para maiores detalhes sobre este assunto
veja Seção 9.13, Capítulo 9 do livro Communication System, Simon Haykin.
33
1. Limites Fundamentais da Teoria da Informação
No caso de uma fonte discreta, a razão para o uso da compressão de dados é codificar a saída
da fonte à uma taxa menor do que a entropia da fonte. Consequentemente, a entropia da fonte
é violada, o que significa que a reprodução exata do que a fonte produziu é impossível.
[2] SKLAR, Bernard – Digital Communications. 2nd Ed. Prentice Hall. 2001.
34
1. Limites Fundamentais da Teoria da Informação
1. O alfabeto de uma fonte discreta sem memória é composto por 5 símbolos. Os símbolos
emitidos pela fonte devem ser codificados por meio de um código prefixo a partir do
histograma da frequência de emissão apresentado abaixo. O número total de símbolos do
histograma foi emitido em 1 ms.
No de símbolos
400
350
300
250
200
150
100
50
S0 S1 S2 S3 S4
Símbolos
Pede-se:
a) A entropia da fonte.
b) As palavras códigos de um código prefixo para esta fonte.
c) A eficiência de codificação.
d) Determine qual é a taxa de bit na saída do codificador de fonte.
2. O alfabeto de uma fonte discreta sem memória (S) possui 3 símbolos. As probabilidades de
emissão dos símbolos S0, S1 e S2 são respectivamente 0,55; 0,35 e 0,1. Pede-se:
a) Criar um código prefixo para a fonte S.
b) Criar um código prefixo para a fonte estendida S2.
c) Comparar as eficiências de codificação para os dois códigos e comentar o resultado.
3. Considere uma fonte discreta sem memória cujo alfabeto e as probabilidades de ocorrência
de símbolos são dadas a seguir.
Si S0 S1 S2 S3 S4 S5
pi 0,35 0,25 0,15 0,10 0,10 0,05
Determine qual é a máxima taxa teórica de emissão de símbolos da fonte, considerando sua
codificação com o algoritmo de Huffmann, de modo que a informação na forma binária
possa ser transmitida em um canal com largura de faixa igual a 1 MHz e relação sinal ruído
igual a 30 dB.
35
1. Limites Fundamentais da Teoria da Informação
6. Uma fonte discreta sem memória emite símbolos que são estatisticamente independentes.
Admita que esses símbolos sejam codificados com um código prefixo casado com a fonte,
resultando nas seguintes palavras códigos: S0 = 0001; S1 = 011; S2 = 0011; S3 = 10; S4 =
0010; S5 = 010; S6 = 0000; S7 = 11. Determine a entropia desta fonte.
7. A Figura abaixo mostra uma codificação de Huffman. Qual é a palavra código para cada
símbolo A, B, C, D, E, F e G representado pela codificação de Huffman. Qual é o
comprimento de cada palavra código?
1-p
x0 = 0 y0 = 0
x1 = 1 y1 = 1
1-p
36
1. Limites Fundamentais da Teoria da Informação
10. Dois canais binários simétricos são conectados em cascata conforme ilustra a Figura a
seguir. Encontre a capacidade do canal, assumindo que ambos canais tem o mesmo
diagrama de estado de probabilidade.
11. Um canal de voz em uma rede telefônica tem uma largura de banda de 3.4 kHz.
a) Calcule a capacidade de informação que este canal para uma relação sinal ruído de 30
dB.
b) Calcule a mínima relação sinal ruído necessário para suportar uma transmissão por este
canal telefônico para uma taxa de 30 kbps.
13.Um terminal remoto deve enviar símbolos alfanuméricos para um computador à uma taxa
de 1 milhão de símbolos por segundo por meio de um canal cuja relação sinal/ruído é igual
a 30 dB. Admita que o terminal possua 256 símbolos diferentes e que a transmissão destes
símbolos seja equiprovável e estatisticamente independente. Determine a largura de faixa
mínima do canal, à luz do teorema da capacidade de informação, de modo que essa
transmissão possa ser teoricamente realizável.
14. Se um sinal binário é transmitido através de um canal de 3 kHz cuja relação sinal-ruído é
de 20 dB, qual é a taxa de dados máxima alcançável?
15. Considere que o alfabeto de uma fonte possui 64 símbolos com iguais probabilidades de
ocorrência. Admita que tais símbolos sejam convertidos em palavras binárias para que
sejam transmitidos em um canal AWGN cuja largura de faixa é igual a 106 Hz. Determine
qual deve ser a menor relação sinal ruído teórica, em dB, para que a transmissão de 106
símbolos por segundo possa ser realizada com taxa de erro arbitrariamente baixa.
* * *
37
2 CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
Foi mostrado anteriormente que um canal de comunicação pode apresentar uma série de
imperfeições que dificultam a correta interpretação e perfeita reprodução dos sinais
transmitidos. Tais imperfeições se apresentam como ruídos, distorções, interferências,
desvanecimentos, etc, e, como consequência, a função do receptor pode ser resumida como
sendo habilidade de apresentar em sua saída a melhor estimativa da informação ou mensagem
que foi transmitida [1].
Desde que a taxa de transmissão seja menor do que a capacidade do canal, então existe um
esquema de codificação capaz de permitir a obtenção de taxas de erro de bit arbitrariamente
baixas.
37
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
De fato, a busca de um esquema de codificação, que em geral é um processo heurístico, nem sempre
tem como principal meta alcançar desempenhos próximos dos apresentados pelos limites
fundamentais da Teoria da Informação. Em sistemas reais, a busca de um esquema de codificação
pode estar associada a aspectos práticos como velocidade de processamento, complexidade de
implementação, etc. Independentemente de qual seja a abordagem utilizada na busca de um
esquema de codificação, é necessário um bom conhecimento dos fundamentos associados às
técnicas de codificação para controle de erro.
O objetivo deste capítulo é apresentar os fundamentos dos Códigos de Bloco Lineares e seus
desempenhos. Eles são apresentados em cinco seções:
Definições Fundamentais
Códigos de Bloco Lineares
Desempenho dos Códigos de Bloco Lineares
Códigos Cíclicos
Características dos Códigos de Bloco Bem Conhecidos
Antes da apresentação dos Códigos de Blocos Lineares, algumas definições iniciais são oportunas.
Códigos de blocos se caracterizam pelo fato do processo de codificação ser feito sobre blocos de
bits ou blocos de símbolos. Isso quer dizer que um feixe de bits ou símbolos é segmentado em
blocos de k bits ou símbolos, a partir dos quais são geradas palavras códigos com n bits ou
símbolos. Assim, a notação que caracteriza um código de bloco é (n, k). Por conveniência, a partir
deste ponto a notação (n, k) estará associada à quantidade de bits. Quando a notação (n, k) for usada
para representar símbolos, isso será definido explicitamente.
A taxa de codificação de um código de bloco é definida como sendo a relação entre o número de
bits de informação e o número de bits da palavra código. Ou seja,
k
Rc = . (2.1)
n
A taxa de codificação é uma indicação relativa de quantos bits de informação são transmitidos por
palavra código. Uma vez que 0 < k ≤ n, então 0 < Rc ≤ 1. Entretanto, para que um código produza
algum benefício, é necessário que k < n, ou (n – k) > 0. Consequentemente, 0 < Rc < 1.
Nota-se que, se nenhum artifício for usado para compensar o acréscimo de bits devido à introdução
da redundância, então, para a manutenção da taxa de transmissão dos bits de informação é
38
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
O benefício obtido com o processo de codificação pode ser quantificado por meio do ganho de
codificação. O ganho de codificação é definido como sendo a relação entre Eb /N0 do sinal não
codificado, pelo Eb /N0 do sinal codificado, para uma dada taxa de erro, ou seja, o ganho de
codificação é tipicamente uma função de Pb. A expressão do ganho de codificação, em dB, é
apresentada a seguir [3][4][6]
E E
G = 10 log b − 10 log b (dB) . (2.2)
N 0 nc N 0 c
Onde, (Eb /N0)nc é a relação entre a energia de bit e a densidade espectral de ruído sem codificação e
(Eb /N0)c é a relação entre a energia de bit e a densidade espectral de ruído com codificação.
Eb E
= R b . (2.3)
N0 c N0 nc
39
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Pb
10-1
Sem
10-2 codificação
10-3
Com
codificação
1,4 dB
10-4
10-5
2 dB
10-6
3 4 5 6 7 8 9 10
Eb/N0 (dB)
Figura 2.1 - Curvas típicas de probabilidade de erro versus Eb /N0 para um sinal com codificação e
sem codificação.
De acordo com o comportamento das curvas apresentadas na Figura 2.1, pode-se concluir que:
1) Para baixos valores de Eb /N0 a codificação não apresenta nenhum benefício, ou seja, o
ganho de codificação pode ser nulo, para o valor de Eb /N0 determinado pelo cruzamento das
curvas, ou negativo para valores menores.
2) Para diferentes valores de Pb obtém-se diferentes ganhos de codificação. Por exemplo, para
Pb = 10-4 o ganho de codificação é igual o a 1,4 dB, enquanto para Pb = 10-6 o ganho sobe
para 2 dB. Isso demonstra a dependência do ganho de codificação com Pb.
3) A codificação permite obter redução de Pb com a mesma energia (Eb /N0 constante) em
relação ao sinal sem codificação. Por exemplo, para Eb /N0 = 7 dB, a Pb cai de 10-3 para
um pouco mais que 10-5.
Considerando-se a expansão de largura de faixa provocada pela codificação, pode-se concluir ainda:
40
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
O vetor recebido é entregue ao decodificador cuja finalidade é transformar o vetor recebido no vetor
decodificado, que consiste na melhor estimativa para o vetor código transmitido. A partir do vetor
código estimado, c’, a melhor estimativa da mensagem, m’, é reproduzida na saída do
decodificador. Essa cadeia de transformações é ilustrada no diagrama em blocos apresentado na
Figura 2.2 e pelo Exemplo 2.1.
Canal Decodificador
c r c’
m Codificador + Estimador de c Estimador de m m'
EXEMPLO 2.1
Seja um código de repetição (5, 1) aplicado ao vetor mensagem m = 1. Admitindo que o canal
introduza um vetor erro, e = 01010, ao vetor código, pede-se determinar todas as transformações
vetoriais desde a codificação da mensagem até a obtenção da mensagem estimada na saída do
decodificador.
Solução:
Evidentemente para o código de repetição (5, 1) só existem duas palavras códigos possíveis: 00000
e 11111. A palavra código correspondente à mensagem m = 1 é
c = 11111
O vetor recebido é
r = c ⊕ e = 11111 ⊕ 01010
r = 10101.
41
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Como um código de repetição pode ser decodificado por lógica majoritária, então a melhor
estimativa para o vetor código a partir do vetor recebido é
c’ = 11111,
que resulta na mensagem estimada
m’ = 1.
* * *
O peso de Hamming, nome dado em homenagem a Richard Wesley Hamming (*1915 - †1998) de
um vetor v, cuja notação é w(v), é definido como sendo o número de elementos não zero em v. Para
um vetor binário, o peso de Hamming é igual ao número de dígitos “1” contidos em v
[1][2][3][4][5][6].
EXEMPLO 2.2
Solução:
w(v) = 3.
* * *
A distância de Hamming entre dois vetores códigos v e x, cuja notação é d(v, x), é definida como
sendo o número de posições em que os dígitos dos dois vetores que são diferentes entre si. Para o
caso binário, a distância de Hamming pode ser determinada facilmente através da propriedade de
adição módulo-2, pois ela é igual ao número de dígitos “1” contidos no vetor resultante da operação
v ⊕ x. Ou seja,
d ( v, x) = w( v ⊕ x) . (2.5)
EXEMPLO 2.3
Solução:
d ( v, x) = w( v ⊕ x) = w(10110 ⊕ 10101) = w(00011)
d ( v, x) = 2
* * *
42
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Considere um conjunto V, constituídos por K vetores v0, v1, v2, ... , vK-1, formado por n elementos
de {0, 1}. Admita que sobre este conjunto sejam definidas duas operações, cujas regras são
apresentadas na Tabela 2.1. A adição, representada por ⊕, definida entre os elementos de V e a
multiplicação, representada por •, entre um elemento de {0, 1} e qualquer vetor de V
[1][2][3][4][5][6].
Adição Multiplicação
0⊕0=0 0•0=0
0⊕1=1 0•1=0
1⊕0=1 1•0=0
1⊕1=0 1•1=1
O conjunto V é definido como um espaço vetorial sobre {0, 1} se as seguintes condições são
satisfeitas:
a1 • ( v 1 ⊕ v 2 ) = (a1 • v 1 ) ⊕ (a1 • v 2 )
. (2.6)
(a1 ⊕ a 2 ) • v 1 = (a1 • v 1 ) ⊕ (a 2 • v 1 )
(a1 • a 2 ) • v 1 = a1 • (a 2 • v 1 ) . (2.7)
EXEMPLO 2.4
Encontrar o espaço vetorial V composto pelo maior número possível de vetores com cinco
elementos de {0, 1}.
Solução:
43
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
V5
00000 00100 01000 01100 10000 10100 11000 11100
00001 00101 01001 01101 10001 10101 11001 11101
00010 00110 01010 01110 10010 10110 11010 11110
00011 00111 01011 01111 10011 10111 11011 11111
* * *
EXEMPLO 2.5
A partir das propriedades do subespaço vetorial identificar dois subespaços vetoriais de V5,
apresentado na Tabela 2.3, que contenha:
1) 4 vetores
2) 8 vetores
Solução:
Tabela 2.3 - Subespaços de V5 com 4 e 8 vetores.
Importante: Os subespaços encontrados acima não são únicos. É possível encontrar, em V5, outros
subespaços contendo 4 e 8 vetores.
* * *
44
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Um código de bloco linear binário é um subespaço vetorial com 2k vetores do espaço vetorial
constituído de todos os 2n vetores com n elementos de {0, 1}. Este conceito está ilustrado na Figura
2.3. Consequentemente, considerando as duas condições necessárias para caracterizar um subespaço
vetorial aplicadas aos códigos de bloco lineares, conclui-se que:
Conjunto dos 2n
vetores com n 2n
bits
2k
Conjunto dos 2k
vetores códigos de
n bits
Figura 2.3 - Representação dos códigos de blocos lineares como um subespaço vetorial de um
espaço vetorial Vn.
Nota-se que o subespaço vetorial constitui o conjunto dos vetores códigos ou vetores válidos.
Portanto, qualquer vetor de n bits que não pertença ao subespaço vetorial está no espaço vetorial,
porém, é um vetor não válido. Uma estratégia de detecção de erros consiste em verificar se o vetor
recebido é um vetor válido ou não válido, i.e., se ele pertence ou não ao subespaço vetorial. Uma
vez constatado que o vetor recebido é um vetor não válido, uma estratégia de correção de erros
consiste na identificação de qual é o vetor válido que apresenta a menor distância de Hamming em
relação ao vetor recebido e elegê-lo como sendo o vetor transmitido.
Nos códigos de bloco lineares onde o valor de k é baixo esta tarefa é simples. Entretanto, quando k
apresenta valores relativamente altos, esta tarefa pode tornar-se impraticável, conforme mostrado no
Exemplo 2.6.
45
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
EXEMPLO 2.6
Solução
b) Quando o vetor é não válido, então ele é um dos 2n – 2k vetores não válidos, ou um entre
c) Uma estratégia de correção de erros é identificar entre os 1,36 × 1039 vetores válidos qual é
o vetor que apresenta a menor distância de Hamming em relação ao vetor não válido
recebido!
* * *
Nota-se que um subespaço vetorial é um conjunto de vetores linearmente dependentes (LD) devido
à propriedade do fechamento, i.e., qualquer vetor pode ser obtido pela soma de outros dois vetores
do subespaço. Uma vez que um subespaço vetorial binário contém 2k vetores, então deve existir um
ou mais subconjuntos com k vetores ditos linearmente independentes (LI) cujas combinações
lineares produzem todos os outros vetores do subespaço. Esses k vetores linearmente independentes
são chamados de base do subespaço. Os conceitos de espaço vetorial, subespaço vetorial e base do
subespaço estão apresentados, em termos de conjunto, na Figura 2.4.
Espaço 2n
Subespaço
2k
Base do
k Subespaço
Vetorial
Figura 2.4. Representação de espaço vetorial, subespaço vetorial e base do subespaço vetorial.
46
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
EXEMPLO 2.7
A partir do subespaço vetorial com 8 vetores, apresentado na Tabela 2.3, identificar uma base capaz
de gerar todos os outros vetores deste subespaço, através de combinações lineares dos vetores desta
base.
Solução
Como o objetivo é formar uma base para a geração de um subespaço com 2k = 8 vetores LD o
número necessário de vetores na base será k = 3 vetores LI. Escolhendo-se arbitrariamente 3 vetores
LI entre os 8 vetores da Tabela 2.3, pode-se obter:
b0 = 01011
b1 = 10010
b2 = 01100
Prova: Com a combinação linear dos vetores encontrados é possível encontrar todos os outros
vetores do subespaço, representados a seguir pelos vetores vj, obtidos a partir da operação
v j = u 0 • b 0 + u1 • b 1 + … + u k −1 • b k −1 , (2.8)
v0 = 0 • b0 + 0 • b1 + 0 • b2 = 00000
v1 = 1 • b0 + 0 • b1 + 0 • b2 = 01011 ← Vetor da base
v2 = 0 • b0 + 1 • b1 + 0 • b2 = 10010 ← Vetor da base
v4 = 0 • b0 + 0 • b1 + 1 • b2 = 01100 ← Vetor da base
v3 = 1 • b0 + 1 • b1 + 0 • b2 = 11001
v5 = 1 • b0 + 0 • b1 + 1 • b2 = 00111
v6 = 0 • b0 + 1 • b1 + 1 • b2 = 11110
v7 = 1 • b0 + 1 • b1 + 1 • b2 = 10101
* * *
Uma matriz geradora, G, é aquela que permite obter os vetores códigos, cj,
correspondentes às mensagens, mi, a partir do produto interno determinado por
c j = m j ⋅G , (2.9)
47
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
g 0 g 00 g 01 g 02 ⋯ g 0, n −1
g g g11 g12 ⋯ g1, n−1
G= 1 =
10
(2.10)
⋮ ⋮ ⋮ ⋮ ⋮
g k −1 g k −1, 0 g k −1, 1 g k −1, 2 ⋯ g k −1, n −1
Onde g0, g1, ... , gk –1, são os vetores geradores. Para uma conveniente simplificação da notação, a
partir deste ponto, os vetores códigos cj e mj serão representados simplesmente por c e m,
respectivamente. Logo, substituindo (2.10) em (2.9), obtém-se
g0
g
c = m ⋅ G = (m0 , m1 , … , mk −1 ) • 1 = m0 g 0 + m1g 1 + … + mk −1g k −1 . (2.11)
⋮
g k −1
Observa-se claramente a semelhança entre (2.8) e (2.11), o que significa que a combinação linear
dos elementos dos vetores mensagem com as linhas da matriz geradora produzem vetores códigos
que estão associados inequivocamente aos vetores mensagens que os produziu.
EXEMPLO 2.8
Solução:
a) A obtenção de uma matriz geradora a partir do Exemplo 2.7 é direta, pois ela nada mais é do que
a base de um subespaço vetorial, logo, utilizando os mesmos vetores b0 = 01011, b1 = 10010 e b2
= 01100 para g0, g1 e g2, respectivamente, obtém-se
0 1 0 1 1
G = 1 0 0 1 0 . (2.12)
0 1 1 0 0
b) Como a matriz geradora possui três linhas, os vetores resultantes de todas as combinações
lineares serão 2k = 23 = 8, obtidos a partir de todos os vetores mensagens possíveis contendo de
três bits. Consequentemente G é a matriz geradora de um código (5, 3), conforme mostrado a
seguir.
48
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Tabela 2.4. - Vetores códigos do código (5, 3) gerados a partir da matriz G em (2.12).
m c = m.G c
000 c0 = 0 (01011) + 0 (10010) + 0 (01100) 00000
100 c1 = 1 (01011) + 0 (10010) + 0 (01100) 01011
010 c2 = 0 (01011) + 1 (10010) + 0 (01100) 10010
110 c3 = 1 (01011) + 1 (10010) + 0 (01100) 11001
001 c4 = 0 (01011) + 0 (10010) + 1 (01100) 01100
101 c5 = 1 (01011) + 0 (10010) + 1 (01100) 00111
011 c6 = 0 (01011) + 1 (10010) + 1 (01100) 11110
111 c7 = 1 (01011) + 1 (10010) + 1 (01100) 10101
* * *
Os vetores códigos apresentados na Tabela 2.4, gerados pela operação apresentada em (2.11), não
apresentam explicitamente a mensagem que o gerou como sendo um segmento do próprio vetor
código. Isso significa que neste tipo de codificação a mensagem passa a ser conhecida somente após
o processo de decodificação. Essa forma de codificação é chamada de codificação não sistemática.
Uma característica desejável em um processo de codificação para um código de bloco linear é
aquela que permite que o vetor código seja composto por dois segmentos: um segmento composto
pelos (n – k) bits de redundância que permitem a verificação da validade do vetor e outro segmento
correspondente aos k bits da mensagem que gerou os bits de redundância. A disposição do
segmento redundância e do segmento mensagem é uma questão de convenção. A convenção
adotada neste texto está apresentada na Figura 2.5. A forma de codificação que permite a obtenção
do vetor código nesse formato é chamada de codificação sistemática.
Vetor Código
Vetores códigos com a convenção mostrada na Figura 2.5 podem ser obtidos a partir de matrizes
geradoras com um formato específico. Este formato, apresentado em (2.13), consiste de uma matriz
geradora formada por duas outras matrizes: uma matriz de paridade com dimensões k × (n – k) e
outra matriz identidade de dimensões k × k. Desta forma, a matriz de paridade permite que o
49
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
segmento paridade seja obtido pela soma linear dos bits da mensagem, enquanto a matriz identidade
permite que o segmento mensagem seja replicado em seguida.
p 00 p 01 ⋯ p 0, n − k −1 1 0 ⋯ 0 g 0
p
0 g 1
[
G = Pk × ( n −k ) I k × k ] =
⋮
10 p11 ⋯
⋮
p1, n− k −1
⋮
0 1
⋮ ⋮
=
⋮ ⋮
(2.13)
p k −1, 0 p k −1, 1 ⋯ p k −1, n −k −1 0 0 ⋯ 1 g k −1
Uma vez que uma matriz geradora é um arranjo de vetores linearmente independentes, uma matriz
geradora de um código de bloco linear na forma sistemática pode ser obtida pela conveniente
combinação linear dos vetores geradores e/ou permutação de colunas ou linhas da matriz geradora
na forma não sistemática para a obtenção de outro arranjo de novos vetores geradores, linearmente
independentes, no formato desejado. Essa operação é mostrada no Exemplo 2.9.
EXEMPLO 2.9
A partir da matriz geradora do código (5, 3) apresentada pela Equação (2.12), pede-se
Solução
a) De (2.12),
g 0 0 1 0 1 1
G = g 1 = 1 0 0 1 0
g 2 0 1 1 0 0
g0' = g2 = 01100
g1' = g1 = 10010
g2' = g0 + g1 = 11001
g 0 ' 0 1 1 0 0
G ' = g 1 ' = 1 0 0 1 0 (2.14)
g 2 ' 1 1 0 0 1
50
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Tabela 2.5 - Vetores códigos do código (5, 3) gerados a partir da matriz G’ (2.14).
m c = m.G' c
000 c0 = 0 (01100) + 0 (10010) + 0 (11001) 00000
100 c1 = 1 (01100) + 0 (10010) + 0 (11001) 01100
010 c2 = 0 (01100) + 1 (10010) + 0 (11001) 10010
110 c3 = 1 (01100) + 1 (10010) + 0 (11001) 11110
001 c4 = 0 (01100) + 0 (10010) + 1 (11001) 11001
101 c5 = 1 (01100) + 0 (10010) + 1 (11001) 10101
011 c6 = 0 (01100) + 1 (10010) + 1 (11001) 01011
111 c7 = 1 (01100) + 1 (10010) + 1 (11001) 00111
Observe que tanto a matriz G quanto a matriz G’ geram o mesmo subespaço vetorial. Entretanto,
para cada uma das mensagens os vetores códigos gerados são diferentes em cada caso.
* * *
Conforme apresentado na Figura 2.2, o vetor recebido, r, pode ser entendido como um vetor código
que, ao ser transmitido através de um canal de comunicação, pode ter sofrido uma alteração,
consequência da adição de um padrão de erro. Portanto, uma tarefa do decodificador é verificar se o
vetor recebido é ou não um vetor código ou vetor válido. Mais uma vez, uma abordagem simplista
para a realização desta tarefa seria a comparação do vetor recebido com todos os vetores códigos.
Entretanto, para valores de k da ordem de algumas dezenas, esta abordagem pode tornar-se árdua,
conforme mostrado no Exemplo 2.10. Uma forma mais simples para a verificação da validade ou
não de um vetor recebido utiliza uma propriedade dos subespaços vetoriais, que pode ser definida
da seguinte forma.
Se um subespaço vetorial, S1, pertence a um espaço vetorial, Vn, composto por todos os vetores de
comprimento n, então deve existir um subespaço vetorial S2, que é o espaço nulo ou o espaço dual
de S1, e que pode ser representado por uma matriz composta por vetores bases linearmente
independentes.
No estudo de códigos de bloco lineares a matriz geradora do subespaço nulo relativo ao subespaço
gerado por G é chamada de matriz verificadora de paridade, cuja notação é H, e tem dimensões
(n – k) × n, ou seja,
51
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Se um subespaço gerado por H é dual ao subespaço gerado por G então os vetores de G são
ortogonais aos vetores de H, ou seja,
G ⋅ HT = 0 . (2.16)
Pode-se verificar sem dificuldades que uma consequência direta de (2.16) é que a condição de
ortogonalidade de qualquer vetor código, c, gerado por G em relação ao espaço nulo gerado por H é
verdadeira, i.e.,
c ⋅ HT = 0 . (2.17)
[
G = Pk × ( n−k ) I k × k ,]
a obtenção da matriz H é direta, conforme mostrado a seguir.
1 0 ⋯ 0 p 00 p10 ⋯ p k −1, 0
[
H = I ( n − k ) ×( n − k ) P T ] =
0 1
⋮ ⋮ ⋮
0 p 01
⋮
p11
⋮
⋯ p k −1, 1
⋮
(2.18)
0 0 ⋯ 1 p 0, n − k −1 p1, n − k −1 ⋯ p k −1, n − k −1
EXEMPLO 2.10
Solução:
0 1 1 0 0
[
G = Pk × ( n − k ) I k × k ] = 1 0 0 1 0
1 1 0 0 1
[
H = I ( n −k ) ×( n − k ) P T ] = 01 0 0 1 1
1 1 0 1
. (2.19)
52
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
b) O vetor código, c, correspondente ao vetor mensagem m = 101 pode ser obtido conforme
mostrado em (2.11), ou seja:
0 1 1 0 0
c = m ⋅ G = (101) 1 0 0 1 0 = 1 (01100) + 0 (10010) + 1 (11001)
1 1 0 0 1
c = 10101
A condição de ortogonalidade pode ser verificada a partir do resultado do produto interno entre o
vetor código, c, e a matriz verificadora de paridade transposta HT, conforme mostrado a seguir.
1 0
0 1
c ⋅ H T = (10101) 0 1 = 1 (10) + 0 (01) + 1 (01) + 0 (10) + 1 (11) = 00 . (2.20)
1 0
1 1
* * *
Considere o conjunto de distâncias entre todos os pares de vetores código em um espaço Vn. O
menor membro do conjunto é a distância mínima do código e é denotado por dmin.
Mais uma vez a propriedade dos códigos lineares discutida anteriormente permite afirmar que se c1
e c2 são vetores código, então o vetor c3 obtido pela operação c1 ⊕ c2 é também um vetor código.
Assim a distância de Hamming entre dois vetores códigos é determinada como sendo
53
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Exemplo 2.11
Determine a distância mínima do código (6, 3), definida pela matriz geradora na forma sistemática
apresentada a seguir.
1 0 1 1 0 0
G = 1 1 0 0 1 0 (2.27)
0 1 1 0 0 1
Solução:
Uma vez que este código possui poucas palavras códigos, uma solução é listá-las por meio da
operação c = m.G. O resultado dessa operação para todas as possíveis mensagens com 3 bits está
mostrado na tabela a seguir.
Tabela 2.6 - Vetores códigos do código (6, 3) gerados a partir da matriz G (2.27).
m c
000 000000
100 101100
010 110010
110 011110
001 011001
101 110101
011 101011
111 000111
Pode-se verificar, inspecionando-se a tabela acima, que as palavras de menor peso são as palavras
com peso 3. Logo a distância mínima é igual a 3.
1 0 0 1 1 0
H = 0 1 0 0 1 1 (2.28)
0 0 1 1 0 1
* * *
É muito comum um código de bloco linear (n, k) com distância mínima dmin ser representado pela
notação (n, k, dmin). O código (6, 3) do Exemplo 2.11 é um código (6, 3, 3).
54
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
No receptor, o decodificador tem por função estimar o vetor código recebido em função do vetor
código transmitido. Em um canal de transmissão AWGN (Additive White Gaussian Noise - Ruído
Branco Gaussiano Aditivo), o ruído afeta os símbolos transmitidos aleatoriamente, segundo uma
distribuição estatística normal ou gaussiana. Assim, padrões de erros com menos bits errados tem
maior probabilidade de ocorrer do que padrões de erros com mais bits errados.
Consequentemente, em um canal BSC (Binary Simertic channel - Canal Simétrico Binário), dado
um vetor recebido r, a melhor estimativa é feita admitindo-se que o vetor código transmitido é
aquele que está mais próximo de r, sob o ponto de vista da distância de Hamming. Se dois vetores
códigos tiverem a mesma distância de Hamming do vetor r recebido, a escolha pode ou não ser
arbitrária dependendo do tipo de decisor utilizado (hard decision ou soft decision).
A Figura 2.6 apresenta dois vetores c1 e c2 unidos por uma linha calibrada em distância de
Hamming. Cada ponto preto representa um vetor recebido r. Na parte (a) da figura, o vetor recebido
r1 dista 1 bit de c1 e 4 bits de c2. De acordo com a estratégia de máxima probabilidade, o
decodificador selecionará o vetor c1 como aquele que foi transmitido. Na parte (b) da figura, o vetor
recebido r2 dista 2 bits de c1 e 3 bits de c2. Mais uma vez o decodificador selecionará o vetor c1
como sendo o vetor recebido. Finalmente na parte (c) da figura, o vetor recebido r3 dista 3 bits de c1
e 2 bits de c2. Desta vez o decodificador selecionará o vetor c2 como sendo o vetor recebido.
Linha de decisão
Região 1 Região 2
c1 r1 (a) c2
c1 r2 c2
(b)
c1 r3 c2
(c)
Figura 2.6 – Capacidade de detecção e correção de erro. (a) Vetor recebido r1. (b) Vetor recebido
r2. (c) Vetor recebido r3.
55
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
d − 1
t = min (2.29)
2
onde x significa o maior inteiro que não excede o valor de x. Assim, um código que corrige todas
as sequências de t erros, pode também corrigir certas sequências de t +1 erros.
Se o código for usado com a finalidade exclusiva de detectar erros ao invés de corrigir erros, a
capacidade de detecção de erros do código é determinada por
e = d min − 1 , (2.30)
onde e é o número de erros detectados. Entretanto, um código de blocos pode ser ainda usado para
corrigir e detectar erros simultaneamente. Neste caso, admitindo que a soma das capacidades de
correção automática e detecção de erros (t + e) é a máxima possível, então a seguinte condição deve
ser satisfeita:
d min = t + e + 1 . (2.31)
Assim, um código com dmin = 4, por exemplo, pode corrigir todos os padrões de 1 erro (t = 1) e
detectar todas as combinações possíveis de dois erros (e = 2).
Seja r = r1, r2, ... , rn um vetor recebido (i.e. uma das 2n palavras de n bits do espaço vetorial Vn)
resultante da transmissão de um vetor código c = c1, c2, ... , cn (i.e. uma das 2k palavras códigos
de n bits) através de um canal com ruído. Logo,
r =c+e. (2.32)
onde e = e1, e2, ... , en é um vetor erro ou padrão de erro introduzido pelo canal. Síndrome de erro é
um vetor com n – k bits, definido pela operação
S = r ⋅ HT . (2.33)
S = (c + e ) ⋅ H T = c ⋅ H T + e ⋅ H T (2.34)
mas,
c ⋅ HT = 0 . (2.35)
Consequentemente,
S = e ⋅ HT (2.36)
56
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
A equação acima mostra que a síndrome S está associada a um padrão de erro. Esta é uma
importante propriedade, fundamental para o processo de decodificação, ou seja, cada padrão de erro
corrigível deve estar associado a uma síndrome específica.
É importante notar que para isso ocorrer, duas propriedades da matriz verificadora de paridade são
necessárias:
Nenhuma coluna da matriz H pode ser toda zero, caso contrário, um erro na posição
correspondente à linha toda zero seria indetectável;
Todas as colunas de H devem ser únicas. Se duas colunas de H forem iguais, erros nas posições
correspondentes a essas linhas podem ser indistinguíveis.
Um código de bloco linear (n, k) com capacidade de correção de t erros é capaz de corrigir um
total de 2n-k padrões de erros.
Os códigos que corrigem exclusivamente todos os padrões de t erros ou menos e nenhum padrão
maior que t erros, são denominados códigos perfeitos, isto é, o número de síndromes deve ser igual
ao número exato de padrões com até t erros e nenhum padrão de erro contendo um número maior do
que t erros. Uma vez que todo código de bloco é capaz de corrigir 2n-k padrões de erros, um código
é perfeito quando a igualdade apresentada a seguir é satisfeita.
t
n
2 n − k = (2.37)
i =0 i
EXEMPLO 2.12
Solução:
d − 1 3 − 1
t = min = t =1
2 2
57
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Como a capacidade de correção de erro é t = 1, então este código é capaz de corrigir todos os
padrões com 1 erro, ou seja,
e (t = 1)
100000
010000
001000
000100
000010
000001
c) Síndromes de erros associadas aos padrões de erros corrigíveis dentro da capacidade de correção
de erros do código.
1 0 0
0 1 0
0 0 1
HT = . (2.38)
1 0 1
1 1 0
0 1 1
De (2.36),
S = e ⋅ HT .
Tabela 2.7 - Padrões de erros corrigíveis e suas respectivas síndromes para o código de bloco
linear (6, 3, 3) gerado por (2.27).
e (t = 1) S
100000 100
010000 010
001000 001
000100 101
000010 110
000001 011
58
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
t
n
2 n − k =
i =0 i
2 n − k = 2 6 −3 = 8
t
n 6 6
i = 0 + 1 = 1 + 6 = 7
i =0
Logo, o código de bloco linear (6, 3, 3) não é um código perfeito. De fato, o número de síndromes
possíveis são todas as síndromes não nulas mais a síndrome nula, que totalizam 7 síndromes. Por
inspeção à Tabela 2.7, verifica-se a ausência da nula e da síndrome S = 111. A ausência da
síndrome nula deve-se ao fato que ela corresponde ao padrão de todo zero, ou seja, vetor recebido
sem erro, enquanto que a síndrome 111 só ocorrerá se o padrão de erro tiver 2 ou mais erros, o que
está fora da capacidade de correção deste código.
Conforme mostrado no Exemplo 2.12, deve existir uma correspondência exclusiva entre um padrão
de erro e uma síndrome de erro. Isso abre a possibilidade de não só podermos detectar erros, mas
também corrigi-los. A correção de erros pode ser feita de diversas formas. A seguir será apresentada
a correção de erros por meio da síndrome de erros. Basicamente, este processo de correção é feito a
partir da identificação do padrão de erro mais provável por meio do cálculo da síndrome de erros.
Uma vez conhecido o padrão de erro é possível fazer a correção de erro somando-se o vetor r
recebido com o padrão de erro, e, associado a ele, pois em (2.32),
r = c+e,
então,
c' = r + e . (2.39)
Onde c’ é a melhor estimativa do vetor código que foi transmitido pelo canal ruidoso. Este
procedimento pode ser resumido de acordo com os seguintes passos:
59
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
EXEMPLO 2.13
Suponha que o vetor c = 101011 do código (6, 3, 3), gerado por (2.27), tenha sido transmitido e
corrompido por ruído no canal, de modo que na recepção foi detectado o vetor r = 101010. Corrija
o erro introduzido pelo canal a partir da associação da síndrome com o padrão de erro mais
provável.
Solução:
A síndrome de erros para o vetor recebido é determinada por meio de (2.33), ou seja:
1 0 0
0 1 0
0 0 1
S = r ⋅ H T = (101010) = 1(100) + 0(010) + 1(001) + 0(101) + 1(110) + 0(011)
1 0 1
1 1 0
0 1 1
S = 100 + 001 + 110 S = 011
Em canais AWGN os padrões de erros mais prováveis são aqueles com menor número de erros.
Além disso, o erro só será corrigido com certeza se o padrão de erro introduzido pelo canal for um
padrão de erro corrigível pelo código.
A Tabela 2.7 obtida no Exemplo 2.12 associa os padrões de erros às suas respectivas síndromes.
Esta tabela é reapresentada a seguir com as colunas invertidas e reordenadas, para permitir mais
facilmente a identificação do padrão de erro a partir da síndrome obtida acima.
Tabela 2.8 - Síndromes e seus respectivos padrões para o código de bloco linear (6, 3, 3) gerado
por (2.27).
S e (t = 1)
000 000000
001 001000
010 010000
011 000001
100 100000
101 000100
110 000010
60
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
De acordo a Tabela 2.8 a síndrome calculada corresponde ao padrão de erro e = 000001. Logo, o
vetor código mais provável de ter sido o vetor transmitido pode ser determinado por (2.39), i.e.:
* * *
c = ( p0 , p1 , …, pn−k −1 , m0 , m1 , …, mk −1 ) . (2.40)
Note que a obtenção dos bits de paridade a partir de (2.13) resume-se às seguintes operações:
EXEMPLO 2.14
Construa um codificador para o código (6, 3) representado pela sua matriz geradora reproduzida a
seguir
1 0 1 1 0 0
[ ]
G = Pk × ( n−k ) I k × k = 1 1 0 0 1 0
0 1 1 0 0 1
Solução:
De acordo com (2.41) as equações de paridade para a matriz geradora acima são:
61
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
p0 = m0 + m1
p1 = m1 + m2
p2 = m0 + m2
m
c
m0 m1 m2
⊕
⊕
Geração dos bits de paridade ⊕
p0 p1 p2
* * *
Quando os códigos de blocos são simples e curtos um decodificador pode ser implementado com
um circuito simples a partir dos seguintes passos:
1. Calculo da síndrome;
2. Localização do padrão de erro;
3. Soma módulo-2 do padrão de erro com o vetor recebido.
1 0 ⋯ 0
0 1 ⋯ 0
⋮ ⋮ ⋮
0 0 ⋯ 1
S = r ⋅ H T = [r0 , r1 , … , rn −1 ] p00 p01 ⋯ p0, n − k −1 = [s0 , s1 , … , s n − k −1 ] (2.42)
p10 p11 ⋯ p1, n − k −1
⋮ ⋮ ⋮
pk −1, 0 pk −1, 1 ⋯ pk −1, n − k −1
62
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Cada síndrome deve gerar um padrão de erro (corrigível) que deverá ser somado ao vetor recebido.
EXEMPLO 2.15
Construa um decodificador para o código (6, 3) representado pela sua matriz verificadora de
paridade transposta reproduzida a seguir.
1 0 0
0 1 0
0 0 1
HT =
1 0 1
1 1 0
0 1 1
Solução:
De acordo com (2.43), as equações das síndromes a partir da matriz verificadora de paridade acima
são:
1 0 0
0 1 0
S = r ⋅ H = [r0 r1 r2 r3 r4 r5 ]10 00 11 = [s0 , s1 , s2 ]
T
1 1 0
0 1 1
s0 = r0 + r3 + r4
s1 = r1 + r4 + r5
s2 = r2 + r3 + r5
63
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Vetor recebido r0 r1 r2 r3 r4 r5
r
⊕ ⊕ ⊕
r0
⊕ ⊕ ⊕ ⊕ ⊕ ⊕
r1 r2 r3 r4 r5
c0 c1 c2 c3 c4 c5
* * *
1 n
n
j p j (1 − p ) .
n− j
Pb ≈ (2.44)
n j =t +1 j
Para fins de comparação, o desempenho de alguns códigos de bloco lineares simples em um canal
AWGN com modulação BPSK, com detecção coerente, pode ser obtido considerando-se que a
probabilidade de erro de símbolo em termos da relação entre a energia de símbolo codificado e a
densidade espectral de ruído, Ec/N0, pode ser determinada por
1 Ec
p = erfc . (2.45)
2 N0
Por sua vez é necessário relacionar também Ec/N0 com Eb/N0, que é relação entre energia gasta com
os bits de informação e a densidade espectral de ruído, ou seja,
64
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Ec k Eb E
= = Rc b . (2.46)
N0 n N0 N0
1 E
p = erfc Rc b . (2.47)
2 N0
Com (2.47) e (2.44) a comparação do desempenho aproximado entre alguns códigos de blocos
simples transmitidos sobre a modulação BPSK com a própria modulação BPSK não codificada
pode ser obtida diretamente. A Figura 2.9 mostra o desempenho aproximado entre a modulação
BPSK não codificada com as BPSKs com os códigos: Hamming (7, 4), BCH (15, 7), Golay (23,
12), BCH (63, 36) e BCH (127, 64).
Pb 0.1
0.01
3 (7, 4) t = 1
10
(15, 7) t = 2
4
10
(23, 12) t = 3
5 (63, 36) t = 5
10
(127, 64) t = 10
6
10
7
10
2 4 6 8 10 12
Eb/N0 (dB)
65
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Note que os códigos, cujos desempenhos estão apresentados na Figura 2.9, possuem taxa de
codificação entre 0,47 e 0,57. Procurou-se, desta forma, manter a taxa de codificação praticamente
constante para que o desempenho, dos códigos com diferentes comprimentos, fosse comparado.
Isso foi feito com o objetivo de evidenciar uma importante característica dos códigos de blocos: a
capacidade de correção de erros por bloco aumenta com o aumento do comprimento quando a taxa
de codificação é mantida constante. Como consequência, aumentos significativos no desempenho
podem ser obtidos.
Os códigos cíclicos binários são uma importante subclasse de códigos de bloco lineares. São
códigos facilmente implementáveis com registradores de deslocamento realimentados. O cálculo da
síndrome também pode ser facilmente executado de forma similar, com registradores de
deslocamento realimentados [1][2][3][4][5][6].
Um código linear (n, k) é chamado de código cíclico se ele pode ser descrito pela propriedade
apresentada a seguir. Se a n-tupla
c = (c0, c1, c2, ... , cn-1)
obtido pelo deslocamento correspondente a uma posição de bit, é também um vetor código em S.
Em geral,
c(i) = (cn-i, cn-i+1, c1, ... , cn-1, c0, c1, ... , cn-i-1)
66
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Exemplo 2.16
c(X) = X 3 + X 4 + X 6
ou seja, um polinômio de grau n - 1. O valor de c(3), que também pertence ao mesmo código (7, 4) é
c(3) = 1 0 1 0 0 0 1.
* * *
Podem-se gerar códigos cíclicos usando um polinômio gerador, da mesma forma que são gerados os
códigos de bloco usando uma matriz geradora.
onde g0 e gn-k devem ser iguais a 1 e o grau do polinômio gerador deve ser n - k.
Finalmente, um polinômio g(X) é um polinômio gerador de um código cíclico (n, k) se, e somente
se, ele for um fator de X n + 1.
EXEMPLO 2.17
Solução:
X7+1 X 3+ X + 1
(X 7 + X 5 + X 4) X4+X2+X+1
0 +X5+X4+1
(X 5 + X 3 + X 2)
0 +X4+X3+X2+1
(X 4 + X 2 + X)
0+X3+X+1
(X 3 + X + 1)
0
67
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
(X 7 + 1) = (X 4 + X 2 + X + 1) (X 3 + X + 1)
* * *
A matriz geradora para um código cíclico gerado pelo polinômio gerador g(X) pode ser obtida
fazendo
g0 g1 g2 ⋯ g n− k 0 0 0 ⋯ 0
0 g0 g1 g2 ⋯ g n− k 0 0 ⋯ 0
G=0 0 g0 g1 g2 ⋯ g n −k 0 ⋯ 0 (2.50)
⋮ ⋮
0 ⋯ 0 0 0 g0 g1 g2 ⋯ g n−k
Onde g0, g1, g2, ... , gn-k são os termos do polinômio g(X) = g0 + g1X + g2X 2 + ... + gn-k X n-k.
É possível fazer a codificação de forma sistemática, através de uma matriz geradora G’ obtida a
partir da matriz G. Para isso, conforme visto anteriormente, G’ deve ter a forma
Isso pode ser feito através de operações lineares com as linhas de G até que G’ tome a forma
desejada.
EXEMPLO 2.18
Determine o vetor código de um código cíclico (7, 4), correspondente a mensagem m = 1011,
utilizando a matriz geradora na forma sistemática, obtida a partir do polinômio gerador
g(X) = X 3 + X + 1.
Solução:
1 1 0 1 0 0 0
0 1 1 0 1 0 0
G=
0 0 1 1 0 1 0
0 0 0 1 1 0 1
68
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Por inspeção verifica-se que a primeira e a segunda linha estão corretamente posicionadas para a
obtenção de uma matriz na forma sistemática.
A terceira linha da matriz pode ser obtida através da soma das linhas 1 e 3.
1 1 0 1 0 0 0
0 1 1 0 1 0 0
G' =
1 1 1 0 0 1 0
1 0 1 0 0 0 1
1 1 0 1 0 0 0
0 1 1 0 1 0 0
c = m . G' = 1011
1 1 1 0 0 1 0
1 0 1 0 0 0 1
c = 1001011
* * *
É fácil concluir que uma vez obtida a matriz G’ na forma sistemática, a obtenção da matriz
verificadora de paridade H, do código C gerado por G’ é imediata, pois
[
H = I n−k ⋮ PT ]
m( X ) = m0 + m1 X + m2 X 2 +...+ mk −1 X k −1 (2.52)
Na forma sistemática, os dígitos de mensagem são apresentados explicitamente como parte do vetor
código. Para que a porção mensagem da palavra código ocupe as posições dos bits mais
significativos, podemos fazer um deslocamento dos bits de mensagem para a direita, ficando as n - k
posições mais a esquerda para a parte de paridade, ou seja,
69
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
X n − k m( X ) = m0 X n−k
+ m1 X n − k +1 +...+ m k −1 X n −1 . (2.53)
X n − k m( X ) = q( X ) g( X ) + r ( X ) (2.54)
ou, então
r ( X ) + X n − k m ( X ) = q ( X ) g ( X ) = c( X ) (2.55)
Onde o resto r(X) representa a parte de paridade do vetor código e o produto Xn - k m(X) representa a
parte da mensagem que foi deslocada n - k bits para a direita.
EXEMPLO 2.19
Determine o vetor código de um código cíclico (7, 4), na forma sistemática, para m = 1011,
utilizando o polinômio gerador g(X) = X 3 + X + 1.
Solução:
m(X) = 1 + X 2 + X 3
X n - k m(X) = X 3 (1 + X 2 + X 3) = X 3 + X 5 + X 6
X3 + X5 + X6 = (1 + X + X 2 + X 3) (1+ X + X 3) + 1
X n - k (X) q (X) g(X) resto
Finalmente,
c(X) = r(X) + X 3 m(X) = (1 + X 3 + X 5 + X 6)
c = 1001011
* * *
O circuito que faz as operações polinomiais apresentadas anteriormente está apresentado na Figura
2.10.
70
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Chave 1
g1 g2 gn-k-1
r0
⊕ r1
⊕ r2
⊕ rn-k-1
⊕ Chave 2
b
gi Entrada saída
Conexão vinculada a existência de gi a
Passo 1: A chave 1 permanece fechada, para permitir a entrada dos bits de mensagem no estágio
de codificação. A chave 2 permanece na posição (a) para permitir a transmissão dos bits
de mensagem diretamente para o registro de saída, durante os primeiros k deslocamentos.
Passo 3: Os (n-k) bits de paridade que estão armazenados nos registros de deslocamento são
transmitidos, completando a transmissão do polinômio código.
EXEMPLO 2.20
Seja o código (7, 4) cujo polinômio gerador é g(X) = 1 + X + X 3. Para o vetor mensagem m = 1011,
o polinômio código resultante é c(X) = 1 + X 3 + X 5 + X 6, que corresponde ao vetor código
c = 1001011. Mostre a formação e transmissão deste vetor código utilizando o circuito da Figura
2.10.
71
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Solução:
Chave 1
g0 g1
r0
⊕ r1 r2
⊕
b
Chave 2
m(X) = 1 + X 2 + X 3
Entrada Saída
a
Após os 4 deslocamentos a chave 1 é aberta, a chave 2 passa para a posição b e o conteúdo dos
registros (paridade) é transmitido. Logo, o vetor transmitido é
c = 1001011.
* * *
72
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Um vetor código transmitido c(X) pode ser alterado pela presença de ruído, de forma que a função
do decodificador é recuperar o vetor código transmitido a partir do vetor recebido.
O decodificador deve testar se o vetor recebido é um vetor código, o que equivale a dividir o
polinômio recebido pelo polinômio gerador, pois
r( X ) = q( X ) g( X ) +S( X ) (2.57)
Se a síndrome for zero, o vetor recebido é aceito como um vetor código, caso contrário, tem-se uma
detecção de erro através da síndrome.
EXEMPLO 2.21
Solução:
Chave1
1
g0 g1
Entrada
1001011 ⊕ r0
⊕ r1 r2 Chave2
Saída da
síndrome
Figura 2.12 - Circuito de detecção de erros para o código cíclico gerado por g(X) = 1 + X + X 3.
73
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Procedimento:
Passo 1: A chave 1 é inicialmente fechada e a chave 2 aberta. O vetor recebido é deslocado pela
entrada dos registradores, cujos estados iniciais são todos zero. Após o vetor recebido
estar todo nos registradores, seu conteúdo é a síndrome.
Passo 2: A chave 1 é então aberta e a chave 2 fechada, de forma a permitir que o vetor síndrome
possa ser deslocado para fora dos registradores.
** *
74
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
São códigos de bloco simples, que podem ser obtidos de forma cíclica, caracterizados pela seguinte
estrutura:
(n, k) = (2m - 1, 2m - 1 - m) (2.58)
onde m = 2, 3, ... Isto é, suas características principais são apresentadas na Tabela 2.10.
Comprimento do código: n = 2m - 1
Número de bits de informação: k = 2m - 1 - m
Número de bits de paridade: n-k=m
Distância mínima: dmin = 3
Capacidade de correção: t=1
Estes códigos têm uma distância mínima igual a 3 e apesar de terem capacidade de correção de erro
limitada, eles pertencem a uma classe muito limitada de códigos de bloco conhecidos como códigos
perfeitos.
Também é um código cíclico e perfeito. Possui maior capacidade de correção do que os códigos de
Hamming. Suas principais características estão são apresentadas na Tabela 2.11.
Comprimento do código: n = 23
Número de bits de informação: k = 12
Número de bits de paridade: n - k = 11
Distância mínima: dmin = 7
Capacidade de correção: t=3
75
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
g1(X) = 1 + X 2 + X 4 + X 5 + X 6 + X 10
+X 11
(2.59)
g2(X) = 1 + X + X 5 + X 6 + X 7 + X 9
+X 11
(2.60)
Os códigos BCH, são códigos cíclicos binários, que formam uma extensa classe de códigos com
grande capacidade de correção de erros. Eles são uma extraordinária generalização dos códigos de
Hamming para correção de múltiplos erros. Os códigos BCH podem ser caracterizados da seguinte
forma: para qualquer inteiro positivo m (m ≥ 3) e t (t < 2m – 1), existe um código BCH binário com
os parâmetros apresentados na Tabela 2.12.
Comprimento do código: n = 2m - 1
Número de bits de informação: k ≥ 2m - 1 - mt
Número de bits de paridade: n - k ≤ mt
Distância mínima: dmin ≥ 2t +1
Capacidade de correção: t erros
Detalhes a respeito da implementação dos códigos BCH, bem como os principais algoritmos de
decodificação são encontrados nas Referências [4] e [6].
Os códigos Reed Solomon (RS) são uma sub-classe dos códigos BCH. São códigos cíclicos não
binários com símbolos formados por sequências de m bits, onde m é qualquer positivo inteiro tendo
valor maior do que 2. Os códigos RS com símbolos de m bits existem para todo n e k para o qual
onde k é o número de símbolos de dados que estão sendo codificados e n é o número de símbolos
códigos em um bloco codificado. As principais características dos códigos RS mais comuns estão
apresentadas na Tabela 2.13.
76
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
Comprimento do código: n = 2m - 1
Número de bits de informação: k = 2m - 1 - 2t
Número de bits de paridade: n - k = 2t
Distância mínima: dmin = n - k +1
n − k
Capacidade de correção: t=
2
Esses códigos, além de uma notável capacidade de correção de erros, são particularmente úteis para
correção de erros em rajada. São extensamente utilizados em diversos sistemas de comunicações
concatenados, principalmente, com códigos convolucionais além de outros sistemas de
armazenamento de informações como CD para áudio digital.
Os códigos Reed-Muller são uma importante subclasse dos códigos decodificáveis por lógica
majoritária baseados em geometria finita ou geometria euclidiana. São códigos que podem ser
gerados na forma cíclica e não cíclica. Suas principais características são apresentadas na Tabela
2.14.
Comprimento do código: n = 2m - 1
µ
m
Número de bits de informação: k =
i =0 i
µ
m
Número de bits de paridade: n − k = 2 m − 1 −
i =0 i
Para comprimentos moderados (n), os códigos RM possuem uma capacidade de correção de erro
ligeiramente inferior que os códigos BCH. Entretanto, a decodificação por lógica majoritária é
muito mais simples de implementar do que as decodificações para códigos BCH, o que torna
atrativo o seu uso. Para comprimentos grandes, o desempenho dos códigos RM torna-se muito
inferior quando comparado com os BCH.
77
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
[1] SKLAR, B., Digital Communications: Fundamentals and Applications – 2nd ed., PTR
Prentice Hall, Upper Saddle River, NJ, 2001. 1079 p.
[2] McELIECE, Robert J. The theory of information and coding. 2. ed. Cambridge: Cambridge
University Press, 2002. ISBN 0521000955.
[4] LIN, S.; COSTELO JR, D. J. Error Control Coding: Fundamentals and Applications.
Englewood Cliffs: Prentice Hall, 1983. ISBN 013283796X.
[5] BERLEKAMP, Elwin R. Algebric Coding Theory. New York: McGraw-Hill, 1968.
[6] WICKER, S. B. Error control systems for digital communication and storage. Upper Saddle
River, New Jersey: Prentice Hall, 1995.
78
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
p0 = m1 + m2 + m3,
p1 = m0 + m1 + m2,
p2 = m0 + m1 + m3,
p3 = m0 + m2 + m3,
onde m0, m1, m2 e m3 são bits de mensagem e p0, p1, p2 e p3 são bits de verificação de paridade.
Pede-se:
a) Encontrar a matriz geradora e a matriz verificadora de paridade para este código.
b) Mostre que a distância mínima deste código é 4. Justifique.
c) Quantos erros este código pode corrigir?
c) Verifique se o vetor recebido 10101010 é vetor código usando a síndrome de erros.
d) Desenhe um circuito codificação para este código.
e) Desenhe um circuito de decodificação para este código, de forma que a correção de todos os
padrões de um erro e detecção simultânea de dois erros possa ser realizada.
2. Calcule a probabilidade de uma mensagem formada por uma sequência de 12 bits codificada com
um código de bloco linear (24, 12) possuir um erro. Admita que o código corrige todos os
padrões de 1 e 2 erros e nenhum outro padrão a mais. Admita também que a probabilidade de
erro do canal é igual a 10-3.
3. Considere o código de bloco linear (6, 3) cujas equações para a obtenção dos bits da síndrome de
erros S = [S0, S1, S2] são apresentadas a seguir.
S0 = r0 + r3 + r5
S1 = r1 + r3 + r4
S2 = r2 + r4 + r5
Pede-se:
a) Desenhar um circuito de decodificação para este código.
b) Decodificar o polinômio recebido r = 101101
c) Determinar a capacidade de correção de erros deste código. Justifique.
d) Desenhar um circuito de codificação para este código.
e) Codificar a mensagem m = 101.
79
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
4. Considere o código de bloco linear (6, 3) cujo circuito de decodificação é apresentado a seguir.
Determine:
a) Desenhar um circuito de codificação para este código.
b) Determinar a capacidade de correção de erros deste código. Justifique.
c) Decodificar os vetores recebidos rA = 100100 e rB = 100110.
d) Codificar a mensagem m = 010.
Sabendo que este codificador trabalha com a codificação na forma sistemática, pede-se:
a) Qual o código de bloco utilizado neste caso?
b) Codifique a palavra OLA.
c) Supondo que a seguinte sequência foi recebida 10001100110001. Utilizando o processo de
decodificação de códigos de blocos lineares, decodifique esta sequência e mostre qual foi à
mensagem recebida.
Obs.: Para gerar a matriz na forma sistemática utilize somente a operação módulo 2 entre as linhas.
80
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
a) Mostre que o polinômio gerador apresentado gera de fato um código cíclico (7, 4).
b) Encontre todas as palavras códigos.
c) Encontre a matriz verificadora de paridade do código.
d) Verifique se o vetor recebido r = 1101101 é um vetor válido através da síndrome.
e) Qual é a capacidade de correção de erros do código?
f) Qual é a capacidade de detecção de erros do código?
g) Desenhe um codificador para este código utilizando registradores de deslocamento.
9. Determine, se possível, se os seguintes polinômios podem gerar um código cíclico com palavra
código de comprimento n ≤ 7 . Encontre também os valores de (n,k) para o qual os códigos podem
ser gerados.
a) 1 + X 3 + X 4 .
b) 1 + X 2 + X 4 .
10. Codifique a mensagem 101 na forma sistemática usando a divisão polinomial e o polinômio
gerador g ( x ) = 1 + X + X 2 + X 4 .
81
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________
11. Projete um codificador de registros com deslocamento realimentado para um código cíclico
(8,5) usando o polinômio gerador g ( x ) = 1 + X + X 2 + X 3 . Use o codificador para encontrar a
palavra código para uma mensagem 10101 na forma sistemática.
12. Considere o circuito de codificação para um código de bloco linear cíclico (n, 3), gerado na forma
sistemática, apresentado a seguir.
Pede-se determinar:
a) A matriz geradora do código na forma sistemática.
b) O vetor código mais próximo do vetor recebido r ( x ) = 1 + X + X 2 + X 3 + X 4 + X 5 .
* * *
82
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
3.1. INTRODUÇÃO
Os códigos BCH (Bose, Chaudhuri e Hocquenghen) são uma importante e extensa classe de
códigos cíclicos com grande capacidade de correção de erros. Esses códigos são uma generalização
dos códigos de Hamming para correção de múltiplos erros. Os códigos BCH binários foram
descobertos por Hocquenghen em 1959 e por Bose e Chaudhuri, de forma independente, em 1960.
A estrutura cíclica dos códigos BCH foi provada por Peterson em 1960. Em 1961, Gorenstein e
Zierler generalizaram os BCH para códigos em pm símbolos, onde p é um número primo. Entre os
códigos BCH não binários a sub-classe mais importante é a dos códigos Reed-Solomon (RS),
descobertos por Reed e Solomon em 1960, independentemente dos trabalhos de Bose, Chaudhuri e
Hocquen.
O primeiro algoritmo de decodificação para os códigos BCH binários foi desenvolvido por Peterson
em 1960. A partir daí o algoritmo de Peterson foi generalizado e refinado por Gorenstein e Zierler,
Chien, Forney, Berlekamp, Massey, Burton e outros.
Este texto apresenta os fundamentos dos códigos BCH, o processo de criação de um código, o
processo de decodificação pelo algoritmo de Peterson e algumas considerações sobre
implementações.
Para qualquer inteiro m ≥ 3 e t < 2m −1 , existe um código binário BCH com os seguintes
parâmetros:
Comprimento do bloco n = 2m − 1
Número de dígitos de verificação de paridade n-k ≤ mt
Distância mínima dmin ≥ 2t + 1
α , α 2 , α 3 ,......, α 2t (3.1)
como suas raízes, [isto é, g (α i ) = 0 para 1 ≤ i ≤ 2t]. Isso significa que g(X) tem
α , α 2 , α 3 ,......,α 2t e seus conjugados como todas as suas raízes. Seja φi ( X ) o polinômio mínimo
88
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
i = i ' 2l ,
φi ( X ) = φi ' ( X ) .
Consequentemente, toda potência par de α na sequência em (3.1) tem o mesmo polinômio mínimo
que algumas potências ímpares precedentes na sequência. Como resultado, o polinômio gerador
g(X) de um código BCH binário com comprimento 2m - 1 e capacidade de correção de t erros dado
por (3.2) pode ser reduzido para
g ( X ) = MMC{φ1( X ), φ3 ( X ),......, φ2t −1( X )} (3.3)
Pelo fato do grau de cada polinômio mínimo ser m ou menor, o grau de g(X), que é igual a n – k, é
no máximo igual a mt. Não há uma fórmula simples para a determinação de n – k, mas se t é
pequeno, n – k é exatamente igual a mt. A Tabela 3.1 apresenta os parâmetros para todos os códigos
BCH de comprimento 2m - 1 com m ≤ 8 .
De (3.3) pode-se observar que para um código BCH de comprimento 2m - 1, com capacidade de
correção de um único erro, φ2t −1( X ) = φ1( X ) . Logo ele é gerado por
89
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
g ( X ) = φ1( X ) .
EXEMPLO 3.1
SOLUÇÃO
A partir de GF(24) pode-se criar códigos BCH com comprimento n = 24 – 1 = 15, ou seja, os
códigos serão BCH (15, k).
90
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
g ( X ) = MMC{φ1( X ), φ3 ( X )}.
g ( X ) = φ1( X ) φ3 ( X ) = (1 + X + X 4 )(1 + X + X 2 + X 3 + X 4 )
g (X ) = 1 + X 4 + X 6 + X 7 + X 8 . (3.4)
Logo g(X) gera um código BCH (15, 7) cíclico com d min ≥ 5 . Uma vez que o polinômio gerador
do código possui peso 5, então a distância mínima do código é exatamente 5.
Logo g(X) gera um código BCH (15, 5) cíclico com d min ≥ 9 . Uma vez que o polinômio gerador
do código possui peso 9, então a distância mínima do código é exatamente 9.
* * *
É importante observar que o peso do polinômio gerador é igual à distância mínima do código
apenas para os códigos BCH primitivos. Existem códigos BCH não primitivos, que não são
apresentados neste texto, para os quais essa afirmação não é válida. Uma abordagem mais profunda
sobre a distância mínima dos códigos BCH pode ser encontrada em [1].
r ( X ) = r0 + r1 X + r2 X 2 + ..... + rn −1 X n −1
r ( X ) = c( X ) + e( X ) . (3.6)
Como nos códigos de blocos mais simples, o processo de decodificação se inicia por meio do
cálculo da síndrome de erros para o vetor recebido r(X). Para os códigos BCH primitivos a divisão
de r(X) pelo polinômio mínimo φ ( X ) de α , para 1 ≤ t ≤ 2t , pode ser escrito como
r ( X ) = ai ( X )φi ( X ) + bi ( X ) , (3.7)
Assim, cada componente da síndrome Si pode ser obtido diretamente pela determinação de r(X)
com X = α i , de forma que
92
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
ou seja, a síndrome de erros S para os códigos BCH é formada por 2t síndromes componentes Si.
EXEMPLO 3.2
Considere o código BCH (15, 7) com capacidade de correção de duplo erro gerado por (3.4).
Admita que o vetor recebido foi r = (100000001000000). Determine o conjunto de síndromes de
erros para o vetor recebido.
SOLUÇÃO
O polinômio correspondente é
r( X ) = 1 + X 8
S = (S1 , S2 , S3 , S4 ) .
φ1( X ) = φ2 ( X ) = φ4 ( X ) = 1 + X + X 4 .
φ3 ( X ) = 1 + X + X 2 + X 3 + X 4 .
b1 = X 2 .
b3 = 1 + X 3 .
S1 = α 2 , S2 = α 4 , S4 = α 8
Substituindo α 3 em b3(X), obtém-se
93
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
S3 = 1 + α 9 = 1 + α + α 3 = α 7
Conforme (3.8) as síndromes podem ser obtidas diretamente a partir de r(X) conforme mostrado
a seguir
S1 = r (α 1 ) = 1 + α 8 = 1 + 1 + α 2 S1 = α 2
S2 = r (α 2 ) = 1 + α 16 = 1 + α 1 S2 = α 4
S3 = r (α 3 ) = 1 + α 24 = 1 + α 9 S1 = α 7
S4 = r (α 4 ) = 1 + α 32 = 1 + α 2 S4 = α 8
Assim,
S = (α 2 , α 4 , α 7 , α 8 ) .
* * *
Como a α1 + α 2 + ... + α 2t são raízes de cada polinômio código, então c(α i ) = 0 para 1 ≤ i ≤ 2t .
A partir de (3.6) e (3.8), obtém-se, para 1 ≤ i ≤ 2t , a seguinte relação entre a síndrome e o padrão
de erro,
Si = e(α i ). (3.10)
A equação (3.10) mostra que a síndrome S depende exclusivamente do padrão de erros e. Admita
que o padrão de erro e(X) tem v erros nas localizações X j1, X j 2 ,..., X jυ ; isto é
e( X ) = X j1 +X j2 + ... + X jυ (3.11)
onde 0 ≤ j1 < j2 < ... < jυ < n . De (3.10) e (3.11) obtém-se o seguinte conjunto de equações
S1 = α j1 + α j2 + ... + α jυ
S2 = (α j1 ) + (α j2 ) + ... + (α jυ )
2 2 2
S3 = (α j1 ) + (α j2 ) + ... + (α jυ )
3 3 3
(3.12)
M
S2t = (α j1 ) + (α j2 ) + ... + (α jυ )
2t 2t 2t
Qualquer método para solução dessas equações é um algoritmo de decodificação para os códigos
BCH.
Uma vez encontrados os valores para α j1 + α j2 + ... + α jυ , as potências j1, j2, ... , jv indicam as
localizações de erros em e(X), conforme mostrado em (3.11). Geralmente, o sistema de equações
(3.12) têm muitas soluções possíveis. Cada solução produz um padrão de erro diferente. A solução
94
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
correta é a que apresenta o menor número de erros entre aquelas em que o padrão de erro e(X)
possui um número de erros igual a t ou menos (υ ≤ t ).
Para grandes valores de t, a solução direta de (3.12) é difícil e ineficaz. A seguir é apresentado um
procedimento eficaz para a determinação de α jl para l = 1, 2, ... , υ dos componentes Si’s da
síndrome.
ALGORITMO DE PETERSON
Por conveniência seja
βl = α jl (3.13)
S1 = β1 + β 2 + ... + βυ
S2 = (β1 )2 + (β 2 )2 + ... + (βυ )2
S3 = (β1 )3 + (β 2 )3 + ... + (βυ )3
(3.14)
M
S2t = (β1 ) + (β 2 )2t + ... + (βυ )2t .
2t
Essas 2t equações são funções simétricas em β1 + β 2 + ... + βυ , que são conhecidas como funções
simétricas de soma de potências. Agora, considere o seguinte polinômio:
As raízes de σ ( X ) são β −1, β −1 ,..., β −1, que são o inverso dos números localizadores de erros. Por
1 2 υ
essa razão, σ ( X ) é chamado de polinômio localizador de erros. Nota-se que σ ( X ) é um polinômio
não conhecido cujos coeficientes devem ser determinados. Os coeficientes de σ ( X ) e o número
localizador de erros são relacionados pelas seguintes equações:
σ0 = 1 (3.16)
σ1 = β1 + β 2 + ... + βυ
95
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
Os σ i ' s são conhecidos como funções simétricas elementares de βl ' s . De (3.14) e (3.16) pode-se
verificar que os σ i ' s estão relacionados com os componentes de síndrome Sj’s. De fato, eles estão
relacionados com os componentes de síndrome pelas seguintes identidades de Newton:
S1 + σ1 = 0
S2 + σ1S1 + 2σ 2 = 0
S3 + σ1S2 + σ 2 S1 + 3σ 3 = 0 (3.17)
M
Sυ + σ1Sυ −1 + ... + συ −1S1 + υσυ = 0
Sυ +1 + σ1Sυ + ... + συ −1S2 + συ S1 = 0 .
{
iσ i = σ i para i ímpar
0 para i par
que resulta em
S1 + σ1 = 0
S3 + σ1S2 + σ 2 S1 + σ 3 = 0 (3.18)
S5 + σ1S4 + σ 2 S3 + σ 3S2 + σ 4 S1 + σ 5 = 0
M
Desta forma, o sistema fica restrito a um número t de equações. Uma vez que é possível determinar
as funções simétricas elementares σ1, σ 2 ,..., συ do sistema de equações (3.18), os números
localizadores de erros β1, β 2 ,..., βυ podem ser encontrados pela determinação das raízes do
polinômio localizador de erros σ ( X ) . Novamente, o sistema de equações (3.18) pode ter muitas
soluções; entretanto, a solução será aquela que resultar em um σ ( X ) de grau mínimo. Este σ ( X )
produzirá um padrão de erro e(X) com um número mínimo de erros. Seυ ≤ t , este σ ( X ) dará o
padrão de erro e(X) verdadeiro.
1. Calcule a síndrome S = (S1, S2, ... , S2t) a partir do polinômio recebido r(X).
2. Determine os polinômios localizadores de erros σ ( X ) a partir dos componentes.
3. Determine os números localizadores de erros β1 , β 2 ,..., βυ por meio das raízes de σ ( X ) e
corrija os erros em r(X).
Os passos 1 e 3 são muito simples enquanto que o passo 2 é a parte mais complicada da
decodificação dos códigos BCH, onde a complexidade de decodificação aumenta com o aumento da
capacidade de correção de erros dos códigos.
Por exemplo, na decodificação de um código BCH binário, com capacidade de correção de apenas
um erro, haverá somente um valor de síndrome S1 e a primeira linha de (3.18) determina que
σ1 = S1
σ ( X ) = 1 + S1 X .
Para códigos com capacidade de correção de dois erros, σ 3 = 0 . Além disso, pode-se demonstrar
que para códigos binários a seguinte igualdade é verdadeira [2]:
(3.19)
S2i = Si2 para qualquer i
Assim, duas síndromes (S1 e S3) devem ser calculadas e por meio das duas primeiras equações de
(3.18) obtém-se
(3.20)
S1 + σ1 = 0 ⇒ σ1 = S1
S3 + S 3 (3.21)
S3 + σ1S2 + σ 2 S1 = 0 ⇒ S3 + S1S12 + σ 2 S1 = 0 ⇒ σ 2 = 1
S1
Usando esta técnica ou qualquer outra técnica padrão para a solução do sistema de equações
lineares de (3.18) pode-se determinar os valores dos σ i ' s para qualquer capacidade de correção de
erros. A Tabela 3.4 apresenta os coeficientes do polinômio localizador de erros em função dos
componentes da síndrome, para códigos com capacidade de correção 1 ≤ t ≤ 5 .
97
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
Tabela 3.4 – Coeficientes do polinômio localizador de erros em função dos componentes da síndrome para 1 ≤ t ≤ 5 .
EXEMPLO 3.3
Admita que o vetor código todo zero do código BCH (15, 5) gerado por (3.5) tenha sido corrompido
por ruído resultando no vetor recebido r = 000101000000100. Decodifique o vetor recebido.
SOLUÇÃO
r ( X ) = X 3 + X 5 + X 12 .
S1 = r (α 1 ) = α 3 + α 5 + α12 = α 3 + α + α 2 + 1 + α + α 2 + α 3 = 1 S1 = 1
S3 = r (α 3 ) = α 9 + α15 + α 36 = α + α 3 + 1 + α 2 + α 3 = α 10 S3 = α 10
S5 = r (α 5 ) = α15 + α 25 + α 60 = 1 + 1 + α + α 2 + 1 = α 10 S5 = α 10
Da Tabela 3.4 obtém-se para t = 3, com o auxílio da Tabela 3.2, os seguintes resultados para σ i :
98
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
σ1 = S1 = 1
S12 S3 + S5 12 α 10 + α 10
σ2 = = =0
S13 + S3 12 + α 10
σ 3 = (S13 + S3 ) + S1 σ 2 = 12 + α 10 = α 5
σ (X ) = 1 + X + α5X 3.
σ (α 0 ) = 1 + 1 + α 5 13 = α 5
σ (α 1 ) = 1 + α 1 + α 5 (α 1 ) = 1 + α 1 + α 8 = α 5
3
σ (α 2 ) = 1 + α 2 + α 5 (α 2 ) = 1 + α 2 + α 11 = α 7
3
σ (α 3 ) = 1 + α 3 + α 5 (α 3 ) = 1 + α 3 + α 14 = 0 ⇒ α 3 é raiz
3
M
σ( ) ( )
3
α 10 = 1 + α 10 + α 5 α 10 = 1 + 1 + α + α 2 + α + α 2 = 0 ⇒ α 10 é raiz
M
σ (α 12 ) = 1 + α 12 + α 5 (α 12 )
3
= 1 + 1 + α + α 2 + α 3 + α + α 2 + α 3 = 0 ⇒ α 12 é raiz
M
σ (α 14 ) = 1 + α 14 + α 5 (α 14 )
3
= 1 + 1 + α + α =α 6
3 2
As posições de erros são o inverso das raízes do polinômio localizador de erros, logo:
β1 = 13 = α −3 = α 12 ⇒ erro na posição X
12
α
β 2 = 110 = α −10 = α 5 ⇒ erro na posição X
5
α
β3 = 112 = α −12 = α 3 ⇒ erro na posição X
3
α
Logo o polinômio localizador de erros (3.11) torna-se:
e ( X ) = X 3 + X 5 + X 12
Uma vez obtido o polinômio localizador de erros, basta somar o vetor erro com o vetor recebido
99
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
para obter-se o vetor código que, provavelmente, foi o vetor transmitido, ou seja:
e ( X ) = X 3 + X 5 + X 12 ⇒ 000101000000100
c' = 000000000000000
* * *
100
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
6) Determinar o polinômio gerador do código BCH com capacidade de correção de cinco erros (t = 5) a partir do
GF(25) gerado por p(X) = 1 + X 2 + X 5.
101
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
102
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
103
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
104
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________
105
4 CÓDIGOS REED-SOLOMON
Neste capítulo retornamos aos códigos de blocos lineares por meio dos códigos Reed-
Solomon (RS). Isso se deve ao fato de que os Códigos RS são códigos largamente
empregados em diversos sistemas de armazenamento e transmissão de informação, entre os
quais podemos citar: gravação de músicas em CD, gravação de dados em fitas magnéticas,
gravação de dados em discos rígidos, transmissão de sinais digitais de TV nos padrões ATSC,
DVB-T e ISDB-T, etc.
Ao contrário dos outros códigos de bloco e também dos códigos convolucionais, os códigos
RS possuem uma razoável capacidade de correção de erros em rajada. Por isso, muito
frequentemente ele é usado de forma concatenada com outros códigos, tais, como os códigos
convolucionais.
Para facilitar o entendimento dos códigos RS, este capítulo está dividido em seções que
aborda os seguintes tópicos:
Campos Finitos;
Codificação RS e
Decodificação RS.
4.1. INTRODUÇÃO
Os códigos Reed-Solomon (RS) são códigos cíclicos não binários com símbolos formados por
sequências de m bits, onde m é qualquer positivo inteiro tendo valor maior do que 2. Os
códigos RS com símbolos de m bits existem para todo n e k para o qual
0 k n 2m 2 , (4.1)
As principais características dos códigos RS mais comuns estão apresentadas na Tabela 4.1.
Esses códigos, além de uma notável capacidade de correção de erros, são particularmente
úteis para correção de rajada de erros. Os códigos RS são extensamente utilizados em diversos
sistemas de comunicações concatenados, principalmente, com códigos convolucionais além
de outros sistemas de armazenamento de informações.
118
4. Códigos Reed-Solomon
Comprimento do código: n = 2m - 1
Número de bits de informação: k = 2m - 1 - 2t
Número de bits de paridade: n - k = 2t
Distância mínima: dmin = n - k +1
n k
Capacidade de correção1: t
2
1 2 1 2 m 1 j
m
p (1 p ) 2 1 j . (4.2)
m
PE m j
2 1 j t 1 j
onde t é a capacidade de correção de erro de símbolo do código sendo que cada símbolo
possui m bits.
A capacidade de correção de erro em rajada pode ser entendida a partir do seguinte exemplo.
n k 255 247
t 4
2 2
Figura 4.1 - Bloco de dados perturbado por ruído durante 25 períodos de bit.
1
Como os códigos RS são não binário, t é a capacidade de correção de símbolos formados por m bits.
119
4. Códigos Reed-Solomon
Cada símbolo possui 8 bits, logo um período de 25 bits afeta 4 símbolos. Como o código
corrige qualquer padrão de até 4 símbolos errados, todos os símbolos afetados serão
corrigidos. Essa característica não binária dá aos códigos RS uma grande vantagem em termos
de correção de erros em rajada em relação aos outros códigos de blocos binários.
Para qualquer número primo p existe um campo finito denominado GF(p) contendo p
elementos. É possível estender GF(p) para um campo de pm elementos, representado por
GF(pm), onde m é um número não nulo, positivo e inteiro. Note que GF(pm) possui como
subconjunto os elementos de GF(p). Os códigos RS são construídos a partir dos campos de
extensão, GF(2m).
Em um campo GF(2m), cada elemento não zero é representado por uma potência de . Um
conjunto infinito de elementos, F, é formado começando pelos elementos {0, 1, } e gerando
elementos adicionais pela multiplicação progressiva da última entrada por , ou seja,
2 1 0
m
1
(4.4)
ou equivalentemente,
2 1 0 .
m
1
(4.5)
Usando esta restrição polinomial, qualquer elemento do campo que tenha grau igual ou maior
que 2m - 1 pode ser reduzido para um elemento com potência menor que 2m - 1 conforme se
segue
2 2m 1 n 1 n 1 .
m
n
(4.6)
Assim, a Equação (4.5) pode ser usada para formar uma sequência finita F* a partir da
sequência finita F, na forma
m m m
2 1
F * {0, 1, , 2 , , 2 , 2 , 2 , } . (4.7)
m
2
{0, 0 , 1 , 2 , , 2 , 0 , 1 , 2 , }
120
4. Códigos Reed-Solomon
Portanto, pode-se observar a partir da Equação (4.7) que os elementos do campo finito GF(2m)
são dados por
m
2
GF (2 m ) {0, 0 , 1 , 2 , , 2 }. (4.8)
Cada um dos 2m elementos do campo finito GF(2m) pode ser representado como um
polinômio distinto de grau m - 1 ou menos. Cada elemento do campo GF(2m) é representado
por um polinômio ai(X), onde pelo menos um dos m coeficientes de ai(X) é não nulo. Para
i = 0, 1, 2, ... , 2m - 2,
A adição de dois elementos do campo finito é definida como a soma módulo-2 de cada
coeficiente do polinômio de mesma potência, i. e.,
Campos finitos de GF(2m) são construídos a partir de polinômios primitivos que por sua vez,
são necessários para a definição dos códigos RS. Entretanto, é conveniente definir
inicialmente o que são polinômios irredutíveis.
Um polinômio irredutível, f (X), de grau m é dito ser primitivo, se o menor inteiro positivo n
para o qual f (X) divide X n + 1 é n = 2m - 1.
m
1
Qualquer polinômio irredutível sobre GF(2) de grau m divide X 2 1.
Um polinômio, f (X), de grau m, é dito ser irredutível sobre GF(2) se f (X) não é divisível
por qualquer outro polinômio, sobre GF(2), de grau menor que m, mas maior que zero.
121
4. Códigos Reed-Solomon
Exemplo 4.1
a) 1 + X + X 2 + X 3 + X 4
b) 1 + X + X 4
Solução:
X 15 + 1 X4+ X 3 + X2 + X + 1
(X 15 + X 14 + X 13 + X 12 + X 11) X 11 + X 10 + X 6 + X 5 + X + 1
X 14 + X 13 + X 12 + X 11 + 1
(X 14 + X 13 + X 12 + X 11 + X 10)
X 10 + 1
(X 10 + X 9 + X 8 + X 7 + X 6)
X9 + X8 + X7 + X6 + 1
(X 9 + X 8 + X 7 + X 6 + X 5)
X5+1
(X 5 + X 4 + X 3 + X 2 + X)
X4 + X3 + X2 + X + 1
(X 4 + X 3 + X 2 + X + 1)
0
X5+1 X4+ X 3 + X2 + X + 1
(X 5 + X 4 + X 3 + X 2 + X) X+1
X4+ X 3 + X2 + X + 1
(X 4 + X 3 + X 2 + X + 1)
0
122
4. Códigos Reed-Solomon
X 15 + 1 X4+ X + 1
(X 15 + X 12 + X 11) X 11 + X 8 + X 7 + X 5 + X 3 + X 2 + X + 1
X 12 + X 11 + 1
(X 12 + X 9 + X 8)
X 11 + X 9 + X 8 + 1
(X 11 + X 8 + X 7)
X 9 + X7 + 1
(X 9 + X 6 + X 5)
X7 + X6 + X5 + 1
(X 7 + X 4 + X 3)
X6 + X5 + X4 + X3 + 1
(X 6 + X 3 + X 2)
X5 + X4 + X2 + 1
(X 5 + X 2 + X )
X4 + X+ 1
(X 4 + X + 1)
0
Pode se verificar também que 1 + X + X 4 não divide nenhum outro X n + 1 para 1 n <
15. Logo 1 + X + X 4 é irredutível e primitivo.
* * *
123
4. Códigos Reed-Solomon
m Polinômio m Polinômio
3 1+X+X3 14 1 + X + X 6 + X 10 + X 14
4 1+X+X4 15 1 + X + X 15
5 1 + X2 + X 5 16 1 + X + X 3 + X 12 + X 16
6 1+X+X6 17 1 + X 3 + X 17
7 1 + X3 + X 7 18 1 + X 7 + X 18
8 1 + X2 + X 3 + X4 + X 8 19 1 + X + X 2 + X 5 + X 19
9 1 + X4 + X 9 20 1 + X 3 + X 20
10 1 + X 3 + X 10 21 1 + X 2 + X 21
11 1 + X 2 + X 11 22 1 + X + X 22
12 1 + X + X 4 + X 6 + X 12 23 1 + X 5 + X 23
13 1 + X + X 3 + X 4 + X 13 24 1 + X + X2 + X 7 + X 24
f () = 1 + + 3 = 0
3 1 (4.11)
Desta forma, 3 pode ser obtida como a soma ponderada dos termos de ordem mais baixa. De
fato, todas as potências de podem ser também representadas, conforme mostra a Tabela 4.3.
A Tabela 4.3 mostra ainda o mapeamento dos sete elementos {i} e o elemento zero, em
termos dos elementos base {X 0, X 1, X 2}, descritos pela Equação 4.10.
124
4. Códigos Reed-Solomon
Tabela 4.3 - Mapeamento dos elementos do campo em termo de seus elementos base para
f (X) = 1 + X + X 3, e representação das potências de .
ELEMENTOS
BASE REPRESENTAÇÃO DAS POTÊNCIAS DE
GF(23) 0 1 2
X X X
0 0 0 0 0
0 1 0 0 0
1 0 1 0 1
2 0 0 1 2
3 1 1 0 3 = 1 +
4 0 1 1 4 = .3 = (1 + ) = + 2
5 1 1 1 5 = .4 = ( + 2) = 2 + 3 = 1 + + 2
6 1 0 1 6 = .5 = (1 + + 2) = + 2 + 3 = 1 + 2
* * *
A partir das equações definidas na Tabela 4.2, pode-se definir as duas operações aritméticas
possíveis sobre GF(23): a adição e a multiplicação. Ambas estão apresentadas nas Tabelas 4.4
e 4.5, respectivamente, e foram obtidas do conjunto de equações da Tabela 4.3.
0 1 2 3 4 5 6
0 0 3 6 1 5 4 2
1 3 0 4 0 2 6 5
2 6 4 0 5 1 3 0
3 1 0 5 0 6 2 4
4 5 2 1 6 0 0 3
5 4 6 3 2 0 0 1
6 2 5 0 4 3 1 0
125
4. Códigos Reed-Solomon
0 1 2 3 4 5 6
0 0 1 2 3 4 5 6
1 1 2 3 4 5 6 0
2 2 3 4 5 6 0 1
3 3 4 5 6 0 1 2
4 4 5 6 0 1 2 3
5 5 6 0 1 2 3 4
6 6 0 1 2 3 4 5
X0 X1 X2 X3
Início 1 0 0 0
o
1 deslocamento 0 1 0 1
2o deslocamento 0 0 1 2
3o deslocamento 1 1 0 3
4o deslocamento 0 1 1 4
5o deslocamento 1 1 1 5
6o deslocamento 1 0 1 6
126
4. Códigos Reed-Solomon
4.3. CODIFICAÇÃO RS
Conforme apresentado na Tabela 4.1, em termos dos parâmetros n, k, t, para a forma mais
comum dos códigos RS, tem-se que
(n, k ) ( 2 m 1, 2 m 1 2t ) m 2. (4.12)
g ( X ) g 0 g1 X g 2 X 2 g 2t 1 X 2t 1 X 2t . (4.13)
O grau do polinômio gerador é igual ao número de símbolos de paridade. Uma vez que o grau
do polinômio gerador é igual a 2t, deve haver precisamente 2t potências sucessivas de que
são raízes do polinômio. As raízes de g(X) são designadas como: , 2, ... ,2t. Assim, o
polinômio gerador g(X) pode ser obtido fazendo
Considere como exemplo o código RS (7, 3) com capacidade de correção de duplo erro de
símbolo. O polinômio gerador em termos de suas 2t = n - k = 4 raízes é descrito da seguinte
forma:
Escrevendo o polinômio da ordem mais baixa para a mais alta, e trocando os sinais negativos
por positivos (no campo binário +1 = -1), g(X) fica:
g ( X ) 3 1 X 0 X 2 3 X 3 X 4 (4.15)
Uma vez que os códigos RS são códigos cíclicos, eles podem ser codificados na forma
sistemática de forma análoga ao procedimento para os códigos binários, ou seja, conforme
apresentado no Capítulo 2,
127
4. Códigos Reed-Solomon
X n k m X q X g X p X . (4.16)
onde q(X) e p(X) são os polinômios quociente e resto, da divisão da mensagem deslocada de
n-k posições, Xn-k m(X), pelo polinômio gerador, g(X). Note que, na forma sistemática, o
polinômio resto, p(X), é o polinômio paridade da palavra código. A Equação (4.16) pode ser
escrita ainda como
c( X ) p( X ) X n k m( X ) (4.18)
Exemplo 4.2:
Solução:
A sequência 010110111 pode ser segmentada em elementos base do campo gerado por
1 + X + X 3, na forma 010 110 111, para a obtenção dos elementos do campo 1, 3 e 5,
conforme mostrado na Tabela 4.3.
Logo, o polinômio mensagem é 1 + 3X + 5X 2, que multiplicado por X n-k, torna-se;
X 4 α1 α 3 X α 5 X 2 α1 X 4 α 3 X 5 α 5 X 6
O polinômio paridade é o resto da divisão do polinômio deslocado, Xn-k m(X), por g(X). Note
que a divisão polinomial deve ser feita em GF(23), ou seja, as regras de adição e de
multiplicação devem obedecer as Tabelas 4.4 e 4.5, respectivamente, conforme apresentado a
seguir.
128
4. Códigos Reed-Solomon
Logo,
p( X ) 0 2 X 4 X 2 6 X 3
c( X ) α 0 α 2 X α 4 X 2 α 6 X 3 α 1 X 4 α 3 X 5 α 5 X 6 (4.19a)
3 1 0 3
Entrada Saída
010 110 111
Chave 2
1 3 5
Figura 4.3 - Codificador com registradores de deslocamento para o código RS (7, 3).
Note que no caso binário, cada termo do polinômio gerador era representado por ausência ou
presença da conexão de realimentação para cada estágio, correspondentes aos coeficientes
"0s" e "1s", respectivamente. Nos codificadores RS, todos os termos do polinômio são
representados por conexões de realimentação que são multiplicadas pelos respectivos
símbolos coeficientes.
129
4. Códigos Reed-Solomon
2. Ao mesmo tempo a Chave 2 está fechada para baixo durante os primeiros k ciclos de
clock afim de permitir a transferência simultânea dos símbolos de mensagem
diretamente para a saída do codificador.
Exemplo 4.3:
Solução:
6
c( X ) u n X n α 0 α 2 X α 4 X 2 α 6 X 3 α 1 X 4 α 3 X 5 α 5 X 6 (4.19b)
n0
130
4. Códigos Reed-Solomon
* * *
As raízes do polinômio gerador g(X) devem ser também raízes da palavra código gerada por
g(X), porque uma palavra válida é
c ( X ) m ( X )g ( X ) (4.20)
Portanto, uma palavra código arbitrária quando calculada para qualquer raiz de g(X), deve
resultar em zero, ou seja,
O polinômio código apresentado na Equação 4.19 resulta em zero quando calculado para
qualquer raiz de g(X), conforme mostrado a seguir, para cada uma das raízes.
131
4. Códigos Reed-Solomon
4.4. DECODIFICAÇÃO RS
Para um código RS o padrão de erro pode ser descrito na forma polinomial como
n 1
e( X ) ei X i . (4.21)
i0
6
e( X ) ei X i e0 e1 X e2 X 2 e3 X 3 e4 X 4 e5 X 5 e6 X 6
i0
Agora, assuma que durante uma transmissão o polinômio código representado pela
Equação 4.19 tenha sido corrompido por ruído e 2 símbolos foram recebidos com erro, de
acordo com o padrão de duplo erro apresentado a seguir.
e( X ) 0 0 X 0 X 2 2 X 3 0 X 4 5 X 5 0 X 6 (4.22)
Isto é, 2 (001) introduz 1 bit errado no símbolo da posição X 3 e 5 (111) introduz 3 bits
errados no símbolo da posição X 5. Consequentemente, o polinômio código pode ser obtido a
partir de
r ( X ) c( X ) e( X ) , (4.23)
que resulta em
Neste exemplo existem quatro incógnitas: duas posições de erro e dois valores errados. Note
que a diferença fundamental entre a codificação binária e a não binária é que na primeira
basta identificar as posições de erro e inverter os bits, enquanto que na segunda além de
identificar as posição dos símbolos errados é necessário substituir o símbolo errado pelo
símbolo correto, que é um elemento do campo GF(23). Uma vez que existem quatro
incógnitas neste exemplo, são necessárias quatro equações para sua solução.
132
4. Códigos Reed-Solomon
Para o código RS (7, 3), aqui considerado, cada vetor síndrome possui quatro símbolos.
Conforme já apresentado, as raízes de g(X) também são raízes de c(X), ou seja, quando c(X) é
calculado para as raízes de g(X), os valores resultantes são iguais a zero. Qualquer erro
introduzido em um polinômio código resultará em um polinômio que não terá as mesmas
raízes de g(X). Desta forma a síndrome, Si, pode ser determinada calculando-se r(X) para as
raízes de g(X), ou seja,
S i r ( X ); X i
(4.25)
S i r ( i ); i 1,, n k
Se r(X) não contiver erros então cada uma das síndromes Si será igual a zero.
Para o polinômio recebido r(X) apresentado na Equação 4.24 os quatro símbolos da síndrome
são:
S1 = 0 + 2 + 42 + 03 + 14 + 25 + 56
= 0 + 3 + 6 + 3 + 5 + 0 + 4
= 2
Exemplo 4.4:
Mostre que as síndromes do padrão de erro representado pela Equação 4.22 são iguais às
síndromes calculadas para o polinômio recebido representado pela Equação 4.24.
Solução:
S i r ( X ); X i
S i r ( i ); i 1, , n k
Si [c( X ) e( X )]; X αi
Si [c(α i ) e(α i )] 0 e(α i )
Si e(α i )
133
4. Códigos Reed-Solomon
Assim,
S1 = e(1) = 23 + 55
= 5 + 3
= 2
Estes resultados confirmam que as síndromes de e(X) e r(X), quando calculadas para as raízes
de g(X), são exatamente as mesmas.
* **
De acordo com a Equação 4.21, para todo ei 0, então existe na posição i um erro cujo valor
é ei. Isso pode ser observado por meio da Equação 4.22, repetida a seguir por conveniência,
que mostra claramente os valores dos erros e suas posições.
e( X ) 0 0 X 0 X 2 2 X 3 0 X 4 5 X 5 0 X 6 = e ( X ) 2 X 3 5 X 5 .
Note que existem dois erros: um na posição X 3 e outro na posição X 5, cujos valores são
respectivamente 2 e 5. Assim, para corrigir uma palavra recebida, cada valor de erro ei e sua
localização X i, deve ser determinada.
134
4. Códigos Reed-Solomon
Quando um vetor síndrome diferente de zero é calculado, significa que um erro foi recebido.
Inicialmente é necessário determinar a posição do erro ou erros. Isso pode ser feito por meio
de um polinômio localizador de erros que pode ser definido como
σ( X ) 1 σ1 X σ 2 X 2 σ t X t . (4.27)
Os recíprocos das raízes de (X) revelam as posições de erros do padrão de erro e(X).
Então usando a técnica de modelagem auto-regressiva, pode-se formar uma matriz a partir das
síndromes, onde as primeiras t síndromes são utilizadas para determinar as próximas
síndromes. Isto é,
S1 S2 S3 S t 1 S t σ t S t 1
S S3 S4 St S t 1 σ t -1 S t 2
2
. (4.28)
S t 1 St S t 1 S 2t 3 S 2t 2 σ 2 S 2t 1
S t S t 1 S t 2 S 2t 2 S 2t 1 σ 1 S 2t
Aplica-se o modelo auto-regressivo da Equação 4.28 pelo uso da matriz de maior dimensão
que tem determinante não nulo. Para o código RS (7, 3) que está sendo considerado aqui, esta
matriz é uma matriz 2 2, e o modelo é escrito como
S1 S 2 σ 2 S 3
(4.29)
S
2 S 3 σ 1 S 4
1
2 0 σ 2 3 σ 2 2 0 3
σ (4.30)
0 3 σ1 5 1 0 3 5
Conforme apresentado no Anexo 4.1, no final deste capítulo, o inverso de uma matriz
diagonal é a matriz formada pelo inverso de seus elementos. Portanto,
1
2 0 2 0 5 0
(4.31)
0 3 0 3 0 4
2 0 5 0 2 5 0 0 2 0 0 4 1 0
5 3 4
0 1 (4.32)
0 3 0 4 0 0 0 0
3
135
4. Códigos Reed-Solomon
σ 2 5 0 3 5 3 0 5
σ 2. (4.33)
1 0 4 5 0 3 4 5
( X ) 0 1 X 2 X 2 0 2 X X 2 . (4.34)
Como as raízes de (X) são os recíprocos das posições de erros, o próximo passo é a
determinação das raízes de (4.34). Isso pode ser feito por meio de testes exaustivos do
polinômio (X), com cada um dos elementos do campo, conforme mostrado a seguir.
Qualquer elemento X que resulta em (X) = 0 é uma raiz, e permite localizar um erro.
( 0 ) 0 2 0 0 0 2 5
(1 ) 0 2 2 0 3 3 0
( 2 ) 0 2 2 4 0 4 5 0
( 3 ) 0 2 3 6 0 5 0 5
( 4 ) 0 2 4 8 0 6 2 0
( 5 ) 0 2 5 10 0 0 4 4
( 6 ) 0 2 6 12 0 6 4
De acordo com esses resultados verifica-se que (X) possui como raízes os elementos de
campo 2 e 4. As posições de erros X i são reveladas pelo recíproco das raízes encontradas.
Ou seja,
1
5 Posição X 5
2
.
1
Posição X
3 3
4
Consequentemente, o polinômio padrão de erro já pode ser escrito com as posições de erros
reveladas, isto é,
ê( X ) e3 X 3 e5 X 5 . (4.35)
onde ê(X) denota o polinômio de erro estimado. Note que duas das quatro incógnitas foram
determinadas, ou seja, as duas posições de erros. Resta agora determinar as outras duas
incógnitas que são os valores dos erros.
136
4. Códigos Reed-Solomon
Para a determinação dos valores dos erros e3 e e5 quaisquer duas das quatro equações de
síndrome podem ser usadas. De (4.26) para as síndromes S1 e S2 obtém-se,
S1 r () e3 3 e5 5 2
. (4.36)
S 2 r ( 2 ) e3 6 e5 10 0
3 5 e3 2
6 (4.37)
10 e5 0
Agora a matriz a ser invertida não é uma matriz diagonal e requer uma solução um pouco
mais trabalhosa, conforme apresentado no Anexo A.2, ou seja, para uma matriz [A] o seu
inverso pode ser determinado como:
Inv[ A]
cofator[ A]T
det[ A]
T
3 5
T
10 6 10 5
cofator 6 10 5 6
3 5 3 3
Inv 6 3 10
10 3 5 65 6 4
det 6 10
10 5
6
3 10 5
3
10 5 0 2
4
6 6
3 3 3 3 0
3 5 0 2 3 0 5 3 3 2 5 0 1 0
6 6 0 0 1
10 3 0 6 2 10 0
10 3
137
4. Códigos Reed-Solomon
e3 0 2 2 0 2 2 0 2
e 3 0 3 2 0
5 (4.39)
5 0
0
Finalmente, o polinômio padrão de erro pode ser escrito com as posições de erros e os valores
dos erros definidos, isto é:
ê( X ) 2 X 3 5 X 5 . (4.40)
ĉ( X ) r ( X ) ê( X ) (4.41)
* * *
[1] SKLAR, B., Digital Communications: Fundamentals and Applications – 2nd ed., PTR
Prentice Hall, Upper Saddle River, NJ, 2001. 1079 p.
138
4. Códigos Reed-Solomon
139
4. Códigos Reed-Solomon
140
4. Códigos Reed-Solomon
9) Admita que um polinômio código de um RS (15, 11) tenha sido enviado, por meio de um
canal AWGN, e o decodificador tenha recebido o polinômio r(X) = 1 + α10X 6 + α12X 7+ α4X 8
+ α7X 9 + X 10. Decodifique o polinômio recebido. Considere o GF(24) apresentado no início
da série de exercícios.
* * *
141
5 CÓDIGOS CONVOLUCIONAIS
Além dos Códigos de Blocos Lineares, os Códigos Convolucionais compõem outra grande
família de códigos corretores de erros. Este capítulo descreve os fundamentos dos códigos
convolucionais, sendo que os principais tópicos abordados são:
5.1. INTRODUÇÃO
Considere o bloco de codificação apresentado na Figura 5.1, que representa um codificador
convolucional. A mensagem m a ser codificada é representada pela sequência m = m1, m2, ... ,
mi, ... , onde cada mi representa um bit e i é o índice correspondente ao tempo.
Sequência codificada
Sequência de entrada Codificador c =G(m)
m = m1, m2, ... , mi, ... Convolucional c = c1, c2, ... , ci, ...
Onde ci = c1i, ... , cji , ... , cni
Figura 5.1 – Bloco de codificação convolucional.
Isto significa que embora uma sequência m defina uma única sequência c, uma característica
chave dos códigos convolucionais é que um elemento mi de uma sequência de entrada m não
é suficiente para definir seu símbolo código associado ci em U, uma vez que a codificação de
cada elemento mi não é apenas função do próprio mi, mas é também do elemento mi-1 que o
precedeu.
141
5. Códigos Convolucionais
A cada unidade de tempo, k bits são deslocados para os primeiros k estágios do registrador;
todos os bits no registrador são deslocados k bits para a direita e, as saídas dos n somadores
são sequencialmente amostradas para a obtenção do símbolo código ou bits códigos. Uma vez
que n bits códigos são obtidos na saída para cada grupo de k bits de mensagem, a taxa do
código é k/n bits de mensagem por bits códigos, onde k < n.
Sequência 1 2 3 kK
de entrada kK estágios
m registradores de
deslocamento
+
n Sequência
somadores código c
módulo-2
+
Figura 5.2 - Codificador convolucional.
142
5. Códigos Convolucionais
Bit de
entrada
m
c1
+
Saída
+ c2
Ao contrário dos códigos de bloco que possuem palavras com comprimento fixo, um código
convolucional não possui um tamanho de bloco particular. No entanto, códigos
convolucionais são frequentemente forçados para uma estrutura de bloco através de um
truncamento periódico. Isso requer um número de bits zeros adicionados ao final de uma
sequência com o propósito de esvaziar o conteúdo dos registradores de deslocamento. Como
os zeros adicionados não transportam informação, a taxa efetiva de codificação cai abaixo de
k/n. Para manter a taxa de codificação próxima de k/n, o período de truncamento deve ser
feito tão longo quanto prático.
143
5. Códigos Convolucionais
Suponha agora que a mensagem m(X) = 1 + X + X 3 deve ser codificada pelo codificador da
Figura 5.3. O processo de codificação é mostrado passo a passo na Figura 5.4 e as entradas,
registro de todos os estados dos registradores e saída à cada deslocamento são apresentados na
Tabela 5.1.
1 0 0 0 1 0
c1 c1
+ +
c1 c2 c1 c2
+ 1 1 + 1 0
c2 c2
Deslocamento 1 Deslocamento 2
1 0 1 1 1 0
c1 c1
+ +
c1 c2 c1 c2
+ 0 0 + 0 1
c2 c2
Deslocamento 3 Deslocamento 4
0 1 1 0 0 1
c1 c1
+ +
c1 c2 c1 c2
+ 0 1 + 1 1
c2 c2
Deslocamento 5 Deslocamento 6
Figura 5.4 – Codificação da mensagem m = 1101 através da máquina de estados, obtida passo
a passo.
144
5. Códigos Convolucionais
Saída: 11 10 00 01 01 11.
Observe, na Tabela 5.1, que foi necessário acrescentar dois zeros para a obtenção da
sequência codificada de saída e três zeros para esvaziar totalmente o registrador de
deslocamento. Independentemente do tamanho da sequência a ser codificada, é necessário
acrescentar k.K -1 zeros para a obtenção da sequência código de saída. Consequentemente, o
zero do sétimo deslocamento é desnecessário e o primeiro bit de um novo bloco de entrada
poderia estar no primeiro estágio do registrador de deslocamento.
A Figura 5.3 mostra um codificador em sua forma pictorial. Outra forma de representar o
codificador é através da especificação de um conjunto de n vetores conexão, um para cada
somador módulo-2. Cada vetor tem a dimensão k.K e descreve as conexões entre os estágios
do registrador de deslocamento e os somadores módulo-2. Um um na i-ésima posição do vetor
indica que o estágio correspondente do registrador de deslocamento está conectado ao
somador representado pelo vetor e um zero em uma dada posição indica que aquela posição
não é conectada ao somador. Para o codificador da Figura 5.3, pode-se escrever os vetores
conexão g1 e g2 para os dois somadores como
g1 = 111
g 2 = 101
145
5. Códigos Convolucionais
Resposta ao impulso: 11 10 11. Note que a resposta ao impulso pode ser obtida diretamente
dos vetores conexão, conforme mostrado a seguir.
g1 = 1 1 1
g2 = 1 0 1
11 10 11
A resposta ao impulso permite a determinação da saída do codificador para uma dada entrada
m, pela superposição ou adição linear das respostas ao impulso deslocadas no tempo, ou
ainda, pela convolução da sequência de entrada com a resposta ao impulso do codificador.
Para a mensagem m = 1 1 0 1, a saída do codificador obtida a partir da resposta ao impulso é
obtida da forma como se segue.
Entrada m Saída
1 11 10 11
0 00 00 00
1 11 10 11
1 11 10 11
Soma 11 10 00 01 01 11
módulo-2
11 10 11
11 10 11
c = m ⋅ G = [1 0 1 1] = 11 10 00 01 01 11
11 10 11
11 10 11
É interessante notar ainda que apesar da taxa de codificação do codificador em questão ser
igual a ½, uma mensagem de 4 bits produziu uma sequência codificada de 12 bits, ou seja,
uma taxa igual a 4/12 = 1/3. Isso se deve aos k.K – 1 zeros necessários para o esvaziamento
do registrador de deslocamento, que neste caso são 2 e produz dois pares de bits adicionais à
sequência código. Consequentemente a taxa de codificação deve ser entendida como a taxa
146
5. Códigos Convolucionais
quando a mensagem possui comprimento infinito. Por exemplo, para esse mesmo codificador,
uma mensagem com 1000 bits produz uma sequência código com 2000 + 4 bits. Neste caso a
taxa é 1000/2004 ≅ ½.
Um codificador convolucional pode ser representado por seu diagrama de estados. Como um
exemplo, o diagrama de estados apresentado na Figura 5.6, descreve o comportamento do
codificador da Figura 5.5. O diagrama de estados do codificador pode ser obtido a partir da
verificação de todas as possibilidades de transição entre os estados do codificador, conforme
mostrado na Tabela 5.5.
ti + 1
ti
Bit de
entrada
m
c1
+
Saída
+ c2
Figura 5.5 – Definição do estado atual (ti) e estado futuro (ti + 1) para um codificador com
K = 3.
De acordo com a Figura 5.6(a), o estado "00" é representado por um círculo do qual partem
duas transições. Uma transição parte de um estado no tempo ti e alcança um estado no tempo
ti + 1 e é representada por uma seta. Para que isso aconteça, é necessário que esteja presente
na entrada um bit mi que provoca uma saída c1c2, representado pela notação mi/c1c2, próximo
147
5. Códigos Convolucionais
a cada transição. Conforme mostrado na Tabela 5.5, a partir do estado "00", pode-se
permanecer nele se a entrada for "0" ou migrar para o estado "10" se a entrada for "1".
0/0 0/00
0
(a) (b)
0 0
1/1 1/11
1
1 1 0
0/0 0/10
0
(c
1/01
0 1
1/1
1 0
0/1
1/0 0/0
1 1
1/1
0
Figura 5.6 (a), (b) e (c)- Construção do diagrama de estados de acordo com a Tabela 5.5.
148
5. Códigos Convolucionais
A Figura 5.6(b) apresenta as transições que partem do estado "10". De acordo com a Tabela
5.5, a partir do estado "10" pode-se migrar para o estado "01" se a entrada for "0" ou migrar
para o estado "11" se a entrada for "1".
Da mesma forma, a Figuras 5.6(c) apresenta as transições que partem do estado "11". De
acordo com a Tabela 5.5, se a entrada for "1" o próximo estado é o próprio estado "11" e se
entrada for "0" ocorre uma transição para o estado "01".
Finalmente, na Figura 5.6(d) são apresentadas as transições que partem do estado "01" e
alcançam os estados "10" e "00" se as entradas forem "1" e "0", respectivamente. A Figura
5.6(e) apresenta o diagrama de estados completo.
0/00 0/00
(d) (e)
00 00
1/11 0/11 1/11 0/11
1/00 1/00
10 01 10 01
0/10 0/10
1/10 1/10
Figura 5.6 (d) e (e) - Construção do diagrama de estados de acordo com a Tabela 5.5.
149
5. Códigos Convolucionais
01
00
1/11
0/11
10
1/00
0/10
01 1/01
0/01
11
150
5. Códigos Convolucionais
Existem, basicamente, duas distâncias que podem ser utilizadas no algoritmo de Viterbi para a
medida de similaridade entre a sequência recebida pelo decodificador e as sequências
possíveis sobre a treliça: a distância de Hamming e a distância Euclidiana. A distância de
Hamming é utilizada em um processo de decisão chamado de decisão abrupta (hard decision)
enquanto a distância Euclidiana, ou um parâmetro derivado dela, é utilizado em um processo
de decisão chamado de decisão suave (soft decision). A decisão abrupta destaca-se pela
simplicidade e baixa carga computacional enquanto que a decisão suave requer uma carga
computacional maior em troca de melhor desempenho em termos de capacidade de correção
de erros. Neste curso é abordado a decisão abrupta pela simplicidade e baixa carga
computacional.
Passo 1: Partindo do estado 00, compara-se a distância de Hamming do primeiro par de bits
da sequência código (11) com as distâncias de Hamming das duas transições possíveis a partir
do estado 00. As distâncias de Hamming obtidas são armazenadas (valores entre parênteses),
conforme apresentado na Figura 5.9(a).
151
5. Códigos Convolucionais
recebidos 11
0/00
(2)
00
1/11
(0)
10
01
11
recebidos 11 10
0/00
(2) 0/00 (3)
00
1/11 1/11
(0) (3)
10
0/10
(0)
01 1/01
(2)
11
152
5. Códigos Convolucionais
recebidos 11 10 10
(2) (3) (4)
0/00 0/00 0/00
00
1/11 1/11
1/11 (1)
Passo 4: O mesmo procedimento é repetido até o final da sequência. Para cada par do sinal
recebido deve-se inspecionar a treliça e eleger o caminho sobrevivente. As Figuras
5.9(d), (e) e (f) apresentam a evolução da treliça, mostrando apenas os caminhos
sobreviventes. Note que ao final da sequência código recebida, apenas um caminho
é o caminho sobrevivente final.
recebidos 11 10 10 01
0/00 (2)
00
1/11 (1)
1/11
(0) 0/11
10 1/00
0/10 (2)
(1)
1/01
(0)
01 1/01
(2)
0/01
(2)
1/10
11
(2) (1)
153
5. Códigos Convolucionais
recebidos 11 10 10 01 01
recebidos 11 10 10 01 01 11
00
1/11 (1)
(0) 0/11
10
0/10 1/00
(1)
(0)
1/01
01
0/01 (1)
11
(1)
decodificação.
Conclusão: Após a análise do último par de bits recebidos, o caminho sobrevivente aponta
uma distância de Hamming acumulada igual a 1. Este resultado mostra que a
sequência decodificada com maior probabilidade de ter sido a sequência
transmitida é a sequência 11 10 00 01 01 11, correspondente a mensagem m =
101100. Neste caso a seqüência recebida apresenta um erro em relação à
154
5. Códigos Convolucionais
A distância livre pode ser obtida de forma bastante simples a partir do diagrama de estados do
codificador convolucional. Considere o diagrama de estados da Figura 5.6. Qualquer
sequência código não zero corresponde a um caminho que começa e termina no estado 00.
Pode-se dividir o estado 00 em dois de modo a permitir que o diagrama de estado possa ser
transformado em um grafo de fluxo de sinal com uma única entrada e uma única saída. Um
grafo de fluxo de sinal consiste de nós e ramos e opera segundo as seguintes regras:
1. Um ramo multiplica o sinal em seu nó de entrada pela função que caracteriza cada
ramo.
2. Um nó com ramos de chegada soma os sinais produzidos por todos aqueles ramos.
3. O sinal em cada nó é aplicado igualmente a todos os ramos de saída daquele nó.
4. A função de transferência do grafo é a relação entre o sinal de saída e o sinal de
entrada.
Um código convolucional com distância livre igual a dfree pode corrigir t erros de acordo com
a relação
155
5. Códigos Convolucionais
d − 1 (5.1)
t = free .
2
Pode-se concluir que a capacidade de correção de um código cuja dfree = 5 é igual a dois ou
talvez três erros. Essa conclusão, entretanto, leva a uma questão importante: para que
comprimento da sequência recebida pode-se corrigir dois ou talvez três erros? Infelizmente
não existe uma resposta exata para essa questão já que a capacidade de correção está
associada à forma como os erros estão distribuídos na sequência (mais próximos ou mais
afastados uns dos outros).
Mais uma vez, pode-se dizer que, observações permitem concluir que a capacidade de
correção de t erros ocorre, geralmente, dentro de algumas extensões de influência K, onde
“algumas” aqui significa 3 a 5. Logo, voltando ao código em questão, em que k = 3, pode-se
dizer então que 2 ou 3 erros podem ser corrigidos em uma sequência recebida cujo
comprimento pode variar de 9 a 15 bits, dependendo da distribuição dos erros na sequência.
* * *
[1] SKLAR, Bernard. Channel coding. In: Digital communications: fundamentals and
applications. 2. ed. Upper Saddle River, New Jersey: Prentice Hall, 2001. p. 304-429.
ISBN 0130847887.
[2] HAYKIN, Simon. Error control coding. In: Systems communications: 4. ed. New York:
John Wiley & Sons, 2001. p. 626-696. ISBN 0471178691.
[3] LIN, S.; COSTELLO, D. J. Error control coding: fundamentals and applications.
Englewood Cliffs, New Jersey: Prentice Hall, 1983. ISBN 013283796X.
156
5. Códigos Convolucionais
0/000
00
1/111 0/111
1/000
10 01
0/101
1/010 0/010
11
1/101
a) Desenhe o codificador.
b) Determine a capacidade de correção de erros deste código.
c) Codifique a mensagem 10101.
d) Decodifique a sequência recebida 101001000110101010101 utilizando o algoritmo de
Viterbi.
157
5. Códigos Convolucionais
* * *
158
A1
TÓPICOS
1.1. INTRODUÇÃO
1.2. CAMPOS
1.1. INTRODUÇÃO
1.2. CAMPOS
• Seja F um conjunto de elementos sobre o qual duas operações binárias, a adição “+” e a multiplicação “•”, são definidas.
• F, junto com as duas operações binárias, é um campo se as seguintes condições são satisfeitas:
1.2. CAMPOS
• Subtração em um campo: a subtração de um elemento a por outro elemento b, ambos pertencentes a um campo, é definida
como ∆
a − b = a + (− b )
• Divisão em um campo: a divisão de um elemento a por um elemento não zero b, ambos pertencentes a um campo, é definida
como ∆
a ÷ b = a ⋅ b −1
• Campos de Galois: é um campo com um número finito de elementos representado por GF(p), onde p é um número primo.
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
1.2. CAMPOS
Propriedades:
• Propriedade 3: Se a ⋅ b = 0 e a ≠ 0 ⇒ b = 0
• Propriedade 5: Para a ≠ 0, a ⋅ b = a ⋅ c ⇒ b = c
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
1.2. CAMPOS
EXEMPLO 1
Considere o conjunto {0, 1} cujas operações de multiplicação e adição módulo-2 são apresentadas nas tabelas a seguir.
• 0 1 + 0 1
0 0 0 0 0 1
1 0 1 1 1 0
Este conjunto é um campo de dois elementos sob multiplicação e adição módulo-2, ou seja, é um Campo de Galois,
GF(2) = {0, 1}
* * *
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
1.2. CAMPOS
EXEMPLO 2
Seja p um número primo. Então, {0, 1, 2, ... , p - 1} é um conjunto de elementos sob adição módulo-p. Os elementos não zero
{1, 2, ... , p - 1} formam um conjunto comutativo sob multiplicação módulo-p. A partir das definições de adição e multiplicação
módulo-p e do fato de que a multiplicação de um número real é distributiva sobre a adição, então a multiplicação módulo-p é
distributiva sobre a adição módulo-p. Portanto, o conjunto {0, 1, 2, ... , p - 1} é um campo de ordem p sob adição e multiplicação
módulo-p. Este campo é chamado de campo primo e é representado por GF( p).
Para p = 2 tem-se o campo binário apresentado no Exemplo 1. Para p = 7, tem-se GF(7) = {0, 1, 2, 3, 4, 5, 6} e as operações de
adição e multiplicação no campo são:
+ 0 1 2 3 4 5 6 • 0 1 2 3 4 5 6
0 0 1 2 3 4 5 6 0 0 0 0 0 0 0 0
1 1 2 3 4 5 6 0 1 0 1 2 3 4 5 6
2 2 3 4 5 6 0 1 2 0 2 4 6 1 3 5
3 3 4 5 6 0 1 2 3 0 3 6 2 5 1 4
4 4 5 6 0 1 2 3 4 0 4 1 5 2 6 3
5 5 6 0 1 2 3 4 5 0 5 3 1 6 4 2
6 6 0 1 2 3 4 5 6 0 6 5 4 3 2 1
• Códigos podem ser construídos com símbolos a partir de qualquer campo de Galois GF(q), onde q é um primo p ou uma
potência de p.
• Em geral são construídos a partir de GF(2) ou GF (2m) e, consequentemente a aritmética usada é a binária.
f ( X ) = f 0 + f1 X + f 2 X 2 + L + f n X n
• Assim, a palavra binária (101011), onde o bit mais significativo é o bit mais à esquerda, pode ser descrita pelo polinômio
f ( X ) = 1 + 1 X + 0 X 2 + 1 X 3 + 0 X 4 + 1X 5
f (X ) = 1+ X + X 3 + X 5
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
a( X ) = 1 + X + X 3 + X 5 b( X ) = 1 + X 2 + X 3 + X 4 + X 7
1 + 1 X + 0 X 2 + 1 X 3 + 0 X 4 + 1X 5 + 0 X 6 + 0 X 7
+
1 + 0 X + 1 X 2 + 1X 3 + 1X 4 + 0 X 5 + 0 X 6 + 1X 7
0 + 1X + 1X 2 + 0 X 3 + 1 X 4 + 1X 5 + 0 X 6 + 1X 7
a ( X ) + b( X ) = X + X 2 + X 4 + X 5 + X 7
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
1 + 1 X + 0 X 2 + 1X 3 + 0 X 4 + 1 X 5 + 0 X 6 + 0 X 7
⋅
1 + 0 X + 1X 2 + 1 X 3 + 1 X 4 + 0 X 5 + 0 X 6 + 1X 7
1 + 1X + 0 X 2 + 1 X 3 + 0 X 4 + 1X 5 + 0 X 6 + 0 X 7
1 X 2 + 1 X 3 + 0 X 4 + 1 X 5 + 0 X 6 + 1X 7 + 0 X 8 + 0 X 9
1X 3 + 1X 4 + 0 X 5 + 1X 6 + 0 X 7 + 1X 8 + 0 X 9 + 0 X 10
1X 4 + 1X 5 + 0 X 6 + 1X 7 + 0 X 8 + 1X 9 + 0 X 10 + 0 X 11
1X 7 + 1X 8 + 0 X 9 + 1X 10 + 0 X 11 + 1X 12 + 0 X 13 + 0 X 14
1 + 1X + 1X 2 + 1X 3 + 0 X 4 + 1X 5 + 1X 6 + 1X 7 + 0 X 8 + 1X 9 + 1X 10 + 0 X 11 + 1X 12 + 0 X 13 + 0 X 14
a ( X ) ⋅ b( X ) = 1 + X + X 2 + X 3 + X 5 + X 6 + X 7 + X 9 + X 10 + X 12
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
• A divisão entre um polinômio f(X) e um polinômio g(X), no caso em que f(X) possui grau maior ou igual do que g(X) e g(X) não
é zero é dada por:
f ( X ) = q ( X )g ( X ) + r ( X )
EXEMPLO 3
f(X) = X 6 + X 5 + X 4 +X + 1 g(X) = X 3 +X + 1
X6 + X5 + X4 + X + 1 X3 + X + 1
X 6 + X4 + X 3 X3 + X 2 (quociente)
X5+X3+X+1
X 5 + X3 + X 2
X2+X+1 (resto)
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
• Polinômio irredutível: Um polinômio p(X) sobre GF(2) de grau m é dito irredutível sobre GF(2) se ele não for divisível por
nenhum outro polinômio sobre GF(2) de grau menor que m mas maior que zero. Como exemplo, os polinômios
X 2 + X + 1;
X 3 + X + 1;
X 4 + X + 1.
X4 + X 3+ X 2 + 1
X 4 + X2 + X
X 3+ X + 1
X 3+ X + 1
* * * 0
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
• Polinômio primitivo: um polinômio irredutível p(X) de grau m é dito primitivo se o menor positivo inteiro n, para o qual
p(X) divide X n + 1 é n = 2 m - 1 .
EXEMPLO 5
p(X) = X 4 + X + 1
é irredutível mas não é primitivo pois além de p(X) dividir X 15 + 1 ele também divide X 5 + 1.
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
EXEMPLO 5
X 15 + 1 X 4 + X 3 + X 2+ X + 1 X5+1 X4+ X 3 + X2 + X + 1
(X 15 + X 14 + X 13 + X 12 + X 11) X 11 + X 10 + X 6 + X 5 + X + 1 (X 5 + X 4 + X 3 + X 2 + X) X+1
X 14 + X 13 + X 12 + X 11 + 1 X4+ X 3 + X2 + X + 1
(X 14 + X 13 + X 12 + X 11 + X 10) (X 4 + X 3 + X 2 + X + 1)
X 10 + 1 0
(X 10 + X 9 + X 8 + X 7 + X 6)
X9 + X8 + X7 + X6 + 1
(X 9 + X 8 + X 7 + X 6 + X 5)
X5+1
(X 5 + X 4 + X 3 + X 2 + X)
X4 + X3 + X2 + X + 1
(X 4 + X 3 + X 2 + X + 1)
0
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
• A tabela apresenta apenas um polinômio primitivo para cada valor de m. Os polinômios apresentados são os que possuem o
menor número de termos.
m p(X) m p(X)
3 1 + X + X3 14 1 + X + X 6 + X 10 + X 14
4 1 + X + X4 15 1 + X + X 15
5 1 + X2 + X5 16 1 + X + X 3 + X 12 + X 16
6 1 + X + X6 17 1 + X 3 + X 17
7 1 + X3 + X7 18 1 + X 7 + X 18
8 1 + X2 + X3 + X4 + X8 19 1 + X + X 2 + X 5 + X 19
9 1 + X4 + X9 20 1 + X 3 + X 20
10 1 + X 3+ X 10 21 1 + X 2+ X 21
11 1 + X 2 + X 11 22 1 + X + X 22
12 1 + X + X 4 + X 6 + X 12 23 1 + X 5 + X 23
13 1 + X + X 3 + X 4 + X 13 24 1 + X + X 2 + X 7 + X 24 * * *
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
• Considere também a condição sobre o elemento α de forma que o conjunto F contém somente 2m elementos e está fechado sob
multiplicação “⋅”
• Então a construção de um Campo de Galois, a partir de um polinômio primitivo, resulta em dois tipos de representação para os
seus elementos:
EXEMPLO 6
Seja m = 4 e considere o polinômio primitivo sobre GF(2), p(X) = 1 + X + X 4. Admitindo que α seja uma raiz do polinômio, então
p(α) = 0, ou seja,
0 = 1+ α + α4 ⇒ α 4 = 1+ α
α 5 = α ⋅ α 4 = α (1 + α ) = α + α 2
α 6 = α ⋅ α 5 = α (α + α 2 ) = α 2 + α 3
α 7 = α ⋅ α 6 = α (α 2 + α 3 ) = α 3 + α 4 = α 3 + 1 + α = 1 + α + α 3
α 8 = α ⋅ α 7 = α (1 + α + α 3 ) = α + α 2 + α 4 = α + α 2 + 1 + α = 1 + α 2
M
α2 −2
= α 14 = 1 + α 3
m
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
EXEMPLO 6
Tabela - GF(24) gerado por p(X) = 1 + X + X 4
REPRESENTAÇÕES
0 0 (0000) α7 1 + α + α3 (1101)
α0 = 1 1 (1000) α8 1 + α2 (1010)
α1 α (0100) α9 α + α3 (0101)
α2 α2 (0010) α 10 1 + α + α2 (1110)
α3 α3 (0001) α 11 α + α2 + α3 (0111)
α4 1+α (1100) α 12 1 + α + α2 + α 3 (1111)
α5 α + α2 (0110) α 13 1 + α2 + α3 (1011)
α6 α2 + α3 (0011) α 14 1 + α3 (1001)
* * *
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
EXEMPLO 7
A adição entre dois elementos de campo é mais facilmente realizável com os elementos em sua representação polinomial.
α 5 + α 7 = α + α 2 + 1 + α + α 3 = 1 + α 2 + α 3 = α 13
α 5 + α 7 = α 13
* * *
EXEMPLO 8
Seja o GF(24) gerado por p(X) = 1 + X + X 4. O elemento de ordem mais alta do campo é
−2
= α14
m
α2
Considere agora os elementos α 7 e α 12. O produto entre esses dois elementos é
α 7 ⋅ α12 = α 19
Note que α 19 > α 14 e assim, o expoente deve ser reduzido fazendo 19 ÷ (2m - 1) = 19 ÷ 15 = 1 e o resto é 4. Logo,
α 7 ⋅ α12 = α 19 = α 4
* * *
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
• A operação de divisão entre dois elementos do campo deve ser pode ser feita por meio do produto do dividendo pelo inverso do
divisor, lembrando que:
αi
= α i ⋅ α − j = α i ⋅ (α 0 ⋅ α − j ) = α i ⋅ (α 2 −1 ⋅ α − j )
m
α j
EXEMPLO 9
α7
= α 7 ⋅ α −12 = α 7 ⋅ (α 2 −1 ⋅ α −12 ) = α 7 ⋅ (α 15 ⋅ α −12 ) = α 10
m
α 12
α7
= α 10
α 12
* * *
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
• Um polinômio com coeficientes de GF(2) pode não ter raízes em GF(2) mas ter raízes em um campo de extensão GF(2m).
EXEMPLO 10
X 4 + X 3 + 1 é irredutível sobre GF(2), entretanto, ele tem raízes em GF(24). Dos elementos de GF(24) dados na Tabela 1, os
elementos α7, α11, α13 e α14 são raízes de X 4 + X 3 + 1. Pode-se verificar isso, para α7, fazendo
Tabela 1 (α7)4 + (α7)3 +1 =
REPRESENTAÇÕES
α28 + α21 +1 =
POR POTÊNCIA POLINOMIAL VETORIAL POR POTÊNCIA POLINOMIAL VETORIAL (1 + α2 + α3) + (α2 + α3) + 1 = 0
0 0 (0000) α7 1 + α + α3 (1101)
α0 =1 1 (1000) α8 1+ α2 (1010) O mesmo se verifica para α11, α13 e α14.
α1 α (0100) α9 α + α3 (0101)
α2 α2 (0010) α 10 1 + α + α2 (1110)
α3 α3 (0001) α 11 α+ α2 + α3 (0111)
α5 α + α2 (0110) α 13 1 + α2 + α3 (1011)
α6 α2 + α3 (0011) α 14 1+ α3 (1001)
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
EXEMPLO 10
O mesmo se verifica para α11, α13 e α14. Pode-se verificar também que:
* * *
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
Seja f (X) um polinômio com coeficientes de GF(2). Se um elemento β de GF(2m) é uma raiz de f (X), então o polinômio f (X)
também tem como raízes β 2 para qualquer l ≥ 0. O elemento β 2 é chamado de conjugado de β.
l l
−1
+1 .
m
Os 2m - 1 elementos não zero de GF(2m) formam todas as raízes de X 2
EXEMPLO 11
O polinômio f(X) = 1 + X 3 + X 4 + X 5 + X 6 tem como raiz o elemento α 4, do GF(24) apresentado na Tabela 1, conforme mostrado
a seguir.
f (α 4 ) = 1 + α 12 + α 16 + α 20 + α 24 = 1 + α 12 + α + α 5 + α 9
= 1 + (1 + α + α 2 + α 3 ) + α + (α + α 2 ) + (α + α 3 ) = 0
Os conjugados de α 4 são (α ) = α ; (α 4 ) 2 = α 16 = α ; (α 4 ) 2 = α 32 = α 2
2 3
4 2 8
Note que (α 4)16 = α 64 = α 4. Assim, α 2, α, α 8 são raízes de f(X) = 1 + X 3 + X 4 + X 5 + X 6. Pode-se verificar ainda que α 5 e seu
conjugado α 10 são raízes de f(X) = 1 + X 3 + X 4 + X 5 + X 6. Portanto, f(X) = 1 + X 3 + X 4 + X 5 + X 6 possui seis raízes distintas no
GF(24) da Tabela 1.
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
e −1
φ(X ) = ∏ (X + β ) 2i
i =0
é um polinômio irredutível sobre GF(2) e é chamado de polinômio mínimo de β.
EXEMPLO 12
φ ( X ) = ( X + α 3 )( X + α 6 )( X + α 12 )( X + α 9 )
φ ( X ) = [ X 2 + (α 3 + α 6 ) X + α 9 ][ X 2 + (α 12 + α 9 ) X + α 21 ]
O polinômio mínimo de β = α é então
3
φ ( X ) = ( X 2 + α 2 X + α 9 )( X 2 + α 8 X + α 6 )
φ ( X ) = X 4 + (α 2 + α 8 ) X 3 + (α 6 + α 10 + α 9 ) X 2 + (α 17 + α 8 ) X + α 15
φ(X ) = X 4 + X 3 + X 2 + X +1
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
* * *
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)
• Na construção do campo de Galois GF(2m) foi utilizado um polinômio primitivo p(X) de grau m e definido que o elemento α
fosse uma raiz de p(X). Uma vez que as potências de α geram todos os elementos não zero de GF(2m), α é um elemento
primitivo.
• Se β é um elemento primitivo em GF(2m), todos os seus conjugados β 2 , β 2 ,L são também elementos primitivos de GF(2m).
2