Você está na página 1de 169

1 LIMITES FUNDAMENTAIS NA TEORIA DA INFORMAÇÃO

O trabalho de Shannon (*1916-†2001) sobre a teoria da informação, publicado em 1948,


estabelece a base teórica para que sistemas de comunicações sejam eficientes e confiáveis.

Os principais tópicos abordados nessas notas de aulas são:

A Entropia como uma medida básica de informação.


O Teorema da Codificação de Fonte e algoritmos de compactação de dados.
Informação Mútua e sua relação com a capacidade do canal de informação para a
transmissão de informação.
O Teorema da Codificação de Canal como base para comunicações confiáveis.
O Teorema da Capacidade de Informação como a base para a solução de
compromisso entre a largura de faixa do canal e a relação sinal-ruído.

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.

1.2. INCERTEZA, INFORMAÇÃO E ENTROPIA


Suponha que um experimento probabilístico envolva a observação da saída de uma fonte de
eventos discretos em unidades de intervalo de tempo. Estes eventos podem ser modelados
como variáveis discretas aleatórias (sk) que fazem parte de um conjunto ou alfabeto (S).
Assim, S = {s0, s1, ..., sK-1} com probabilidades P(S = sk) = pk, para k = 0, 1, ... , K-1, que
satisfaz a igualdade
K −1

∑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.

A quantidade de informação produzida pela fonte está associada à incerteza ou surpresa. Se


não há surpresa não há informação. A quantidade de informação, I(sk), obtida por um evento,
sk, é definida como
 1 
I (sk ) = log 2   . (1.1)
 pk 

NOTA 1

A base do logaritmo é arbitrária. Entretanto, uma vez que os sistemas de comunicações


digitais operam com base binária, a base do logaritmo é 2. Como consequência, cada símbolo
de uma fonte discreta sem memória apresenta, neste caso, uma quantidade de informação em
número de bits, que depende exclusivamente da probabilidade de ocorrência de cada símbolo.

A quantidade de informação apresenta as seguintes propriedades:

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 )

A quantidade de informação produzida por uma fonte durante um intervalo de tempo


arbitrário depende do conjunto de símbolos emitidos pela fonte. A média da quantidade de
informação I(sk) de uma fonte de alfabeto (S) é dada por

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:

1. H(S) = 0, se e somente se a probabilidade pk = 1 para um dado valor de k e todas as


outras probabilidades são iguais a zero. Neste caso não há incerteza.
2. H(S) = log 2 K, se e somente se pk = 1/K, ou seja, todos os símbolos são equiprováveis.
Neste caso a incerteza é máxima.

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 

Consequentemente, a entropia da fonte torna-se

H( p0 ) = − p0 log 2 p0 − (1 − p0 ) log 2 (1 − p0 ) (1.4)

Onde, H(p0) é chamada de função entropia e

1. Quando p0 = 0, H(S) = 0.
2. Quando p1 = 1, H(S) = 0.
3. A entropia é máxima quando p1 = p0 = ½.

A Figura 1.1 apresenta a função entropia em função de p0.

3
1. Limites Fundamentais da Teoria da Informação

H(p0)
1

p0
0
0,5 1
Probabilidade de símbolo

Figura 1.1 - Função entropia de uma fonte discreta sem memória.

1.3. TEOREMA DA CODIFICAÇÃO DE FONTE


A codificação de fonte é o processo pelo qual os dados de uma fonte discreta são
representados de forma a permitir uma transmissão eficiente. Probabilidades diferentes para a
ocorrência dos símbolos de uma fonte discreta podem ser exploradas para uma codificação de
fonte com um código de comprimento variável. Entretanto, códigos de comprimento variável
exigem o conhecimento prévio da estatística da fonte. Um exemplo clássico de código de
comprimento variável é o Código Morse, que faz uso da estatística da fonte. Na construção do
código, Morse observou que na língua inglesa a letra e é a letra que aparece com maior
frequência e no Código Morse ela é representada por um “⋅”. Por outro lado, a letra q é a letra
que ocorre com menos frequência sendo representada pela sequência “- ⋅ - -”.

No caso específico dos sistemas de comunicações digitais é conveniente que dois requisitos
funcionais sejam satisfeitos:

1. As palavras códigos devem estar na forma binária.


2. As palavras códigos devem ser inequivocamente decodificáveis.

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

onde lk é o número de bits da palavra código correspondente ao símbolo k.

4
1. Limites Fundamentais da Teoria da Informação

PRIMEIRO TEOREMA DE SHANNON

TEOREMA DA CODIFICAÇÃO DE FONTE

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)

De acordo com o Primeiro Teorema de Shannon a entropia representa um limite fundamental


do número médio de bits por símbolo necessários para representar uma fonte discreta sem
memória. Em outras palavras, um esquema de codificação de fonte pode ser feito de modo
que o comprimento médio das palavras códigos seja tão pequeno quanto à entropia, mas
nunca menor do que ela. Assim, eficiência de codificação pode ser definida pela relação

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.

1.4. COMPACTAÇÃO DE DADOS


Para uma transmissão eficiente as informações redundantes devem ser removidas do sinal que
será transmitido. Neste texto os termos compactação e compressão apresentam significados
distintos. Aqui, o termo compactação está associado a um processo onde não há perda de
informação, enquanto o termo compressão é usado nos processos em que se admite perda de
informação. Em outras palavras, a compactação o mesmo que uma compressão sem perdas.
Na compactação de dados, o processo de codificação de fonte é limitado, necessariamente,
pela entropia da fonte.

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.

Para ilustrar o conceito, observe a Tabela 1.1.

5
1. Limites Fundamentais da Teoria da Informação

Tabela 1.1 - Exemplos de códigos de fonte.

Símbolo Probabilidade Código I Código II Código III


S0 0,5 0 0 0
S1 0,25 1 10 01
S2 0,125 00 110 011
S3 0,125 11 111 0111

A partir do apresentado na Tabela 1.1 verifica-se que:

1. O Código I não é um código prefixo.


2. O Código II é um código prefixo.
3. O Código III não é um código prefixo.

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

Figura 1.2 - Árvore de decodificação para o Código II.

6
1. Limites Fundamentais da Teoria da Informação

A sequência 1011111000... é inequivocamente decodificável e corresponde correspondente à


sequência de símbolos s1 s3 s2 s0 s0.

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)

Assim verifica-se que:

• Para o Código I:
K −1

∑2
k =0
−l k
= 2 −1 + 2 −1 + 2 −2 + 2 −2 = 1,5

• Para o Código II:


K −1

∑2
k =0
−lk
= 2 −1 + 2 −2 + 2−3 + 2 −3 = 1

• Para o Código III:


K −1

∑2
k =0
−lk
= 2 −1 + 2 −2 + 2−3 + 2−4 = 0,9375
Observações:

1. O Código I viola a desigualdade de Kraft-McMillan.


2. A desigualdade de Kraft-McMillan foi satisfeita pelos Códigos II e III, entretanto,
apenas o Código II é um código prefixo.
3. O Código III é inequivocamente decodificável apesar de não ser um código prefixo,
ou seja, um código inequivocamente decodificável não precisa ser, necessariamente
um código prefixo, entretanto, sua decodificação não é instantânea.

ALGORITMO DE HUFFMAN

O objetivo do algoritmo de Huffman é atribuir códigos menores para símbolos mais


frequentes e códigos maiores para símbolos menos frequentes. O procedimento de Huffman
para a criação de um código prefixo consiste de um pequeno conjunto de regras. Essas regras
são apresentadas no exemplo apresentado a seguir.

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).

1. Os símbolos da fonte são listados em ordem decrescente de probabilidade. Aos dois


símbolos de menor probabilidade, localizados no pé da coluna, são atribuídos os 0 e 1.

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

2. Os dois símbolos de menor probabilidade são agrupados em um único símbolo, cuja


probabilidade é a soma das probabilidades. As probabilidades são novamente listadas em
ordem decrescente de probabilidade em uma segunda coluna. Por um motivo que será
explicado posteriormente, na reordenação dos símbolos por ordem decrescente de
probabilidade o novo símbolo, resultado do agrupamento, foi colocado na posição mais
alta possível, sem violar a ordem decrescente de probabilidade.

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

O resultado da codificação está apresentado na Tabela 1.2.

Tabela 1.2 - Palavras códigos obtidas no Exemplo 1.2.

s0 00
s1 10
s2 11
s3 010
s4 011

O comprimento médio é das palavras códigos obtidos neste exemplo é:

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

Sendo a entropia determinada por:

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

A eficiência obtida nesta codificação é:

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

Figura 1.3 - Árvore de decodificação para o código do Exemplo 1.2.

* * *

O processo de codificação de Huffman não é único. Pelo menos duas variações no processo
de codificação são possíveis.

1. No agrupamento dos símbolos, o rótulo 0 e 1 para cada símbolo é arbitrário, poderia


ser 1 e 0. Entretanto, a mesma convenção deve ser mantida do início ao fim.
2. A colocação de símbolos combinados com mesma probabilidade que outro(s), na
posição mais alta da coluna, também é arbitrário, poderia não ser na posição mais alta.

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.

A variância do comprimento das palavras códigos, σ2, é determinada por

( )
K −1
2
σ = ∑ pk l k − L .
2
(1.9)
k =0

12
1. Limites Fundamentais da Teoria da Informação

NOTA 2

Suponha a sequência 00010110111000. Verifica-se através da árvore de decisão apresentada


no Exemplo 1.3 que a sequência é inequivocamente decodificável como sendo S0; S3; S2; S4;
S1 e S0 .

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)

Isso ocorre quando a probabilidade de um evento é igual ao inverso da base numérica da


codificação elevado ao comprimento da palavra código correspondente a este evento. Em
outras palavras,
pk = 2 − lk . (1.11)

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.

EXTENSÃO DE UMA FONTE DISCRETA SEM MEMÓRIA

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 }

P(S = sk) = {p0; p1; p2}.

Considere os blocos formados conforme apresentado na Tabela 1.3.

13
1. Limites Fundamentais da Teoria da Informação

Tabela 1.3 - Extensão da fonte S em 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 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

σ0 0,36 0,36 0,36 0,36 0,36 0,36

σ1 0,18 0,18 0,18 0,18 0,18 0,28


6 6 6 6 6 6
0
σ3 0,18 0,18 0,18 0,18 0,18 0,18
0
σ4 0,09 0,09 0,09 0,12 0,16 0,18
1
36 36 36 0
σ2 0,06 0,06 0,07 0,09 0,12
1
0
σ6 0,06 0,06 0,06 0,07
1
0 0
σ5 0,03 0,04 0,06 0,64 0,36
1
0 0
σ7 0,03 0,03 0,36 0,36
1 1

σ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

Conforme já comentado, a construção de um código prefixo, como os códigos obtidos por


meio do algoritmo de Huffman, pressupõe o conhecimento prévio da estatística da fonte. Isso
representa uma desvantagem em algumas aplicações, como por exemplo, na compactação de
texto. A estatística da fonte para um texto pode mudar de acordo com língua utilizada, ou seja,
a estatística da fonte para a língua inglesa é diferente da estatística da fonte da língua
portuguesa. Além disso, dentro de uma mesma língua, a estatística da fonte pode variar de
acordo com a natureza do texto. Para aplicações tais como compactações de textos existem
códigos que se adaptam à estatística da fonte. O algoritmo de Lempel-Ziv é adaptativo e não
necessita do conhecimento prévio da estatística da fonte. Para ilustrar este algoritmo considere
a seguinte sequência binária:

000101110010100101. . .

O mecanismo de codificação pode ser entendido de acordo com a sequência apresentada a


seguir.

1. Inicialmente os bits 0 e 1 são previamente armazenados nas posições numéricas 0 e 1,


conforme apresentado a seguir. Tais posições numéricas compõem o livro de códigos.

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

2. Em seguida, a subsequência mais curta, ainda não armazenada em nenhuma posição


binária, é armazenada na posição 2 pelo codificador. Esta subsequência é 00. O processo
de codificação consiste em transmitir a posição de memória onde se encontra a parte da
subsequência 00 já armazenada anteriormente, na forma binária, e o que é novidade
simplesmente é repetido. Ou seja, da subsequência 00, o primeiro 0 se encontra na
posição numérica 0 (000 em binário) e o segundo 0 simplesmente é repetido. Veja a
seguir.

Posição numérica 0 1 2 3 4 5 6 7 0
Subsequências 0 1 00
Blocos codificados - - 000 0

3. Novamente a próxima subsequência mais curta ainda não armazenada em nenhuma


posição binária, que é a subsequência 01, é armazenada na posição 3. A posição de
memória onde se encontra a parte da subsequência 01 já armazenada é a posição 0 (000
em binário) e a parte novidade 1 é repetida. Logo, o bloco codificado agora é 0001,
conforme mostrado a seguir.

