Você está na página 1de 82

Universidade Federal do ABC

Centro de Matemática, Computação e Cognição

Detecção e Correção de Erros

Curso de NI

(Fonte: Slides de vários professores.)


1
Roteiro
• O que é redundância?

• Bits de paridade

• Código de Hamming

2
O que é redundância?
• Apesar de ter removido todas as vogais,
conseguimos ler o texto abaixo, certo?

• -s -v-nç-s d- c--nc-- - d- t-cn-l-g--


-st-- m-lt-pl-c-ndo -s n-ss-s c-p-c-d-d-s
d- c-l-t-r, tr-t-r, g-r-r - -t-l-z-r -nf-rm-ç--s.

3
O que é redundância?
• Apesar da desordem das letras, também conseguimos
ler o texto abaixo, por quê?

• De aorcdo com uma peqsiusa de uma uinrvesriddae


ignlsea, não ipomtra em qaul odrem as Lteras de uma
plravaa etãso, a úncia csioa iprotmatne é que a
piremria e útmlia Lteras etejasm no lgaur crteo. O rseto
pdoe ser uma bçguana ttaol, que vcoê anida pdoe ler
sem pobrlmea. Itso é poqrue nós não lmeos cdaa Ltera
isladoa, mas a plravaa cmoo um tdoo. Sohw de bloa.

4
O que é redundância?
• Nossa linguagem tem muita redundância, por
isso, conseguimos ler um texto com falta de
vogais ou um texto com as letras
embaralhadas dentro de cada palavra.
De aorcdo com uma peqsiusa de uma
uinrvesriddae ignlsea, não ipomtra em qaul
-s -v-nç-s d- c--nc-- - d- t-cn-l-g-- odrem as Lteras de uma plravaa etãso, a
-st-- m-lt-pl-c-ndo -s n-ss-s c-p-c-d-d-s úncia csioa iprotmatne é que a piremria e
d- c-l-t-r, tr-t-r, g-r-r - -t-l-z-r -nf-rm-ç--s. útmlia Lteras etejasm no lgaur crteo. O rseto
pdoe ser uma bçguana ttaol, que vcoê anida
pdoe ler sem pobrlmea. Itso é poqrue nós
não lmeos cdaa Ltera isladoa, mas a plravaa
cmoo um tdoo. Sohw de bloa.
5
O que é redundância?
• Nossa linguagem tem muita redundância, por
isso, conseguimos ler um texto com falta de
vogais ou um texto com as letras
embaralhadas dentro de cada palavra.
• Mas para quê serve a redundância?

6
O que é redundância?
• Nossa linguagem tem muita redundância, por
isso, conseguimos ler um texto com falta de
vogais ou um texto com as letras
embaralhadas dentro de cada palavra.
• Mas para quê serve a redundância?

7
Transmissão de Informação
• Para uma “comunicação” ou transmissão de
informação, seguiremos o seguinte modelo:

Emissor Receptor
(Fonte) Canal

8
Transmissão de Informação
• Emissor
– Fonte de informação
– Codifica e emite uma mensagem para o receptor

Emissor Receptor
(Fonte) Canal

9
Transmissão de Informação
• Canal
– A mensagem trafega pelo canal de comunicação
– O canal pode sofrer interferências ou ruído

Emissor Receptor
(Fonte) Canal

10
Transmissão de Informação
• Receptor
– Recebe e decodifica a mensagem

Emissor Receptor
(Fonte) Canal

11
Transmissão de Informação
Ar
• Exemplos

Emissor Receptor
(Fonte) Canal

12
Transmissão de Informação
Linha
telefônica
• Exemplos

Emissor Receptor
(Fonte) Canal

13
Transmissão de Informação
“Internet”
• Exemplos

010011101…

Emissor Receptor
(Fonte) Canal

14
Redundância
• Para quê serve a redundância?
– Serve para proteger a mensagem contra ruídos.
– Exemplo
• A nossa linguagem é redundante, por isso, conseguimos
ouvir e entender em ambientes barulhentos ou
ruidosos.
Vou ser
promovido!

15
Redundância
• Como inserir redundância?

Erro: bit invertido

010011101… 010010101…

Emissor Receptor
(Fonte) Canal

16
Redundância
• Como inserir redundância?
– Como detectar um erro?
– Como corrigir um erro?
Erro: bit invertido

