Você está na página 1de 61

Universidade Federal de Sao Carlos

Centro de Ciencias Exatas e de Tecnologia


Departamento de Matematica

Codigos Corretores de Erros

Autor: Carla Meneghesso

Orientador: Prof. Dr. Sadao Massago

Disciplina: Trabalho de Conclusao de Curso

Curso: Licenciatura em Matematica

Professores Responsaveis: Karina Schiabel Silva


Sadao Massago
Vera Lucia Carbone

Sao Carlos, 6 de agosto de 2012.


i

Codigos Corretores de Erros

Autor: Carla Meneghesso

Orientador: Prof. Dr. Sadao Massago

Disciplina: Trabalho de Conclusao de Curso

Curso: Licenciatura em Matematica

Professores Responsaveis: Karina Schiabel Silva


Sadao Massago
Vera Lucia Carbone

Instituicao: Universidade Federal de Sao Carlos


Centro de Ciencias Exatas e de Tecnologia
Departamento de Matematica

Sao Carlos, 6 de agosto de 2012.

Carla Meneghesso Sadao Massago


iii

Dedicatoria

Este trabalho dedico aos meus pais Onofre e Maria de Lourdes que me fizeram lutar ate
o final apesar de todas as dificuldades e possibilitaram que eu realizasse o meu maior
sonho: estudar.
Agradecimentos

Agradeco aos meus pais Onofre e Maria de Lourdes e ao meu irmao Arthur por me
ajudarem nessa longa caminhada. Sem a minha famlia este trabalho nao seria possvel,
pois me apoiaram e me deram forcas para superar momentos difceis.
Agradeco ao Prof. Dr. Sadao Massago pela imprescindvel ajuda e tempo dedicados,
pela orientacao no desenvolvimento do meu trabalho fosse desenvolvido. Muito obrigada
pela compreensao por eu trabalhar e nao pude me dedicar tanto quanto gostaria neste
trabalho.
Agradeco ao meu namorado Carlos Eduardo Domingues Nazario por toda a paciencia,
carinho, compreensao e ajuda dedicada, pois sem seu companheirismo eu nao teria con-
seguido ir ate o fim da graduacao. Muitssimo obrigada, pois muitos foram os momentos
que voce deixou de buscar seus sonhos para que o meu se realizasse. Sem o seu apoio este
trabalho nao existiria.
Este trabalho simboliza a superacao de um momento muito delicado da minha vida na
qual aprendi nao so a importancia da Matematica, mas tambem que podemos seguir em
frente mesmo que alguns obstaculos tenham surgido e tentado impedir que nossos sonhos
fossem concretizados. A Matematica me conquistou desde o colegio e esta monografia e
uma pequena demonstracao de que esta ciencia e singular em minha vida.
vi
Procure ser um homem de valor, em vez de ser um homem de sucesso.
(Albert Einstein)
viii
ix

Resumo

Neste trabalho serao apresentados conceitos basicos de codigos, vetores para projetar
codigos detectores de erros que podem ocorrer na transmissao de dados e os dgitos de
verificacao. Posteriormente definimos o que e um codigo detector de erros, como tambem
a metrica de Hamming, os parametros de um codigo e equivalencia de codigos. Para o
desenvolvimento do projeto foi necessario estudar aneis, corpos e aneis de polinomios para
que pudessemos descrever os corpos finitos e sua construcao. Foram estudados os Codigos
Lineares (Codigos Duais e Codigos de Reed-Muller), Codigos Cclicos, decodificacao destes
e finalmente trabalhamos com algumas aplicacoes de codigos. Neste trabalho foi possvel
identificar a aplicacao da Matematica em mercadorias e transmissao de dados, que e uma
vasta aplicacao de conceitos algebricos que facilitam o dia-a-dia das pessoas.
Introducao

Historicamente, a informacao por meio de codigos era utilizada com o objetivo de ocultar
uma mensagem, denominados de Criptografia. O enfoque deste projeto nao e criptografia,
mas os codigos utilizados quando a informacao digital deve ser transmitida com o uso de
meios analogicos tais como a luz, ondas de radio, gravacoes eletromagneticas, etc. Com a
introducao dos computadores no seculo XX, houve uma necessidade de transmitir grandes
quantidades de dados com rapidez e precisao. Alem dos computadores, outros avancos
tecnologicos dependem de codigos, tais como: comunicacao via satelite, CD, Codigos
Universais de Produtos (UPC-Universal Product Code) associados aos codigos de barras
e o Padrao Internacional de Numeracao de Livros (ISBN- International Standard Book
Number).
Os vetores utilizados para o estudo de codigos nao sao vetores de Rn , mas vetores
em Fn onde F e um corpo finito. Assim, terao um numero finito de possibilidades para
cada componente. Tais vetores dependem de um tipo diferente de aritmetica - chamada
aritmetica modular.
A teoria moderna de codigos originou-se com o trabalho de Claude Shannon (1916
2001), que teve um papel importante na criacao da teoria da informacao e da base teorica
para os hoje chamados codigos corretores de erros.
A teoria dos codigos vem sendo utilizada com sucesso na nossa historia recente. Em
1965, a nave espacial Mariner 4 enviou 22 fotos em preto e branco de Marte com 64
tons de cinza para cada um de seus 200 200 pontos, que e um elemento de Z62 . A esses
vetores nao acrescentavam-se informacoes adicionais, pois a transmissao era muito lenta,
demorando em torno de 8 horas para transmitir cada foto.
Em 1972, a nave espacial Mariner 9 transmitiu imagens de Marte com uma resolucao
de 700832 pontos. Como a velocidade da transmissao era maior, o codigo foi recodificado
atraves de uma funcao injetora : Z62 = Z32 2 para acrescentar o codigo de canal
que permite detectar e corrigir ate sete erros. O dado recebido era corrigido e decodificado
atraves de uma transformacao (1) , obtendo-se o elemento de Z62 que representa o tom
de cinza correspondente. Esse codigo pertence a famlia de codigos chamados de Codigos
de Reed-Muller.
Em 1979, a nave espacial Voyager transmitiu imagens coloridas de Jupiter. Cada
elemento de imagem de uma cor foi representado por uma das 212 = 4096 tonalidades. O
codificador da fonte usava 12 bits binarios e o codificador de canal usava 24 bits. Esse era
xii

o chamado codigo de Golay que permitia corrigir ate tres erros.


No captulo 1, sao apresentados conceitos algebricos que darao suporte aos demais
captulos que tratam de codigos detectores e codigos corretores de erros, como anel dos
inteiros, classificacao e construcao de corpos finitos, espaco vetorial, etc.
O captulo 2 trata dos codigos binarios e como os vetores de codigos sao determinados,
incluindo o processo de codificacao e de decodificacao de uma mensagem.
No captulo 3 sao estudados os codigos detectores de erros, incluindo os codigos bit
de paridade. Neste captulo serao dadas aplicacoes dos codigos detectores de erros, como
o UPC (Universal Product Code), o EAN13 e o ISBN (International Standard Book
Number).
No captulo 4 e feita um abordagem dos codigos corretores de erros, tratando da matriz
geradora do codigo e de teste de paridade no Matlab, Metrica de Hamming, Equivalencia
de codigos, Codigo de Hamming, Decodificacao, Algoritmo da decodificacao, Distancias
mnimas e Corretores de erros geometricos.
No captulo 5 sao estudados os Codigos lineares, a matriz geradora destes codigos,
Codigos duais, Codigos de Reed-Muller e Decodificacao de Codigos de Reed-Muller.
No captulo 6 e feito o estudo dos Codigos cclicos e sua decodificacao.
xiii

Sumario

1 Conceitos Preliminares 1

2 Codigos 7
2.1 Codigos Binarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3 Codigos Detectores de Erros 9


3.1 Codigo bit de paridade par (3, 2) . . . . . . . . . . . . . . . . . . . . . . . 9
3.2 Aplicacoes de Codigos Detectores de Erros . . . . . . . . . . . . . . . . . . 11

4 Codigos Corretores de Erros 17


4.1 Matriz geradora e de teste de paridade no Matlab . . . . . . . . . . . . . . 21
4.2 Metrica de Hamming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.3 Codigos de Hamming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.4 Decodificacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.5 Algoritmo da Decodificacao . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.6 Distancias Mnimas e Corretores de Erros Geometricamente . . . . . . . . 28

5 Codigos Lineares 29
5.1 Equivalencia de Codigos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2 Matriz Geradora de um Codigo . . . . . . . . . . . . . . . . . . . . . . . . 32
5.3 Codigos Duais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.4 Codigos de Reed-Muller . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.5 Decodificacao de Codigos de Reed-Muller . . . . . . . . . . . . . . . . . . . 39

Referencias Bibliograficas 43
xv

Lista de Figuras

1.1 Aritmetica modulo m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2


1.2 Aritmetica modulo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Reta numerada enrolada em volta de um crculo . . . . . . . . . . . . . . . 3

3.1 Palavras de codigo de bit de paridade par (3, 2) . . . . . . . . . . . . . . . 10


3.2 Exemplo de UPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3 Explicacao do codigo de barras utilizado em produtos . . . . . . . . . . . . 13
3.4 Exemplo do codigo de barras utilizado atualmente . . . . . . . . . . . . . . 14
3.5 ISBN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4.1 Procedimento para transmissao de dados . . . . . . . . . . . . . . . . . . . 18


4.2 Representacao do disco e da esfera de centro em a e raio t . . . . . . . . . 24
4.3 Representacao geometrica dos codigos corretores de erros . . . . . . . . . . 28
4.4 Representacao esferica dos codigos corretores de erros . . . . . . . . . . . . 28
1

Captulo 1

Conceitos Preliminares

Para o desenvolvimento do estudo de codigos, precisamos introduzir alguns conceitos