Posição numérica 0 1 2 3 4 5 6 7 0
Subsequências 0 1 00 01
Blocos codificados - - 0000 0001

4. Este procedimento é repetido conforme apresentado na sequência a seguir.

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

O processo de decodificação é iniciado a partir de três premissas:

1) O codificador e o decodificador possuem o mesmo número de memórias no livro de


códigos e, portanto, o decodificador conhece o tamanho do bloco codificado.
2) O decodificador também inicia o processo de decodificação com os bits 0 e 1
armazenados nas posições numéricas 0 e 1.
3) O decodificador compõe o seu próprio livro de código usando as memórias na mesma
sequência que o codificador.

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.

1.5. CANAIS DISCRETOS SEM MEMÓRIA


Um canal discreto sem memória é um modelo estatístico com uma entrada X e uma saída Y,
que é uma versão ruidosa de X. Tanto os símbolos que entram em X quanto os que saem de Y
são variáveis aleatórias. Em outras palavras, é um canal que, em cada unidade de tempo,
aceita um símbolo de entrada xj, pertencente a um alfabeto X, e em resposta, emite na saída
um símbolo yk, de um alfabeto Y. O termo discreto significa que os dois alfabetos possuem
tamanhos finitos e o termo sem memória significa que o símbolo corrente presente na saída
depende apenas do símbolo corrente presente na entrada e de nenhum outro anterior.

Considere a representação mostrada na figura a seguir.

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

Figura 1.4 - Modelamento do canal discreto sem memória.

Na Figura 1.4 a designação p(yk|xj) representa o conjunto das probabilidades de transição

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.

Uma forma conveniente de descrever as várias possibilidades de transição de um canal


discreto sem memória é na forma de uma matriz, conforme apresentado a seguir.

 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 )

A matriz P, de dimensões J × K, é chamada de matriz de canal ou matriz de transição. Note


que cada linha de P corresponde a um símbolo fixo de entrada e cada coluna a um símbolo
fixo de saída. Note também que uma propriedade fundamental de P é que a soma de todos os
elementos de uma linha da matriz é igual a 1, isto é:

K −1

∑ p(y
k =0
k | xj )=1 para todos os j. (1.14)

A distribuição de probabilidade conjunta das variáveis aleatórias xj e yk é dada por:

p(x j , yk ) = p( yk | x j ) p(x j ) (1.15)

A distribuição de probabilidade marginal da variável aleatória yk é obtida fazendo:

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

Figura 1.5 - Canal binário simétrico sem memória.

Os termos que compõem a matriz de probabilidade são:

p10 = P( y = 1 | x = 0 )
p01 = P( y = 0 | x = 1)
p10 = p01 = p

* * *

1.6. INFORMAÇÃO MÚTUA


Dado que conhecemos a saída do canal (obtida de um alfabeto Y) que é uma versão ruidosa da
entrada do canal (obtida de um alfabeto X), e que a entropia H(X) é uma medida da incerteza
a priori sobre X, como pode-se medir a incerteza sobre X, depois da observação de Y?

A resposta é a entropia condicional de X selecionada de um alfabeto X, dado que Y = yk,


representada pela notação H(X|Y = yk). Especificamente:

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 ) 

Assim, H(X|Y) que é chamada simplesmente de entropia condicional, representa a


quantidade de incerteza restante sobre a entrada do canal depois da saída do canal ter sido
observada. Mas H(X) representa a incerteza sobre a entrada do canal antes da observação
da saída. Consequentemente, a diferença H(X) - H(X|Y) deve representar a incerteza sobre
a entrada do canal que é resolvida pela observação de sua saída, ou seja, representa o
ganho de informação sobre o símbolo de entrada xj, após a observação do símbolo de
saída yk. Essa diferença é chamada de informação mútua do canal, representada por
I(X;Y).

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 ) 

PROPRIEDADES DA INFORMAÇÃO MÚTUA

1. A informação mútua do canal é simétrica, isto é

I ( X ;Y ) = I (Y ;X ) (1.21)

2. A informação mútua é sempre não negativa

I ( X ;Y ) ≥ 0

3. A informação mútua de um canal está relacionada com a entropia conjunta da entrada do


canal e da saída do canal, por

I ( X ;Y ) = H ( X ) + H (Y ) − H (Y , X ) (1.22)

21
1. Limites Fundamentais da Teoria da Informação

1.7. CAPACIDADE DE CANAL


A Capacidade de canal, de um canal discreto sem memória, é a informação mútua máxima,
I(X; Y), em qualquer intervalo de sinalização, onde a maximização deve levar em
consideração todas as possíveis distribuições de probabilidade da entrada {p(xj)} em X.

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

Considere o canal simétrico binário apresentado no Exemplo 1.4.

A entropia H(X) é maximizada quando os símbolos do alfabeto de entrada são equiprováveis,


i.e., p(x0) = p(x1) = ½, onde x0 = 0 e x1 = 1. A informação mútua, I(X; Y), é similarmente
maximizada, pois
C = I ( X ;Y ) |p(x0 ) = p(x1 ) = ½
p( y0 | x1 ) = p ( y1 | x0 ) = p
p( y0 | x0 ) = p ( y1 | x1 ) = 1 − p

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.

O resultado apresentado na Figura 1.6 permite concluir que:

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.

1.8. TEOREMA DA CODIFICAÇÃO DE CANAL


A presença de ruído nos canais de comunicações digitais é inevitável e ruído provoca erro.
Em canais muito ruidosos a probabilidade de erro pode chegar a 10-1 o que significa que em
10 bits transmitidos, 9 são recebidos corretamente. Este nível de confiabilidade é inaceitável
para a maior parte das aplicações. A probabilidade de erro aceitável depende da aplicação.
Entretanto, uma probabilidade de erro de 10-6 ou menor é, frequentemente, um requisito
necessário para a maioria das aplicações. Para a obtenção de altos níveis de desempenho, o
uso de códigos corretores de erro, ou codificação de canal é inevitável.

O objetivo da codificação de canal é aumentar a robustez de um sistema de comunicação


digital na presença de ruído e, basicamente, este processo consiste da inserção de
redundâncias na sequência binária por um codificador de canal, antes da transmissão,
conforme apresentado na Figura 1.7. Na recepção, um decodificador de canal verifica a
sequência recebida e com o auxílio da redundância introduzida, detecta ou mesmo corrige
automaticamente alguns padrões de erro.

23
1. Limites Fundamentais da Teoria da Informação

Fonte discreta Codificador Canal discreto Decodificador


sem memória de canal de canal Destino
sem memória

Transmissor Receptor

Ruído

Figura 1.7 - Diagrama em blocos simplificado de um sistema de comunicação.

A fidelidade entre a sequência decodificada no receptor e a sequência originalmente


transmitida influencia na probabilidade de erro final e este resultado depende do código
utilizado e de algumas características do canal. Como regra geral, quanto maior é a
capacidade de correção de erro do código, maior deve ser a quantidade de redundância
introduzida e maior é a complexidade de decodificação. Neste ponto uma questão de extrema
importância é pode ser colocada da seguinte forma:

Será que existe um esquema de codificação de canal capaz de tornar a probabilidade de


erro de bit arbitrariamente baixa sem que a quantidade de redundância introduzida seja
demasiadamente alta?

Segundo Shannon, a resposta é um categórico sim, demonstrado por meio do Teorema da


Codificação de Canal.

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

SEGUNDO TEOREMA DE SHANNON

TEOREMA DA CODIFICAÇÃO DE CANAL

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.

O teorema da codificação de canal é considerado o mais importante resultado da teoria da


informação. Ele determina a capacidade de canal C como um limite fundamental sobre a taxa
na qual uma transmissão pode ser realizada, livre de erros, em um canal discreto sem
memória. Entretanto duas observações são importantes:

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

APLICAÇÃO DO TEOREMA DA CODIFICAÇÃO DE CANAL EM CANAIS SIMÉTRICOS


BINÁRIOS

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

onde k é o número de bits de informação e n é o número de bits da sequência ou do bloco


codificado. Admita que o codificador de canal produza um símbolo a cada Tc segundos e,
consequentemente, a taxa de transmissão de símbolos é 1/Tc símbolos por segundo. Desta
forma, o codificador de canal ocupa um canal simétrico binário a cada Tc segundos. Portanto,
a capacidade do canal por unidade de tempo é C/Tc bits por segundo. De acordo com o
teorema da codificação de canal, se
1 C
≤ (1.26)
Ts Tc

a probabilidade de erro pode ser arbitrariamente baixa se usado um esquema de codificação


de canal adequado.

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.

Para que o significado do teorema da codificação de canal, aplicada a um canal binário


simétrico fique clara, veja o exemplo a seguir.

EXEMPLO 1.6

Seja um canal binário simétrico cuja entrada é equiprovável e a probabilidade de transição do


canal (probabilidade de erro) é igual a 0,1. Qual deve ser o maior número de bits de
informação para cada bloco de 7 bits de forma ser possível, teoricamente, a obtenção de uma
taxa de erro arbitrariamente baixa?

26
1. Limites Fundamentais da Teoria da Informação

SOLUÇÃO:

Do Exemplo 1.5, tem-se


C = 1 − H( p)

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

* * *

1.9. ENTROPIA DIFERENCIAL E INFORMAÇÃO MÚTUA PARA CONJUNTOS


CONTÍNUOS
Até o momento as fontes e os canais considerados foram de conjuntos de variáveis que são
discretas em amplitude. Alguns dos conceitos apresentados serão estendidos para conjunto
contínuos de forma a permitir estabelecer outro limite fundamental da teoria da informação
que é o Terceiro Teorema de Shannon ou Teorema da Capacidade de Informação.

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)

onde h(X) é a entropia diferencial de X. Se n variáveis aleatórias contínuas formam um vetor


aleatório contínuo X, então utilizando a mesma analogia, pode-se definir a entropia
diferencial de X, como


 1 
h( X ) = ∫f
−∞
x (x) log 2   dx ,
 f x ( x) 
(1.28)

onde fX(x) é a função densidade de probabilidade conjunta de X.

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)

onde fX,Y(x,y) é a função densidade de probabilidade conjunta de X e Y, e fX(x|y) é a função


densidade de probabilidade condicional de X, dado que Y = y.

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 )

onde h(X) é a entropia diferencial de X e h(X|Y) é a entropia diferencial condicional de X dado


Y, que, ainda por analogia, é definida como

∞ ∞
 1 
h( X | Y ) = ∫∫f
−∞ −∞
X,Y ( x, y ) log 2   dx dy .
 f x ( x | y) 
(1.30)

O parâmetro h(Y|X) é a entropia diferencial condicional de Y dado X e é definido de maneira


similar a h(X|Y).

1.10. TEOREMA DA CAPACIDADE DE INFORMAÇÃO


A formulação do Teorema da Capacidade de Informação para canais limitados em faixa e
potência utiliza a ideia de informação mútua. Para isso, considere um processo estacionário
X(t) com média zero e limitado em uma faixa de B hertz. Seja Xk, k = 1, 2, ... , K variáveis
aleatórias contínuas obtidas por amostragem uniforme de X(t) à uma taxa de Nyquist de 2B
por segundo. Estas amostras são transmitidas em T segundos em um canal ruidoso, também
limitado em faixa de B hertz. Então o número de amostras, K, é dado por

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.

Como a transmissão é, tipicamente, limitada em potência, então a potência média transmitida


pode ser definida como
P = E[ X k2 ] k = 1, 2, K , K

A capacidade de informação do canal é definida como a máxima informação mútua entre a


entrada Xk que satisfaz a limitação de potência apresentada acima, ou seja,

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 ) .

A maximização da informação mútua requer a maximização de h(Yk). A variância da amostra


Yk é (P + σ2). Logo, Yk é também uma variável aleatória gaussiana, consequentemente, sua
entropia diferencial máxima é
1
h(Yk ) = log 2 [2πe( P + σ 2 )]
2

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

Substituindo as duas entropias diferenciais apresentadas acima na expressão da informação


mútua, obtêm-se:
1  P 
C= log 2 1 + 2  bits por transmissão (1.33)
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.

TERCEIRO TEOREMA DE SHANNON

TEOREMA DA CAPACIDADE DE INFORMAÇÃO OU TEOREMA DA CAPACIDADE DE CANAL

A capacidade de informação de um canal contínuo com largura de faixa de B Hertz,


perturbado por ruído Gaussiano branco aditivo de densidade espectral N0/2, é dada por

 P 
C = B log 2 1 + ,
 N 0 B 

dada em bits por segundo, onde P é a potência média do sinal transmitido.

O Teorema da Capacidade de Informação é um dos mais notáveis resultados da Teoria da


Informação onde, em uma única expressão, é destacada a interação entre a largura de faixa do
canal e a relação sinal/ruído. Note que a capacidade do canal varia linearmente com a largura
de faixa e logaritmicamente com a relação sinal ruído. Desta forma, é mais fácil aumentar a
capacidade do canal aumentando a sua largura de faixa do que aumentando a relação sinal
ruído.

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