010011101… 010010101…

Emissor Receptor
(Fonte) Canal

17
Detecção de Erro
• Vamos começar pelo caso mais simples:
– Suponha que o erro seja a inversão de um único bit.
• Vamos contabilizar o total de bits 1, que pode ser
par ou ímpar.
– Ou seja, a transmissão pode ter paridade par ou ímpar.
• A codificação pode incluir um bit extra, chamado
de bit de paridade para manter a quantidade de
1’s par ou ímpar.

18
Detecção de Erro
• Bit de paridade
– Exemplo 1: paridade par

01001110

Emissor Receptor
(Fonte) Canal

19
Detecção de Erro
• Bit de paridade
– Exemplo 1: paridade par
(Bit de paridade: 0 ou 1?)

01001110 ?

(Mensagem original)

Emissor Receptor
(Fonte) Canal

20
Detecção de Erro
• Bit de paridade
– Exemplo 1: paridade par
(Bit de paridade)

01001110 0

(Mensagem original)

Emissor Receptor
(Fonte) Canal

21
Detecção de Erro
• Bit de paridade
– Exemplo 1: paridade par
(Bit de paridade)

01001110 0 01001010 0
Verifica:
paridade par?

Emissor Receptor
(Fonte) Canal

22
Detecção de Erro
• Bit de paridade
– Exemplo 1: paridade par
(Bit de paridade)

01001110 0 01001010 0
Erro:
paridade ímpar!

Emissor Receptor
(Fonte) Canal

23
Detecção de Erro
• Bit de paridade
– Exemplo 1: paridade par
(Bit de paridade) Mas não sei onde está o erro!

01001110 0 01001010 0
Erro:
paridade ímpar!

Emissor Receptor
(Fonte) Canal

24
Detecção de Erro
• Bit de paridade
– Exemplo 2: transmissão com paridade ímpar

01001110

Emissor Receptor
(Fonte) Canal

25
Detecção de Erro
• Bit de paridade
– Exemplo 2: transmissão com paridade ímpar
(Bit de paridade)

01001110 ?

(Mensagem original)

Emissor Receptor
(Fonte) Canal

26
Detecção de Erro
• Bit de paridade
– Exemplo 2: transmissão com paridade ímpar
(Bit de paridade)

01001110 1

(Mensagem original)

Emissor Receptor
(Fonte) Canal

27
Detecção de Erro
• Bit de paridade
– Exemplo 2: transmissão com paridade ímpar
(Bit de paridade)

01001110 1 01001110 1
Verifica:
paridade
ímpar?

Emissor Receptor
(Fonte) Canal

28
Detecção de Erro
• Bit de paridade
– Exemplo 2: transmissão com paridade ímpar
(Bit de paridade)

01001110 1 01001110 1
Verifica:
paridade
ímpar? Sim

Emissor Receptor
(Fonte) Canal

29
Detecção e Correção de Erros
• Mas professor,
– Como identificar qual foi o bit invertido?
– E se o erro foi causado por mais de uma inversão?
• Como fazer para tratar mais de 1 bit invertido?

30
Detecção e Correção de Erros
• Para identificar a posição do bit invertido, é
preciso inserir mais de um bit de paridade.

• Código de Hamming

31
Detecção e Correção de Erros
• Para identificar a posição do bit invertido, é
preciso inserir mais de um bit de paridade.

• Código de Hamming
– Quantos bits de paridade?

32
Detecção e Correção de Erros
• Código de Hamming
– Quantos bits de paridade?
• d = número de bits de dados
• p = número de bits de paridade

– Queremos calcular o menor valor de p que satisfaz


2  d + p +1
p

33
Código de Hamming
• Quantos bits de paridade?

• Exemplo
– d = qtde de bits de dados = 4
– p = qtde de bits de paridade = ?

2  d + p +1
p

34
Código de Hamming
• Quantos bits de paridade?

• Exemplo
– d = qtde de bits de dados = 4
– p = qtde de bits de paridade = ?

2  d + p +1
p Rascunho:
2^p >= 4 + p + 1

p = 1: ...

35
Código de Hamming
• Quantos bits de paridade?

• Exemplo
– d = qtde de bits de dados = 4
– p = qtde de bits de paridade = ?

