Вы находитесь на странице: 1из 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 L ucia 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 L ucia 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 zeram lutar ate
o nal apesar de todas as diculdades 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 m 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 monograa 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
vericacao. Posteriormente denimos 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 nitos e sua construcao. Foram estudados os Codigos
Lineares (Codigos Duais e Codigos de Reed-Muller), Codigos Cclicos, decodicacao destes
e nalmente trabalhamos com algumas aplicacoes de codigos. Neste trabalho foi possvel
identicar 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 Criptograa. O enfoque deste projeto nao e criptograa,
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 R
n
, mas vetores
em F
n
onde F e um corpo nito. Assim, terao um n umero nito 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 Z
6
2
. 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 recodicado
atraves de uma funcao injetora : Z
6
2
= Z
32
2
para acrescentar o codigo de canal
que permite detectar e corrigir ate sete erros. O dado recebido era corrigido e decodicado
atraves de uma transformacao
(1)
, obtendo-se o elemento de Z
6
2
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 J upiter. Cada
elemento de imagem de uma cor foi representado por uma das 2
12
= 4096 tonalidades. O
codicador da fonte usava 12 bits binarios e o codicador 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, classicacao e construcao de corpos nitos, espaco vetorial, etc.
O captulo 2 trata dos codigos binarios e como os vetores de codigos sao determinados,
incluindo o processo de codicacao e de decodicacao 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, Decodicacao, Algoritmo da decodicacao, 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 Decodicacao de Codigos de Reed-Muller.
No captulo 6 e feito o estudo dos Codigos cclicos e sua decodicacao.
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 Decodicacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.5 Algoritmo da Decodicacao . . . . . . . . . . . . . . . . . . . . . . . . . . 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 Decodicacao de Codigos de Reed-Muller . . . . . . . . . . . . . . . . . . . 39
Referencias Bibliogracas 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.
Denicao 1.1. Um anel comutativo e um conjunto A munido de duas operacoes,
+ : A A A
(a, b) a +b
e
: A A A
(a, b) 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 Z
m
= 0, 1, 2, . . . , m1, , m 0
possui as operacoes + e denidas por:
(i) a +b = a +b,
(ii) a b = a b
No exemplo 1.2, o conjunto Z
m
= 0, 1, 2, . . . , m1, 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 Z
n
m
. 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 n umeros
m ultiplos de 3 sao equivalentes a 0; os n umeros que sao iguais a 1 mais um m ultiplo
de 3 e equivalente a 1; e 2 e equivalente a qualquer n umero que seja igual a 2 mais um
m ultiplo de 3.