A capacidade do canal também pode ser dada por

 S
C = B log 2 1 +  bits por segundo. (1.35)
 N

Veja o exemplo de aplicação apresentado a seguir.

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:

Deve haver um esquema de codificação de canal, suficientemente complexo, que permita a


transmissão a uma taxa de ≅ 55 kbit/s em um canal com 3,4 kHz de largura de faixa para uma
relação sinal/ruído de ≅ 49 dB, com uma taxa de erros de bit arbitrariamente baixa.

* * *

1.11. IMPLICAÇÕES DO TEOREMA DA CAPACIDADE DE INFORMAÇÃO


Para analisar as implicações do Teorema da Capacidade de informação, admita a existência de
um sistema ideal definido como sendo aquele que transmite a uma taxa Rb igual à capacidade
de canal C. Desta forma, a potência média do sinal pode ser escrita como

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

Região para a qual


Rb>C

10

Limite da
Eficiência de BW capacidade
Rb=C

1 Região para a qual


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.

1.12. TEORIA DA DISTORÇÃO-TAXA


Conforme apresentado anteriormente, para se obter uma codificação de uma fonte discreta
sem memória que permita a transmissão e recuperação da informação sem imperfeições, o
Teorema da Codificação de Fonte não pode ser violado. Em outras palavras, isso significa que
o comprimento médio do código de fonte não pode ser menor do que a entropia da fonte.
Entretanto, em muitas aplicações práticas existem restrições que introduzem imperfeições na
codificação, o que resulta em inevitáveis distorções.

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:

1. Codificação de fonte onde o alfabeto de codificação permitido não pode representar


exatamente a informação da fonte, caso no qual é forçosa uma compressão de dados
com perdas.
2. Transmissão de informação à uma taxa maior do que a capacidade do canal.

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.

1.13. COMPRESSÃO DE DADOS


A teoria da distorção-taxa permite considerar a idéia da compressão de dados, que envolve
uma redução proposital no conteúdo da informação de uma fonte contínua ou discreta.
Especificamente, pode-se imaginar um compressor de dados, ou um compressor de sinais,
como um dispositivo que alimenta um código que produz o mínimo de bits necessários para
representar a saída da fonte com uma distorção aceitável ou permissível. Assim, o compressor
de dados retém o conteúdo essencial de informação da saída da fonte descartando finos
detalhes de maneira controlada. Desta forma, a compressão de dados é uma operação com
perdas no sentido de que a entropia da fonte é reduzida (i.e., há perda de informação)
independentemente do tipo de fonte considerada.

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.

No caso de uma fonte contínua, a entropia da fonte é infinita. Entretanto, na prática é


necessário que os níveis de quantização sejam finitos e, consequentemente, o codificador de
fonte produzirá codificação à uma taxa finita. Assim, não é possível codificar um sinal
contínuo com um número finito de bits sem produzir distorções.

1.14. REFERÊNCIA BIBLIOGRÁFICA


[1] HAYKIN, Simon – Communications Systems. 4th Ed. John Wiley & Sons. 2000.

[2] SKLAR, Bernard – Digital Communications. 2nd Ed. Prentice Hall. 2001.

34
1. Limites Fundamentais da Teoria da Informação

1ª SÉRIE DE EXERCÍCIOS: INTRODUÇÃO À TEORIA DA INFORMAÇÃO E DA


CODIFICAÇÃ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.

4. Considere um codificador de Lempel-Ziv com 8 posições de memória (de 0 a 7) que parte


com o bit 0 armazenado na posição de memória 000 e o bit 1 na posição de memória 001.
Codifique a sequência mensagem 11101001100010110100...

35
1. Limites Fundamentais da Teoria da Informação

5. Considere um decodificador de Lempel-Ziv com 8 posições de memória (de 0 a 7) que


parte com o bit 0 armazenado na posição de memória 000 e o bit 1 na posição de memória
001. Reconstrua a sequência mensagem a partir dos blocos codificados 0011 0001 0000
0100 0110 1000 1101...

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?

8. Considere um diagrama de transição de estados de um canal binário simétrico sem memória


mostrado na Figura abaixo. As entradas binárias são símbolos 0 e 1 e ocorrem com
probabilidades de 1/4 e 3/4, respectivamente. Encontre as probabilidades dos símbolos 0 e
1 na saída do canal.

1-p
x0 = 0 y0 = 0

x1 = 1 y1 = 1
1-p

9. Codifique a sequência binária 10110110111011001011 usando o algoritmo Lempel-Ziv.

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.

12. Dados de provenientes de um sistema de IoT entra em um computador remoto através de


um canal com largura de banda de 3.4 kHz e relação sinal ruído de saída de 20 dB. Admita
que o terminal possua 128 símbolos diferentes e que a transmissão destes símbolos seja
equiprovável e estatisticamente independente.
a) Calcule a capacidade do informação do canal.
b) Calcule a taxa máxima de símbolos para o qual a transmissão seja livre de erro.

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].

Em sistemas de comunicações digitais, o parâmetro de desempenho que permite quantificar o


que pode ser a melhor estimativa é a probabilidade de erro de bit, Pb, cujo valor, para ser
considerado satisfatório, depende fundamentalmente do tipo de informação que está sendo
transmitida. A questão fundamental apresentada neste capítulo está diretamente relacionada
com o controle da probabilidade de erro de bit, abordada a partir da próxima seção.

2.1. INTRODUÇÃO À CODIFICAÇÃO DE CANAL


A codificação de canal é um processo em que redundâncias são introduzidas antes da
transmissão, com o objetivo de permitir que, no receptor, a semelhança entre o sinal que foi
transmitido e o sinal que foi reproduzido seja a máxima possível. Ou, por outro lado, é um
processo que permite a redução da Pb a valores tão baixos quanto possíveis. A partir desse
ponto é inevitável a imposição de uma questão: Em termos objetivos, o que se pode esperar
obter como máxima semelhança ou Pb tão baixa quanto possível com a codificação de canal?
Essa questão foi parcialmente respondida no capítulo anterior através do Teorema da
Codificação de Canal, cuja consequência é reproduzida a seguir por conveniência [1][2][3].

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.

O Teorema da Codificação de Canal, no entanto, é insatisfatório sob o ponto de vista prático


porque não conduz a uma indicação do esquema de codificação capaz de produzir um
resultado esperado, nem o seu grau de complexidade ou da dificuldade de encontrá-lo. Uma
discussão mais detalhada sobre esse assunto pode ser encontrada em diversas publicações
sobre Teoria da Informação.

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

2.2. CÓDIGOS DE BLOCO: DEFINIÇÕES INICIAIS

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.

Se k bits estão contidos em um bloco de n bits, então a quantidade de bits de redundância


introduzidos no processo de codificação é (n – k).

2.2.1. TAXA DE CODIFICAÇÃO

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
________________________________________________________________________________________________

necessário aumentar a taxa de transmissão total, resultando em um acréscimo ou expansão da


largura de faixa. Essa expansão da largura de faixa é de exatamente 1/Rc. Ou seja, quanto maior for
o número de bits de redundância introduzidos, maior será a expansão da largura de faixa.

2.2.2. GANHO DE CODIFICAÇÃO

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.

As curvas características de Pb em função de Eb /N0, para um esquema de transmissão codificado e


não codificado, são apresentadas na Figura 2.1. Um cuidado deve ser tomado para a correta
determinação de Pb em função de Eb /N0 com a codificação: o valor de Eb refere-se à energia por bit
de informação, ou seja, admitindo-se que a energia total gasta para a transmissão seja a mesma para
os dois casos, então a energia por bit de informação com a codificação é menor do que a energia de
bit sem a codificação, devido à inserção dos bits de redundância. Assim sendo, a relação entre
(Eb /N0)c e (Eb /N0)nc fica afetada pela taxa de codificação na forma

 Eb  E 
  = R  b  . (2.3)
 N0 c  N0  nc

Os valores de taxa de erro e de Eb /N0 apresentados na Figura 2.1 referem-se a um esquema


hipotético e tem por objetivo permitir conclusões que podem ser generalizadas.

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:

4) A diminuição de Pb e/ou Eb /N0 decorrente da codificação produz uma expansão na largura


de faixa.

40
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________

2.2.3. VETOR CÓDIGO, VETOR ERRO, VETOR RECEBIDO E VETOR DECODIFICADO

Conforme definido previamente, o processo de codificação por bloco consiste em transformar um


segmento da mensagem, m, com k bits em uma palavra código ou vetor código, c, com n bits. O
vetor código é transmitido e pode sofrer alterações devido às degradações impostas pelo meio de
transmissão. As alterações sofridas pelo vetor código podem ser representadas por meio de um
vetor erro, e. Um vetor código, c, somado com um vetor erro, e, resulta em um vetor recebido, r. Ou
seja,
r = c⊕e. (2.4)

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'

Figura 2.2. Diagrama em blocos do processo de codificação e decodificação.

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.

* * *

2.2.4. PESO DE HAMMING E DISTÂNCIA DE HAMMING

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

Determinar o peso de Hamming do vetor v = 10110.

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

Determinar a distância de Hamming entre o vetor v = 10110 e x = 10101.

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
________________________________________________________________________________________________

2.2.5. ESPAÇO VETORIAL E SUBESPAÇO VETORIAL

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].

Tabela 2.1 - Operações algébricas no campo binário.

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:

1) A adição de quaisquer dois vetores de V resulta em outro vetor em V (propriedade do


fechamento).
2) O produto escalar de um elemento de {0, 1} e qualquer vetor de V resulta em outro vetor em
V.
3) A lei distributiva é satisfeita, ou seja, se a1 e a2 são escalares de {0, 1} e v1 e v2 são vetores
de V, então

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 )

4) A lei associativa é satisfeita, ou seja, se a1 e a2 são escalares de {0, 1} e v1 é um vetor de V,


então

(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:

O espaço vetorial V5 é o conjunto de todos os vetores binários com cinco elementos (n = 5)


apresentados na Tabela 2.2.

43
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________

Tabela 2.2 - Espaço vetorial V5.

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

* * *

Um subconjunto S de um espaço vetorial V é chamado de subespaço vetorial de V se as quatro


condições definidas acima são verificadas. Entretanto, como S é um subconjunto de V, é suficiente
que as duas primeiras condições sejam satisfeitas para a identificação de um subespaço em V, isto é:

1) A adição de quaisquer dois vetores de S resulta em outro vetor em S (propriedade do


fechamento).
2) O produto escalar de um elemento de {0, 1} e qualquer vetor de S resulta em outro vetor em
S. Ou simplesmente: o vetor nulo, ou vetor todo zero, pertence a S.

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.

S com 4 vetores S com 8 vetores


00000 00000 01100
01011 01011 00111
10010 10010 11110
11001 11001 10101

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
________________________________________________________________________________________________

2.3. 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:

1) A soma de duas palavras códigos quaisquer resulta em outra palavra código, e;


2) O vetor nulo ou vetor todo zero é também uma palavra código.

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

Admitindo a existência de um código de bloco linear (255, 130), pede-se:

a) Determinar a quantidade de vetores códigos binários existentes neste código.


b) Determinar a quantidade de vetores não possíveis.
c) Descrever uma estratégia de correção de erros, admitindo que o vetor recebido é um vetor
não válido.

Solução

a) A quantidade de vetores códigos é

2k = 2130 ≅ 1,36 × 1039 vetores válidos.

b) Quando o vetor é não válido, então ele é um dos 2n – 2k vetores não válidos, ou um entre

2255 - 2130 ≅ 2255 ≅ 5,7896 × 1076 vetores não válidos.

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)

onde ui é um elemento de {0, 1} para i = 1, 2, ... , (k – 1) e j = 0, 1, ... , (2k – 1).

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

* * *

2.3.1. MATRIZ GERADORA

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)

Evidentemente, a matriz geradora, G, é uma consequência direta de uma base do subespaço


vetorial. Ela é uma matriz de dimensões k × n que consiste do arranjo formado pelos vetores
linearmente independentes, ou vetores geradores, que compõem uma base do subespaço, conforme
apresentado em (2.10).

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

A partir da base do subespaço vetorial apresentado no Exemplo 2.7, pede-se:

a) Construir uma matriz geradora.


b) A partir da matriz geradora, construir uma tabela com os vetores mensagens e seus
respectivos vetores códigos.

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

* * *

2.3.2. CODIFICAÇÃO SISTEMÁTICA E NÃO SISTEMÁTICA

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.

Segmento dos (n – k) Segmento dos k bits de


bits de redundância mensagem

Vetor Código

Figura 2.5 - Vetor código obtido por codificação sistemática.

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

a) Obter uma matriz geradora na forma sistemática, no formato apresentado em (2.13).


b) Construir uma tabela com os vetores mensagens e seus respectivos vetores códigos.

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