2  d + p +1
p Rascunho:
2^p >= 4 + p + 1

p = 1: 2 !>= 4 + 1 + 1
p = 2: ...

36
Código de Hamming
• Quantos bits de paridade?

• Exemplo
– d = qtde de bits de dados = 4
– p = qtde de bits de paridade = ?

2  d + p +1
p Rascunho:
2^p >= 4 + p + 1

p = 1: 2 !>= 4 + 1 + 1
p = 2: 4 !>= 4 + 2 + 1
p = 3: ...
37
Código de Hamming
• Quantos bits de paridade?

• Exemplo
– d = qtde de bits de dados = 4
– p = qtde de bits de paridade = 3

2  d + p +1
p Rascunho:
2^p >= 4 + p + 1

p = 1: 2 !>= 4 + 1 + 1
p = 2: 4 !>= 4 + 2 + 1
p = 3: 8 >= 4 + 3 + 1
38
Código de Hamming
• Onde colocar os bits de paridade?
– Exemplo
• d = qtde de bits de dados = 4
• p = qtde de bits de paridade = 3
2 p  d + p +1

39
Código de Hamming
• Onde colocar os bits de paridade?
– Exemplo
• d = qtde de bits de dados = 4
• p = qtde de bits de paridade = 3
2 p  d + p +1

• Posso colocar no fim?


bits 1 2 3 4 5 6 7
d1 d2 d3 d4 p1 p2 p3
40
Código de Hamming
• Onde colocar os bits de paridade?
– Exemplo
• d = qtde de bits de dados = 4
• p = qtde de bits de paridade = 3
2 p  d + p +1

• Posso colocar no fim? Não


bits 1 2 3 4 5 6 7
d1 d2 d3 d4 p1 p2 p3
41
Código de Hamming
• Onde colocar os bits de paridade?
– Exemplo
• d = qtde de bits de dados = 4
• p = qtde de bits de paridade = 3
2 p  d + p +1

• “Coloque nas posições que são potências de 2”


bits 1 2 3 4 5 6 7
p1 p2 p3
42
Código de Hamming
• Onde colocar os bits de paridade?
– Exemplo
• d = qtde de bits de dados = 4
• p = qtde de bits de paridade = 3
2 p  d + p +1

• “Coloque nas posições que são potências de 2”


bits 1 2 3 4 5 6 7
p1 p2 d1 p3 d2 d3 d4
43
Código de Hamming
• Como preencher o código de Hamming?
– Exemplo: dado = 1001

• “Paridades nas posições potências de 2”


001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
p1 p2 1 p3 0 0 1

44
Código de Hamming
• Como preencher o código de Hamming?
– Exemplo: dado = 1001

• “Paridades nas posições potências de 2”


001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
p1 p2 1 p3 0 0 1

• Como preencher os bits de paridade?


45
Código de Hamming
• Como preencher o código de Hamming?
– Exemplo: dado = 1001

• “Paridades nas posições potências de 2”


001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
p1 p2 1 p3 0 0 1

• Quais as posições de verificação para cada bit


de paridade? 46
Código de Hamming
• Quais as posições de verificação para cada bit
de paridade?
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
p1 p2 d1 p3 d2 d3 d4

47
Código de Hamming
• Quais as posições de verificação para cada bit
de paridade?
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
p1 p2 d1 p3 d2 d3 d4

• p1: ?

48
Código de Hamming
• Quais as posições de verificação para cada bit
de paridade?
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
p1 p2 d1 p3 d2 d3 d4

• p1: 1, 3, 5, 7

49
Código de Hamming
• Quais as posições de verificação para cada bit
de paridade?
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
p1 p2 d1 p3 d2 d3 d4

50
Código de Hamming
• Quais as posições de verificação para cada bit
de paridade?
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
p1 p2 d1 p3 d2 d3 d4

• p2: ?

51
Código de Hamming
• Quais as posições de verificação para cada bit
de paridade?
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
p1 p2 d1 p3 d2 d3 d4

• p2: 2, 3, 6, 7

52
Código de Hamming
• Quais as posições de verificação para cada bit
de paridade?
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
p1 p2 d1 p3 d2 d3 d4

53
Código de Hamming
• Quais as posições de verificação para cada bit
de paridade?
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
p1 p2 d1 p3 d2 d3 d4

