Documente Academic
Documente Profesional
Documente Cultură
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
Sumario
1 Conceitos Preliminares 1
2 Codigos 7
2.1 Codigos Binarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
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
Captulo 1
Conceitos Preliminares
+ : 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:
(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.
a + (a) = a + a = 0.
(i) a + b = a + b,
(ii) a b = a b
uv =21+22+02+12+21 =2+1+0+2+2 =1
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.6. Um anel onde todo elemento nao nulo e invertvel e chamado de corpo.
+ 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
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:
(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.
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 .
(i) (x + y) I, x, y I
Captulo 2
Codigos
+ 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 .
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)
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
Tabela 3.1: Mensagens e palavras de codigo para o codigo bit de paridade par (3, 2)
mpar de erros sobre qualquer palavra de codigo, e possvel detecta-los, ja que resulta
numa palavra que nao pertence ao codigo.
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.
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
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)
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 .
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
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
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
(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
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
(a) Todos os smbolos (dgitos) transmitidos tem a mesma probabilidade de serem rece-
bidos errados e essa probabilidade e pequena;
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.
" #
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
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
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
0 1 1 1
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
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 .
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.
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.
respectivamente.
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.
(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).
[
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.
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.
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
v + C = C v C.
Definicao 4.16. Um vetor de peso mnimo numa classe lateral e chamado de elemento
lder dessa classe.
(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
Lder Sndrome
000000 000
000001 001
000010 010
000100 100
001000 101
010000 011
100000 110
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).
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
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
M = |C| = q
e, consequentemente,
Proposicao 5.4. Seja C K n um codigo linear com distancia mnima d. Temos que
(ii) d = (C).
T : K Kn
x = (x1 , x2 , . . . , x ) 7 (x1 v1 + x2 v2 + + x v )
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,
H : C C 0 K nk
u v 7 v
5.1. Equivalencia de Codigos 31
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
H: F43 F23
x = (x1 , . . . , x4 ) 7 (2x1 + 2x2 + x3 , 2x1 + x2 + x4 )
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:
Proposicao 5.7.
O estudo mais aprofundado sobre a isometria costuma ser feita em livros sobre espacos
metricos.
32 5. Codigos Lineares
F = T Tf11 Tfnn .
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
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.
T : K Kn
x 7 (x1 v1 + + x v ),
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
(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
xG0 = (x1 x2 x3 x2 x3 )
Definicao 5.13. Diremos que uma matriz geradora G de um codigo C esta na forma
padrao se tivermos
G = (Id |A),
Dado um codigo C, nem sempre e possvel obter uma matriz geradora de C na forma
padrao.
De modo geral, alem das operacoes nas linhas, efetuamos tambem sequencias de
operacoes sobre as colunas do tipo:
Teorema 5.15. Dado um codigo C, existe um codigo equivalente C 0 com matriz geradora
na forma padrao.
C = {v K n : hu, vi = 0, u C}.
i) C e um subespaco vetorial de K n ;
ii) x C Gx = 0.
i) dimC = n ;
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 )
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.
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
0 0
temos que v C e v 0
/ C.
d n + 1.
Definicao 5.25. Os codigos de Reed-Muller (de primeira ordem) Rn sao definidos indu-
tivamente por:
1 Para n = 0, R0 = Z2 .
" # " #
u 0
e
u 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
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
w(u) = 2k - w(u)
temos que
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
" # 1 1 1 1
1 1 1 -1 1 -1
H1 = [1] H2 = H4 =
1 -1
1 1 -1 -1
1 -1 -1 1
Hn HnT = nIn
(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]
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
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
[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.