A matriz na forma sistemática, G’ correspondente à matriz G, é obtida a partir das seguintes


operações a partir da matriz G

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

b) Repetindo a operação apresentada em (2.11) para a matriz G’ em (2.14) obtém-se os vetores


códigos apresentados na Tabela 2.5.

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.

* * *

2.3.3. MATRIZ VERIFICADORA DE PARIDADE

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,

 h 0   h00 h01 h02 ⋯ h0, n −1 


 h   h h11 h12 ⋯ h1, n−1 
H= 1 = .
10
(2.15)
 ⋮   ⋮ ⋮ ⋮ ⋮ 
   
h n−k −1  hn −k −1, 0 hn −k −1, 1 hn −k −1, 2 ⋯ hn −k −1, n −1 

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)

Quando a matriz G está na forma sistemática, conforme apresentada em (2.13), ou seja,

[
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

A partir da matriz geradora para o código (5, 3) apresentada em (2.14), pede-se:

a) Obter a matriz verificadora de paridade H.


b) Verificar a condição de ortogonalidade apresentada por (2.17) para o vetor código
correspondente ao vetor mensagem m = 101.

Solução:

a) A partir da matriz geradora na forma sistemática

0 1 1 0 0 
[
G = Pk × ( n − k ) I k × k ] = 1 0 0 1 0
1 1 0 0 1 

obtém-se a matriz H na forma

[
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

* * *

2.3.4. DISTÂNCIA MÍNIMA DE UM CÓDIGO DE BLOCO LINEAR

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

d (c1 , c 2 ) = w(c1 ⊕ c 2 ) = w(c 3 ) (2.26)

Portanto, não há necessidade de examinarmos as distâncias entre todas as combinações possíveis


entre pares de palavras-código, basta que se verifique o peso de cada palavra código, com exceção
da palavra toda zero. O menor peso encontrado corresponde à menor distância mínima do código.

As propriedades dos códigos de blocos permitem ainda determinarmos a distância mínima do


código através da inspeção da matriz verificadora de paridade. Neste caso, a distância mínima do
código será igual ao menor número de colunas da matriz verificadora de paridade, que quando
somadas resultam em uma coluna toda zero. Este procedimento é particularmente útil quando o
código possui um número muito grande de palavras código para serem inspecionadas, sem auxílio
computacional.

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.

Ou alternativamente, inspecionando-se a matriz verificadora de paridade, apresentada abaixo, é fácil


verificar que o menor número de colunas que quando somadas resulta em uma coluna toda zero é 3,
por exemplo, 1a + 2a + 5a ou 2a + 3a + 6a ou 1a + 3a + 4a.

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
________________________________________________________________________________________________

2.3.5. CAPACIDADE DE CORREÇÃO E DE DETECÇÃO DE ERROS DE UM CÓDIGO DE BLOCO LINEAR

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
________________________________________________________________________________________________

Consequentemente, a capacidade de correção de erro, de um código de bloco linear, t, é definida


como o número máximo de erros garantidamente corrigíveis, por palavra código, determinado por

 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).

2.3.6. SÍNDROME DE ERRO

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)

Combinando (2.32) e (2.33) tem-se:

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

Considere o código de bloco linear (6, 3, 3) gerado por (2.27). Pede-se:

a) Determinar a capacidade de correção de erros do código.


b) Listar todos os padrões de erros corrigíveis dentro da capacidade de correção de erros do código.
c) Listar todas as síndromes de erros associadas aos padrões de erros corrigíveis dentro da
capacidade de correção de erros do código.
d) Verificar se este código é um código perfeito.

Solução:

a) A capacidade de correção de erros do código.

Como a distância mínima deste código é dmin = 3, então,

 d − 1  3 − 1
t =  min =  t =1
 2   2 

57
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________

b) Padrões de erros corrigíveis dentro da capacidade de correção de erros do código

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.

Da matriz H (2.28), obtém-se HT, ou seja,

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 .

Para todos os valores de e (t = 1) obtém-se:

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
________________________________________________________________________________________________

d) Verificação se este código é um código perfeito.

Um código perfeito deve satisfazer

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.

2.3.7. CORREÇÃO DE ERROS PELA SÍNDROME

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:

1. A partir da capacidade de correção de erros do código, determina-se a síndrome para todos


os padrões de erros corrigíveis, por meio (2.36);
2. Calcula-se a síndrome de r usando (2.33);
3. Localiza-se o padrão de erro correspondente à síndrome calculada.
4. O vetor código será aquele determinado por (2.39).

59
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________

Observação: O erro só será corrigido se o padrão de erro correspondente à síndrome de vetor


recebido for igual ao padrão de erro introduzido pelo canal, i.e., o padrão de erro
introduzido pelo canal deve ser um padrão de erro corrigível.

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' = r + e = 101010 + 000001


c' = 101011

* * *

2.3.8. CODIFICADOR PARA CÓDIGOS DE BLOCO SISTEMÁTICOS SIMPLES

Quando os códigos de blocos são simples e curtos, a implementação de um circuito de codificação


pode ser feita diretamente com o auxílio das equações que determinam as palavras códigos. Para um
código de bloco linear sistemático, a palavra código pode ser escrita como

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:

p0 = m0 ⋅ p00 + m1 ⋅ p10 + … + mk −1 ⋅ pk −1,0


p1 = m0 ⋅ p01 + m1 ⋅ p11 + … + mk −1 ⋅ pk −1,1
(2.41)

pn−k −1 = m0 ⋅ p0,n−k −1 + m1 ⋅ p1,n−k −1 + … + mk −1 ⋅ pk −1,n−k −1

Assim, com o conhecimento da matriz geradora na forma sistemática é possível particularizar o


conjunto de equações apresentadas em (2.41) para a geração das palavras códigos por meio de
circuitos lógicos combinacionais. Veja Exemplo 2.14.

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

Logo, um circuito codificador pode ser implementado conforme apresentado a seguir:

m
c
m0 m1 m2



Geração dos bits de paridade ⊕
p0 p1 p2

Figura 2.7 - Circuito de codificação para o código (6, 3).

* * *

2.3.9. DECODIFICADOR PARA CÓDIGOS DE BLOCO SISTEMÁTICOS SIMPLES

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.

O cálculo da síndrome pode ser feito considerando as expressões apresentadas a seguir.

 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
________________________________________________________________________________________________

s0 = r0 + rn−k ⋅ p00 + rn−k +1 ⋅ p10 + … + rn−1 ⋅ pk −1,0


s1 = r1 + rn−k ⋅ p01 + rn−k +1 ⋅ p11 + … + rn−1 ⋅ pk −1,1
(2.43)

sn−k −1 = rn−k −1 + rn−k ⋅ p0,n−k −1 + rn−k +1 ⋅ p1,n−k −1 + … + rn−1 ⋅ pk −1,n−k −1

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

Seguindo os passos apresentados e utilizando as equações acima, pode-se desenhar o circuito de


decodificação apresentado na Figura 2.8. Note que o circuito de decodificação pode ser
simplificado por meio da exclusão das portas acinzentadas, responsáveis pelos bits c0, c1 e c2, de
paridade, uma vez que o resultado da decodificação resume-se aos bits de informação c3, c4 e c5.

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

Figura 2.8 - Circuito de decodificação para o código (6, 3).

* * *

2.4. DESEMPENHO DOS CÓDIGOS DE BLOCO LINEARES [1]


Se um código de bloco capaz de corrigir t erros é utilizado exclusivamente para correção de erros
em um canal binário simétrico (BSC), com probabilidade de transição (probabilidade de erro de bit)
p, a probabilidade de erro de bit após a decodificação pode ser determinada aproximadamente por:

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

Substituindo (2.46) em (2.45) obtém-se:

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

BPSK não codificada

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)

Figura 2.9 - Desempenho de alguns códigos de blocos lineares.

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.

2.5. CÓDIGOS CÍCLICOS


2.5.1. INTRODUÇÃO AOS CÓDIGOS CÍCLICOS

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)

é um vetor código no subespaço S, então,

c(1) = (cn-1, c0, c1, ... , cn-2) ,

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)

obtido pelo deslocamento correspondente a i posições de bit, é também um vetor código em S.

Os componentes de um vetor código u podem ser tratados como os coeficientes de um polinômio


c(X) como mostrado a seguir.

c(X) = c0 + c1X + c2X 2 + ... + cn-1X n-1 (2.48)

Nesta representação a presença ou ausência de cada termo no polinômio indica a presença de um 1


ou 0, respectivamente, na correspondente locação da n-tupla. Desta forma, o polinômio pode ter
grau n - 1 ou menos.

66
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________

Exemplo 2.16

Seja o vetor código


c= 0001101

de um código de bloco linear (7, 4). Sua representação polinomial é

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.

O polinômio gerador g(X) para um código cíclico (n, k) tem a forma

g(X) = g0 + g1 X + g2 X 2 + ... + gn - k X n-k (2.49)

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

Verifique se o polinômio X 3 + X + 1 gera um código cíclico C = (7, 4).

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

Conclusão: O polinômio X 3 + X + 1 gera um código cíclico (7, 4) e ainda permite-nos concluir


que o polinômio X 4 + X 2 + X + 1, que é o quociente da divisão realizada, gera um
código cíclico (7, 3), pois

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

 p11 p12 ⋯ p1,( n − k ) 1 0 ⋯ 0


p p 22 ⋯ p 2 ,( n − k ) 0 1 ⋯ 0
G' = [P ⋮ I k ] =  
21
(2.51)
 ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮
 
 pk1 p k 2 ⋯ p k ,( n − k ) 0 0 ⋯ 1

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:

Do exemplo anterior, a matriz geradora na forma não sistemática é

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.

A quarta linha da matriz pode ser obtida somando-se as linhas 1, 2 e 4.

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

O vetor código na forma sistemática é obtido pela operação c = m.G’, consequentemente

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 ]

2.5.2. CODIFICAÇÃO SISTEMÁTICA DE CÓDIGOS CÍCLICOS COM REGISTRADORES DE


DESLOCAMENTO DE (n-k) ESTÁGIOS

Um vetor mensagem pode ser escrito na forma polinomial como

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)

Dividindo a expressão acima por g(X), obtém-se

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

Dividindo X n - k m(X) por g(X) pode-se escrever

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

Figura 2.10 – Codificador para códigos cíclicos sistemáticos utilizando registradores de


deslocamento.

O procedimento de codificação com o circuito da Figura 2.10 é o seguinte:

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 2: Após a transmissão dos k bits de mensagem a chave 1 é aberta (impedindo a


realimentação) e a chave 2 é movida para a posição (b).

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

Figura 2.11 – Circuito de codificação para o Exemplo 2.20.

Fila de Número de Conteúdo dos


Saída
entrada deslocamentos registradores
1011 0 000 -
101 1 110 1
10 2 101 1
1 3 100 0
- 4 100 1

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
________________________________________________________________________________________________

2.5.3. DETECÇÃO DE ERROS DE CÓDIGOS CÍCLICOS SISTEMÁTICOS COM REGISTRADORES DE


DESLOCAMENTO DE (n-k) ESTÁGIOS

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.

Seja então um vetor recebido

r( X ) = r0 + r1 X + r2 X 2 +⋯+ rn−1 X n−1 (2.56)

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

Determinar a síndrome do vetor r = 1001011, codificado na forma sistemática a partir do polinômio


gerador g(X) = 1 + X + X 3 utilizando registradores de deslocamento. Mostre a formação da
síndrome a cada deslocamento.

Solução:

O circuito para a determinação da síndrome é semelhante ao utilizado para a codificação, conforme


mostrado a seguir.

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.

O conteúdo dos registradores a cada deslocamento é apresentado a seguir.

Fila de Número de Conteúdo dos


entrada deslocamentos registradores
1001011 0 000
100101 1 100
10010 2 110
1001 3 011
100 4 011
10 5 111
1 6 101
- 7 000

** *

74
2. CODIFICAÇÃO DE CANAL: CÓDIGOS DE BLOCO LINEARES
________________________________________________________________________________________________

2.6. CÓDIGOS DE BLOCOS BEM CONHECIDOS


Nas subseções a seguir são apresentados os códigos de blocos mais conhecidos, uma breve
descrição de cada um e as suas principais características [6].

2.6.1. CÓDIGOS DE HAMMING

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.

Tabela 2.10 - Principais características dos Códigos de Hamming.

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.

2.6.2. CÓDIGOS GOLAY

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.

(n, k) = (23, 12)

Tabela 2.11 - Principais características do Código Golay.

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
________________________________________________________________________________________________

O código Golay pode ser gerado a partir de um dos dois polinômios:

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)

O código Golay é facilmente decodificado através de dois decodificadores de armadilha de erro


refinados: o decodificador de Kasami e o decodificador de busca sistemática. Maiores detalhes a
respeito de ambos podem ser encontrados em [4].