• p3: ?

54
Código de Hamming
• Quais as posições de verificação para cada bit
de paridade?
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
p1 p2 d1 p3 d2 d3 d4

• p3: 4, 5, 6, 7

55
Código de Hamming
• Quais as posições de verificação para cada bit
de paridade?
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
p1 p2 d1 p3 d2 d3 d4

• p1: 1, 3, 5, 7
• p2: 2, 3, 6, 7
• p3: 4, 5, 6, 7 (“Não falei que era para
colocar os bits de
paridade nas
posições que são
potências de 2?”)
56
Código de Hamming
• Como preencher o código de Hamming?
– Exemplo: dado = 1001, paridade par
Posições de Verificação:
p1: 1, 3, 5, 7
p2: 2, 3, 6, 7
p3: 4, 5, 6, 7
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
p1 p2 1 p3 0 0 1

57
Código de Hamming
• Como preencher o código de Hamming?
– Exemplo: dado = 1001, paridade par
Posições de Verificação:
p1: 1, 3, 5, 7
p2: 2, 3, 6, 7
p3: 4, 5, 6, 7
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
1 0 0 1

58
Código de Hamming
• Como preencher o código de Hamming?
– Exemplo: dado = 1001, paridade par
Posições de Verificação:
p1: 1, 3, 5, 7
p2: 2, 3, 6, 7
p3: 4, 5, 6, 7
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
? 1 0 0 1

59
Código de Hamming
• Como preencher o código de Hamming?
– Exemplo: dado = 1001, paridade par
Posições de Verificação:
p1: 1, 3, 5, 7
p2: 2, 3, 6, 7
p3: 4, 5, 6, 7
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
? 1 0 0 1

60
Código de Hamming
• Como preencher o código de Hamming?
– Exemplo: dado = 1001, paridade par
Posições de Verificação:
p1: 1, 3, 5, 7
p2: 2, 3, 6, 7
p3: 4, 5, 6, 7
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
0 1 0 0 1

61
Código de Hamming
• Como preencher o código de Hamming?
– Exemplo: dado = 1001, paridade par
Posições de Verificação:
p1: 1, 3, 5, 7
p2: 2, 3, 6, 7
p3: 4, 5, 6, 7
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
0 ? 1 0 0 1

62
Código de Hamming
• Como preencher o código de Hamming?
– Exemplo: dado = 1001, paridade par
Posições de Verificação:
p1: 1, 3, 5, 7
p2: 2, 3, 6, 7
p3: 4, 5, 6, 7
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
0 ? 1 0 0 1

63
Código de Hamming
• Como preencher o código de Hamming?
– Exemplo: dado = 1001, paridade par
Posições de Verificação:
p1: 1, 3, 5, 7
p2: 2, 3, 6, 7
p3: 4, 5, 6, 7
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
0 0 1 0 0 1

64
Código de Hamming
• Como preencher o código de Hamming?
– Exemplo: dado = 1001, paridade par
Posições de Verificação:
p1: 1, 3, 5, 7
p2: 2, 3, 6, 7
p3: 4, 5, 6, 7
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
0 0 1 ? 0 0 1

65
Código de Hamming
• Como preencher o código de Hamming?
– Exemplo: dado = 1001, paridade par
Posições de Verificação:
p1: 1, 3, 5, 7
p2: 2, 3, 6, 7
p3: 4, 5, 6, 7
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
0 0 1 ? 0 0 1

66
Código de Hamming
• Como preencher o código de Hamming?
– Exemplo: dado = 1001, paridade par
Posições de Verificação:
p1: 1, 3, 5, 7
p2: 2, 3, 6, 7
p3: 4, 5, 6, 7
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
0 0 1 1 0 0 1

67
Código de Hamming
• Como preencher o código de Hamming?
– Exemplo: dado = 1001, paridade par
Posições de Verificação:
p1: 1, 3, 5, 7
p2: 2, 3, 6, 7
p3: 4, 5, 6, 7
001 010 011 100 101 110 111
bits 1 2 3 4 5 6 7
0 0 1 1 0 0 1

p1 p2 p3
d1 d2 d3 d4

68
Detecção de Erro
• Bit de paridade
– Exemplo 1: paridade par
(1 Bit de paridade) Mas não sei onde está o erro!

