Академический Документы
Профессиональный Документы
Культура Документы
= 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
= 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
, ) = .
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
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
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
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
K
n
x (x
1
v
1
+ +x
),
Entao 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
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
= 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
(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
= (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
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.