2.6.3. CÓDIGOS BCH (BOSE, CHAUDHURI & HOCQUENGHEM)

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.

Tabela 2.12 - Principais características dos códigos BCH.

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].

2.6.4. CÓDIGOS REED-SOLOMON - RS

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

0 < k < n < 2m + 2 , (2.61)

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
________________________________________________________________________________________________

Tabela 2.13 - Principais características dos códigos RS mais comuns.

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.

2.6.5. CÓDIGOS REED-MULLER - RM

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.

Tabela 2.14 - Principais características dos códigos RM.

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 

Distância mínima: dmin = 2m-µ - 1


 2 m−µ − 2 
Capacidade de correção: t= 
 2 

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
________________________________________________________________________________________________

2.6. REFERÊNCIAS BIBLIOGRÁFICAS

[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.

[3] ZIEMER, R. E.; PETERSON, R. L. Introduction to Digital Communication. 2 ed. Upper


Saddle River: Prentice Hall, 2001. ISBN 0138964815.

[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
________________________________________________________________________________________________

2ª SÉRIE DE EXERCÍCIOS: INTRODUÇÃO Aos Códigos de Bloco Lineares


1. Considere um código sistemático (8, 4) cujas equações de verificação de paridade são:

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.

5. Seja a seguinte matriz geradora:

Sejam as mensagens binárias correspondem as seguintes letras:

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
________________________________________________________________________________________________

6. Considere um código de bloco sistemático que possui as seguintes equações de verificação de


paridade:
p0 = m0 + m1 + m3
p1 = m0 + m2 + m3
p2 = m0 + m1 + m2
p3 = m1 + m2 + m3

Onde mi são as mensagens digitais e pi são os dígitos de verificação.


a) Encontre a matriz geradora e a matriz verificadora de paridade para este código.
b) Quantos erros este código pode corrigir?
c) O vetor 10101010 é uma palavra código?

7. Considere o código cíclico (7, 4) gerado por g(X) = 1 + X 2 + X 3

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.

8. Considere o código cíclico (15, 7) gerado por g(X) = 1 + X 4 + X 6 + X 7 + X 8.

a) Encontre a matriz verificadora de paridade deste código.


b) Determine a capacidade de correção de erros deste código.
c) Este é um código perfeito? Por quê?

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 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.

3.2. CÓDIGOS BCH PRIMITIVOS BINÁRIOS

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

O polinômio gerador deste código é especificado em termos de suas raízes do campo de


Galois GF (2m). O polinômio gerador é o polinômio de menor grau sobre GF (2m) que tem

α , α 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
________________________________________________________________________________________________

de α i . Então, g(X) deve ser o Mínimo Múltiplo Comum (MMC) de


φ1( X ), φ2 ( X ), φ3 ( X ),......, φ2t ( X ) , isto é,

g ( X ) = MMC{φ1( X ), φ2 ( X ), φ3 ( X ),......, φ2t ( X )} (3.2)


Se i é um inteiro par, ele pode ser representado como um produto da forma como se segue.

i = i ' 2l ,

onde i’ é um número ímpar, e l ≥ 1. Então, α i = (α i )


2l '
é um conjugado de α i e, portanto, α i e
'
α i tem o mesmo polinômio mínimo; isto é,

φ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 .

Tabela 3.1 - Características dos códigos BCH para valores de m até 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 ) .

Devido a α ser um elemento primitivo de GF(2m), φ1 ( X ) é um polinômio primitivo de grau m.


Portanto, um código BCH de comprimento 2m - 1, com capacidade de correção de um único erro,
é um código de Hamming.

EXEMPLO 3.1

Considere o GF(24) gerado por p( X ) = 1 + X + X 4 , apresentado na Tabela 3.2 e suas raízes


conjugadas apresentadas na Tabela 3.3. Determine os polinômios geradores para códigos BCH com
capacidades de correção de dois e de três erros.

Tabela 3.2 – GF(24) gerado por p( X ) = 1 + X + X 4

Tabela 3.3 – Raízes conjugadas de GF(24) gerado por p( X ) = 1 + X + X 4

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
________________________________________________________________________________________________

Os polinômios mínimos correspondentes às raízes conjugadas são:

Para correção de duplo erro:

Para correção de duplo erro o polinômio gerador é obtido fazendo:

g ( X ) = MMC{φ1( X ), φ3 ( X )}.

Como φ1( X ) e φ3 ( X ) são dois polinômios irredutíveis distintos,

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.

Para correção de triplo erro:

Para correção de três erros o polinômio gerador é obtido fazendo:


91
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________

g ( X ) = φ1( X ) φ3 ( X )φ5 ( X ) = (1 + X + X 4 )(1 + X + X 2 + X 3 + X 4 )(1 + X + X 2 )


g ( X ) = 1 + X + X 2 + X 4 + X 5 + X 8 + X 10 . (3.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].

3.3. DECODIFICAÇÃO DOS CÓDIGOS BCH

Admita que uma palavra código c( X ) = υ0 + υ1 X + υ2 X 2 + ..... + υn −1 X n −1 seja transmitida e os


erros introduzidos pelo canal de comunicação tenham produzido a palavra recebida

r ( X ) = r0 + r1 X + r2 X 2 + ..... + rn −1 X n −1

Se e(X) foi o padrão de erro introduzido pelo canal, então

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)

onde bi ( X ) é o resto da divisão. Como φi (α i ) = 0 , então

Si = bi (α i ) = r (α i ) = r0 + r1α i + r2α 2i + ... + rn −1α (n −1)i . (3.8)

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
________________________________________________________________________________________________

S = (S1 , S2 ,....., S2t ), (3.9)

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

A síndrome consiste de quatro componentes:

S = (S1 , S2 , S3 , S4 ) .

Conforme apresentado no Exemplo 3.1, os polinômios mínimos para a, α 2 , α 4 são idênticos, e

φ1( X ) = φ2 ( X ) = φ4 ( X ) = 1 + X + X 4 .

O polinômio mínimo para α 3 é

φ3 ( X ) = 1 + X + X 2 + X 3 + X 4 .

Dividindo r ( X ) = 1 + X 8 por φ1( X ) = 1 + X + X 4 , obtém-se

b1 = X 2 .

Dividindo r ( X ) = 1 + X 8 por φ3 ( X ) = 1 + X + X 2 + X 3 + X 4 , obtém-se

b3 = 1 + X 3 .

Usando GF(24) dado na Tabela 3.2 e substituindo a, α 2 , α 4 em b1(X), obtém-se

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

onde α j1 + α j2 + ... + α jυ são desconhecidos.

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)

para 1 ≤ l ≤ υ . Esses elementos são chamados de números de localização de erros. Assim, o


sistema em (3.12) pode ser reescrito da seguinte forma

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:

σ ( X ) ∆ (1 + β1 X )(1 + β 2 X )...(1 + βυ X ) = σ 0 + σ1 X + σ 2 X 2 + ... + συ X υ (3.15)


=
σ ( X ) = 1 + σ1 X + σ 2 X2 + ... + συ Xυ .

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
________________________________________________________________________________________________

σ 2 = β1β 2 + β 2 β3 + ... + βυ −1βυ


M
συ = β1β 2 ...βυ .

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 .

Para o caso binário, uma vez que 1 + 1 = 2 = 0, tem-se

{
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.

A seguir será apresentado um algoritmo para a determinação do polinômio σ ( X ) de grau mínimo


que satisfaz as primeiras t equações de (3.18), apesar de poder determinar até 2t síndromes. Isso se
deve ao fato de que para os códigos binários apenas as síndromes ímpares serão usadas no processo
de decodificação.

O algoritmo de Peterson pode ser resumido nos seguintes passos:


96
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________

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

Para t = 1, o polinômio localizador de erros, obtido a partir de (3.15) resume-se a

σ ( 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

O polinômio recebido obtido a partir do vetor recebido r é

r ( X ) = X 3 + X 5 + X 12 .

De onde se obtém as síndromes

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

Logo, o polinômio localizador de erros (3.15) torna-se

σ (X ) = 1 + X + α5X 3.

As raízes de σ ( X ) podem ser encontradas fazendo

σ (α 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' = r + e = 000101000000100 + 000101000000100

c' = 000000000000000

* * *

3.4. REFERÊNCIAS BIBLIOGRÁFICAS


[1] LIN, S.; COSTELO JR, D. J. Error Control Coding: Fundamentals and Applications. Upper
Saddle River, New Jersey: Prentice Hall, 2a ed. 2004.

[2] MICHELSON, A. M.; LEVESQUE, A. H. Error-control Techniques for Digital


Communication. New York: John Wiley & Sons, 1984.

[3] PETERSON, W. W.; WELDON, E. J. Error-Correcting Codes. Cambridge, Massachusetts:


MIT Press, 1972.

[4] BERLEKAMP, E. R. Algebric Coding Theory. New York: McGraw-Hill, 1968.

100
3. CODIFICAÇÃO DE CANAL: CÓDIGOS BCH BINÁRIOS
________________________________________________________________________________________________

3ª SÉRIE DE EXERCÍCIOS: Códigos BCH

5) Admitia o código (15,5) que tem como polinômio gerador g (x ) = 1 + X + X 2 + X 5 + X 8 + X 10 .


a) Desenho o diagrama do codificador para este código.
b) Encontre a palavra código na forma sistemática para a mensagem m( x ) = 1 + X 2 + X 4 .
c) É vetor recebido V (x ) = 1 + X 4 + X 6 + X 8 + X 14 uma palavra código deste sistema? Justifique sua resposta.

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)

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

Tabela 4.1 - Principais características dos códigos RS mais comuns.

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 

A probabilidade de erro de símbolo, PE, em função da probabilidade de erro de símbolo do


canal, p, pode ser escrita como

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.

Considere um código RS (n, k) = (255, 247) onde m = 8 bits (= 1 byte). A capacidade de


correção de erros deste código é

 n  k   255  247 
t    4
 2   2

ou seja, todos os padrões de 4 símbolos errados ou menos, em um bloco de 255 símbolos.


Imagine que um surto de ruído seja capaz de perturbar a transmissão durante um período
correspondente a 25 bits, conforme apresentado na Figura 4.1.

Período de 25 bits perturbado por

Símbolo 1 Símbolo 2 Símbolo 3 Símbolo 4 Símbolo 5 Símbolo 6


Correto Errado Errado Errado Errado Correto

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.

4.2. CAMPOS FINITOS

Para o entendimento dos princípios de codificação e de decodificação dos códigos não


binários, tais como os códigos RS, é necessária a compreensão dos conceitos que envolvem os
campos finitos conhecidos como Campo de Galois (GF).

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,

F  {0, 1, ,  2 ,  ,  j ,  }  {0,  0 , 1 ,  2 ,  ,  j ,  } . (4.3)

Para a obtenção de um conjunto finito de elementos de GF(2m) a partir de F, uma condição


deve ser imposta sobre F para que ele possa conter 2m elementos e seja fechado sob
multiplicação. A condição que fecha os elementos de um campo sob multiplicação é
caracterizada pelo polinômio irredutível

 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)

4.2.1. ADIÇÃO NO CAMPO DE EXTENSÃO GF(2M)

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,

 i  ai ( X )  ai , 0  ai ,1 X  ai , 2 X 2    ai , m1 X m1 (4.9)

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.,

 i   j  (ai , 0  a j , 0 )  (ai ,1  a j ,1 ) X    (ai , m1  a j , m1 ) X m1 (4.10)

4.2.2. DEFINIÇÃO DE UM CAMPO FINITO POR UM POLINÔMIO PRIMITIVO

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.

A partir da definição e da propriedade apresentadas acima, a seguinte condição é necessária e


suficiente para garantir que um polinômio é primitivo:

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

Baseado na definição de polinômio primitivo apresentada anteriormente verifique se os


polinômios irredutíveis a seguir são primitivos.

a) 1 + X + X 2 + X 3 + X 4
b) 1 + X + X 4

Solução:

a) Pode-se verificar se o polinômio é primitivo se o menor grau de X n + 1 para o qual o


polinômio é divisor, é n = 2m - 1. Consequentemente, ele não pode dividir nenhum X n + 1
de grau 1  n < 15.
n = 2m - 1 = 24 - 1 = 16 - 1 = 15

Logo, o menor grau para o X n + 1, para o qual 1 + X + X 2 + X 3 + X 4 é divisor é 15.

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

O que confirma que 1 + X + X 2 + X 3 + X 4 é irredutível. Mas, verifica-se também que:

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

Logo, X 4 + X 3 + X 2 + X + 1 é irredutível, mas não é primitivo.

122
4. Códigos Reed-Solomon

b) Para 1 + X + X 4, verifica-se que:

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.

* * *

Como pode ser observado, é relativamente fácil verificar se um polinômio é irredutível e


primitivo. Entretanto, a obtenção de um polinômio primitivo de um grau pré-determinado não
é uma tarefa fácil. Normalmente esses polinômios são obtidos através de busca
computacional. A Tabela 4.2 apresenta alguns polinômios primitivos de ordem 3 até 24.