basicos de estruturas algebricas, tais como aneis e corpos, o que permitem tratar os
conjuntos que possuem operacoes com propriedades similares.

Definicao 1.1. Um anel comutativo e um conjunto A munido de duas operacoes,

+ : AA A : AA A
e
(a, b) 7 a + b (a, b) 7 a b
que chamaremos respectivamente de adicao e multiplicacao, possuindo as seguintes pro-
priedades:

(i) Associatividade da adicao: a, b, c A, (a + b) + c = a + (b + c).

(ii) Existencia de elemento neutro para a adicao: Existe um elemento chamado zero e
denotado por 0, tal que a A, a + 0 = 0 + a = a.

(iii) Existencia de elemento inverso para a adicao: Dado a A, existe um unico


elemento chamado simetrico de a e denotado por a tal que

a + (a) = a + a = 0.

(iv) Comutatividade da adicao: a, b A, a + b = b + a.

(v) Associatividade da multiplicacao: a, b, c A, (a.b).c = a.(b.c).

(vi) Existencia de elemento neutro para a multiplicacao: Existe um elemento neutro


chamado unidade e denotado por 1 tal que a A, a.1 = 1.a = a.

(vii) Comutatitvidade da multiplicacao: a, b A, a.b = b.a.

(viii) Distributividade da multiplicacao com relacao a adicao: a, b, c A, a.(b + c) =


a.b + a.c.
2 1. Conceitos Preliminares

Exemplo 1.2. O anel dos inteiros modulo m. O Zm = {0, 1, 2, . . . , m 1, }, m 0


possui as operacoes + e definidas por:

(i) a + b = a + b,

(ii) a b = a b

No exemplo 1.2, o conjunto Zm = {0, 1, 2, . . . , m 1, } de inteiros modulo m corres-


ponde ao relogio de m horas representado pela Figura 1.1 e o conjunto dos vetores m-arios
de comprimento n sao denotados por Znm . Os codigos que utilizam os vetores m-arios sao
chamados codigos m-arios.

Figura 1.1: Aritmetica modulo m

No caso dos inteiros modulo 3, podemos representar o conjunto como um relogio de


tres horas, como na Figura 1.2 .

Figura 1.2: Aritmetica modulo 3

Quando calculamos 1 + 2 = 0 interpretamos do seguinte modo: duas horas apos 1 hora


e 0 hora. Assim, como 24:00 e 12:00 sao representados pela mesma marca em um relogio
de doze horas, 3 e 0 sao equivalentes em um relogio de tres horas. Todos os numeros
multiplos de 3 sao equivalentes a 0; os numeros que sao iguais a 1 mais um multiplo
de 3 e equivalente a 1; e 2 e equivalente a qualquer numero que seja igual a 2 mais um
multiplo de 3. E como se fosse uma reta numerada enrolada em volta de um crculo como
na Figura 1.3.

Exemplo 1.3. Em Z53 sejam u = (2, 2, 0, 1, 2) e v = (1, 2, 2, 2, 1). Entao:


1. Conceitos Preliminares 3

Figura 1.3: Reta numerada enrolada em volta de um crculo

uv =21+22+02+12+21 =2+1+0+2+2 =1

Os vetores de codigo em Z53 sao chamados de vetores ternarios de comprimento 5.

Definicao 1.4. Um anel A sera chamado de domnio de integridade, se possuir a seguinte


propriedade:

a, b A, a 6= 0 e b 6= 0 a.b 6= 0.

Como [2] nao e invertvel, temos que Z4 nao e um corpo. Como [2] [2] = [4] = [0],
temos que esse anel nao e um domnio de integridade.

Definicao 1.5. Um elemento a de um anel A sera dito invertvel se existir um elemento


b A tal que a b = 1. Nesse caso, dizemos que b e um inverso de a.

Definicao 1.6. Um anel onde todo elemento nao nulo e invertvel e chamado de corpo.

Um exemplo de corpo sao os inteiros modulo 3 que consistem no conjunto Z3 =


{0, 1, 2}, com adicao e multiplicacao dadas como no exemplo 1.3. A tabela de operacao e
como segue.

Tabela 1.1: Operacoes de adicao e multiplicacao em Z3

+ 0 1 2 0 1 2
0 0 1 2 0 0 0 0
e
1 1 2 0 1 0 1 2
2 2 0 1 2 0 2 1

Como os elementos nao nulos 1 e 2 sao invertveis, com inversos respectivamente 1 e


2, temos que Z3 e um corpo.

Teorema 1.7. O anel Zm e um corpo se, e somente se, m e um numero primo.

Exemplo 1.8. Seja b = (b1 , b2 , , bn ) um vetor de Zn3 . Incluindo um dgito de checagem


ao vetor de codigo, vamos ter um codigo com n + 1 termos e pode ser expresso como
v = (b1 , b2 , , bn , d) onde d e um dgito de checagem de forma que 1 v = 0 e v e um
vetor de codigo em Zn+1 3 . O dgito de checagem satisfaz
4 1. Conceitos Preliminares

b1 + b2 + . . . + bn + d = 0 em Z3

Definicao 1.9. Um conjunto nao vazio V e um espaco vetorial sobre (um corpo) K se
em seus elementos, denominados vetores, estiverem definidas as seguintes operacoes:

(A) A cada par u, v de vetores de V corresponde um unico vetor u + v V , chamado


soma de u e v, de modo que:

(A1) u + v = v + u, u, v V (propriedade comutativa).

(A2) (u + v) + w = u + (v + w), u, v, w V (propriedade associativa).

(A3) existe um vetor em V , denominado vetor nulo e denotado por 0, tal que 0 + v = v
v V.

(A4) a cada vetor v V , existe um vetor em V denotado por v, tal que v + (v) = 0.

(M) A cada par K e v V , corresponde um vetor v V , denominado produto


por escalar de por v de modo que:

(M1) () v = ( v), , K e v V (propriedade associativa).

(M2) 1 v = v, v V (onde 1 e o elemento identidade de K).

Alem disso, vamos impor que as operacoes dadas em (A) e (M ) se distribuam, isto e, que
tenham as seguintes propriedades:

(D1) (u + v) = u + v, K e u, v V .

(D2) ( + ) v = v + v, , K e v V .

Definicao 1.10. Seja V um espaco vetorial sobre um corpo K. Um subconjunto W de V


e um subespaco vetorial de V se a restricao das operacoes de V a W torna esse conjunto
um K-espaco vetorial.

Note que como Z2 e corpo, Zn2 e um espaco vetorial.


Dado um corpo F, V = Fn e um espaco vetorial com produto escalar canonico.
No exemplo 1.3, considerando o vetor u = (2, 2, 0, 1, 2), ao somarmos suas coordenadas
temos 2 + 2 + 0 + 1 + 2 = 1 e vemos que o dgito de checagem deve ser 2 para que a soma
das coordenadas com o dgito de checagem seja igual a zero modulo Z3 e entao o vetor
codigo de checagem e v = (2, 2, 0, 1, 2, 2).
Os codigos de checagem de dgitos podem detectar erros simples, mas para detectar a
troca de duas coordenadas adjacentes, por exemplo, outros tipos de codigos sao utilizados.
Muitos deles substituem o vetor de checagem 1 por algum outro vetor c cautelosamente
escolhido.
Como os dados no computador, os dados sao codificados usando sequencia de 0s e 1s
que podem ser associados ao vetor binario v Zn2 . Por esta razao, o corpo Z2 tem papel
importante na teoria de codigos.
1. Conceitos Preliminares 5

Proposicao 1.11. Seja A, +, um anel e seja I um subconjunto de A. Entao, I e um


subanel de A se e somente se as seguintes condicoes sao verificadas:

(i) 0 I (o elemento neutro de A pertence a I)

(ii) x, y I = x y I (I e fechado para a diferenca)

(iii) x, y I = x y I (I e fechado para o produto).

Definicao 1.12. Seja A um anel e seja I um subanel de A. Dizemos que I e um ideal de


A se

(i) (x + y) I, x, y I

(ii) a x I, a A, x I (simbolicamente A I I e I A I).


6 1. Conceitos Preliminares
7

Captulo 2

Codigos

2.1 Codigos Binarios


Os codigos binarios consistem em vetores cujas coordenadas sao iguais a 0 ou 1. Os
computadores descrevem dados em termo de 0s e 1s (que podem ser interpretados como
desligado/ligado, fechado/aberto, falso/verdadeiro ou nao/sim). A aritmetica e como
segue

+ 0 1 0 1
0 0 1 e 0 0 0
1 1 0 1 0 1

Com tais operacoes, nosso conjunto de escalares {0, 1} e o conjunto dos inteiros modulo
2 que denotaremos por Z2 .

Exemplo 2.1. Soma em Z2

1+1+0+1=1 e 1+1+1+1=0

Regra de Paridade, ou seja se numero de 1s for par, a soma e 0. Se for mpar, a soma
sera 1.

O vetor do espaco vetorial Zn2 (sobre o escalar Z2 ) e o conjunto das n-uplas de 0s e 1s.
Os vetores em Zn2 sao chamados de vetores binarios de comprimento n.

Exemplo 2.2. Os vetores em Z22 sao (0, 0), (0, 1), (1, 0) e (1, 1)

Exemplo 2.3. Sejam u = (1, 1, 0, 1, 0) e v = (0, 1, 1, 1, 0) dois vetores binarios de com-


primento 5. Determine u.v

O calculo de u.v e feito em Z2 , por isso temos


u.v = 1.0 + 1.1 + 0.1 + 1.1 + 0.0
=0+1+0+1+0
=0
8 2. Codigos

Para a transmissao de dados, comecamos codificando cada palavrada mensagem por


