Detecção e correcção de erros
Quando estamos em ambientes ruidosos temos dificuldade em ouvir que fale connosco, nas transmissões de dados, fenómenos com o ruído e as interferências também ocorrem, podendo deturpar a messagem original. Devido a este problema são aplicados códigos de detecção e correcção de erros às transmissões.
Vamos descrever três códigos detectores de erros são: verificação da paridade, checksum e CRC.
1ª Técnica - Verificação de Paridade
Este é um dos métodos mais utilizados para a detenção de erros. O bit de paridade indica o número de bits 1 presentes num caracter (Byte).
Assim , diz-se que a paridade é par se tiver um número par de 1's e ímpar caso tenha número ímpar de 1's. Assim, este assume o bit 0 quando temos paridade par e 1 quando temos paridade ímpar.
Vejamos o exemplo:
1100110 - a menssagem está correcta. O ultimo bit é zero indicando que o número de 1's que o precede é par (4 uns).
10101011- a menssagem está errada. O byte teria assim de ser retrandsmitido visto o bit de paridade dizer que o número de 1's é ímpar e no entanto é par (4 uns).
Exercício:
Das sequências de bits que se seguem, assinale (X) em qual/quais ocorreram erro, sabendo que o último bit é um bit de paridade:
a) 11100111110101011 (X)
b) 10101011110001001 (X)
c) 10101000000001000
d) 1110000 (X)
2ª Técnica - Checksum
São técnicas ultizadas para detectar erros principalmente na internet e denomina-se somas de verificação. Se a soma de checksums (normal e complemento de para 1) resultarem apenas 1's, podemos inferir que "não" houve erros na transmissão, caso contrário, existiu erro na transmissão.
Exercício: 1º Passo- Fazer a respectiva soma de binários
00111101
+00001101
01001010
2ºPasso- Como a soma tem de ser em complemento para um terá de inverter a sequência resultante da soma normal (zeros passam a 1's e vice-versa)
Checksum invertido: 10110101
Os dados enviados serão então: 00111101 00001101 10110101, ou seja, os dois bytesiniciais mais a sequência de checksum invertido.
3ºPasso- Para verificar se ocorrem erros durante a transmissão, no receptor, teremos de voltar a somar os 2 bytes de dados enviados e somar ao checksum invertido.
10110101 (checksum invertido)
01001010=
11111111
Como a soma resultou em 1's concluímos que não houve erro na transmissão.
3ª Técnica - CRC (Cyclic Rebundancy)
Esta é a técnica mais eficiente que as anteriores. Muitas vezes, é também denominada por método de detecção polinomial. O método consiste em adicionar um conjunto de bits (FCS- Frame check sequence) à menssagem original a transmitir. Os bits FCS são calculados através da seguinte expressão:
FCS(x) é igual ao resto da divisão inteira entre duas funções polinomiais M(x) e G(x) onde M(x) é a nossa menssagem original sem código de erros e G(x) o polonómio gerado pré-definido (chave da nossa codificação). Para a facilitar a compreensão deste tema resolve-se de seguida um exercício.
M(x) = x6+x5+x3+x+1
G(x) = x4+x3+1
M(x) = 1101011
G(x) = 11001
M(x).xn= 11010110000
11010110000 |11001 G(x)
11001 1001010
000111
00000
001111
00000
011110
11001
001110
00000
011100
11001
001010
00000
01010
Mensagem transmitida: M(x)+FCS(x) = 11010111010
Mas como é que o receptor verifica se houve erro na tranmissão ou não?
Faz a divisão: M(x)+FCS(x) = 11010111010|11001
Se o resto for "00000" quer dizer que a mensagem foi transmitida sem erros.