123
4. Códigos Reed-Solomon

Tabela 4.2 - Alguns polinômios primitivos.

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

4.2.3. O CAMPO DE EXTENSÃO GF(23)

Considere o caso de m = 3, ou seja, GF(23) e o polinômio primitivo f (X) = 1 + X + X 3. Um


polinômio de grau m possui precisamente m raízes. Resolvendo para as raízes de f(X), então
os valores de X para f (X) = 0 devem ser encontrados. Seja , um elemento do campo de
extensão definido como uma raiz de f(X). Assim,

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.

Tabela 4.4 - Tabela de adição para GF(23) com f(X ) = 1 + X + X 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

Tabela 4.5 - Tabela de multiplicação para GF(23) com f(X ) = 1 + X + X 3.

 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

O mapeamento dos elementos do campo em termos de seus elementos bases apresentadas na


Tabela 4.3 podem ser demonstrados através de registradores de deslocamento, conforme
mostrado na Figura 4.2. O circuito gera (com m = 3) os (2m -1) elementos não nulos do
campo. Note que as conexões de realimentação do circuito correspondem aos coeficientes do
polinômio 1 + X + X 3, exatamente da mesma forma que o circuito gerador de paridade para os
códigos cíclicos binários.

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

Figura 4.2 - Elementos base não nulos de 1 + X + X 3 gerados por registradores de


deslocamento.

Iniciando por um elemento não nulo no primeiro estágio do registrador de deslocamento e


promovendo seguidos deslocamentos cíclicos, verifica-se que todos os elementos base não
nulos do polinômio 1 + X + X 3 podem ser obtidos lendo-se o conteúdo dos registradores a
cada deslocamento.

126
4. Códigos Reed-Solomon

No sétimo deslocamento, obtém-se novamente 0, pois da Equação (4.5), obtém-se


 2   7  0 .
1
m

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)

onde n - k = 2t é o número de símbolos de paridade, e t é a capacidade de correção de erro de


símbolo do código. O polinômio gerador para um código RS assume a seguinte forma:

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

g ( X )  ( X  α)( X  α 2 )...( X  α 2t ) . (4.14)

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:

g(X) = (X - ) (X - 2) (X - 3) (X - 4)


= (X 2 - ( + 2) X + 3) (X 2 - (3 + 4) X + 7)
= (X 2 - 4X + 3) (X 2 - 6X + 0)
= (X 4 - (4 + 6) X 3 + (3 + 10 + 0) X 2 + (4 + 9) X + 3
= X 4 - 3 X 3 + 0 X 2 - 1 X + 3

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)

4.3.1. CODIFICAÇÃO NA FORMA SISTEMÁTICA

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

p X   X nk m X  módulo g  X  . (4.17)

A palavra código polinomial resulta em

c( X )  p( X )  X n k m( X ) (4.18)

Exemplo 4.2:

Considere a mensagem da sequência binária 010110111. Faça a codificação sistemática da


mensagem com um código RS (7, 3), cujo polinômio gerador é aquele obtido pela Equação
4.14. Para geração dos símbolos em GF(23), considere o polinômio primitivo de grau 3
apresentado na Tabela 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.

5X 6 + 3X 5 + 1X 4 0X 4 + 3X 3 + 0X 2 + 1X + 3


(5X 6 + 1X 5 + 5X 4 + 6X 3 + 1X 2) 5X 2 + 0X + 4
0 + 0X 5 + 6X 4 + 6X 3 + 1X 2
(0X 5 + 3X 4 + 0X 3 + 1X 2 + 3X )
0 + 4X 4 + 2X 3 + 0 + 3X
(4X 4 + 0X 3 + 4X 2 + 5X + 0)
6X 3 + 4X 2 + 2X + 0  resto

128
4. Códigos Reed-Solomon

Logo,
p( X )   0   2 X   4 X 2   6 X 3

Assim, da Equação 4.18 obtém-se:

c( X )  α 0  α 2 X  α 4 X 2  α 6 X 3  α 1 X 4  α 3 X 5  α 5 X 6 (4.19a)

4.3.2. CODIFICAÇÃO NA FORMA SISTEMÁTICA COM REGISTRADORES DE DESLOCAMENTO


DE (N-K) ESTÁGIOS

A implementação de um codificador RS (7, 3); descrito pelo polinômio g(X) apresentado na


Equação 4.15, requer uma cadeia de registradores de deslocamento conforme mostrado na
Figura 4.3.
Chave 1
X0 X1 X2 X3 X4

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).

Assim como no caso binário, no codificador da Figura 4.3, o número de estágios do


registrador de deslocamento é igual a (n-k). Entretanto, enquanto no caso binário cada estágio
armazena 1 bit, no codificador RS, cada estágio armazena 1 símbolo. No caso específico do
codificador para o código RS (7, 3); cada estágio armazena então 3 bits.

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

O processo de codificação é similar ao caso binário e se dá da seguinte forma:

1. Inicialmente a Chave 1 está fechada, permitindo o carregamento da mensagem no


registrador de deslocamento de (n-k) estágios.

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.

3. Após a transferência dos k símbolos de mensagem para a saída do codificador, a


Chave 1 é aberta e a Chave 2 é fechada para cima.

4. Os (n-k) ciclos de clock restantes deslocam os símbolos de paridade para fora do


registrador de deslocamento.

5. O número total de ciclos de clock é igual a n e na saída do codificador obtém-se a


palavra código polinomial p(X) + X n-km(X), onde p(X) representam os símbolos de
paridade, e m(X) os símbolos de mensagem na forma polinomial.

Exemplo 4.3:

Considere a sequência mensagem m(X) = 1 + 3X + 5X 2 . Faça a codificação sistemática da


mensagem com um código RS (7, 3), usando o codificador da Figura 4.3, mostrando a cada
ciclo de clock a saída e o conteúdo do registrador de deslocamento.

Solução:

Ciclos Conteúdo dos


Fila de entrada Realimentação Fila de saída
clock registradores
1 3 5 0 0 0 0 0 5 5
1 3 1 1
 6
5
1 0 3 5
1 2 3 0 2
2 4 1 3 5
- 3 0 2 4 6 0 6 1 3 5
- 4 0 0 2 4 0 4 6 1 3 5
- 5 0 0 0 2 0 2 4 6 1 3 5
- 6 0 0 0 0 0 0 2 4 6 1 3 5
- 7 0 0 0 0 0 - 0 2 4 6 1 3 5

Na forma polinomial a fila de saída pode ser escrita como:

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)
n0

ou, (100) + (001) X + (011) X 2 + (101) X 3 + (010) X 4 + (110) X 5 + (111) X 6

130
4. Códigos Reed-Solomon

Note que no processo de codificação as operações de adição e multiplicação devem respeitar


as Tabelas 4.4 e 4.5, respectivamente.

* * *

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,

c() = c(2) = c(3) = c(4) = 0.

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.

c() = 0 + 2 + 42 + 63 + 14 + 35 + 56


= 0 + 3 + 6 + 9 + 5 + 8 + 11
= 0 + 3 + 6 + 2 + 5 + 1 + 4
= 1 + 0 + 6 + 4
= 3 + 3 = 0

c(2) = 0 + 22 + 44 + 66 + 18 + 310 + 512


= 0 + 4 + 8 + 12 + 9 + 13 + 17
= 0 + 4 + 1 + 5 + 2 + 6 + 3
= 5 + 6 + 0 + 3
= 1 + 1 = 0

c(3) = 0 + 23 + 46 + 69 + 112 + 315 + 518


= 0 + 5 + 10 + 15 + 13 + 18 + 23
= 0 + 5 + 3 + 1 + 6 + 4 + 2
= 4 + 0 + 3 + 2
= 5 + 5 = 0

c(4) = 0 + 24 + 48 + 612 + 116 + 320 + 524


= 0 + 6 + 12 + 18 + 17 + 23 + 29
= 0 + 6 + 5 + 4 + 3 + 2 + 1
= 2 + 0 + 5 + 1
= 6 + 6 = 0

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)
i0

Para um código RS (7, 3), a Equação 4.21 torna-se:

6
e( X )   ei X i  e0  e1 X  e2 X 2  e3 X 3  e4 X 4  e5 X 5  e6 X 6
i0

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)

Ou (000) + (000) X + (000) X 2 + (001) X 3 + (000) X 4 + (111) X 5 + (000) X 6.

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

c(X) = 0 + 2X + 4X 2 + 6X 3 + 1X 4 + 3X 5 + 5X 6


+
e(X) = 0 + 0X+ 0 X 2 + 2X 3 + 0X4+ 5X 5 + 0X6
=
r(X) = 0 + 2X + 4X 2 + 0X 3 + 1X 4 + 2X 5 + 5X 6 (4.24)

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

4.4.1. CÁLCULO DA SÍNDROME

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 + 42 + 03 + 14 + 25 + 56
= 0 + 3 + 6 + 3 + 5 + 0 + 4
= 2

S2 = 0 + 22 + 44 + 06 + 18 + 210 + 512


= 0 + 4 + 1 + 6 + 2 + 5 + 3
=0

S3 = 0 + 23 + 46 + 09 + 112 + 215 + 518


= 0 + 5 + 3 + 2 + 6 + 3 + 2
= 3

S4 = 0 + 24 + 48 + 012 + 116 + 220 + 524


= 0 + 6 + 5 + 5 + 3 + 1 + 1
= 5

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

Da Equação 4.22, tem-se


e( X )  α 2 X 3  α 5 X 5 .

Assim,
S1 = e(1) = 23 + 55
= 5 + 3
= 2

S2 = e(2) = 26 + 510


= 1 + 1
=0

S3 = e(3) = 29 + 515


= 4 + 6
= 3

S4 = e(4) = 212 + 520


= 0 + 4
= 5

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.

* **

4.4.2. LOCALIZAÇÃO DE ERRO

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.

Conforme definido e demonstrado anteriormente, as síndromes podem ser determinadas tanto


a partir do polinômio recebido quanto por meio do polinômio de erro. Desta forma, pode-se
generalizar o sistema de equações que determinam os valores da síndrome fazendo

S1  r()  e0 α0  e1 α1    en1 αn1


S2  r(2 )  e0 (α2 )0  e1 (α2 )1    en1 (α2 )n1
(4.26)

S2t  r(2t )  e0 (α2t )0  e1 (α2t )1    en1 (α2t )n1

134
4. Códigos Reed-Solomon

Neste sistema de equações existem 2t incógnitas (t valores de erros e t posições de erros), e 2t


equações simultâneas que não podem ser resolvidas pela forma usual por serem não linear.
Qualquer técnica que resolva este sistema de equações é um algoritmo de decodificação 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 

Verificação: Se a inversão foi feita corretamente, então a multiplicação da matriz original


pela matriz invertida deve resultar em uma matriz identidade.

 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

Substituindo então o resultado de (4.31) em (4.30) e efetuando a multiplicação, obtém-se

σ 2   5 0   3    5 3  0  5    
σ           2. (4.33)
 1  0  4   5  0  3   4  5   

Substituindo agora os resultados de (4.33) em (4.27), obtém-se:

( 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

4.4.3. VALORES DOS ERROS

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

Escrevendo as equações acima na forma matricial, obtém-se:

 3  5   e3   2 
 6      (4.37)
 10  e5   0 

que pode ser reescrita como


1
e3    3  5   2 
e    6    (4.38)
 5   10   0 

a fim de facilitar a determinação dos valores de e3 e de e5.

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      65 6  4
det  6 10 
  
10  5 
 6 
  3   10  5 
3 
 10  5   0  2 
4 
    6     6  
3  3    3   3  0 

Verificação: Se a inversão foi feita corretamente, então a multiplicação da matriz original


pela matriz invertida deve resultar em uma matriz identidade.

 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
 

Resolvendo (4.38) para os valores de erros, obtém-se:

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)

4.4.4. CORREÇÃO DO POLINÔMIO RECEBIDO COM O POLINÔMIO DE ERRO ESTIMADO

O polinômio transmitido estimado é obtido fazendo:

ĉ( X )  r ( X )  ê( X ) (4.41)

r(X) = 0 + 2X + 4X 2 + 0X 3 + 1X 4 + 2X 5 + 5X 6


+
ê(X) = 0 + 0X+ 0 X 2 + 2X 3 + 0X4+ 5X 5 + 0X6
=
ĉ (X) = 0 + 2X + 4X 2 + 6X 3 + 1X 4 + 3X 5 + 5X 6 (4.42)

Uma vez que os símbolos mensagem constituem os k = 3 símbolos mais a direita do


polinômio, então a mensagem decodificada é

010 110 111


(4.43)
1 3 5

* * *

4.5. REFERÊNCIA BIBLIOGRÁFICA