um vetor binario. Ou seja, converte-se o que se quer transmitir numa sequencia de bits
que compoe o vetor binario.

Definicao 2.4. Um codigo binario e um conjunto de vetores binarios (de mesmo com-
primento) chamados vetores de codigos. O processo de conversao de uma mensagem em
vetores de codigo e chamado codificacao, e o processo inverso e chamado decodificacao.
9

Captulo 3

Codigos Detectores de Erros

O Codigo detector de erros e a representacao de uma mensagem que permite detectar


erros. Note que no envio de mensagens atraves de um canal (por exemplo uma linha de
telefone, ondas de radio, um cabo de fibra otica) podem ocorrer rudos, como sinais
de interferencia ou sujeira. O mesmo ocorre quando se faz a leitura de codigo de barras,
CD/DVD ou HD, na qual o erro pode ser introduzido. O objetivo do codigo e detectar
possveis erros na transmissao ou na leitura.
Um destes codigos detectores de erros e o bit de paridade, que permite obter um
codigo eficiente e relativamente simples. A seguir faremos uma abordagem do codigo bit
de paridade par (3, 2).

3.1 Codigo bit de paridade par (3, 2)


No codigo bit de paridade par (3, 2) adiciona-se um bit de paridade no final da mensagem.
Esse bit e a soma modulo 2 dos bits da mensagem obtendo-se assim a palavra de codigo
c = [c0 , c1 , c0 + c1 ]
Logo, somando-se os dgitos temos: (
0 se for par
Soma dos dgitos = [numero de bits ativo] 1 =
1 se for mpar

Logo, a soma de dgitos de c sempre e 0.


Vejamos na tabela 3.1, as palavras de codigo para cada mensagem enviada. Este
codigo tem d = 2 e detecta a presenca de 1 e 3 bits errados, pois o valor d = 2 garante
que erros de 1 bit podem ser detectados, para qualquer codigo. Neste codigo e possvel
tambem detectar 3 bits errados. A decodificacao e realizada recalculando a paridade da
mensagem recebida e fazendo a comparacao da mesma com o codigo transmitido. Se
as palavras enviada e recebida forem iguais nao serao detectados erros, caso contrario
poderao ser detectados 1 ou 3 erros na palavra recebida. A figura 3.1 mostra a posicao
relativa das palavras de codigo, mostrando que d = 2, pois e necessario percorrer duas
arestas do cubo para ir de uma ate outra palavra de codigo. Quando ocorrem um numero
10 3. Codigos Detectores de Erros

Tabela 3.1: Mensagens e palavras de codigo para o codigo bit de paridade par (3, 2)

Mensagem Palavra de codigo


00 000
01 011
10 101
11 110

mpar de erros sobre qualquer palavra de codigo, e possvel detecta-los, ja que resulta
numa palavra que nao pertence ao codigo.

Figura 3.1: Palavras de codigo de bit de paridade par (3, 2)

Vejamos como funcionam os codigos detectores de erros atraves de alguns exemplos.

Exemplo 3.1. Desejamos codificar e transmitir uma mensagem que consiste em uma das
palavras up, down, left, right. Sao quatro palavras, mas acrescentando bit de paridade no
final, teremos quatro vetores de Z32 , como na Tabela 3.2.

Tabela 3.2: Comandos codificados como elementos de Z32

Mensagem Up Down Left Right


Codigo (0,0,0) (0,1,1) (1,0,1) (1,1,0)

Decodificar uma mensagem e simples quando nao ocorrem erros na sua transmissao.
Vamos considerar que ocorreu um erro na transmissao, resultando em alteracao em
uma das coordenadas do vetor de codigo e o downque e (0, 1, 1), foi recebido como
(1, 1, 1), (0, 0, 1) ou (0, 1, 0). Como nenhum deles e um codigo valido (up, down, left ou
right), sabemos que ocorreu um erro na transmissao, mas ainda nao temos as ferramentas
para detectar onde esta o erro.
O exemplo 3.1 e um codigo detector de erros. Mas o avanco tecnologico permitiu nao
somente detectar como tambem corrigir erros de transmissao. Uma forma de detectar
erros e utilizar o codigo de checagem de paridade, que consiste na introducao de dgito de
3.2. Aplicacoes de Codigos Detectores de Erros 11

checagem acrescentado a cada vetor para que a paridade, ou numero total de 1s, seja um
numero par.

Exemplo 3.2. Se a mensagem a ser enviada for o vetor binario (1, 0, 0, 1, 0, 1), que possui
um numero mpar de 1s, o dgito de checagem sera 1, para que o numero total de 1s no
vetor de codigo seja par. Logo, o vetor de codigo sera (1, 0, 0, 1, 0, 1, 1). Se acontecer
algum erro na transmissao da mensagem ele sera detectado, pois a paridade do vetor de
codigo sera alterada de par para mpar. Por exemplo, se ocorrer um erro na terceira
coordenada, o vetor de codigo a ser recebido e (1, 0, 0, 1, 0, 1, 1) e sua paridade e mpar,
pois tem cinco 1s.

Agora veremos o dgito de checagem mais geral. Vamos supor a mensagem que se
quer enviar seja o vetor b = (b1 , b2 , . . . , bn ) em Znk . O vetor codigo de checagem de
paridade e v = (b1 , b2 , . . . , bn , d) em Zn+1
k , onde o dgito de checagem d e escolhido de
maneira que

b1 + b2 + . . . + bn + d = 0 em Zk
ou
1.v = 0

onde 1 = (1, 1, . . . , 1) e um vetor com todas as coordenadas iguais a 1. O vetor 1 e


chamado vetor de checagem. Quando ocorrem erros, temos que 1 v 6= 0 para algum v.
Nesse projeto, estamos estudando o caso que ocorre apenas um erro.
As coordenadas dos vetores de codigo podem ser elementos do conjunto finito Zk+1 =
{0, 1, 2, . . . , k} para k 2 que e um anel.

3.2 Aplicacoes de Codigos Detectores de Erros


Dentre as aplicacoes dos Codigos Detectores de Erros estao o UPC (Codigo Universal de
Produto), o EAN-13 (Codigo de barras) e o ISBN (Padrao Internacional de Numeracao
de Livros), que sao codigos que possuem o dgito de checagem.

UPC(Universal Product Code) - Codigo Universal de Produto e EAN-13


Ha dois tipos de codigos de barras em uso para identificacao dos itens a venda. O
UPC e o mais antigo deles, usado inicialmente apenas na America do Norte. Ele utiliza
doze dgitos (escrito na forma de barras) para ser lidos por uma maquina de luz refletida.
Tambem vem com os numeros abaixo das barras para ser lidos por um humano quando
necessario. Com o tempo, passou-se a usar o EAN-13 que utiliza treze dgitos, que permite
tambem distinguir o pas de origem do produto. Esse e o que esta sendo utilizado no Brasil.
Os dois tipos de codigos sao muito semelhantes, onde o UPC usa apenas um dgito para
12 3. Codigos Detectores de Erros

identificar o pas de origem, enquanto o EAN-13 utiliza dois dgitos e portanto possui 13
dgitos.
Para compreender o funcionamento dos codigos detectores de erros e preciso entender
como e atribudo a cada produto, um dgito que permite essa deteccao.
Suponhamos que um produto esta identificado. O UPC e um codigo associado aos
codigos de barras encontrados em mercadorias, na qual o leitor do codigo de barras esca-
neia as barras pretas e brancas que correspondem a um vetor 10-ario
v = (v1 , v2 , . . . , v11 , d) Z12
10
de comprimento 12. As informacoes sobre o fabricante e o produto sao dadas pelas 11
primeiras componentes. A ultima componente d e o dgito de checagem escolhido de
maneira que c.v = 0 em Z10 , onde o vetor de checagem c e dado por

c = (3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1)

Depois de um rearranjo, temos

3(v1 + v3 + v5 + v7 + v9 + v11 ) + (v2 + v4 + v6 + v8 + v10 ) + d = 0

onde d e o dgito de checagem.


Os pesos dos dgitos das posicoes pares e mpares sao diferentes para detectar o
deslocamento de digitos devido a erros de entrada, como troca de posicao de dois dgitos
consecutivos. O dgito de checagem e escolhido de maneira que o lado esquerdo da
expressao resulte num multiplo de 10.

Exemplo 3.3. Seja o UPC como mostrado na Figura 3.3. Vamos verificar se o dgito de
checagem realmente e 6, considerando que os calculos sao feitos em Z10 .

Figura 3.2: Exemplo de UPC

Temos que v = (0, 7, 4, 9, 2, 7, 0, 2, 0, 9, 4, d) e sabendo que c =


(3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1), obtemos:

cv =30+17+34+19+32+17+30+12+30+10+34+1d
3.2. Aplicacoes de Codigos Detectores de Erros 13

= 3.(0 + 4 + 2 + 0 + 0 + 4) + 1.(7 + 9 + 7 + 2 + 9 + d)
= 3.(0) + 1.(4) + d
=4+d

Como 4 + d = 0 em Z10 , entao d deve ser igual a 6.

Exemplo 3.4. O UPC permite detectar erros simples (erro na coordenada) ou erros
gerados por trocas entre as coordenadas. Vamos supor que no exemplo 3.3, o UPC seja
escrito como v = (0, 7, 4, 2, 9, 7, 0, 2, 0, 9, 4, 6), ou seja, a quarta e a quinta coordenadas
tiveram suas posicoes invertidas. Fazendo os calculos em Z10 obtemos:

c v0 = 3 0 + 1 7 + 3 4 + 1 9 + 3 2 + 1 7 + 3 0 + 1 2 + 3 0 + 1 9 + 3 4 + 1 6
= 3.(0 + 4 + 9 + 0 + 0 + 4) + 1.(7 + 2 + 7 + 2 + 9 + 6)
= 3.(7) + 1.(3)
=4

Como c v 0 = 4 6= 0 em Z10 , entao conclumos que houve algum erro.

Agora suponhamos que um determinado produto esta identificado no sistema EAN-13,


por uma dada sequencia de dgitos v = (v1 , v2 , . . . , v12 , d).
Os primeiros doze dgitos identificam o pas de origem, o fabricante e o produto es-
pecfico, e sao determinados a cargo de uma autoridade classificadora em cada pas. Veja
a figura a seguir.

Figura 3.3: Explicacao do codigo de barras utilizado em produtos

O decimo terceiro dgito, chamado de dgito de verificacao utilizado para a de-


teccao de erros, e sera denotado por d. Denotaremos essa sequencia como um vetor
= (v1 , v2 , . . . , v12 , d). O sistema EAN 13 utiliza o vetor de checagem ou vetor de
pesos c = (1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1).
A sistematica e a mesma do UPC, mudando apenas o numero de dgitos do vetor que
representa o artigo.
Por exemplo, no caso do codigo da figura que segue, os numeros indicam o pas de
origem, o fabricante e o produto sao 789500026624.
14 3. Codigos Detectores de Erros

Figura 3.4: Exemplo do codigo de barras utilizado atualmente

Vamos determinar o dgito de verificacao d e fazendo o produto escalar com o vetor


de pesos, temos: 7 + (3.8) + 9 + (3.5) + 0 + (3.2) + 6 + (3.6) + 2 + (3.4) + d = 99 + d
Logo, deve-se ser d = 1, pois a soma acima deve ser multiplo de 10. Se fosse qualquer
outro numero de 0 a 9, nao resultaria no multiplo de 10 e entao o computador avisaria
que um erro foi cometido.
Se mais de um erro for cometido na digitacao, provavelmente sera detectado, mas
isso nao e garantido ja que eles podem compensar mutuamente e a soma poderia ainda
continuar sendo um multiplo de 10.
Veremos a funcao do vetor de pesos? Se a escolha do dgito de verificacao fosse feita
para a soma das coordenadas de (v1 , v2 , . . . , v12 , d) ser multiplo de 10, o que equivaleria
a considerar o vetor de pesos (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), ainda poderia detectar um
erro. Acontece que ha um outro tipo de erro de digitacao muito comum, que consiste em
digitar todos os numeros corretamente, mas trocar a ordem de dois dgitos consecutivos.
Nesse caso o vetor (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) nao detecta o erro. Logo, o sistema de
deteccao acima nao tem a capacidade de detectar todo erro de transposicao cometido.
A transposicao de dois dgitos vi e vi+1 nao e detectada no EAN-13, se e somente se
|vi vi+1 | = 5 (se vi e mpar, tem-se a diferenca com o sinal trocado).

ISBN(Intenational Standard Book Number)- Padrao Internacional de Nu-


meracao de Livros
O ISBN e um outro codigo de checagem de dgito, utilizado universalmente para a clas-
sificacao de livros. E projetado para detectar mais tipos de erros que o UPC. O vetor
de codigo e um vetor em Z10 11 . As primeiras 9 componentes dao pas, editor e informacao
sobre o livro e a decima componente e o dgito de checagem. Para o codigo ISBN, o vetor
de checagem ou vetor peso e

c = (10, 9, 8, 7, 6, 5, 4, 3, 2, 1)

e a condicao e que c.b = 0 em Z11 , ou seja, de que o produto escalar do vetor de codigo
pelo vetor de checagem seja multiplo de 11. Sendo o vetor b = (v1 , v2 , v3 , . . . , v9 , d), temos:
c.b = 10.v1 + 9.v2 + 8.v3 + 7.v4 + 6.v5 + 5.v6 + 4.v7 + 3.v8 + 2.v9 + d
onde d e o dgito de checagem. Ou seja, d deve ser escolhido de modo que c.b seja
multiplo de 11. Quando o dgito de checagem e 10, utiliza-se o numeral romano X em seu
lugar, pois e prefervel que cada componente de um ISBN seja um unico dgito.
3.2. Aplicacoes de Codigos Detectores de Erros 15

Exemplo 3.5. Consideramos o ISBN a seguir que tem numero igual a 8524401699.
O dgito de verificacao final e 9, pois

Figura 3.5: ISBN

(8, 5, 2, 4, 4, 0, 1, 6, 9, 9).(10, 9, 8, 7, 6, 5, 4, 3, 2, 1) =
80 + 45 + 16 + 28 + 24 + 0 + 4 + 18 + 18 + 9 = 242, que e um multiplo de 11.

Segundo Milies [5], autores como D.F. Beckley e J. Verhoeff investigaram os erros
cometidos por operadores humanos. Os erros num unico dgito e as transposicoes sao os
mais frequentes, atingindo cerca de 80%. A codificacao apresentada aqui foi projetada
para detectar tais erros.
17

Captulo 4

Codigos Corretores de Erros

Vamos estudar neste captulo codigos corretores de erros, que permitem tanto detectar
como corrigir certos tipos de erros na transmissao ou armazenamento de dados. Para
entender como funcionam, vamos utilizar como exemplo, um robo que se move sobre um
tabuleiro quadriculado e que ao darmos um dos comandos (leste, oeste, norte, sul), o robo
se desloca de uma casa para a outra.
Os quatro comandos acima podem ser codificados como elementos de Z22 , como se
segue:

Leste
7 00 Norte 7 10
Oeste 7 01 Sul 7 11

Cada codigo que representa um dos comandos acima (00, 01, 10, 11) e chamado de
codigo da fonte. Suponhamos que os pares ordenados devam ser transmitidos via radio
que pode sofrer interferencias. Suponhamos que ao enviar a mensagem como 00 (ir para
leste), o robo recebeu a mensagem 01 (ir para oeste) o que faria com que fosse para oeste.
Para evitar que a mensagem seja um dos comandos existente, e necessario introduzir re-
dundancias na codificacao para permitir detectar e corrigir erros. Entao vamos introduzir
mais dgitos aos codigos que representam os comandos, como segue:

00 7 00000
01 7 01011
10 7 10110
11 7 11101

Na recodificacao acima, as duas primeiras posicoes sao o codigo da fonte e nas tres
posicoes restantes sao redundancias introduzidas. Este novo codigo recodificado e cha-
mado de codigo de canal. Como exemplo, suponhamos que tenha ocorrido um erro na
transmissao do codigo 10110 e que foi recebido 11110. O codigo recebido nao corresponde
a nenhum dos codigos da tabela, portanto, detectamos erros. O codigo mais proximo
da mensagem valida, ou seja, o codigo da tabela que apresenta a menor quantidade de
dgitos distintos do codigo recebido e 10110, que e a palavra transmitida.
18 4. Codigos Corretores de Erros

Figura 4.1: Procedimento para transmissao de dados

O funcionamento dos codigos corretores do exemplo do robo e esquematizado a seguir:


O esquema acima exemplifica os codigos corretores de erros. Inicialmente, transforma-
mos os dados a serem transmitidos em um codigo da fonte que e convertido num codigo de
canal, acrescentando-se redundancias. Ao receber, detecta e corrige os erros e em seguida,
o codigo de canal e decodificado em codigo da fonte. Neste projeto serao estudados os
codigos, denominados codigos simetricos que apresentam as seguintes propriedades:

(a) Todos os smbolos (dgitos) transmitidos tem a mesma probabilidade de serem rece-
bidos errados e essa probabilidade e pequena;

(b) Se um smbolo e recebido errado, a probabilidade de ser qualquer um dos outros


smbolos e a mesma.

Agora vamos entender matematicamente como funciona o vetor de codigo e o processo


de geracao de um codigo. Seja a nossa mensagem, um vetor x em Zk2 para algum k, e
iremos codifica-lo utilizando uma transformacao por meio da matriz

T : Zk2 Zn2 para algum n > k

T (x) sera um vetor de codigo. Um codigo pode ser descrito atraves de uma trans-
formacao envolvendo matriz.
h i
Exemplo 4.1. Seja G = 1 1 1 e definimos T : Z2 Z32 por T (x) = Gt x
Onde elementos de Z2 sao matrizes 1 1.
A matriz G e chamada de Matriz geradora do codigo.
Para checar se um vetor recebido e um codigo, precisamos fazer duas verificacoes de
c1
paridade. Pela G, e necessario que o vetor recebido c = c2 satisfaca c1 = c2 = c3

c3
2
Em Z , temos
4. Codigos Corretores de Erros 19


c = c c + c = 0
1 2 1 2
=
c = c c + c = 0
1 3 1 3

" #
1 1 0
Se P = , entao e equivalente a P c = 0.
1 0 1
A matriz P e chamada de matriz de verificacao de paridade para o codigo e p c 6= 0
implica que houve erros." #
0
Observe que P Gt = .
0
Para entender como
funciona, vamos supor que enviamos uma mensagem codificada
1
como (1, 1, 1) = 1

1
Suponha que ocorreu um erro na transmissao e recebemos c0 = (1, 0, 1) Logo,

" # 1 " # " #
1 1 0 1 + 0 1 + 0 1 1
P c = 0 = = 6= 0.

1 0 1 1+00+11 0
1
Logo, c nao
" pode
# ser um vetor de codigo. Mas onde estara o erro? Podemos verificar
1
que P c = que e a segunda coluna da matriz de verificacao de paridade P. Isso
0
significa que o erro esta na segunda coordenada de c, o que permite corrigir o erro,
invertendo 0 para 1.
Definicao 4.2. Se k < n. Um codigo binario (n, k) dado como T : Zk2 Zn2 e
h i
dito de comprimento n e dimensao k. Uma matriz G = Ik A , onde A e uma
kn
h k (n =ik) sobre Z2 e dito matriz geradora padrao para o codigo. Uma matriz
matriz
P = B Ink e dito matriz de verificacao de paridade padrao.

G e P sao associados ao codigo T : Z2k Z2n quando T x = Gt x e P Gt x = 0 x,


ou seja, P Gt = 0.
No teorema a seguir temos a condicao para G ser a matriz geradora padrao para um
codigo binario de correcao de erros e como encontramos uma matriz de verificacao de
paridade padrao associada a P .
h i h i
Teorema 4.3. Sejam G = Ik A e P = B Ink . P sera a matriz de verificacao
de paridade associada a matriz geradora padrao G se, e somente se, At = B. Alem disso,
o codigo binario correspondente (n, k) sera um corretor de erros (em uma componente)
se, e somente se, as colunas de P forem nao nulas e distintas.
Demonstracao. Chamamos ati a i-esima linha de uma matriz A e bi , o i-esima coluna de B.
Seja G uma matriz geradora padrao e P uma matriz de verificacao de paridade. Vamos
assumir que as duas matrizes correspondem ao mesmo codigo binario. Portanto, para
todo x em Zk2 , P G x = 0. Usando a multiplicacao por blocos temos:
20 4. Codigos Corretores de Erros

" #
h i I
P Gt x = B I x = 0 para todo x em Zk2
At
Ou seja,
" #
h i I
B I x = (BI + IAt ) x = 0
At

Para todo x em Zk2 , temos

Bx + At x = 0 = Bx = At x = At x

ou
Bx=Ax
Se agora tomarmos x = ei , o i-esimo vetor de base canonica de Zk2 , vemos que

bi = B ei = At ei = ati para todo i

Portanto, B=At . # "


hI i
Reciprocamente, se B = At , PGt = B I t
= B + At = 0 em Z2 . Agora,
A
veremos que se Pi forem nao nulas e distintas, entao e matriz de paridade para corretor
de erros, precisamos verificar que P detecta posicao de erros. Seja x, a mensagem em Zk2
e c = Gx. Entao teramos P c = 0. Se ocorrer um erro na i-esima posicao de c, o codigo
recebido seria c0 = c + ei. Entao temos P c0 = P c + P ei = 0 + Pi que e a i-esima coluna de
P . Como todas as coluna sde P sao distintas (e nao nulas) podemos identificar a posicao
do erro.

Exemplo 4.4. Veremos um codigo corretor de erros que usa tres equacoes para verificacao
de paridade, que formam as linhas de P . Entao temos nk = 3 e logo k = n3. Os vetores
da mensagem pertencem a Zk2 , e queremos que k (portanto n) seja o maior possvel para
transmitir mais informacoes. Pelo Teorema 4.3, as colunas de P precisam ser distintas e
nao nulas. O maximo ocorre quando consistem em todos os 23 1 = 7 vetores nao nulos
de Znk
2 = Z32 . Uma destas opcoes e

1 1 0 1 1 0 0
P= 1 0 1 1 0 1 0

0 1 1 1 0 0 1

Isso significa que



1 1 0 1
A= 1 0 1 1

0 1 1 1

e dessa forma, uma matriz geradora e


4.1. Matriz geradora e de teste de paridade no Matlab 21


1 0 0 0 1 1 0

0 1 0 0 1 0 1
G=

0 0 1 0 0 1 1

0 0 0 1 1 1 1 47

Para exemplificar como a matriz geradora funciona, vamos considerar x = (0, 1, 0, 1) e


codificar como

c = G xt = (0, 1, 0, 1, 0, 1, 0)

Se esse vetor for recebido, sera considerado correto, ja que P c = 0. Agora, se for
h iT
recebido c = 0 1 1 1 0 1 0 , entao

1 1 0 1 1 0 0 h it h it
0
P c = 1 0 1 1 0 1 0 0 1 1 1 0 1 0 = 0 1 1

0 1 1 1 0 0 1
h i
Como P c0 6= 0, ocorreu um erro. Como o vetor e 0 1 1 , que e a terceira coluna
da matriz P . O erro esta na terceira componente de c0 . Alterando essa componente,
recuperamos o vetor de codigo c. Como as quatro primeiras componentes de um vetor de
codigo sao o vetor de mensagem original,podemos decodificar c e obtemos o vetor original
h iT
x= 0 1 0 1 .

O codigo do exemplo 4.4 e chamado de codigo de Hamming (7,4). Em geral, todos os


codigos binarios construdos dessa forma sao chamados de codigo de Hamming (n, k), o
que veremos mais adiante. Um codigo de Hamming (n, k) tem n = 2nk 1.

4.1 Matriz geradora e de teste de paridade no Matlab


Vamos determinar a matriz geradora padrao (G) e a matriz de verificacao de paridade
(H) para um codigo binario (7, 4), utilizando a funcao hammgen no Matlab. O parametro
de entrada e o fator r de desenho do codigo, tal que (n, k) = (2r 1, 2r 1 r). A
" funcao
#
A
hammgen retorna, alem das matrizes H e G definidas neste caso como G = e
Ik
" #
Ink
H= , tambem os valores de n e k.
AT

No Matlab executamos a primeira linha, que tem como parametro de entrada apenas
r = 3, e os dados de sada sao H, G e os valores de n e k.
No Matlab tambem podemos obter uma palavra de codigo, ou seja, um vetor de codigo
(codigo da fonte) acrescido de redundancias introduzidas, chamadas de codigo de canal.
Para isso, multiplicamos o vetor de codigo pela matriz geradora G.
22 4. Codigos Corretores de Erros
4.2. Metrica de Hamming 23

Agora vamos introduzir um erro na palavra de codigo, trocando o segundo bit desta
atraves da soma com um padrao de erro. Em seguida, calculamos a sndrome e verificamos
que e a segunda linha de H T , correspondendo ao padrao de erro somado a segunda
palavra.

4.2 Metrica de Hamming


Seja A um conjunto finito que daqui em diante sera chamado de alfabeto. Um codigo
corretor de erros e um subconjunto proprio qualquer de An . Para ter a nocao de proxi-
midade entre palavras (sequencia de alfabetos), veremos um modo de medir a distancia
entre palavras.

Definicao 4.5. Dados dois elementos u, v An , a distancia de Hamming entre u e v e


definida como
d(u, v) = |{i : ui = vi , 1 i n}|.

Proposicao 4.6. Dados u, v, w An , valem as seguintes propriedades:

(i) Positividade: d(u, v) 0 e d(u, v) = 0 u = v.

(ii) Simetria: d(u, v) = d(v, u).

(iii) Desigualdade Triangular: d(u, v) d(u, w) + d(w, v).

Logo, a distancia de Hamming e uma metrica, tambem chamados de metrica de Ham-


ming.

Definicao 4.7. Seja C um codigo. A distancia mnima de C e o numero


24 4. Codigos Corretores de Erros

d = min{d(u, v) : u 6= v com u, v C e u 6= v }.

No exemplo do robo dado no incio deste captulo, se C e o codigo do robo, temos que
d = 3.

Definicao 4.8. Dado a An e um numero real t > 0, definimos o disco e a esfera de


centro em a e raio t como sendo

D(a, t) = {u An : d(u, a) t},

S(a, t) = {u An : d(u, a) = t}.

respectivamente.

A definicao 4.8 pode ser representada da seguinte forma:

Figura 4.2: Representacao do disco e da esfera de centro em a e raio t

Como consequencia da definicao 4.8 e desigualdade triangular, temos:

Lema 4.9. Seja C um codigo com distancia mnima d. Se c e c0 sao palavras distintas
de C, entao

D(c, ) D(c0 , ) = .

Teorema 4.10. Seja C um codigo com distancia mnima d. Entao C pode corrigir ate
= b d1
2
c erros e detectar ate d 1 erros.

Demonstracao. Se ao transmitirmos uma palavra c do codigo cometermos t erros com


t , originando a palavra r, entao d(r, c) = t . Pelo Lema 4.9, a distancia de r
a qualquer outra palavra do codigo e maior do que . Isso determina c univocamente
a partir de r, como sendo o codigo mais proximo. Por outro lado, dada uma palavra
do codigo, podemos nela introduzir ate d 1 erros sem encontrar uma outra palavra do
codigo, e assim, a deteccao do erro sera possvel.

A tabela 4.1 apresenta as capacidades de deteccao, correcao e deteccao e correcao


simultaneas, em funcao da distancia mnima, para alguns valores.
Analisando a tabela acima, verificamos que:
4.3. Codigos de Hamming 25

Tabela 4.1: Capacidades de deteccao e correcao de erros em funcao da distancia mnima

d Deteccao (l) Correcao (t) Deteccao e Correcao simultaneas (l, t)


1 0 0 Nao tem
2 1 0 Nao tem
3 2 1 Nao tem
4 3 1 (2,1)
5 4 2 (3,1)

(1) Apenas para d 4 e que se torna possvel a deteccao e a correcao em simultaneo;

(2) A capacidade de deteccao e sempre superior a capacidade de correcao;

(3) Um codigo com d = 1 nao tem capacidade para detectar erros; por exemplo, con-
siderando as 8 palavras do codigo binario natural a 3 bit, verifica-se que qualquer
alteracao de um bit numa palavra vai produzir outra palavra que pertence ao codigo;
este erro e indetectavel (as palavras de codigo sao excessivamente semelhantes entre
si).

As capacidades de deteccao e correcao sao obtidos a custa da introducao de re-


dundancias e dependem da distancia mnima do codigo. Aumentar a distancia mnima
melhora as capacidades de deteccao e correcao, mas em contrapartida diminui a aficiencia
do codigo. Os criterios para determinacao dos codigos de codificacao de canal sao:

(1) Dado o R, onde R e a medida da eficiencia do codigo, maximizar d;

(2) Dada a d minimizar R.

Definicao 4.11. Seja C An um codigo com distancia mnima d e seja = b d1


2
c. O
codigo C sera dito perfeito se

[
D(c, ) = An .
cC

Um codigo C sobre um alfabeto A possui tres parametros fundamentais [n, M, d], que
sao, respectivamente, o seu comprimento (o numero n corresponde ao espaco ambiente
An onde C se encontra), o seu numero de elementos e a sua distancia mnima.

4.3 Codigos de Hamming


Um codigo de Hamming de ordem m sobre F2 = Z2 e um codigo com matriz teste de
paridade Hm de ordem m n, cujas colunas sao os elementos de F2 m {0} numa ordem
qualquer.
26 4. Codigos Corretores de Erros

Temos que o comprimento de um codigo de Hamming de ordem m e n = 2m 1 e a


sua dimensao e = n m = 2m m 1. Como veremos no proximo captulo, podemos
converter a matriz geradora de verificacao de paridade na forma padrao. Considere a
matriz

1 0 1 1 1 0 0
H3 = 1 1 0 1 0 1 0 .

0 1 1 1 0 0 1
Essa e a matriz de um codigo de Hamming (matriz de verificacao de paridade) corres-
pondente a m = 3.

Proposicao 4.12. Todo codigo de Hammming e perfeito.

4.4 Decodificacao
A decodificacao e o procedimento de deteccao e correcao de erros num determinado codigo.
Define-se o vetor erro e como sendo a diferenca entre o vetor recebido r e o vetor trans-
mitido c, isto e,

e=rc

Exemplo 4.13. Suponha que num codigo dado sobre F2 , tenhamos transmitido a palavra
(010011) e foi recebido a palavra recebida tenha sido (101011), entao

e = (101011) (010011) = (111000).

O peso do vetor erro corresponde ao numero de erros cometidos durante a transmissao.


Seja H a matriz teste de paridade do codigo, chamamos Hv de sndrome de v. Como
Hc = 0, temos que

Het = H(r c) = Hr Hc = Hr.

Portanto, a palavra recebida e o vetor erro tem mesma sndrome.

Lema 4.14. Seja C um codigo linear em K n com capacidade de correcao . Se r K n


e c C sao tais que d(c, r) entao existe um unico vetor e com (e) , tal que a
sndrome e igual a sndrome de r. Alem disso, que c = r e.

Cada conjunto da forma v + C e chamado de classe lateral de v segundo C. Note que

v + C = C v C.

Lema 4.15. Os vetores u e v de K n tem a mesma sndrome se, e somente se, u v + C.


4.5. Algoritmo da Decodificacao 27

Definicao 4.16. Um vetor de peso mnimo numa classe lateral e chamado de elemento
lder dessa classe.

4.5 Algoritmo da Decodificacao


(1) Calcule a sndrome s = Hr.

(2) Se s esta na tabela de calculo das sndromes, seja l o elemento lder da classe
determinada por s; troque r por r l.

(3) Se s nao esta na tabela de calculo das sndromes, entao mensagem recebida foram
cometidos mais do que erros.

Exemplo 4.17. Considere o codigo linear (6, 3) definido sobre F2 com matriz teste de
paridade
H=
1 0 1 1 0 0
1 1 0 0 1 0 .

0 1 1 0 0 1

Neste caso d = 3 e, portanto, = b d1


2
c = 1.

Os vetores de peso 1 com suas respectivas sndromes estao relacionados abaixo

Lder Sndrome
000000 000
000001 001
000010 010
000100 100
001000 101
010000 011
100000 110

Suponhamos, agora, que a palavra recebida seja

(a) r = (100011). Logo, S = Hr = (101) e, portanto, e = (001000). Consequen-


temente, c = r e = (101011).

(b) r = (111111). Logo, S = Hr = (111), que nao se encontra na tabela. Sendo


assim, foi cometido mais do que 1 erro na mensagem r.
28 4. Codigos Corretores de Erros

4.6 Distancias Mnimas e Corretores de Erros Geo-


metricamente
Seja C um codigo de tripla repeticao, temos um subconjunto de Z32 . Podemos representar
os vetores de Z32 como vertices de um cubo unitario (figura 4.3(a)). A distancia de
Hamming entre quaisquer dois vetores x e y e so o caminho mais curto para ir de x ate
y, passando pelas arestas. O codigo C corresponde a dois desses vertices, c0 = 000 e
c1 = 111. O fato de d(C) = 3 corresponde ao fato de c0 e c1 estarem a tres unidades
(arestas) um do outro (figura 4.3(b)). Se um vetor recebido x estiver ao maximo de uma
unidade de algum desses vetores-codigos e soubermos que ocorreu no maximo um erro,
poderemos corretamente decodificar x como o vetor-codigo mais proximo. Em geral, nao
podemos desenhar figuras de Zn2 .

Figura 4.3: Representacao geometrica dos codigos corretores de erros

Considere um codigo que pode corrigir ate erros e os vetores-codigo nos centros
das esferas de raio . Os vetores-codigo estao separados um dos outros por pelo menos
d unidades. Se um vetor recebido x estiver no interior de uma dessas esferas, ele sera
decodificado como o vetor correspondente ao centro daquela esfera (veja a figura 4.4).

Figura 4.4: Representacao esferica dos codigos corretores de erros

Esse processo e conhecido como decodificador pelo vizinho mais proximo. A figura
sugere que se um codigo e capaz de corrigir erros, entao as esferas centradas nos
vetores-codigo nao podem ser tocadas nem sobrepostas, tendo-se d > 2.
29

Captulo 5

Codigos Lineares

Neste captulo apresentaremos a classe de codigos denominada de Codigos Lineares.

Definicao 5.1. Um codigo C K n sera chamado de codigo linear se for um subespaco


vetorial de K n .
O codigo do robo citado anteriormente, por exemplo, e um codigo linear, pois o alfa-
beto nesse caso e A = F2 , o codigo e o subespaco vetorial de F52 , que e a imagem da
transformacao linear

T : F22 F52
(x1 , x2 ) 7 (x1 , x2 , x1 , x1 + x2 , x2 )

Pela definicao, todo codigo linear e um espaco vetorial de dimensao finita. Seja a
dimensao do codigo C e seja {v1 , v2 , . . . , v } base C, portanto, todo elemento de C se
escreve de modo unico na forma

1 v 1 + 2 v 2 + + v

onde os i , i = 1, . . . , , sao elementos de K. Segue da que

M = |C| = q

e, consequentemente,

dimK C = = logq q = logq M.

Definicao 5.2. Dado x K n , define-se o peso de x como sendo o numero inteiro

(x) := |{i : xi 6= 0} | = d(x, 0)


30 5. Codigos Lineares

onde d representa a metrica de Hamming.

Definicao 5.3. O peso de um codigo linear C definido como inteiro

(C) := min{(x) : x C {0}.

Proposicao 5.4. Seja C K n um codigo linear com distancia mnima d. Temos que

(i) x, y K n , d(x, y) = (x y).

(ii) d = (C).

Devido o item ii da Proposicao 5.4, a distancia mnima de um codigo linear C sera


tambem chamada de peso do codigo C. Em algebra linear, existem duas maneiras praticas
de descrever subespacos vetoriais: uma como imagem, e outra como nucleo de trans-
formacoes lineares. Veremos como se obtem a representacao de C como imagem. Esco-
lhemos uma base v1 , v2 , . . . , v de C e considere a aplicacao linear

T : K Kn
x = (x1 , x2 , . . . , x ) 7 (x1 v1 + x2 v2 + + x v )

Entao T e uma transformacao linear injetora, cuja imagem e C.


Portanto, ter um codigo C K n de dimensao e equivalente a ter uma transformacao
linear injetora

T : K Kn

com C = Im(T ).
Ele e denominado de forma parametrica, pois os elementos de C sao parametrizados
pelos elementos x de K . Agora veremos como representar como nucleo da transformacao
linear. Tome um subespaco C 0 de K n complementar de C, isto e,

C C 0 = K n,

e considere a aplicacao linear

H : C C 0 K nk
u v 7 v
5.1. Equivalencia de Codigos 31

Entao o nucleo e C. Para saber se c C, basta verificar se Hv = 0, o que tem custo


computacional bem pequeno.

Exemplo 5.5. Considere o corpo finito F3 = {0, 1, 2} = Z3 com tres elementos e seja
C F43 , o codigo gerado pelos vetores v1 = 1011 e v2 = 0112. Esse codigo possui
9(= q = 32 ) elementos, por ter dimensao 2 sobre um corpo de 3 elementos. Uma
representacao parametrica e dada por

x1 v1 + x2 v2

O codigo C e o nucleo da transformacao linear

H: F43 F23
x = (x1 , . . . , x4 ) 7 (2x1 + 2x2 + x3 , 2x1 + x2 + x4 )

5.1 Equivalencia de Codigos


A nocao de equivalencia de codigos usa o conceito de isometria.

Definicao 5.6. Sejam A um alfabeto e n um numero natural. Diremos que uma funcao
F : An An e uma isometria de An se ela preserva a distancia de Hamming. Em
smbolos:

d(F (x), F (y)) = d(x, y) x, y An .

Algumas propriedades conhecidas da isometria sao:

Proposicao 5.7.

1. Toda isometria e uma bijecao.

2. A funcao identidade e uma isometria.

3. Se F e uma isometria, entao F 1 e uma isometria.

4. Se F e G sao isometrias, entao F G e uma isometria.

Dado a permutacao de {1, . . . , n}, denotemos T (a1 , . . . , an ) = (a(1) , . . . , a(n) ). Se


f : A = A e bijecao, definimos Tfi (a1 , . . . , an ) = (a1 , . . . , f (ai ), . . . , an ).

Definicao 5.8. Dados dois codigos C e C 0 em An , diremos que C 0 e equivalente a C se


existir uma isometria F de An tal que F (C) = C 0 .

O estudo mais aprofundado sobre a isometria costuma ser feita em livros sobre espacos
metricos.
32 5. Codigos Lineares

Teorema 5.9. Seja F : An An uma isometria, entao existem uma permutacao de


{1, . . . , n} e bijecoes fi de A, i = 1, . . . , n, tais que

F = T Tf11 Tfnn .

Corolario 5.10. Sejam C e C 0 dois codigos em An . Temos que C e C 0 sao equivalentes


se, e somente se, existem uma permutacao de {1, . . . , n} e bijecoes f1 , . . . , fn de A tais
que

C 0 = {(f(1) (x(1) ), . . . , fn (x(n) )) : (x1 , . . . , xn ) C}.

Definicao 5.11. Seja K um corpo finito. Dois codigos lineares C e C 0 sao linearmente
equivalentes se existir uma isometria linear T : K n K n tal que T (C) = C 0 .

Pelo Teorema 5.9, segue que dois codigos lineares C e C 0 em K n sao linearmente equi-
valentes se, e somente se, existir uma permutacao de {1, . . . , n} e elementos c1 , . . . , cn
de K\{0} tais que

C 0 = {(c1 x(1) , . . . , cn x(n) ) : (x1 , . . . , xn ) C}.

Logo, dois codigos sao linearmente equivalentes se, e somente se, cada um deles pode
ser obtido do outro por uma sequencia de operacoes do tipo:

i. Multiplicacao dos elementos numa dada posicao por um escalar nao nulo.

ii. Permutacao das posicoes das palavras do codigo, por uma permutacao de
{1, 2, . . . , n} aplicado em todas as palavras do codigo.

5.2 Matriz Geradora de um Codigo


Sejam K um corpo finito com q elementos e C K n um codigo linear. Denominamos
parametros do codigo linear C a terna de inteiros (n, , d), onde e a dimensao de C
sobre K, e d representa a distancia mnima de C (que e igual ao peso (C)). O numero
de elementos M de C e igual a q . Seja = {v1 , . . . , v } uma base ordenada de C e
considere a matriz G, cujas linhas sao os vetores vi = (vi1 , . . . , vin ), i = 1, . . . , , isto e,

v1 v11 v12 v1n
. .. .. . . ..
G= .
. = . . . .

vk vk1 vk2 vkn

A matriz G e chamada de matriz geradora de C associada a base . Considere a trans-


formacao linear definida por
5.2. Matriz Geradora de um Codigo 33

T : K Kn
x 7 (x1 v1 + + x v ),

Entao T (K ) = C. Podemos, entao, considerar K como sendo o codigo da fonte, C, o


codigo de canal e a transformacao T , uma codificacao.
Duas matrizes geradoras de um mesmo codigo C podem ser obtidas uma da outra por
uma sequencia de operacoes do tipo:

(L1) Permutacao de duas linhas.

(L2) Multiplicacao de uma linha por um escalar nao nulo.

(L3) Adicao de um multiplo escalar de uma linha a outra.

Que sao as operacoes elementares usadas no processo de escalonamento.


Tambem podemos construir codigos a partir de matrizes geradoras G. Para isso, tome
uma matriz cujas linhas sao linearmente independentes e defina um codigo como sendo a
imagem da transformacao linear

T : K Kn
x 7 Gt x
Exemplo 5.12. Tome K = F2 = Z2 e seja

1 0 1 0 1
G = 1 1 0 1 0 .

1 1 1 1 1

Considerando a transformacao linear


T : F32 F52
x 7 Gt x
e seja C = Im(T ), o codigo associado, por exemplo,a palavra 101 do codigo da fonte
e codificada como 01010. Suponhamos agora que seja dado o codigo de canal 10101, e
que gostaramos de decodifica-la, isto e, achar x de F32 tal que 10101 = T (x). Entao
precisamos resolver o sistema:

1

x1 0


T
G x2 =
1

x3 0


1
34 5. Codigos Lineares

(x1 , x2 , x3 )G = (10101),

ou seja,


x1 + x2 + x3 = 1

x2 + x3 = 0



x1 + x3 = 1

x2 + x3 = 0





x1 + x3 = 1,

Logo x1 = 1, x2 = 0 e x3 = 0.

Observe que efetuando operacoes sobre as linhas de G do tipo L1, L2 e L3, podemos
converter G na forma

1 0 0 0 0
G0 = 0 1 0 1 0 .

0 0 1 0 1

que e a forma padrao. Nesta forma, temos que G0T x = (x1 , x2 , x3 , x2 , x3 )

xG0 = (x1 x2 x3 x2 x3 )

Assim, o vetor x e apenas as tres primeiras componentes do vetor a ser decodificado.


Logo, a palavra (10101) e facilmente decodificada como (101).

Definicao 5.13. Diremos que uma matriz geradora G de um codigo C esta na forma
padrao se tivermos

G = (Id |A),

onde Id e a matriz e A, uma matriz (n ).

Dado um codigo C, nem sempre e possvel obter uma matriz geradora de C na forma
padrao.

Exemplo 5.14. O codigo em F52 com matriz geradora


!
0 0 1 0 1
0 0 0 1 1

nao podera ter uma matriz geradora na forma padrao.


5.3. Codigos Duais 35

Mas se efetuar tambem as permutacoes nas colunas, podemos obter a matriz


!
1 0 0 0 1
,
0 1 0 0 1

que e a matriz geradora na forma padrao de novo codigo C 0 equivalente a C.

De modo geral, alem das operacoes nas linhas, efetuamos tambem sequencias de
operacoes sobre as colunas do tipo:

(C1) permutacao de duas colunas,

(C2) multiplicacao de uma coluna por um escalar nao nulo,

obtemos uma matriz G0 de um codigo C 0 equivalente a C. Com isso, temos o seguinte


resultado:

Teorema 5.15. Dado um codigo C, existe um codigo equivalente C 0 com matriz geradora
na forma padrao.

5.3 Codigos Duais


Seja C K n um codigo linear, definimos o codigo dual como complemento ortogonal.

C = {v K n : hu, vi = 0, u C}.

As propriedades do complemento ortogonal costuma ser tratado no texto de algebra


linear.

Lema 5.16. Se C K n e um codigo linear, com matriz geradora G, entao

i) C e um subespaco vetorial de K n ;

ii) x C Gx = 0.

Proposicao 5.17. Seja C K n um codigo de dimensao com matriz geradora na forma


G = (Id |A). Entao

i) dimC = n ;

