Codigos de Erros
Codigos de Erros
Codigos de Erros
Erros (1)
Um sistema de computação funciona em função da transferência de informação desde o
nível de circuito integrados até aos níveis mais altos, como por exemplo gravação no
disco ou comunicação entre computadores.
Está sujeito a diversos erros, como os causados por interferências electromagnéticas,
envelhecimento de componentes, curto-circuitos, ...
Erros (2)
Características dos erros 1.
Erros (3)
Possíveis abordagens no tratamento de erros:
1. Ignorar o erro;
2. Eco (transmissão à origem de reflexos dos dados recebidos);
3. Sinalizar o erro;
4. Detectar e solicitar a retransmissão em caso de erro;
5. Detectar e corrigir os erros na recepção de forma automática.
Exemplo1:
caracter A no código ASCII é representado por 1000001
O bit P de paridade é calculado e transmitido:1000001P → nº par de 1’s → P = 0
(paridade par ), logo transmite-se 1000001 0
O receptor calcula a paridade da mensagem e compara-a com o bit P recebido: P =
paridade → transmissão correcta
Usada em muitas aplicações de hardware (onde uma operação pode ser repetida em
caso de dificuldade, ou onde é útil a simples detecção de erros). Exemplo: Bus PCI e
SCSI.
Usada em muitas aplicações de hardware (onde uma operação pode ser repetida em
caso de dificuldade, ou onde é útil a simples detecção de erros). Exemplo: Bus PCI e
SCSI.
são chamados de erros aleatórios, quando este tipo de incidência ocorre de maneira esporádica
e independente; já quando ocorrem em surtos, ou seja, em sequência de vários erros
consecutivos, são denominados erros em rajadas (ALENCAR, 2007).
Desta forma, visando atingir uma maior confiabilidade do sistema, utiliza-se o bloco codificador
do canal, cuja a principal função é a aplicação de códigos de controle de erros, que são métodos
que buscam superar os efeitos de ruídos e interferências, presentes de forma degenerativa no
canal de transmissão. Estes códigos se originaram de técnicas baseadas na introdução de
redundância a mensagem a ser enviada, de forma que o receptor através de processamentos
lógicos consiga identificar e aplicar uma medida de tratamento, caso o sinal recebido estiver sido
corrompido (JESZENSKY, 2004; ROCHOL, 2012; YOUNG, 2006).
Quem primeiro se preocupou de forma sistemática com esse assunto foi Richard Wesley
Hamming (1915-1998). Em 1950, ele publicou, no Bell System Technical Journal de abril, um
trabalho com o título de: Error Detecting and Error Correcting Codes, que pode ser considerado a
primeira sistematização teórica sobre detecção e correção de erros (ROCHOL, 2012, p. 249).
As técnicas empregadas para o controle de erros podem ser classificadas em dois grupos
principais: detecção e correção. Nas técnicas de correção de erros, é adicionado a mensagem
original uma quantidade suficiente de redundância, para que no receptor, o decodificador seja
capaz de identificar se a mensagem recebida foi corrompida a ponto de conter erros, e possa
corrigir estes erros e recuperar a mensagem original. Já os códigos baseados em técnicas de
detecção de erros, o codificador do canal adiciona redundância apenas para que o receptor
deduza se houve o erro, mas sem identificar qual, e em seguida, caso o sistema possua algum
mecanismo ARQ (Automatic-Repeat Request), solicite automaticamente uma retransmissão
(TENENBAUM, 2003; YOUNG, 2006).
A princípio, parece que a correção é sempre melhor, pois com a detecção somos
forçados a abandonar a mensagem e, em geral, pedir a transmissão e outra cópia. Isso
utiliza largura de banda e pode introduzir latência enquanto se espera a retransmissão.
Porém, existe uma desvantagem na correção: ela geralmente exige um número maior
de bits redundantes para enviar um código de correção de erros tão forte (ou seja, capaz
de lidar com o mesmo intervalo de erros) quanto um código que só detecta erros.
Assim, embora a detecção de erro exija o envio de mais bits quando os erros são
encontrados, a correção de erro exige o envio demais bits o tempo todo.
De acordo com Young (2006, p.379), “uma forma de superar os efeitos de ruído e interferência
no sistema de transmissão de dados, além de aumentar a potência transmitida, é detectar a
ocorrência de erros e obter uma retransmissão[...]”.
ocorrendo de forma esporádica, será alta a probabilidade da cópia reenviada ser recebida livre
de erros (PETERSON; DAVIE, 2004).
É o que ocorre em um SCD constituído apenas por um código detector de erros, e que possua
um mecanismo ARQ, ou seja, quando o receptor detecta algum erro em um bloco de bits
recebido, este devolve uma mensagem curta ao sistema emissor; através de um percurso de
retorno, ou seja, um canal de realimentação; solicitando uma retransmissão do quadro de bits
em questão (HAYKIN; MOHER, 2008; YOUNG, 2006).
Dessa forma, podemos constatar que os códigos corretores de erros, são mais indicados para
sistemas de comunicação em que erros sejam muito prováveis, pois apesar desses códigos
necessitarem de maior quantidade de bits de redundância e de processamento, se comparados
aos códigos detectores, a necessidade de retransmissão contínua poderia introduzir uma alta
latência, a ponto de inviabilizar o sistema. Já os códigos detectores de erro, juntamente com os
mecanismos ARQ, possuem melhor desempenho para enlaces cabeados, pois esses sistemas
apresentam baixas taxas de erro. Sendo assim, consequentemente, a necessidade de
retransmissão de uma mensagem corrompida seria eventualmente baixa (PATERSON; DAVIE,
2004; TENENBAUM, 2003).
De acordo com Rochol (2012, p.254), “Existem duas grandes classes de técnicas de detecção
de erros: as técnicas baseadas em paridade e as técnicas baseadas em códigos cíclicos”.
Dentro deste contexto, nas subseções a seguir, serão abordadas de forma breve as técnicas de
paridade linear e bidimensional, que são considerados métodos primitivos, porém pioneiros, que
ainda em tempos atuais são utilizados em alguns protocolos para a detecção de erros. Já no
Capítulo 4, serão explorados de forma aprofundada, os fundamentos e características funcionais
dos métodos de CRC, os quais são largamente empregados em protocolos de comunicação de
redes de computadores.
Paridade Unidimensional
De acordo com o contexto histórico, as técnicas de paridade foram as primeiras técnicas a serem
desenvolvidas e utilizadas em SCD. Sendo que devido sua simplicidade, ainda são largamente
utilizados em protocolos de comunicação baseados em caracteres, tais como os protocolos
BSC-1 e BSC-3 (Binary Sinchronous Communication) da IBM (ROCHOL, 2012).
A operação do receptor também é simples com único bit paridade. O receptor precisa apenas
contar quantos '1' há nos d +1 bits recebidos. Se, utilizando o esquema de paridade par, for
encontrado um número ímpar de bits e valor 1, o receptor saberá que ocorreu pelo menos um
erro de bit. Mais precisamente, ele saberá que ocorreu algum número ímpar de erros de bit.
Paridade Bidimensional
A paridade bidimensional também se trata de um método simples, sendo esta, uma técnica
derivada da paridade de bloco único, contudo, possui melhor eficiência, devido sua maior
capacidade de detecção de erros.
A lógica estrutural aplicada neste método, pode ser melhor descrita por Tenenbaum (2003, p.
209), quando nos fala que:
As disparidades poderão ser consideravelmente melhoradas se cada bloco for enviado como
uma matriz retangular com n bits de largura e k bits de altura [...] Um bit de paridade é calculado
separadamente para cada coluna e afixado à matriz como sua última linha. Em seguida a matriz
é transmitida uma linha de cada vez.
A Figura 3, demostra de maneira simples, como pode ser interpretada a matriz de paridade
bidimensional, para o processamento dos bits de paridade, referentes ao bloco de verificação, o
qual é afixado como última linha da matriz. Do ponto de vista prático, primeiramente deve ser
processado o bit de paridade que será adicionado ao final de cada pacote, gerando uma última
coluna, denominada de verificação de redundância vertical (VRC - Vertical redundancy check).
Posteriormente são processados são calculados os bits de paridade para cada coluna, incluindo
os da coluna VRC, que integrarão um último pacote de verificação, geralmente intitulado de
verificação de redundância longitudinal (LRC- Longitudinal redundancy check), ou paridade
horizontal. Após tais procedimentos, os dados já estarão codificados e prontos para envio
(YOUNG, 2006).
Assim como todo código de tratamento de erros possui suas peculiaridades e limitações, com
método de paridade bidimensional não é diferente. E por mais que se enquadre na classe de
códigos detectores, este possui a capacidade de correção de erro, caso a degradação atinja um
único bit.
Como pode ser observado na Figura 4, quando ocorre um erro que atinge somente um dos bits
do bloco, é possível mapeá-lo. Neste contexto, conforme Young (2006, p.381), “a interseção da
fila e da coluna com erro de paridade é a localização do bit incorreto. Obtém se a correção
simplesmente invertendo o bit com problemas”.
Em relação a adulteração de bits, devido a inserção de erros pelo ruído presente no canal de
transmissão, Kurose e Ross (2006, p. 333-334 grifos dos autores), nos diz que: “[...] medições
demonstraram que, em vez de acontecerem independentemente, os erros frequentemente se
aglomeram em 'rajadas’”.
Sendo assim, se tratando das limitações, os códigos baseados em paridade bidimensional ainda
podem detectar mais não corrigir, qualquer combinação de erro duplo em determinado pacote.
Em relação a um bloco por inteiro e sendo n a quantidade de bits em sentido horizontal deste
bloco, ou seja, o tamanho do pacote de bits, o método ainda possibilita a detecção de erros de
uma única rajada de tamanho n, pois desta forma, se interpretarmos a estrutura deste bloco
recebido, no sistema receptor, como uma matriz, verificaríamos que um surto dessa proporção
alteraria somente um bit por coluna. No entanto, uma rajada de tamanho maior que n,
comprometeria a capacidade de detecção do sistema, pois o bloco estaria suscetível a erros
duplos em linhas e colunas com a possibilidade de não serem detectados. Assim a capacidade
Soma de Verificação
A soma de verificação também se trata um método simples, o qual devido não ser o escopo
deste trabalho não será aprofundado. De maneira resumida, a codificação baseada
em Checksum, consiste primeiramente em somar uma determinada quantidade de palavras de
código que se pretende transmitir, sendo que em seguida são enviadas as palavras de código
em questão juntamente com o resultado dessa soma. Após os dados serem encaminhados ao
sistema receptor, é realizado o mesmo cálculo em cima dos pacotes recebidos, sendo em
seguida o resultado comparado com a soma de verificação recebida. Se caso algum dado tenha
sido adulterado, incluindo os da soma de verificação, os resultados não combinarão, permitindo
que o sistema identifique que ocorreu um erro e que a mensagem está corrompida (PETERSON;
DAVIE, 2004).
1. Sinal de voz. Qual a forma Sistema para transmissão de voz Transdutor (Microfone) CF
Codificador de Fonte CC Codificador de Canal R Repetidor Lacete de assinante A/D A/D...
A/D CF MUX mais eficiente de codificar as mensagens geradas pela fonte? CC Codificação
de Linha, como codificar as mensagens para que o receptor possa detectar/corrigir os erros
de transmissão? Modulador Interface Central 2 R Meio de Transmissão R Meio de
Transmissão Interface Filtro Desmodulador Igualador (Cod. Linha) - CC c - DEMUX CF - D/A
D/A... Lacete de assinante Transdutor (Auscultador) Sinal de voz D/A Central
2. Introdução 3 O ruído, a distorção e eventuais interferências, inerentes ao processo de
transmissão do sinal, podem originar erros no sinal recebido. A codificação para controlo de
erros (CCE), também designada por codificação de canal, consiste em adicionar informação
redundante (i.e., mais bits) à mensagem original; essa redundância é utilizada na recepção
de modo a possibilitar a detecção e/ou correcção de erros que tenham eventualmente
10. Relembrar Estrutura da Trama E2 Transporta 2 canais de 64 kbit/s; f b =8448 kbit/s SAT bits
52 4 bits 52 4 bits 5 4 bits 2 bits de serviço 4 bits de controlo de justificação 4 bits de controlo
de justificação 4 bits de controlo de justificação 4 bits de justificação E E E E MUX E2 E2.
11. Classes de Códigos para Controlo de Erros 2 Codificação de canal Detecção Correcção
Bloco Bloco Convolucionais Verificação de paridade CRC Cheksum Binários Não binários
TCM Convolucionais Binários Códigos Turbo Hamming BCH Reed Solomon.
12. Códigos de blocos 3 A mensagem a transmitir é dividida em blocos de k símbolos. Cada
bloco de k símbolos da mensagem é codificado num bloco de n símbolos (palavra de
código), com n>k código de blocos (n, k). Os símbolos adicionais são designados por
símbolos de paridade. n-k símbolos de paridade k símbolos da mensagem palavra de código
com n símbolos um código de blocos é: Binário, se os símbolos forem bits Linear, se a
adição (XOR) de quaisquer duas palavras de código válidas, resulta numa palavra de código
válida cíclico, se um desvio circular de qualquer palavra de código válida, resulta numa
palavra de código válida.
13. Códigos de blocos (cont.) 4 Tipicamente é utilizada a notação vectorial, Mensagem m = (m
m 2.m k ) Palavra de código c = (c c 2..c n ) A redundância introduzida pelo código é
quantificada pela taxado código (code rate) Taxa do código = k/n i.e., quanto maior for a
redundância, menor é a taxa do código (mas maior é o número de erros que podem ser
detectados ou corrigidos) Para um código de blocos (7,4): Comprimento da mensagem k = 4
Comprimento da palavra de código n = 7 Taxa do código = 4/7 m = (), c = (), por exemplo.
14. Distância de Hamming 5 A distância de Hamming entre duas palavras de código, é o número
de diferenças entre bits correspondentes. A distância de Hamming d (,) é 2 pois = (dois s) A
distância de Hamming d (,) é 3 pois = (três s) A distância de Hamming mínima de um código,
d min, é a mais pequena distância de Hamming entre todos os pares de palavras do código.
15. Exemplo: código (5,2) 6 Mensagem Código (5,2) Palavra de código d min = 3 Qual a d min
de um código de paridade?
16. Número de Erros Detectáveis 7 É possível detectar qualquer situação de a s erros desde
que a distância de Hamming mínima de um código de blocos seja: d min = s + (É possível a
detecção de situações com mais de s erros, mas não todas.).
17. Número de Erros Corrigíveis 8 É possível corrigir qualquer situação de a t erros desde que a
distância de Hamming mínima de um código de blocos seja: d min = 2t + (É possível
efectuar-se a correcção em algumas situações com mais de t erros, mas não todas.)
21 Limite de Hamming 2 Num código (n,k) existem 2 k palavras de código distintas (as que se
podem transmitir), sendo no entanto possível receber 2 n palavras distintas (todas as que se
podem formar com n bits) Para se poderem corrigir até t erros, a distância mínima do código
deve ser 2t + O número total de palavras existentes em cada esfera, incluíndo a palavra de
código no seu centro, é t n t n i i i i (i é o número de bits em que uma dada palavra difere da
palavra de código) O número total de sequências de n bits que deverá existir para que possam
ser corrigidos até t erros, é: 2 k t i n i
23 Exemplo 23 Questão: Será possível construir um código (,7) com capacidade para corrigir
todas as situações de erro? 3 2 R: Não é possível.
30 Códigos Cíclicos (Cíclica redundância checo - CRC) 3 Seja M(x) o polinómio correspondente
à mensagem, e G(x) um polinómio conhecido pelo codificador e pelo descodificador (polinómio
gerador). Exemplo: m= () M(x)=x 9 + x 8 + x 6 + x 4 + x 3 + x + G(x) = x 4 + x + Nos códigos
CRC, os bits redundantes são determinados de modo a que a representação em polinómio da
palavra de código resultante - T(x) - seja divisível pelo polinómio gerador G(x). No exemplo
anterior: c= () bits redundantes A detecção dos erros é feita pelo receptor dividindo a palavra
recebida pelo polinómio gerador: Se o resto for zero, conclui (bem ou mal) que não houve erros.
Se o resto não for zero, conclui (e bem) que houve erros.
31 Algoritmo de geração dos códigos CRC 3 ) Seja M(x) a mensagem a transmitir e G(x), o
polinómio gerador (de grau m). 2) Obter M(x). x m (corresponde a acrescentar m bits à direita da
mensagem). 3) Efectuar a divisão (módulo 2) de M(x). x m por G(x). 4) Adicionar o resto da
divisão p(x) a M(x). x m, obtendo-se T(x).
34 Exemplo 34 Quais dos seguintes polinómios geradores garantem a detecção de erros únicos?
a) g(x)=x+ b) g(x)= x 3 c) g(x)= Resolução: A ocorrência de um erro único pode ser representada
pelo polinómio x i em que i indica a posição do erro. a) Como x i nunca pode ser divisível por x+,
garante-se a detecção de qualquer situação de erros únicos b) Se i 3, x i é divisível por g(x); só é
possível detectar erros nas posições, ou 2. c) Todos os valores de i tornam x i divisível por g(x)=,
não sendo possível detectar qualquer situação de erro.
37 Cheksum 37 Método de detecção de erros usado por vários protocolos da Internet (IP, TCP,
UDP,) Suponha-se que se pretende transmitir uma sequência de 5 números, cada um
representado com 4 bits, enviando-se também o resultado da sua adição. Como exemplo, se a
sequência de números for (7,, 2,, 6), envia-se (7,, 2,, 6, 36), onde 36 é o resultado da soma dos
números. O receptor efectua a mesma adição, e compara os resultados; se coincidirem assume
que não ocorreram erros, aceita os 5 números e descarta a soma. Para simplificar a tarefa do
receptor, em vez de se enviar o resultado da soma dos números, envia-se o seu simétrico
(checksum), i.e., (7,,2,,6,-36). Neste caso, a soma de todos os números incluindo a checksum
deve dar. Como -36 não pode ser escrito em 4 bits, representa-se o seu complemento para 5 (x5
= 9).
42 Notas finais 42 Existem vários tipos de códigos para correcção ou detecção de erros. A
escolha do(s) código(s) a usar, deverá ter em conta: O tipo de erros esperados (rajadas vs.
uniformes) A possibilidade de se efectuarem retransmissões A taxa de erros (BER) esperada A
complexidade (custo, atraso) associada aos processos de codificação e descodificação O
acréscimo de banda necessária para a transmissão