[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

4ª SÉRIE DE EXERCÍCIOS: CÓDIGOS RS

1. Deseja-se obter um código Reed-Solomon (n, k) primitivo a partir de um GF(26) com


capacidade de correção igual a 10 símbolos. Pergunta-se:
a) Quais são os valores de n e de k para este código?
b) Qual é o grau do polinômio gerador para este código?

2. Considere um Código RS (127, 97). Responda:


a) Qual é a capacidade de correção de símbolos deste código?
b) Qual é o maior comprimento da rajada de bits que pode ser corrigida pelo código?
c) Qual é o grau do polinômio gerador deste código?

3. Considere um Código Reed-Solomon (31, 15). Responda:


a) Quantos são os bits por símbolo do código?
b) Qual é o comprimento do bloco em bits?
c) Quantos símbolos errados podem ser corrigidos?
d) Qual é a maior comprimento de rajada de erros que pode ser corrigida?

4. Considere o campo de Galois GF(24) gerado por p(X) = 1 + X 3 + X 4 apresentado na tabela


a seguir. Encontre os polinômios geradores para os códigos:
a) RS (15, 13).
b) RS (15, 11).
c) RS (15, 9).

139
4. Códigos Reed-Solomon

Representação Representação Representação Representação


por potência polinomial por potência polinomial
0 0 7 1 +  + 2
0 1 8  + 2 + 3
1  9 1 + 2
2 2  10  + 3
3 3  11 1 + 2 + 3
4 1 + 3  12 1+
5 1 +  + 3  13  + 2
6 1 +  + 2 + 3  14 2 + 3

5) Considere o polinômio gerador g(X) = α10 + α12 X + α4 X 2 + α7 X 3 + X 4 de um código


RS (n, k) obtido a partir do GF(24) apresentado acima. Pede-se:
a) Determinar os valores de (n, k) e a capacidade de correção de erros deste código;
b) Codificar a mensagem m(X) = α7 + X na forma sistemática.

6. Considere o Campo de Galois gerado a partir do polinômio primitivo p(X) = 1 + X 2 + X 3


apresentado a seguir. Pede-se:
a) Obtenha o polinômio gerador para o código RS (7, 5)
b) Codifique a mensagem m = 111000010000101, onde o bit mais significativo é o bit mais
a direita.

Representação Representação Representação Representação


por potência polinomial por potência polinomial
0 0 3 1 + 2
0 1 4 1 +  + 2
1  5 1+
2 2 6  + 2

7.Considere o código Reed-Solomon (7, 3) gerado a partir de campo apresentado a seguir.


Pede-se:
a) Codificar a mensagem m(X) = 1 +  X + 2 X 2.
b) As síndromes do vetor recebido r(X) = 0 + 2X + 3X 2 + 6X 3 + 1X 4 + 0X 5 + 5X 6.
c) Decodifique o polinômio recebido apresentado na questão "b".

Representação Representação Representação Representação


por potência polinomial por potência polinomial
0 0 3 1+
0 1 4  + 2
1  5 1 +  + 2
2 2 6 1 + 2

140
4. Códigos Reed-Solomon

8. Considere o polinômio gerador g(X) = α6 + α11 X + α7 X 2 + α2 X 3 + X 4 + α12 X 5 + X 6 de


um código RS (n, k) obtido a partir do GF(24). Considere o GF(24) apresentado no início da
série de exercícios. Pede-se:
a) Determinar os valores de (n, k) e a capacidade de correção de erros deste código.
b) Codificar a mensagem m(X) = α4 + α7X + α10X 2 na forma sistemática.
c) Determinar as síndromes de erros para o polinômio recebido r(X) = α6X 2 + α11 X 3 + α7 X 4
+ α2 X 5 + X 6 + α12 X 7 + X 8.

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:

 O codificador convolucional e suas representações;


 Decodificação de Códigos Convolucionais com o algoritmo de Viterbi;
 Capacidade de correção de erros dos Códigos Convolucionais;
 Códigos Convolucionais Catastróficos;
 Códigos Convolucionais sistemáticos e
 Melhores Códigos Convolucionais Conhecidos.

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.

Suponha que mi assuma os valores zero ou um de forma equiprovável e que a presença de um


ou outro seja estatisticamente independente, ou seja, o bit presente não depende de seu
predecessor nem influencia seu sucessor.

O codificador transforma cada sequência m em uma única sequência código c = G(m). A


sequência U pode ser segmentada em uma sequência de palavras ramos: c = c1, c2, ... , ci , ...
Cada palavra ramo ci é um símbolo código binário, frequentemente chamado de símbolo do
canal, bits do canal ou bits códigos. Ao contrário dos bits da mensagem de entrada, os bits
dos símbolos códigos não são independentes.

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

Um codificador convolucional genérico, mostrado na Figura 5.2, é constituído de um


registrador de deslocamento de kK estágios e somadores módulo-2, onde K determina a
extensão de influência, ou profundidade do código. A profundidade influência de um código
convolucional é definida como sendo o máximo número de bits codificados que podem ser
afetados por um único bit de entrada.

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.

5.2. REPRESENTAÇÕES E CARACTERÍSTICAS BÁSICAS DO CODIFICADOR

Para descrever um código convolucional é necessário caracterizar a função de codificação


G(m) de tal forma que, dada uma sequência de entrada m, seja possível determinar a saída
codificada c. Uma abordagem muito comum para apresentar o processo da codificação
convolucional é por meio de um exemplo. Assim sendo, os tópicos apresentados a seguir
mostram as formas de representação mais comuns bem como as características básicas de um
codificador convolucional e seu princípio de operação. [1] [2] [3].

142
5. Códigos Convolucionais

5.2.1. REPRESENTAÇÃO PICTORIAL

A representação pictorial nada mais é do que o desenho do codificador. Considere, por


exemplo, o codificador convolucional apresentado na Figura 5.3, onde a cada instante de
tempo, um bit de entrada ocupa a posição mais a esquerda do registrador de deslocamento
(k = 1). Como o codificador possui dois somadores módulo-2, para cada bit que entra no
codificador, dois bits códigos são gerados na saída pela amostragem dos resultados dos dois
somadores. Logo este codificador gera um código de taxa k/n = 1/2, com profundidade K = 3.

Bit de
entrada
m
c1
+
Saída

+ c2

Figura 5.3 - Codificador convolucional (taxa 1/2, K = 3).

A escolha das conexões entre os somadores e os estágios do(s) registrador(es) determinam as


características do código. Qualquer mudança na escolha das conexões resulta em um código
diferente. As conexões não são escolhidas arbitrariamente, entretanto elas afetam as
características de distância do código, ou seja, seu desempenho. Esta escolha é complicada e
não existe, até o momento, uma regra geral que de escolha de conexões que maximize a
distância de um código. Bons códigos, com profundidade menor que 20, têm sido obtidos
através de busca computacional.

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

5.2.2. PRINCÍPIO DE OPERAÇÃO

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

Tabela 5.1 - Codificação da mensagem m(X) = 1 + X + X 3


para o codificador da Figura 5.3.

CONTEÚDO DOS SAÍDA


DESLOCAMENTO ENTRADA
REGISTRADORES c1 c2
0 1 0 0 0 -
1 0 1 0 0 11
2 1 0 1 0 10
3 1 1 0 1 00
4 0 1 1 0 01
5 0 0 1 1 01
6 0 0 0 1 11
7 - 0 0 0 00

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

5.2.3. RESPOSTA AO IMPULSO DO CODIFICADOR

Pode-se determinar a resposta ao impulso de um codificador convolucional, fazendo um


único "1" atravessá-lo desde o primeiro estágio do registrador de deslocamento até o último.
Para o codificador da Figura 5.3, a resposta ao impulso pode ser obtida de acordo com a
Tabela 5.2.

145
5. Códigos Convolucionais

Tabela 5.2 - Resposta ao impulso do Codificador Convolucional apresentado na Figura 5.3.

DESLOCAMENTO CONTEÚDO DOS


SAÍDA
REGISTRADORES
1 1 0 0 11
2 0 1 0 10
3 0 0 1 11

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

A resposta ao impulso deslocada pode ser representada também na forma matricial, e a


sequência código c pode ser obtida da forma c = m.G, da mesma forma que para códigos de
blocos lineares.

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

Note que as dimensões da matriz dependem da resposta ao impulso e do comprimento da


mensagem.

É 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 ≅ ½.

5.2.4. DIAGRAMA DE ESTADOS

Um codificador convolucional pertence a uma classe de dispositivos conhecidos como


máquinas de estado finito, que é o nome genérico para máquinas que tem memória dos sinais
passados. O termo finito refere-se ao fato de que existe apenas um número de estados único e
finito que a máquina pode gerar. Em um sentido amplo, um estado consiste de uma pequena
quantidade de informação que, junto com a informação presente na entrada da máquina, é
capaz de determinar a saída. Os estados fornecem algum conhecimento de eventos passados e
o restrito conjunto de possíveis saídas no futuro. Um estado futuro fica restringido por um
estado passado. Para um codificador convolucional com taxa 1/n, o estado atual dado pelo
tempo ti é representado pelo conteúdo dos (K – 1) estágios mais a direita, conforme mostrado
na Figura 5.5. O estado representado pelo tempo ti + 1 é o estado futuro. O conhecimento do
estado e da próxima entrada é necessário e suficiente para determinar a próxima saída.

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".

Tabela 5.5 – Construção do diagrama de estados para o codificador da Figura 5.5.


Entrada Conteúdos dos Saída em ti
Estado em ti Estado em ti + 1 Figura
mi registradores c1 c2
0 000 00 00 00
5.6(a)
1 100 00 10 11
0 010 10 01 10
5.6(b)
1 110 10 11 01
0 011 11 01 01
5.6(c)
1 111 11 11 10
0 001 01 00 11
5.6(d)
1 101 01 10 00

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/01 0/01 1/01 0/01


11 11

1/10 1/10

Figura 5.6 (d) e (e) - Construção do diagrama de estados de acordo com a Tabela 5.5.

5.2.5. DIAGRAMA DE TRELIÇA

No diagrama de treliça tem-se um histórico de entradas, transições e saídas. A Figura 5.7


apresenta o diagrama de treliça para o codificador da Figura 5.5. Neste diagrama, os estados
são representados pelos níveis horizontais e as entradas e saídas são representadas pela mesma
convenção utilizada no diagrama de estados, ou seja, mi/u1u2, que são colocados sobre cada
braço da treliça, que por sua vez, representa uma transição.

149
5. Códigos Convolucionais

A mensagem m = 1101 estabelece, no diagrama de treliça, a trajetória mostrada na Figura 5.8,


resultando, como era de se esperar, nas saídas 11 10 00 01. Note que para esvaziar os
registradores do codificador, mais dois zeros na entrada são necessários, resultando em uma
saída complementar igual a 01 11. Assim, a sequência de saída completa para a mensagem
m = 1101 torna-se 11 10 00 01 01 11. Este resultado é rigorosamente igual aos resultados
apresentados anteriormente.

0/00 0/00 0/00 0/00 0/00 0/00


00
0/11 0/11 0/11 0/11

1/11 1/11 1/11 1/11 1/11 1/11


10
1/00 1/00 1/00 1/00

0/10 0/10 0/10 0/10

01

0/01 0/01 0/01 0/01


1/01 1/01 1/01 1/01 1/01

1/10 1/10 1/10 1/10


11

Figura 5.7 – Diagrama de treliça para o codificador convolucional da Figura 5.5.

00
1/11

0/11
10
1/00
0/10

01 1/01
0/01

11

Figura 5.8 – Trajetória para a mensagem m = 1101.

150
5. Códigos Convolucionais

5.3. DECODIFICAÇÃO DE CÓDIGOS CONVOLUCIONAIS PELO ALGORITMO DE


VITERBI
O algoritmo de Viterbi é um algoritmo de máxima verossimilhança com baixa carga
computacional em função da utilização da estrutura dos diagramas de treliça dos códigos
convolucionais. A vantagem da decodificação de Viterbi, comparado com a decodificação por
força bruta, é que a complexidade de um decodificador não é função do número de símbolos
da sequência código, mas função de uma medida de similaridade ou distância entre o sinal
recebido em um tempo ti e todos os braços da treliça que entram em cada estado no tempo ti.
Quando dois braços entram no mesmo estado em um tempo ti, o que possuir melhor métrica
ou maior semelhança com o sinal recebido é escolhido e chamado de caminho sobrevivente
[1] [2] [3].

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.

5.3.1. DECODIFICAÇÃO ABRUPTA PELO ALGORITMO DE VITERBI

Para facilitar o entendimento do algoritmo de Viterbi, considere a sequência recebida 11 10


10 01 01 11 codificada pelo codificador da Figura 5.5, cujo diagrama de treliça está
apresentado na Figura 5.7. Note que foi introduzido um erro no terceiro par de bits.

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).

Passo 2: A distância de Hamming do próximo par de bits da sequência código (10) é