ii) H = (A|Idn ) e uma matriz geradora de C .

Lema 5.18. Seja C um codigo linear em K n . Para toda permutacao de {1, . . . , n},
para todo c K e para todo j = 1, . . . , n temos que
36 5. Codigos Lineares

i) (T (C)) = T (C )

ii) (Tcj (C)) = Tcj1 (C )

Proposicao 5.19. Sejam C e D dois codigos lineares em K n que sao linearmente equi-
valentes, entao C e D sao linearmente equivalentes.

Lema 5.20. Suponha que C seja um codigo de dimensao em K n com matriz geradora
G. Uma matriz H de ordem (n ) n, com coeficientes em K e com linhas linearmente
independentes, e uma matriz geradora de C se, e somente se,

GH t = 0.

Proposicao 5.21. Seja C um codigo linear e suponhamos que H seja uma matriz gera-
dora de C . Temos entao que

v C Hv = 0.

Isto significa que H e matriz teste de paridade.

Exemplo 5.22. Seja dado o codigo C sobre F2 com matriz geradora



1 0 0 1 1 1
G = 0 1 0 0 1 1 .

0 0 1 0 1 0

Como G esta na forma padrao, podemos usar a Proposicao 5.17 (ii) e ter a matriz teste
de paridade

1 0 0 1 0 0
H = 1 1 1 0 1 0 .