1001 0 1011 0
Erro:
paridade ímpar!

Emissor Receptor
(Fonte) Canal

69
Detecção de Erro
• Código de Hamming
– Exemplo 2: paridade par
Agora posso verificar e corrigir o erro!

0011001 0011011

Emissor Receptor
(Fonte) Canal

70
Código de Hamming
• Recebi o código de Hamming
0011011
com paridade par.

• Como faço para verificar se existe erro?

• E como faço para corrigir o erro, caso exista?

71
Código de Hamming
• Paridade par
• Posições de Verificação
– p1: 1, 3, 5, 7
– p2: 2, 3, 6, 7
– p3: 4, 5, 6, 7
bits 1 2 3 4 5 6 7
0 0 1 1 0 1 1

72
Código de Hamming
• Paridade par
• Posições de Verificação
p3 p2 p1
– p1: 1, 3, 5, 7
Posição
– p2: 2, 3, 6, 7 do Erro

– p3: 4, 5, 6, 7
bits 1 2 3 4 5 6 7
0 0 1 1 0 1 1

73
Código de Hamming
• Paridade par Ok

• Posições de Verificação
p3 p2 p1
– p1: 1, 3, 5, 7
Posição 0
– p2: 2, 3, 6, 7 do Erro

– p3: 4, 5, 6, 7
bits 1 2 3 4 5 6 7
0 0 1 1 0 1 1

74
Código de Hamming
• Paridade par
• Posições de Verificação
p3 p2 p1
– p1: 1, 3, 5, 7
Posição 0
– p2: 2, 3, 6, 7 do Erro

– p3: 4, 5, 6, 7
bits 1 2 3 4 5 6 7
0 0 1 1 0 1 1

75
Código de Hamming
• Paridade par Erro!

• Posições de Verificação
p3 p2 p1
– p1: 1, 3, 5, 7
Posição 1 0
– p2: 2, 3, 6, 7 do Erro

– p3: 4, 5, 6, 7
bits 1 2 3 4 5 6 7
0 0 1 1 0 1 1

76
Código de Hamming
• Paridade par
• Posições de Verificação
p3 p2 p1
– p1: 1, 3, 5, 7
Posição 1 0
– p2: 2, 3, 6, 7 do Erro

– p3: 4, 5, 6, 7
bits 1 2 3 4 5 6 7
0 0 1 1 0 1 1

77
Código de Hamming
• Paridade par Erro!

• Posições de Verificação
p3 p2 p1
– p1: 1, 3, 5, 7
Posição 1 1 0
– p2: 2, 3, 6, 7 do Erro

– p3: 4, 5, 6, 7
bits 1 2 3 4 5 6 7
0 0 1 1 0 1 1

78
Código de Hamming
• Paridade par
• Posições de Verificação
p3 p2 p1
– p1: 1, 3, 5, 7
Posição 1 1 0
– p2: 2, 3, 6, 7 do Erro:
6
– p3: 4, 5, 6, 7
bits 1 2 3 4 5 6 7
0 0 1 1 0 1 1

79
Código de Hamming
• Paridade par
• Posições de Verificação
p3 p2 p1
– p1: 1, 3, 5, 7
Posição 1 1 0
– p2: 2, 3, 6, 7 do Erro:
6
– p3: 4, 5, 6, 7
bits 1 2 3 4 5 6 7
0 0 1 1 0 1 1

Correção: 0

80
Código de Hamming
• Paridade par
• Posições de Verificação
p3 p2 p1
– p1: 1, 3, 5, 7
Posição 1 1 0
– p2: 2, 3, 6, 7 do Erro:
6
– p3: 4, 5, 6, 7
bits 1 2 3 4 5 6 7
0 0 1 1 0 1 1

Correção: 0
• Correção: 0011011 -> 0011001 81
Código de Hamming
• Paridade par
• Posições de Verificação
p3 p2 p1
– p1: 1, 3, 5, 7
Posição 1 1 0
– p2: 2, 3, 6, 7 do Erro:
6
– p3: 4, 5, 6, 7
bits 1 2 3 4 5 6 7
0 0 1 1 0 1 1

Correção: 0
• Correção: 0011011 -> 0011001 (dado = 1001)
82

Você também pode gostar