E como se fosse uma reta numerada enrolada em volta de um crculo como
na Figura 1.3.
Exemplo 1.3. Em Z
5
3
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
u v = 2 1 + 2 2 + 0 2 + 1 2 + 2 1 = 2 + 1 + 0 + 2 + 2 = 1
Os vetores de codigo em Z
5
3
sao chamados de vetores ternarios de comprimento 5.
Denicao 1.4. Um anel A sera chamado de domnio de integridade, se possuir a seguinte
propriedade:
a, b A, a ,= 0 e b ,= 0 a.b ,= 0.
Como [2] nao e invertvel, temos que Z
4
nao e um corpo. Como [2] [2] = [4] = [0],
temos que esse anel nao e um domnio de integridade.
Denicao 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.
Denicao 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 Z
3
=
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 Z
3
+ 0 1 2
0 0 1 2
1 1 2 0
2 2 0 1
e
0 1 2
0 0 0 0
1 0 1 2
2 0 2 1
Como os elementos nao nulos 1 e 2 sao invertveis, com inversos respectivamente 1 e
2, temos que Z
3
e um corpo.
Teorema 1.7. O anel Z
m
e um corpo se, e somente se, m e um n umero primo.
Exemplo 1.8. Seja b = (b
1
, b
2
, , b
n
) um vetor de Z
n
3
. Incluindo um dgito de checagem
ao vetor de codigo, vamos ter um codigo com n + 1 termos e pode ser expresso como
v = (b
1
, b
2
, , b
n
, d) onde d e um dgito de checagem de forma que 1 v = 0 e v e um
vetor de codigo em Z
n+1
3
. O dgito de checagem satisfaz
4 1. Conceitos Preliminares
b
1
+b
2
+. . . +b
n
+d = 0 em Z
3
Denicao 1.9. Um conjunto nao vazio V e um espaco vetorial sobre (um corpo) K se
em seus elementos, denominados vetores, estiverem denidas 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 .
Denicao 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 Z
2
e corpo, Z
n
2
e um espaco vetorial.
Dado um corpo F, V = F
n
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 Z
3
e entao o vetor
c odigo 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 codicados usando sequencia de 0s e 1s
que podem ser associados ao vetor binario v Z
n
2
. Por esta razao, o corpo Z
2
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 vericadas:
(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).
Denicao 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 0 1
1 1 0
e
0 1
0 0 0
1 0 1
Com tais operacoes, nosso conjunto de escalares 0, 1 e o conjunto dos inteiros modulo
2 que denotaremos por Z
2
.
Exemplo 2.1. Soma em Z
2
1 + 1 + 0 + 1 = 1 e 1 + 1 + 1 + 1 = 0
Regra de Paridade, ou seja se n umero de 1s for par, a soma e 0. Se for mpar, a soma
sera 1.
O vetor do espaco vetorial Z
n
2
(sobre o escalar Z
2
) e o conjunto das n-uplas de 0s e 1s.
Os vetores em Z
n
2
sao chamados de vetores binarios de comprimento n.
Exemplo 2.2. Os vetores em Z
2
2
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 Z
2
, 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 codicando cada palavrada mensagem por
um vetor bin ario. Ou seja, converte-se o que se quer transmitir numa sequencia de bits
que compoe o vetor binario.
Denicao 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 codicacao, e o processo inverso e chamado decodicacao.
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 bra 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 eciente 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 nal da mensagem.
Esse bit e a soma modulo 2 dos bits da mensagem obtendo-se assim a palavra de codigo
c = [c
0
, c
1
, c
0
+c
1
]
Logo, somando-se os dgitos temos:
Soma dos dgitos = [n umero de bits ativo] 1 =
_
0 se for par
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 decodicacao 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 gura 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 n umero
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 codicar e transmitir uma mensagem que consiste em uma das
palavras up, down, left, right. Sao quatro palavras, mas acrescentando bit de paridade no
nal, teremos quatro vetores de Z
3
2
, como na Tabela 3.2.
Tabela 3.2: Comandos codicados como elementos de Z
3
2
Mensagem Up Down Left Right
Codigo (0,0,0) (0,1,1) (1,0,1) (1,1,0)
Decodicar 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 n umero total de 1s, seja um
n umero par.
Exemplo 3.2. Se a mensagem a ser enviada for o vetor binario (1, 0, 0, 1, 0, 1), que possui
um n umero mpar de 1s, o dgito de checagem sera 1, para que o n umero 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 = (b
1
, b
2
, . . . , b
n
) em Z
n
k
. O vetor codigo de checagem de
paridade e v = (b
1
, b
2
, . . . , b
n
, d) em Z
n+1
k
, onde o dgito de checagem d e escolhido de
maneira que
b
1
+b
2
+. . . +b
n
+d = 0 em Z
k
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 ,= 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 nito Z
k+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 identicacao 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 reetida.
Tambem vem com os n umeros 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
identicar 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 identicado. O UPC e um codigo associado aos
c odigos 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 = (v
1
, v
2
, . . . , v
11
, d) Z
12
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 Z
10
, 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(v
1
+v
3
+v
5
+v
7
+v
9
+v
11
) + (v
2
+v
4
+v
6
+v
8
+v
10
) +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 m ultiplo de 10.
Exemplo 3.3. Seja o UPC como mostrado na Figura 3.3. Vamos vericar se o dgito de
checagem realmente e 6, considerando que os calculos sao feitos em Z
10
.
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:
c v = 3 0 + 1 7 + 3 4 + 1 9 + 3 2 + 1 7 + 3 0 + 1 2 + 3 0 + 1 0 + 3 4 + 1 d
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 Z
10
, 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 Z
10
obtemos:
c v

= 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