1 1 0 0 0 1

Dados v = (100111) e v 0 = (010101), como



0 1
0
6 0,
Hv = 0 e Hv = 1 =

0 0

temos que v C e v 0
/ C.

A matriz teste de paridade de um codigo contem, de maneira bastante simples, in-


formacoes sobre o valor do peso do codigo.

Teorema 5.23. Seja H a matriz teste de paridade de um codigo C. Entao o peso de C e


igual a s se, e somente se, quaisquer s 1 colunas de H sao linearmente independentes.
5.4. Codigos de Reed-Muller 37

Corolario 5.24. (Cota de Singleton) Os parametros (n, , d) de um codigo linear satis-


fazem a desigualdade

d n + 1.

Um codigo sera chamado de MDS (Maximum Distance Separable) se valer a igualdade


d = n + 1.

5.4 Codigos de Reed-Muller


Relembrando que os codigos de Reed-Muller foi usado pela sonda espacial Mariner 9 para
transmitir fotos de Marte. Para ser transmitida, cada fotografia foi dividida em elementos
pictograficos, ou pixels. Foi sobreposta a fotografia uma grade de 700 832 pixels, e en
seguida associou-se a cada pixel um entre 64 tons de cinza, variando de brando (0) a preto
(63). Sabendo que 64 = 26 , usamos aritmetica binaria para representar cada uma dessas
tonalidades, onde o branco e 000000 e o preto e 111111. Podemos, entao, reescrever esses
64 numeros binarios como vetores de Z62 e codifica-los usando um codigo que corrija tantos
erros quanto possvel. O codigo escolhido para ser usado no Mariner 9 pertence a uma
grande famlia de codigos que sao mais facilmente definidos intuitivamente.