comparada com as distâncias de Hamming das transições possíveis a partir dos
estados alcançados após o passo anterior. As distâncias de Hamming encontradas
são somadas àquelas obtidas nas transições anteriores. Veja Figura 5.9(b).

151
5. Códigos Convolucionais

recebidos 11

0/00
(2)
00
1/11
(0)
10

01

11

Figura 5.9(a) – Situação após o passo 1 do exemplo de decodificação.

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

Figura 5.9(b) – Situação após o Passo 2 do exemplo de decodificação.

Passo 3: O mesmo procedimento apresentado no Passo 2 é repetido para o próximo par da


sequência código (10). Note que neste terceiro passo alguns dos estados são
alcançados por dois caminhos diferentes. O caminho sobrevivente deve ser aquele
que apresenta a menor distância de Hamming acumulada. Na Figura 5.9 (c), os
caminhos sobreviventes estão representados por uma linha mais espessa.

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)

(0) (3) 0/11 (4)


10 1/00
0/10 (1)
0/10
(0) (3)
01 1/01
1/01
(4)
0/01
(2) (5)
1/10
11
(2)

Figura 5.9 (c) – Situação após o Passo 3 do exemplo de decodificação.

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)

Figura 5.9(d) – Situação após a análise do 4o par de bits recebidos do exemplo de


decodificação.

153
5. Códigos Convolucionais

recebidos 11 10 10 01 01

0/00 (2) 0/00 (3)


00
1/11 (1) 1/11 (3)
1/11
(0) 0/11 0/11 (3)
10 1/00 1/00
0/10
(1) (2) (3)
1/01
(0)
01 1/01 1/01
(2) (1)
0/01
0/01
(2)
1/10
11
(2) (1) (2)

Figura 5.9(e) – Situação após a análise do 5o par de bits recebidos do exemplo de

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.

Figura 5.9(f) – Situação após a análise do 6o par de bits recebidos do exemplo de


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

sequência decodificada, correspondente à distância de Hamming acumulada


igual a 1.

Note que, no exemplo apresentado a sequência analisada é curta e o resultado da


decodificação torna-se óbvio. Entretanto, quando a sequência recebida é extremamente longa,
o uso do algoritmo de Viterbi requer a utilização de uma quantidade de memória muito alta. A
abordagem usualmente usada é “truncar” a sequência decodificada conforme os passos
descritos a seguir.

1. Uma janela de decodificação de comprimento l é especificada.


2. O algoritmo opera sobre um quadro correspondente ao comprimento l, parando
sempre após l intervalos de tempo.
3. A decisão é tomada sobre o melhor caminho e o símbolo associado com o primeiro
ramo do caminho é liberado para o usuário.
4. O símbolo associado com o último ramo do caminho é desconsiderado.
5. A janela de decodificação é movida um intervalo de tempo para frente e a decisão
sobre o melhor caminho sobre o novo quadro é feita, e assim por diante.

A decisão de decodificação feita dessa maneira não é verdadeiramente máxima


verossimilhança, mas ela pode ser feita quase tão boa desde que a janela de decodificação seja
suficientemente grande. Experiência e análises têm demonstrado que resultados satisfatórios
são obtidos se a janela de decodificação tem comprimento l da ordem de cinco vezes ou mais
do que a extensão de influência K do código convolucional.

5.4. CAPACIDADE DE CORREÇÃO DE ERROS DOS CÓDIGOS CONVOLUCIONAIS


O desempenho de um código convolucional depende do algoritmo de decodificação e das
propriedades de distância do código. Neste aspecto a principal característica de um código
convolucional é a distância livre, denotada por dfree. A distância livre de um código
convolucional é definida como a distância de Hamming entre duas palavras códigos [1][2].

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.

* * *

3.7. REFERÊNCIAS BIBLIOGRÁFICAS

[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

5ª SÉRIE DE EXERCÍCIOS: CÓDIGOS CONVOLUCIONAIS

1. Considere o codificador convolucional representado pelos vetores conexão 1101 e 1111.


Pede-se:
a) Codificar a mensagem 10101.
b) Determinar o seu diagrama de estados.
c) Determinar a capacidade de correção de erros deste código.

2. Considere o diagrama de estados de um codificador convolucional apresentado abaixo.

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.

3. Considere o esquema de codificação e de modulação apresentado na Figura 3.11. Admita


que os seguintes pares de coordenadas tenham sido recebidos: (-0,92; -0,89), (0,71; -0,12),
(-0,13; -0,02), (0,01; 0,11), (-0,95; 0,85) e (-0,88; -0,99). Admita ainda que o processo de
codificação foi iniciado no estado "00" e terminou no estado "00". Fazendo uso do
algoritmo de Viterbi pede-se:
a) A decisão e decodificação abrupta da sequência recebida.

4. Um codificador convolucional possui os seguintes vetores conexão: g1 = 1000; g2 = 1111.


Pede-se:
a) Determinar a sequência código correspondente à mensagem m = 11011.
b) Determinar a capacidade de correção de erros deste código.

157
5. Códigos Convolucionais

5. Considere os vetores conexão g1 = 1111; g2 = 1011 e g3 = 1101 de um código


convolucional com taxa de codificação igual a 1/3. Pede-se:
a) A reposta ao impulso do codificador.
b) O diagrama de estados do codificador.
c) A distância livre do codificador.

6. Encontre os vetores conexões e o diagrama de estados dos seguintes codificadores.

7. Considere a treliça abaixo, que representa o comportamento de um codificador


convolucional. Decodifique a sequência binária recebida r = 11001100110011, admitindo-se
que a codificação foi iniciada e terminada no estado 00.

* * *

158
A1

INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)


A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)

TÓPICOS

1.1. INTRODUÇÃO

1.2. CAMPOS

1.3. ARITMÉTICA NOS CAMPOS BINÁRIOS

1.4. CONSTRUÇÃO DE CAMPOS DE GALOIS GF(2m)


A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)

1.1. INTRODUÇÃO

• Objetivo deste texto: apresentar a conceituação básica da álgebra em Campos de Galois.

• Facilitar o entendimento da estrutura algébrica de códigos:


• BCH (Bose, Chaudhuri e Hocquenghen)
• RS (Reed-Solomom)

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. F é um grupo comutativo sob +. O elemento identidade é o 0 (zero).


2. O conjunto dos elementos não zero em F é um grupo comutativo sob •. O elemento identidade é o 1 (um).
3. A multiplicação é distributiva sob adição, i.e., para quaisquer a, b e c em F,
a ⋅ (b + c) = a ⋅ b + a ⋅ c
• Um campo possui pelo menos dois elementos: o elemento identidade aditivo e o elemento identidade multiplicativo.
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)

1.2. CAMPOS

Outras definições sobre um campo são:

• Ordem do campo: é número de elementos que compõem o campo.

• Elemento aditivo inverso de a: é representado por -a.

• Elemento multiplicativo inverso de a: é representado por a -1 (dado que a ≠ 0).

• 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 1: Para qualquer a: a ⋅ 0 = 0 ⋅ a

• Propriedade 2: Para quaisquer a e b não zeros: a ⋅ b ≠ 0

• Propriedade 3: Se a ⋅ b = 0 e a ≠ 0 ⇒ b = 0

• Propriedade 4: Para quaisquer a e b em um campo − (a ⋅ b ) = (− a ) ⋅ b = a ⋅ (− b )

• 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

Exemplo: 6.5=30, 30 ÷ 7 = 4 com resto = 2


A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)

1.3. ARITMÉTICA NOS CAMPOS BINÁRIOS

• 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.

• Na aritmética binária a subtração é igual a adição.

• Para códigos de bloco lineares as operações polinomiais são de fundamental importância.

• Uma palavra binária pode ser representada por um polinômio na forma:

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)

1.3. ARITMÉTICA NOS CAMPOS BINÁRIOS

• Adição (ou subtração) de dois polinômios

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.3. ARITMÉTICA NOS CAMPOS BINÁRIOS

A multiplicação dos polinômios a(X) e b(X):

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)

1.3. ARITMÉTICA NOS CAMPOS BINÁRIOS

• 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)

1.3. ARITMÉTICA NOS CAMPOS BINÁRIOS

• 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.

• São irredutíveis. Para qualquer m ≥ 1 existe um polinômio irredutível de grau m.


−1
+1.
m
2
• Qualquer polinômio irredutível sobre GF(2) de grau m divide X
X7 + 1 X3 + X + 1
EXEMPLO 4 X7 + X 5+ X 4 X4+ X2 + X + 1
X5+X4+1
Considere o polinômio X 3 + X + 1. Então X 2 −1 + 1 = X 7 + 1 e verifica-se que: X5+ X3 + X2
3

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)

1.3. ARITMÉTICA NOS CAMPOS BINÁRIOS

• 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 e primitivo pois p(X) divide X 15 + 1 e nenhum X n + 1 para 1 ≤ n < 15.

Por outro lado,


p(X) = X 4 + X 3 + X 2 + 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)

1.3. ARITMÉTICA NOS CAMPOS BINÁRIOS

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)

1.3. ARITMÉTICA NOS CAMPOS BINÁRIOS

• Não é fácil reconhecer um polinômio primitivo.

• Para um dado m, pode haver mais do que um polinômio primitivo de grau m.

• 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)

1.4. CONSTRUÇÃO DE CAMPOS DE GALOIS GF(2m)

• Considere um novo símbolo α e a operação multiplicação “⋅”.

• 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:

1. Representação por potência


−2
F * = {0, 1, α, α 2 , L , α 2
m
}.

2. Representação polinomial, conforme mostra o exemplo 6.


A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)

1.4. CONSTRUÇÃO DE CAMPOS DE GALOIS GF(2m)

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+ α

A partir da relação acima pode-se construir um GF(24) como se segue:

α 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)

1.4. CONSTRUÇÃO DE CAMPOS DE GALOIS GF(2m)

EXEMPLO 6
Tabela - GF(24) gerado por p(X) = 1 + X + X 4

REPRESENTAÇÕES

POR POTÊNCIA POLINOMIAL VETORIAL POR POTÊNCIA POLINOMIAL VETORIAL

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)

1.4. CONSTRUÇÃO DE 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)

1.4. CONSTRUÇÃO DE 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

Seja o GF(24) gerado por p(X) = 1 + X + X 4 . A divisão de α 7 por α 12 é:

α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)

1.5. PROPRIEDADES BÁSICAS DE UM CAMPO DE GALOIS GF(2m)

• SOBRE AS RAÍZES DE UM POLINÔMIO

• 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)

α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)

1.5. PROPRIEDADES BÁSICAS DE UM CAMPO DE GALOIS GF(2m)

• SOBRE AS RAÍZES DE UM POLINÔMIO

EXEMPLO 10

O mesmo se verifica para α11, α13 e α14. Pode-se verificar também que:

(X + α7) (X + α11) (X + α13) (X + α14)


= [X 2 + (α7 + α11) X + α18] [X 2 + (α13 + α14) X + α27]
= (X 2 + α8X + α3) (X 2 + α2X + α12)
= X 4 + (α2 + α8) X 3 + (α12 + α10 + α3)X 2 + (α20 + α5) X + α15
=X4+X3+1

* * *
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)

1.5. PROPRIEDADES BÁSICAS DE UM CAMPO DE GALOIS GF(2m)

• SOBRE AS RAÍZES DE UM POLINÔMIO

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)

1.5. PROPRIEDADES BÁSICAS DE UM CAMPO DE GALOIS GF(2m)

• SOBRE POLINÔMIOS MÍNIMOS


Seja β um elemento em GF(2m), e seja e o menor inteiro não negativo tal que β 2 = β . Então,
e

e −1
φ(X ) = ∏ (X + β ) 2i

i =0
é um polinômio irredutível sobre GF(2) e é chamado de polinômio mínimo de β.

O polinômio mínimo φ(X) de um elemento β em GF(2m) divide X 2 −1


+1 .
m

EXEMPLO 12

Considere o GF(24) gerado por g(X) = 1 + X + X 4. Seja β = α 3. Os conjugados de β são: β 2 = α 6 , β 2 = α 12 , β 2 = α 24 = α 9


2 3

φ ( 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)

1.5. PROPRIEDADES BÁSICAS DE UM CAMPO DE GALOIS GF(2m)

• SOBRE POLINÔMIOS MÍNIMOS


Todos os polinômios mínimos dos elementos do GF(24) gerado por g(X) = 1 + X + X 4 são apresentados na Tabela abaixo.

Tabela - Polinômios mínimos dos elementos do GF(24) gerado por g(X) = 1 + X + X 4.

* * *
A1 INTRODUÇÃO À ÁLGEBRA EM CAMPOS DE GALOIS GF (2M)

1.5. PROPRIEDADES BÁSICAS DE UM CAMPO DE GALOIS GF(2m)

• SOBRE ELEMENTOS PRIMITIVOS

• 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

Você também pode gostar