O documento descreve Códigos de Hamming, que adicionam bits de paridade a dados para permitir a detecção e correção de erros. Explica como os códigos de Hamming funcionam usando matrizes para representar as palavras de código válidas e discute como eles podem detectar, corrigir erros e melhorar a taxa de transmissão de dados.
1. UFSM-CTISM
CÓDIGOS DE
HAMMING
Comunicação de Dados
Aula-17
CÓDIGOS DE HAMMING
Professor:
Andrei Piccinini Legg
Santa Maria, 2012
2. CÓDIGOS DE HAMMING
Definição:
CÓDIGOS DE Um código de Hamming adiciona um bloco de paridade a
HAMMING
um bloco de dados, de forma a que, caso ocorram erros de
transmissão, seja possível detectar ou corrigir erros do
bloco transmitido.
palavra código
c – no bits transmitidos
d – no bits de dados
p – no bits de paridade
dados paridade
A implementação do codificador e do decodificador é muito
simples, como se vai ver em seguida.
3. Ideia
De todas as possíveis palavras de código, considerar como
CÓDIGOS DE
válidas apenas algumas.
HAMMING
Exemplo: 000,111
011
001
PSfr 101 111
000 010
100 110
A distância mínima entre as palavras de código é de 3 bits
(distância de Hamming).
Se um bit for corrompido, o receptor detecta uma palavra de
código inválida e pode recuperar o original escolhendo a
palavra de código válida mais próxima.
4. Algebra Linear e Aritmética Modulo 2
Aritmética modulo 2:
CÓDIGOS DE
Adição = XOR Produto = AND
HAMMING
Algebra linear:
Seja A uma matriz n × m e x um vector de dimensão m.
null(A), o espaço nulo de A, é o espaço gerado pelos
vectores x que verificam Ax = 0.
rank(A) é o no de linhas/colunas linearmente
independentes. Temos que rank(null(A)) + rank(A) = m.
Exemplo:
0 1 1
H=
1 0 1
rank(H) = 2;
null(H) = 000,111, rank(null(H)) = 1;
rank(H) + rank(null(H)) = 2 + 1 = 3.
5. Código de Hamming
Um código de Hamming (c,d ) é formado da seguinte
CÓDIGOS DE maneira:
HAMMING
Constroi-se uma matriz H cujas colunas são formadas por
todos os vetores não nulos de dimensão p = c − d .
O código de Hamming consiste no espaço nulo da matriz
H, i.e., as palavras de código verificam Hc = 0.
Exemplo:
Código (3,1) -> 1 bit dados + 2 bits redundância
0 1 1
H=
1 0 1
O espaço nulo de H é composto pelos vetores [000] e [111]
(Verifique!)
6. Detecção de erros
Como as palavras de código pertencem ao espaço nulo de
CÓDIGOS DE
HAMMING H, é muito simples verificar se houve erro de transmissão:
Basta verificar se a palavra recebida r pertence ao espaço
nulo!
Se Hr = 0, então r pertence ao espaço nulo → OK!
Se Hr = 0, então r não pertence a null(H) → ERRO!
Exemplo:
Se c = 000 e r = 000, Hr = [00]′ → sem erros
Se c = 000 e r = 001, Hr = [11]′ → erros detectados
Se c = 000 e r = 101, Hr = [10]′ → erros detectados
Se c = 000 e r = 111, Hr = [00]′ → sem erros
Note que se existirem 3 erros é recebida uma palavra válida
e não são detectados erros (não há milagres!)
7. Correção de erros
CÓDIGOS DE
HAMMING Detecta-se um erro quando Hr = 0. Como se pode saber
qual o erro que ocorreu?
Suponhamos que ocorreu um erro na posição i.
Usando um vector ei = [0 . . . 010 . . . 0] para representar a
posição onde ocorre o erro, temos que r = c + ei . Então,
Hr = H(c + ei ) = Hc + Hei = Hei .
Mas Hei corresponde à i-ésima coluna de H.
Portanto, calculando Hr e procurando em H, obtemos a
posição i onde ocorreu o erro. Para o corrigir, basta
invertê-lo.
8. Como escolher o número de bits de paridade?
O número de colunas de H é igual a 2p − 1, que deve ser
compatível com a dimensão do vector r . Então
CÓDIGOS DE
HAMMING
d + p = 2p − 1
Regra de Hamming
d + p + 1 ≤ 2p
Se a igualdade se verificar, diz-se que é um código
perfeito.
Os códigos de Hamming designam-se pelo par (c,d)
Exemplos:
p d c código
3 4 7 (7,4)
4 11 15 (15,11)
5 26 31 (31,26)
9. Exemplo: Código de Hamming (7,4)
Palavras de código:
0000 000 0100 101 1000 011 1100 110
CÓDIGOS DE
HAMMING 0001 111 0101 010 1001 100 1101 001
0010 110 0110 011 1010 101 1110 000
0011 001 0111 100 1011 010 1111 111
Codificação:
Pesquisar na tabela a palavra de código cujos 4 primeiros
bits são os dos dados que se pretendem codificar.
Adicionar a paridade correspondente.
1011 1011010 1010010 1011
Fonte Cod. Canal Decod.
Hr = [100]′
10. Exemplo: Código de Hamming (7,4)
Palavras de código:
0000 000 0100 101 1000 011 1100 110
CÓDIGOS DE
HAMMING 0001 111 0101 010 1001 100 1101 001
0010 110 0110 011 1010 101 1110 000
0011 001 0111 100 1011 010 1111 111
Codificação:
Pesquisar na tabela a palavra de código cujos 4 primeiros
bits são os dos dados que se pretendem codificar.
Adicionar a paridade correspondente.
0 0 0 1 1 1 1
H = 0 1 1 0 0 1 1
1 0 1 0 1 0 1
11. Desempenho dos códigos de Hamming
d 2p − p − 1
CÓDIGOS DE O Taxa de transmissão é: R = =
HAMMING c 2p − 1
Aumentando o tamanho das palavras de código, é possível
fazer R → 1.
No entanto, a probabilidade de erro na decodificação
também converge para 1:
A probabilidade de a decodificação ser correta corresponde a
haver até um erro numa palavra de comprimento c. Num canal
binário simétrico com probabilidade de erro pe a probabilidade de
decodificação correta de um código (c, d), é dada por:
(1 − pe )c + cpe (1 − pe )c−1
cujo limite é zero quando c → ∞.
12. Desempenho dos códigos de Hamming
Distância minima de uma código de Hamming
CÓDIGOS DE
pode ser determinado através da matriz H ou com uma
HAMMING analise das palavras código.
Calculando a distância minima através da matriz H:
A distancia mínima do código será determinada pelo numero
mínimo de colunas da matriz H que devem ser somadas para se
obter o vetor nulo.
Exemplo:
0 0 0 1 1 1 1
H= 0 1 1 0 0 1 1
1 0 1 0 1 0 1
A distancia mínima para o código cuja matriz H foi dada acima é
3, porque são necessaria a soma de no mínimo 3 colunas para
obtermos o vetor nulo.
13. Desempenho dos códigos de Hamming
Distância minima de uma código de Hamming
CÓDIGOS DE
pode ser determinado através da matriz H ou com uma
HAMMING analise das palavras código.
Calculando a distância minima através das palavras código:
A distancia mínima do código será determinada pela menos
distancia entre duas palavras código lembrando que o vetor nulo
sempre corresponde a uma palavra código.
0000000 0100101 1000011 1100110
0001111 0101010 1001100 1101001
Exemplo:
0010110 0110011 1010101 1110000
0011001 0111100 1011010 1111111
Se calcularmos as distâncias entre todas as palavras código o
menor valor obtido corresponde a distância minima para o
código. Nesse exemplo igual a 3.
14. Desempenho dos códigos de Hamming
capacidade de detecção
o número de erros que podem ser detectados utilizando um
CÓDIGOS DE
HAMMING código de Hamming dependerá da distancia minima (dMIN )
do código utilizado. e o número máximo de erros
detectados será dado por:
dMIN = ed + 1 ⇒ ed = dMIN − 1
capacidade de correção
o número de erros que podem ser corrigidos utilizando um
código de Hamming também dependerá da distancia
minima (dMIN ) do código utilizado. e o número máximo de
erros corrigidos será dado por:
dMIN − 1
dMIN = 2ec + 1 ⇒ ec =
2