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).
1010101
1- 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) 1010100000000100
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.