= 4 ,= 0 em Z
10
, entao conclumos que houve algum erro.
Agora suponhamos que um determinado produto esta identicado no sistema EAN-13,
por uma dada sequencia de dgitos v = (v
1
, v
2
, . . . , v
12
, d).
Os primeiros doze dgitos identicam o pas de origem, o fabricante e o produto es-
pecco, e sao determinados a cargo de uma autoridade classicadora em cada pas. Veja
a gura a seguir.
Figura 3.3: Explicacao do codigo de barras utilizado em produtos
O decimo terceiro dgito, chamado de dgito de vericacao utilizado para a de-
teccao de erros, e sera denotado por d. Denotaremos essa sequencia como um vetor
= (v
1
, v
2
, . . . , v
12
, 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 n umero de dgitos do vetor que
representa o artigo.
Por exemplo, no caso do codigo da gura que segue, os n umeros 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 vericacao 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 m ultiplo de 10. Se fosse qualquer
outro n umero de 0 a 9, nao resultaria no m ultiplo 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 m ultiplo de 10.
Veremos a funcao do vetor de pesos? Se a escolha do dgito de vericacao fosse feita
para a soma das coordenadas de (v
1
, v
2
, . . . , v
12
, d) ser m ultiplo 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 n umeros 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 v
i
e v
i+1
nao e detectada no EAN-13, se e somente se
[v
i
v
i+1
[ = 5 (se v
i
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-
sicacao de livros.

E projetado para detectar mais tipos de erros que o UPC. O vetor
de codigo e um vetor em Z
10
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 Z
11
, ou seja, de que o produto escalar do vetor de codigo
pelo vetor de checagem seja m ultiplo de 11. Sendo o vetor b = (v
1
, v
2
, v
3
, . . . , v
9
, d), temos:
c.b = 10.v
1
+ 9.v
2
+ 8.v
3
+ 7.v
4
+ 6.v
5
+ 5.v
6
+ 4.v
7
+ 3.v
8
+ 2.v
9
+d
onde d e o dgito de checagem. Ou seja, d deve ser escolhido de modo que c.b seja
m ultiplo 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 n umero igual a 8524401699.
O dgito de vericacao nal 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 m ultiplo de 11.
Segundo Milies [5], autores como D.F. Beckley e J. Verhoe investigaram os erros
cometidos por operadores humanos. Os erros num unico dgito e as transposicoes sao os
mais frequentes, atingindo cerca de 80%. A codicacao 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 codicados como elementos de Z
2
2
, como se
segue:
Leste 00 Norte 10
Oeste 01 Sul 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 codicacao para permitir detectar e corrigir erros. Entao vamos introduzir
mais dgitos aos codigos que representam os comandos, como segue:
00 00000
01 01011
10 10110
11 11101
Na recodicacao acima, as duas primeiras posicoes sao o codigo da fonte e nas tres
posicoes restantes sao redundancias introduzidas. Este novo codigo recodicado 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 pr oximo
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 exemplica 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 decodicado em codigo da fonte. Neste projeto serao estudados os
c odigos, 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 Z
k
2
para algum k, e
iremos codic a-lo utilizando uma transformacao por meio da matriz
T : Z
k
2
Z
n
2
para algum n > k
T(x) sera um vetor de codigo. Um codigo pode ser descrito atraves de uma trans-
formacao envolvendo matriz.
Exemplo 4.1. Seja G =
_
1 1 1
_
e denimos T : Z
2
Z
3
2
por T(x) = G
t
x
Onde elementos de Z
2
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 vericacoes de
paridade. Pela G, e necessario que o vetor recebido c =
_

_
c
1
c
2
c
3
_

_
satisfaca c
1
= c
2
= c
3
Em Z
2
, temos
4. Codigos Corretores de Erros 19
_
_
_
c
1
= c
2
c
1
= c
3
=
_
_
_
c
1
+c
2
= 0
c
1
+c
3
= 0
Se P =
_
1 1 0
1 0 1
_
, entao e equivalente a P c = 0.
A matriz P e chamada de matriz de vericacao de paridade para o codigo e p c ,= 0
implica que houve erros.
Observe que PG
t
=
_
0
0
_
.
Para entender como funciona, vamos supor que enviamos uma mensagem codicada
como (1, 1, 1) =
_

_
1
1
1
_

_
Suponha que ocorreu um erro na transmissao e recebemos c

= (1, 0, 1) Logo,
P c =
_
1 1 0
1 0 1
_

_

_
1
0
1
_

_
=
_
1 + 0 1 + 0 1
1 + 0 0 + 1 1
_
=
_
1
0
_
,= 0.
Logo, c nao pode ser um vetor de codigo. Mas onde estara o erro? Podemos vericar
que P c =
_
1
0
_
que e a segunda coluna da matriz de vericacao de paridade P. Isso
signica que o erro esta na segunda coordenada de c, o que permite corrigir o erro,
invertendo 0 para 1.
Denicao 4.2. Se k < n. Um codigo binario (n, k) dado como T : Z
k
2
Z
n
2
e
dito de comprimento n e dimensao k. Uma matriz G =
_
I
k
A
_
kn
, onde A e uma
matriz k (n = k) sobre Z
2
e dito matriz geradora padrao para o codigo. Uma matriz
P =
_
B I
nk
_
e dito matriz de vericacao de paridade padrao.
G e P sao associados ao codigo T : Z
2
k
Z
2
n
quando Tx = G
t
x e PG
t
x = 0 x,
ou seja, PG
t
= 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 vericacao de
paridade padrao associada a P.
Teorema 4.3. Sejam G =
_
I
k
A
_
e P =
_
B I
nk
_
. P sera a matriz de vericacao
de paridade associada a matriz geradora padrao G se, e somente se, A
t
= 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 a
t
i
a i-esima linha de uma matriz A e b
i
, o i-esima coluna de B.
Seja G uma matriz geradora padrao e P uma matriz de vericacao de paridade. Vamos
assumir que as duas matrizes correspondem ao mesmo codigo binario. Portanto, para
todo x em Z
k
2
, PG x = 0. Usando a multiplicacao por blocos temos:
20 4. Codigos Corretores de Erros
PG
t
x =
_
B I
_
_
I
A
t
_
x = 0 para todo x em Z
k
2
Ou seja,
_
B I
_
_
I
A
t
_
x = (BI + IA
t
) x = 0
Para todo x em Z
k
2
, temos
Bx +A
t
x = 0 = Bx = A
t
x = A
t
x
ou
B x = A x
Se agora tomarmos x = e
i
, o i-esimo vetor de base canonica de Z
k
2
, vemos que
b
i
= B e
i
= A
t
e
i
= a
t
i
para todo i
Portanto, B=A
t
.
Reciprocamente, se B = A
t
, PG
t
=
_
B I
_
_
I
A
t
_
= B + A
t
= 0 em Z
2
. Agora,
veremos que se P
i
forem nao nulas e distintas, entao e matriz de paridade para corretor
de erros, precisamos vericar que P detecta posicao de erros. Seja x, a mensagem em Z
k
2
e c = Gx. Entao teramos Pc = 0. Se ocorrer um erro na i-esima posicao de c, o codigo
recebido seria c

= c +ei. Entao temos Pc

= Pc +Pe
i
= 0 +P
i
que e a i-esima coluna de
P. Como todas as coluna sde P sao distintas (e nao nulas) podemos identicar a posicao
do erro.
Exemplo 4.4. Veremos um codigo corretor de erros que usa tres equacoes para vericacao
de paridade, que formam as linhas de P. Entao temos nk = 3 e logo k = n3. Os vetores
da mensagem pertencem a Z
k
2
, 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
n ao nulas. O maximo ocorre quando consistem em todos os 2
3
1 = 7 vetores nao nulos
de Z
nk
2
= Z
3
2
. Uma destas opcoes e
P =
_

_
1 1 0 1 1 0 0
1 0 1 1 0 1 0
0 1 1 1 0 0 1
_

_
Isso signica que
A =
_

_
1 1 0 1
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
G =
_

_
1 0 0 0 1 1 0
0 1 0 0 1 0 1
0 0 1 0 0 1 1
0 0 0 1 1 1 1
_

_
47
Para exemplicar como a matriz geradora funciona, vamos considerar x = (0, 1, 0, 1) e
codicar como
c = G x
t
= (0, 1, 0, 1, 0, 1, 0)
Se esse vetor for recebido, sera considerado correto, ja que Pc = 0. Agora, se for
recebido c =
_
0 1 1 1 0 1 0
_
T
, entao
P c

=
_

_
1 1 0 1 1 0 0
1 0 1 1 0 1 0
0 1 1 1 0 0 1
_

_

_
0 1 1 1 0 1 0
_
t
=
_
0 1 1
_
t
Como Pc

,= 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 c

. 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 decodicar c e obtemos o vetor original
x =
_
0 1 0 1
_
T
.
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 = 2
nk
1.
4.1 Matriz geradora e de teste de paridade no Matlab
Vamos determinar a matriz geradora padrao (G) e a matriz de vericacao 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) = (2
r
1, 2
r
1r). A funcao
hammgen retorna, alem das matrizes H e G denidas neste caso como G =
_
A
I
k
_
e
H =
_
I
nk
A
T
_
, tambem os valores de n e k.
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 c odigo
(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 vericamos
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 nito que daqui em diante sera chamado de alfabeto. Um codigo
corretor de erros e um subconjunto proprio qualquer de A
n
. Para ter a nocao de proxi-
midade entre palavras (sequencia de alfabetos), veremos um modo de medir a distancia
entre palavras.
Denicao 4.5. Dados dois elementos u, v A
n
, a distancia de Hamming entre u e v e
denida como
d(u, v) = [i : u
i
= v
i
, 1 i n[.
Proposicao 4.6. Dados u, v, w A
n
, 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.
Denicao 4.7. Seja C um codigo. A distancia mnima de C e o n umero
24 4. Codigos Corretores de Erros
d = mind(u, v) : u ,= v com u, v C e u ,= v .
No exemplo do robo dado no incio deste captulo, se C e o codigo do robo, temos que
d = 3.
Denicao 4.8. Dado a A
n
e um n umero real t > 0, denimos o disco e a esfera de
centro em a e raio t como sendo
D(a, t) = u A
n
: d(u, a) t,
S(a, t) = u A
n
: d(u, a) = t.
respectivamente.
A denicao 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 denicao 4.8 e desigualdade triangular, temos:
Lema 4.9. Seja C um codigo com distancia mnima d. Se c e c

sao palavras distintas


de C, entao
D(c, ) D(c

, ) = .
Teorema 4.10. Seja C um codigo com distancia mnima d. Entao C pode corrigir ate
=
d1
2
| 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
c odigo, 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, vericamos que:
4.3. C odigos 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, verica-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 aciencia
do codigo. Os criterios para determinacao dos codigos de codicacao de canal sao:
(1) Dado o R, onde R e a medida da eciencia do codigo, maximizar d;
(2) Dada a d minimizar R.
Denicao 4.11. Seja C A
n
um codigo com distancia mnima d e seja =
d1
2
|. O
codigo C sera dito perfeito se
_
cC
D(c, ) = A
n
.
Um codigo C sobre um alfabeto A possui tres parametros fundamentais [n, M, d], que
sao, respectivamente, o seu comprimento (o n umero n corresponde ao espaco ambiente
A
n
onde C se encontra), o seu n umero de elementos e a sua distancia mnima.
4.3 Codigos de Hamming
Um codigo de Hamming de ordem m sobre F
2
= Z
2
e um codigo com matriz teste de
paridade H
m
de ordem m n, cujas colunas sao os elementos de F
2
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 = 2
m
1 e a
sua dimensao e = n m = 2
m
m 1. Como veremos no proximo captulo, podemos
converter a matriz geradora de vericacao de paridade na forma padrao. Considere a
matriz
H
3
=
_
_
_
1 0 1 1 1 0 0
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 vericacao de paridade) corres-
pondente a m = 3.
Proposicao 4.12. Todo codigo de Hammming e perfeito.
4.4 Decodicacao
A decodicacao e o procedimento de deteccao e correcao de erros num determinado codigo.
Dene-se o vetor erro e como sendo a diferenca entre o vetor recebido r e o vetor trans-
mitido c, isto e,
e = r c
Exemplo 4.13. Suponha que num codigo dado sobre F
2
, 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 n umero 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
He
t
= 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 Decodicacao 27
Denicao 4.16. Um vetor de peso mnimo numa classe lateral e chamado de elemento
lder dessa classe.
4.5 Algoritmo da Decodicacao
(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) denido sobre F
2
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, =
d1
2
| = 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 Z
3
2
. Podemos representar
os vetores de Z
3
2
como vertices de um cubo unitario (gura 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, c
0
= 000 e
c
1
= 111. O fato de d(C) = 3 corresponde ao fato de c
0
e c
1
estarem a tres unidades
(arestas) um do outro (gura 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 decodicar x como o vetor-codigo mais proximo. Em geral, nao
podemos desenhar guras de Z
n
2
.
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
decodicado como o vetor correspondente ao centro daquela esfera (veja a gura 4.4).
Figura 4.4: Representacao esferica dos codigos corretores de erros
Esse processo e conhecido como decodicador pelo vizinho mais proximo. A gura
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.
Denicao 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 = F
2
, o codigo e o subespaco vetorial de F
5
2
, que e a imagem da
transformacao linear
T : F
2
2
F
5
2
(x
1
, x
2
) (x
1
, x
2
, x
1
, x
1
+x
2
, x
2
)
Pela denicao, todo codigo linear e um espaco vetorial de dimensao nita. Seja a
dimensao do codigo C e seja v
1
, v
2
, . . . , v

base C, portanto, todo elemento de C se


escreve de modo unico na forma

1
v
1
+
2
v
2
+ +

onde os
i
, i = 1, . . . , , sao elementos de K. Segue da que
M = [C[ = q

e, consequentemente,
dim
K
C = = log
q
q

= log
q
M.
Denicao 5.2. Dado x K
n
, dene-se o peso de x como sendo o n umero inteiro
(x) := [i : x
i
,= 0 [ = d(x, 0)
30 5. Codigos Lineares
onde d representa a metrica de Hamming.
Denicao 5.3. O peso de um codigo linear C denido 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 n ucleo de trans-
formacoes lineares. Veremos como se obtem a representacao de C como imagem. Esco-
lhemos uma base v
1
, v
2
, . . . , v

de C e considere a aplicacao linear


T : K

K
n
x = (x
1
, x
2
, . . . , x

) (x
1
v
1
+x
2
v
2
+ +x

)
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

K
n
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 n ucleo da transformacao


linear. Tome um subespaco C

de K
n
complementar de C, isto e,
C C

= K
n
,
e considere a aplicacao linear
H : C C

K
nk
u v v
5.1. Equivalencia de Codigos 31
Entao o n ucleo e C. Para saber se c C, basta vericar se Hv = 0, o que tem custo
computacional bem pequeno.
Exemplo 5.5. Considere o corpo nito F
3
= 0, 1, 2 = Z
3
com tres elementos e seja
C F
4
3
, o codigo gerado pelos vetores v
1
= 1011 e v
2
= 0112. Esse codigo possui
9(= q

= 3
2
) elementos, por ter dimensao 2 sobre um corpo de 3 elementos. Uma
representacao parametrica e dada por
x
1
v
1
+x
2
v
2
O codigo C e o n ucleo da transformacao linear
H : F
4
3
F
2
3
x = (x
1
, . . . , x
4
) (2x
1
+ 2x
2
+x
3
, 2x
1
+x
2
+x
4
)
5.1 Equivalencia de Codigos
A nocao de equivalencia de codigos usa o conceito de isometria.
Denicao 5.6. Sejam A um alfabeto e n um n umero natural. Diremos que uma funcao
F : A
n
A
n
e uma isometria de A
n
se ela preserva a distancia de Hamming. Em
smbolos:
d(F(x), F(y)) = d(x, y) x, y A
n
.
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

(a
1
, . . . , a
n
) = (a
(1)
, . . . , a
(n)
). Se
f : A = A e bijecao, denimos T
i
f
(a
1
, . . . , a
n
) = (a
1
, . . . , f(a
i
), . . . , a
n
).
Denicao 5.8. Dados dois codigos C e C

em A
n
, diremos que C

e equivalente a C se
existir uma isometria F de A
n
tal que F(C) = C

.
O estudo mais aprofundado sobre a isometria costuma ser feita em livros sobre espacos
metricos.
32 5. Codigos Lineares
Teorema 5.9. Seja F : A
n
A
n
uma isometria, entao existem uma permutacao de
1, . . . , n e bijecoes f
i
de A, i = 1, . . . , n, tais que
F = T

T
1
f
1
T
n
f
n
.
Corolario 5.10. Sejam C e C

dois codigos em A
n
. Temos que C e C

sao equivalentes
se, e somente se, existem uma permutacao de 1, . . . , n e bijecoes f
1
, . . . , f
n
de A tais
que
C

= (f
(1)
(x
(1)
), . . . , f

n
(x
(n)
)) : (x
1
, . . . , x
n
) C.
Denicao 5.11. Seja K um corpo nito. Dois codigos lineares C e C

sao linearmente
equivalentes se existir uma isometria linear T : K
n
K
n
tal que T(C) = C

.
Pelo Teorema 5.9, segue que dois codigos lineares C e C

em K
n
sao linearmente equi-
valentes se, e somente se, existir uma permutacao de 1, . . . , n e elementos c
1
, . . . , c
n
de K0 tais que
C

= (c
1
x
(1)
, . . . , c
n
x
(n)
) : (x
1
, . . . , x
n
) 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 nito 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 n umero
de elementos M de C e igual a q

. Seja = v
1
, . . . , v

uma base ordenada de C e


considere a matriz G, cujas linhas sao os vetores v
i
= (v
i
1
, . . . , v
i
n
), i = 1, . . . , , isto e,
G =
_
_
_
_
v
1
.
.
.
v
k
_
_
_
_
=
_
_
_
_
v
11
v
12
v
1n
.
.
.
.
.
.
.
.
.
.
.
.
v
k1
v
k2
v
kn
_
_
_
_
A matriz G e chamada de matriz geradora de C associada `a base . Considere a trans-
formacao linear denida por
5.2. Matriz Geradora de um Codigo 33
T : K

K
n
x (x
1
v
1
+ +x

),
Entao T(K

) = C. Podemos, entao, considerar K

como sendo o codigo da fonte, C, o


codigo de canal e a transformacao T, uma codicacao.
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 m ultiplo 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 dena um codigo como sendo a
imagem da transformacao linear
T : K

K
n
x G
t
x
Exemplo 5.12. Tome K = F
2
= Z
2
e seja
G =
_
_
_
1 0 1 0 1
1 1 0 1 0
1 1 1 1 1
_
_
_
.
Considerando a transformacao linear
T : F
3
2
F
5
2
x G
t
x
e seja C = Im(T), o codigo associado, por exemplo,a palavra 101 do codigo da fonte
e codicada como 01010. Suponhamos agora que seja dado o codigo de canal 10101, e
que gostaramos de decodica-la, isto e, achar x de F
3
2
tal que 10101 = T(x). Entao
precisamos resolver o sistema:
G
T
_

_
x
1
x
2
x
3
_

_
=
_

_
1
0
1
0
1
_

_
34 5. Codigos Lineares
(x
1
, x
2
, x
3
)G = (10101),
ou seja,
_

_
x
1
+x
2
+x
3
= 1
x
2
+x
3
= 0
x
1
+x
3
= 1
x
2
+x
3
= 0
x
1
+x
3
= 1,
Logo x
1
= 1, x
2
= 0 e x
3
= 0.
Observe que efetuando operacoes sobre as linhas de G do tipo L1, L2 e L3, podemos
converter G na forma
G

=
_
_
_
1 0 0 0 0
0 1 0 1 0
0 0 1 0 1
_
_
_
.
que e a forma padrao. Nesta forma, temos que G
T
x = (x
1
, x
2
, x
3
, x
2
, x
3
)
xG

= (x
1
x
2
x
3
x
2
x
3
)
Assim, o vetor x e apenas as tres primeiras componentes do vetor a ser decodicado.
Logo, a palavra (10101) e facilmente decodicada como (101).
Denicao 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 F
5
2
com matriz geradora
_
0 0 1 0 1
0 0 0 1 1
_
nao podera ter uma matriz geradora na forma padrao.
5.3. C odigos 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

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 G

de um codigo C

equivalente a C. Com isso, temos o seguinte


resultado:
Teorema 5.15. Dado um codigo C, existe um codigo equivalente C

com matriz geradora


na forma padrao.
5.3 Codigos Duais
Seja C K
n
um codigo linear, denimos o codigo dual como complemento ortogonal.
C

= v K
n
: u, v) = 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[Id
n
) 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) (T
j
c
(C))

= T
j
c
1
(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 coecientes 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 signica que H e matriz teste de paridade.
Exemplo 5.22. Seja dado o codigo C sobre F
2
com matriz geradora
G =
_
_
_
1 0 0 1 1 1
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
H =
_
_
_
1 0 0 1 0 0
1 1 1 0 1 0
1 1 0 0 0 1
_
_
_
.
Dados v = (100111) e v

= (010101), como
Hv =
_
_
_
0
0
0
_
_
_
e Hv

=
_
_
_
1
1
0
_
_
_
,= 0,
temos que v C e v

/ 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. C odigos 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 fotograa foi dividida em elementos
pictogracos, ou pixels. Foi sobreposta `a fotograa 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 = 2
6
, usamos aritmetica binaria para representar cada uma dessas
tonalidades, onde o branco e 000000 e o preto e 111111. Podemos, entao, reescrever esses
64 n umeros binarios como vetores de Z
6
2
e codica-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 denidos intuitivamente.
Denicao 5.25. Os codigos de Reed-Muller (de primeira ordem) R
n
sao denidos indu-
tivamente por:
1 Para n = 0, R
0
= Z
2
.
2 Para n 1, R
n
e o subespaco de Z
2n
2
cuja base e formada por todos os vetores da forma
_
u
u
_
e
_
0
1
_
onde u e o vetor da base em R
n1
, 0 e o vetor nulo de Z
2n1
2
, e 1 e o vetor formado
por 1s em Z
2n1
2
.
Usando a denicao acima, construiremos R
1
e R
2
, e vericaremos o tipo de vetores
que esses codigos contem. Uma base para R
0
= Z
2
e somente 1, portanto, uma base
para R
1
e
__
1
1
_
,
_
0
1
__
que gera o codigo
Nao ha como obter mais nenhum outro vetor atraves da adicao e por isso
38 5. Codigos Lineares
R
1
=
__
0
0
_
,
_
0
1
_
,
_
1
0
_
,
_
1
1
__
= Z
2
2
Realizando o mesmo procedimento obteramos a seguinte base para R
2
_

_
_

_
1
1
1
1
_

_
,
_

_
0
1
0
1
_

_
,
_

_
0
0
1
1
_

_
_

_
e pela propriedade do fechamento para a adicao, e facil ver que os 8 = 2
3
vetores de
R
2
sao
R
2
=
_

_
_

_
0
0
0
0
_

_
,
_

_
0
0
1
1
_

_
,
_

_
0
1
0
1
_

_
,
_

_
0
1
1
0
_

_
,
_

_
1
0
1
0
_

_
,
_

_
1
0
0
1
_

_
,
_

_
1
1
0
0
_

_
,
_

_
1
1
1
1
_

_
_

_
Em R
1
todo vetor de codigo tem peso 1, exceto 0 e 1;e, em R
2
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 Z
n
2
e o vetor de x obtido trocando-se
todos os zeros por 1s, e vice-versa.
Exemplo 5.27.
x =
_

_
1
1
0
1
_

_
x =
_

_
0
0
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 R
n
e um codigo linear (2
n
, n + 1)
no qual todo vetor de codigo, exceto o 0 e o 1, tem peso 2
n1
.
Demonstracao. Para demonstrar esse teorema vamos utilizar inducao em n. Para n = 1
temos que R
1
= Z
2
2
e um codigo linear (2, 2) = (2
1
, 1+1) para o qual todo vetor de codigo,
exceto o 0 e o 1, tem peso 1 = 2
11
. Vamos assumir que o resultado e valido para n = k,
ou seja, que R
k
e um codigo linear (2
k
, k + 1) no qual todo vetor de codigo, exceto o 0 e
o 1, tem peso 2
k1
. Agora, consideremos R
k=k+1
.
Por construcao, R
k+1
tem uma base formada pelos vetores da forma
_
u
u
_
, onde u e
um elemento de R
k
, juntamente com o vetor
_
0
1
_
. Pela hipotese de inducao, os vetores
5.5. Decodicacao de Codigos de Reed-Muller 39
u, 0 e 1 estao em Z
2k
2
; assim os vetores da base para R
k+1
estao em Z
2k+1
2
. Alem disso,
a dimensao de R
k
e k + 1, pprtanto, existem k + 1 vetores da forma
_
u
u
_
e mais um,
_
0
1
_
. Segue que a dimensao de R
k+1
e k + 2.
Finalmente observemos que R
k+1
e um codigo linear (2
k+1
, k + 2). Para a armacao
nal, observe que os vetores de R
k+1
sao obtidos por combinacao linear dos vetores da
base, e, portanto, sao da forma
v = c
1
_
u
1
u
1
_
+ . . . +c
k+1
_
u
k+1
u
k+1
_
+ c
k+2
_
0
1
_
onde u
1
, . . . , u
k+1
com c
i
Z
2
.
Suponha que v ,= 0, 1 e seja u = c
1
u
1
+ . . . + c
k
u
k+1
. Dessa forma, u e um elemento
de R
k
. Se c
k+2
=0, entao u ,= 0, 1, e, portanto, pela hipotese de inducao, u tem peso 2
k1
.
Mas entao v tem peso 2 2
k1
= 2
k
. Se c
k+2
= 1, entao v tem a forma
v =
_
u
u
_
+
_
0
1
_
=
_
u
u + 1
_
=
_
u
u
_
onde u e um elemento de R
k
. Como
w(u) = 2
k
- w(u)
temos que
w(v) = w(u) + w (u) = 2
k
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 = 2
6
vetores. Pelo teorema 5.28, o codigo de Reed-Muller R
5
tem dimensao 6 sobre Z
2
.
5.5 Decodicacao de Codigos de Reed-Muller
Denicao 5.29. Uma matriz H
n
de ordem n e uma matriz n n formada pelos valores
1 e 1, cujas linhas tomadas duas a duas sao ortogonais.
Isto signica que o produto interno sobre os n umeros reais de linhas distintas e 0.
No caso de dimensao ser potencias de dois, podemos obter recursivamente por
H
1
= [1] e H
2n
=
_
H
n
H
n
H
n
H
n
_
Exemplo 5.30. Matrizes de Hadamard de ordem 1, 2 e 4 sao dadas por
40 5. Codigos Lineares
H
1
= [1] H
2
=
_
1 1
1 -1
_
H
4
=
_

_
1 1 1 1
1 -1 1 -1
1 1 -1 -1
1 -1 -1 1
_

_
Uma denicao equivalente e H
n
e uma matriz nn com a entrada dos inteiros 1 e 1
tais que
H
n
H
T
n
= nI
n
Denicao 5.31. A ordenacao adequada P
r
de r-uplas e a ordenacao denida recursiva-
mente pelas regras
(1) P
1
= [0, 1]
(2) Se P
i
= [b
1
, b
2
, . . . , b
2
i ] entao P
i+1
= [b
1
0, b
2
0, . . . , b
2
i 0, b
1
1, b
2
1, . . . , b
2
i 1], para 1 i
r 1.
Se inverter a ordem dos digitos, a ordenacao acima e a ordem crescente dos n umeros
binarios associados.
Exemplo 5.32.
P
1
= [0, 1]
P
2
= [00, 10, 01, 11]
P
3
= [000, 100, 010, 110, 001, 101, 011, 111]
Note que, se inverter a ordem dos dgitos, o P
3
corresponde a
[000, 001, 010, 011, 100, 101, 110, 111] que e ordem crescente dos n umeros binarios
associados.
Agora seja n = 2
r
, e sejam u
0
, u
1
, . . . , u
n1
os r-uplas binarias numa ordem correta.
Construcao da matriz geradora de codigo
Seja H
r
, a matriz de vericacao de paridade de Hamming(que nao pode ser confundida
com matriz de Hadamard). Considere [H
r
0], onde 0 e uma matriz coluna nula. B
r
e uma
matriz ordenada de [H
r
0] segundo a ordenacao da denicao 5.31. Entao a matriz geradora
de codigo de Reed-Muller R(1, r) e G =
_
1
B
r
_
Seja r o codigo recebido. Construmos o vetor R tal que R
i
= (1)
r
i
=
_
_
_
1, se r
i
= 0
1, se r
i
= 1
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 B


r
(ordenada). O codigo de canal e
c =

u
i
v
i
onde v
i
e a i-esima linha de B
r
.
5.5. Decodicacao de Codigos de Reed-Muller 41
Exemplo 5.33. R(1, 3). Matriz geradora do codigo de Hamming sera H
3
=
_
_
_
1 0 1 1 1 0 0
1 1 0 1 0 1 0
0 1 1 1 0 0 1
_
_
_
e [H
3
0] =
_
_
_
1 0 1 1 1 0 0 0
1 1 0 1 0 1 0 0
0 1 1 1 0 0 1 0
_
_
_
.
Reordenando, temos B
3
=
_
_
_
0 1 0 1 0 1 0 1
0 0 1 1 0 0 1 1
0 0 0 0 1 1 1 1
_
_
_
e consequentemente, a matriz
geradora do codigo sera B
3
=
_
_
_
_
_
_
1 1 1 1 1 1 1 1
0 1 0 1 0 1 0 1
0 0 1 1 0 0 1 1
0 0 0 0 1 1 1 1
_
_
_
_
_
_
Suponha que foi recebido r = (01110110). A matriz de Hadamard de ordem 8 e
H
8
=
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
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
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

R
4

= 6.
Considere o vetor u como a k-esima coluna de B
r
. Nosso exemplo, sera a quarta coluna
que e u =
_

_
1
1
0
_

_
c =

u
i
v
i
onde v
i
e a i-esima linha de G.
Entao c = 1v
1
+ 1v
2
+ 0v
3
= [01010101] + [00110011] = [01100110] = (01100110).
Temos que o codigo da fonte e u Z
4
2
com G
T
u = c. Logo, u = (0, 1, 1, 0).
43
Referencias Bibliogracas
[1] GARCIA, A. e LEQUAIN, Y. Elementos de

Algebra. IMPA, Rio de Janeiro, 2006.
326p.
[2] GONC ALVES, 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] LOURENC O, 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.

Вам также может понравиться