Definicao 5.25. Os codigos de Reed-Muller (de primeira ordem) Rn sao definidos indu-
tivamente por:

1 Para n = 0, R0 = Z2 .

2 Para n 1, Rn e o subespaco de Z2n


2 cuja base e formada por todos os vetores da forma

" # " #
u 0
e
u 1

onde u e o vetor da base em Rn1 , 0 e o vetor nulo de Z2n1


2 , e 1 e o vetor formado
2n1
por 1s em Z2 .

Usando a definicao acima, construiremos R1 e R2 , e verificaremos o tipo de vetores


que esses codigos contem. Uma base para R0 = Z2 e somente {1}, portanto, uma base
para R1 e
(" # " #)
1 0
,
1 1

que gera o codigo


Nao ha como obter mais nenhum outro vetor atraves da adicao e por isso
38 5. Codigos Lineares

(" # " # " # " #)


0 0 1 1
R1 = , , , = Z22
0 1 0 1

Realizando o mesmo procedimento obteramos a seguinte base para R2





1 0 0


1 1 0

, ,
1 0 1



1
1 1

e pela propriedade do fechamento para a adicao, e facil ver que os 8 = 23 vetores de


R2 sao



0 0 0 0 1 1 1 1


0

0 1 1 0 0 1 1
R2 = ,
, , , , , ,
0 1 0 1 1 0 0 1





0
1 1 0 0 1 0 1

Em R1 todo vetor de codigo tem peso 1, exceto 0 e 1;e, em R2 todo vetor de codigo
tem peso 2, exceto 0 e 1. Essa e uma propriedade geral dos codigos de Reed-Muller.
Observacao 5.26. O complemento de um vetor x de Zn2 e o vetor de x obtido trocando-se
todos os zeros por 1s, e vice-versa.

Exemplo 5.27.


1 0

1
x = 0
x=

0


1

1 0

Observe que x = x + 1, onde 1 e o vetor formado inteiramente de 1s.

Teorema 5.28. Para n 1, o codigo de Reed-Muller Rn e um codigo linear (2n , n + 1)


no qual todo vetor de codigo, exceto o 0 e o 1, tem peso 2n1 .

Demonstracao. Para demonstrar esse teorema vamos utilizar inducao em n. Para n = 1


temos que R1 = Z22 e um codigo linear (2, 2) = (21 , 1+1) para o qual todo vetor de codigo,
exceto o 0 e o 1, tem peso 1 = 211 . Vamos assumir que o resultado e valido para n = k,
ou seja, que Rk e um codigo linear (2k , k + 1) no qual todo vetor de codigo, exceto o 0 e
o 1, tem peso 2k1 . Agora, consideremos Rk=k+1 . " #
u
Por construcao, Rk+1 tem uma base formada pelos vetores da forma , onde u e
u
" #
0
um elemento de Rk , juntamente com o vetor . Pela hipotese de inducao, os vetores
1
5.5. Decodificacao de Codigos de Reed-Muller 39

2k+1
u, 0 e 1 estao em Z2k2 ; assim os vetores da base para Rk+1 estao em Z"2 .# Alem disso,
u
a dimensao de Rk e k + 1, pprtanto, existem k + 1 vetores da forma e mais um,
u
" #
0
. Segue que a dimensao de Rk+1 e k + 2.
1
Finalmente observemos que Rk+1 e um codigo linear (2k+1 , k + 2). Para a afirmacao
final, observe que os vetores de Rk+1 sao obtidos por combinacao linear dos vetores da
base, e, portanto, sao da forma
" # " # " #
u1 uk+1 0
v = c1 + . . . +ck+1 + ck+2
u1 uk+1 1

onde {u1 , . . . , uk+1 } com ci Z2 .


Suponha que v 6= 0, 1 e seja u = c1 u1 + . . . + ck uk+1 . Dessa forma, u e um elemento
de Rk . Se ck+2 =0, entao u 6= 0, 1, e, portanto, pela hipotese de inducao, u tem peso 2k1 .
Mas entao v tem peso 2 2k1 = 2k . Se ck+2 = 1, entao v tem a forma
" # " # " # " #
u 0 u u
v= + = =
u 1 u+1 u

onde u e um elemento de Rk . Como

w(u) = 2k - w(u)

temos que

w(v) = w(u) + w (u) = 2k

como queramos demonstrar. Logo, o teorema e verdadeiro para todo n 1.

Sabemos da introducao desta secao que o Mariner 9 requeria um codigo com 64 = 26


vetores. Pelo teorema 5.28, o codigo de Reed-Muller R5 tem dimensao 6 sobre Z2 .

5.5 Decodificacao de Codigos de Reed-Muller


Definicao 5.29. Uma matriz Hn de ordem n e uma matriz n n formada pelos valores
1 e 1, cujas linhas tomadas duas a duas sao ortogonais.

Isto significa que o produto interno sobre os numeros reais de linhas distintas e 0.
No caso de dimensao
" ser potencias
# de dois, podemos obter recursivamente por
Hn Hn
H1 = [1] e H2n =
Hn Hn

Exemplo 5.30. Matrizes de Hadamard de ordem 1, 2 e 4 sao dadas por


40 5. Codigos Lineares


" # 1 1 1 1

1 1 1 -1 1 -1
H1 = [1] H2 = H4 =
1 -1
1 1 -1 -1

1 -1 -1 1

Uma definicao equivalente e Hn e uma matriz n n com a entrada dos inteiros 1 e 1


tais que

Hn HnT = nIn

Definicao 5.31. A ordenacao adequada Pr de r-uplas e a ordenacao definida recursiva-


mente pelas regras

(1) P1 = [0, 1]

(2) Se Pi = [b1 , b2 , . . . , b2i ] entao Pi+1 = [b1 0, b2 0, . . . , b2i 0, b1 1, b2 1, . . . , b2i 1], para 1 i
r 1.

Se inverter a ordem dos digitos, a ordenacao acima e a ordem crescente dos numeros
binarios associados.

Exemplo 5.32.
P1 = [0, 1]
P2 = [00, 10, 01, 11]
P3 = [000, 100, 010, 110, 001, 101, 011, 111]

Note que, se inverter a ordem dos dgitos, o P3 corresponde a


[000, 001, 010, 011, 100, 101, 110, 111] que e ordem crescente dos numeros binarios
associados.
Agora seja n = 2r , e sejam u0 , u1 , . . . , un1 os r-uplas binarias numa ordem correta.
Construcao da matriz geradora de codigo
Seja Hr , a matriz de verificacao de paridade de Hamming(que nao pode ser confundida
com matriz de Hadamard). Considere [Hr 0], onde 0 e uma matriz coluna nula. Br e uma
matriz ordenada de [Hr 0] segundo a ordenacao
" da definicao 5.31. Entao a matriz geradora
#
1
de codigo de Reed-Muller R(1, r) e G =
Br
ri
Seja r o codigo recebido. Construmos o vetor R tal que Ri = (1) =
1, se r = 0
i
1, se r = 1
i

Agora, obtemos o vetor R = HR. Seja k, a coordenada do maior valor absoluto de


R e considere o vetor u da k-esima coordenada de Br (ordenada). O codigo de canal e
P
c = ui vi onde vi e a i-esima linha de Br .
5.5. Decodificacao de Codigos de Reed-Muller 41

Exemplo 5.33. R(1, 3). Matriz geradora do codigo de Hamming sera H3 =



1 0 1 1 1 0 0 1 0 1 1 1 0 0 0
1 1 0 1 0 1 0 e [H3 0] = 1 1 0 1 0 1 0 0.

0 1 1 1 0 0 1 0 1 1 1 0 0 1 0

0 1 0 1 0 1 0 1
Reordenando, temos B3 = 0 0 1 1 0 0 1 1 e consequentemente, a matriz

0 0 0 0 1 1 1 1

1 1 1 1 1 1 1 1

0 1 0 1 0 1 0 1
geradora do codigo sera B3 =

0 0 1 1 0 0 1 1

0 0 0 0 1 1 1 1
Suponha
que foi recebido r = (01110110). Amatriz de Hadamard de ordem 8 e
1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1


1 1 1 1 1 1 1 1
H8 =
1 1
1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

Se r = (01110110) entao R = (1, 1, 1, 1, 1, 1, 1, 1), calculamos R = HR. No


nosso exemplo, R = (2, 2, 2, 6, 2, 2, 2, 2).
Encontre a coordenada que tem o maior
valor absoluto. No exemplo, e k = 4, pois R4 = 6.

Considere
o vetor u como a k-esima coluna de Br . Nosso exemplo, sera a quarta coluna
1
que e u = 1

0
P
c= ui vi onde vi e a i-esima linha de G.
Entao c = 1v1 + 1v2 + 0v3 = [01010101] + [00110011] = [01100110] = (01100110).
Temos que o codigo da fonte e u Z42 com GT u = c. Logo, u = (0, 1, 1, 0).
43

Referencias Bibliograficas

[1] GARCIA, A. e LEQUAIN, Y. Elementos de Algebra. IMPA, Rio de Janeiro, 2006.


326p.

[2] GONCALVES, A. Introducao a Algebra. IMPA, Rio de Janeiro, 1979. 194p.

[3] HEFEZ, A.; VILLELA, M.L.T. Codigos Corretores de Erros. Serie de Computacao
e Matematica. Rio de janeiro: IMPA, 2002. 217p.

[4] LOURENCO, M. L.; COELHO, F. U.Um curso de Algebra Linear. EDUSP, Sao
Paulo, 2005. 261p.

[5] MILIES, C. M. A Matematica dos codigos de barras: detectando erros. RPM 65.
p.38-42.

[6] POOLE, D. Algebra Linear. Sao Paulo: Pioneira Thomson Learning, 2004. 690p.

[7] VANSTONE, S. A. e OORSCHOT, P. C.van. An Introduction to Error Correcting


Codes with Applications. Kluwer Academic Publishers, 1989. 289p.