340 likes | 420 Views
Fiabilidade de Sistemas Informáticos. Códigos de Detecção e Correcção de erros. Trabalho realizado por: Clara Dimene nº15589. Objectivos. Código de Hamming; Definição Codificação Descodificação Exemplos Código de Redundância Cíclica; Definição Codificação Descodificação
E N D
Fiabilidade de Sistemas Informáticos Códigos de Detecção e Correcção de erros Trabalho realizado por: Clara Dimene nº15589
Objectivos • Código de Hamming; • Definição • Codificação • Descodificação • Exemplos • Código de Redundância Cíclica; • Definição • Codificação • Descodificação • Código de Berger • Definição • Codificação
Codificação • Para enviar uma mensagem através de um canal de transmissão é necessário acrescentar redundância, ou seja codificar. • É uma das técnicas que suporta a tolerância a falhas em hardware, • É a adição de bits de verificação aos bits que contêm a informação de modo que os erros ocorridos em alguns bits possam ser detectados e se possível corrigidos; • O erro é detectado através da inconsistência na integridade estrutural dos dados
Codificação • Códigos comuns usados na tolerância a falhas em hardware: • Código de Hamming; • Código de Redundância Cíclica; • Código de Berger
Descodificação • Depois das palavras de código calculadas • ou seja, depois das mensagens terem sido codificadas e transmitidas no canal; • Têm de ser descodificadas • Temos que ver se a palavra recebida é uma palavra de código válida; • Se não for é porque a palavra contém erros; • Então temos que eliminar esses erros e obter a palavra de código transmitida;
Detecção e Correcção de Erros • É baseada na redundância - acréscimo do número de bits; Exemplo: • Palavra de dados: 01 11 • Palavra código: 011 110 • A sequência de bits a ser transmitida terá então um tamanho n = m + k. Esta sequencia é conhecida como palavra de código;
Detecção e Correcção de Erros • Se o número k de bits redundantes for suficientemente grande, alem da correcção é possível também a detecção; • A detecção e correcção de erros dependem da distância de Hamming do código completo;
Detecção e Correcção de Erros • Distância de Hamming • É o número mínimo de bits que diferem entre si quaisquer duas palavras do código. • Quando uma palavra de código chega ao destino é comparada com uma tabela contendo todas as possíveis instruções tabela de descodificação. • A comparação é feita entre a palavra recebida e as palavras contidas na tabela de descodificação.
Detecção e Correcção de Erros • Suponhamos que é enviada num determinado instante a instrução [01011] fecha comporta; • E por acção da interferência seja recebida no receptor a palavra binária [01001] ; • O descodificador no receptor calcula as distâncias de Hamming entre a palavra recebida e todas as possíveis instruções válidas da tabela de descodificação.
Detecção e Correcção de Erros • A instrução originalmente transmitida é aquela que tem a menor distância de Hamming da palavra recebida com erro é mais parecida com a palavra recebida. • Logo o descodificador infere que a palavra originalmente transmitida é [01011] menor distância de Hamming.
Detecção e Correcção de Erros • Detecção de n bits errados: é possível caso a distância de Hamming entre a palavra de dados e a palavra de código seja d = n+1. • Correcção de n bits errados : possível caso a distância de Hamming entre a palavra de dados e a palavra de código seja igual a d=2n +1.
Código de Hamming • Correctores de erros simples, ou seja permitem correcção automática de 1 bit errado; • Ou detectores de erros duplos; • A distância mínima é sempre 3(corrige um erro ou detecta 2 erros)
Código de Hamming • Os bits de verificação/paridade são potências de 2; • Bits de verificação são colocados de modo que a palavra recebida indique onde ocorreu o erro; • Todas as outras posições são bits de dados; • Bits da palavra de código são enumerados da esquerda para a direita; • Um bit de dados pode contribuir em diversos bits de verificação;
Código de Hamming • Exemplo prático: • Mensagem: 10001101(8 bits) • Palavra de código origem: • Bits de paridade: 1,2,4 e 8 • Bits a 1: 12,7,6,3 • Código de correcção (representado em binário): 1100(12) xor 0111(7) xor 0110(6) xor 0011(3) = 1110 3210 (posição)
Código de Hamming- Detecção • Recepção sem erros • Transmissão: 100011101110 • Recepção: 100011101110 1100 (12) xor 1000 (8) xor 0111 (7) xor 0110 (6) xor 0100 (4) xor 0011 (3) xor 0010 (2) = 0000
Código de Hamming - Detecção • Recepção com erros • Transmissão: 100011101110 • Recepção: 100011001110 1100 (12) xor 1000 (8) xor 0111 (7) xor 0100 (4) xor 0011 (3) xor 0010 (2) = 0110(6) indica a posição do bit errado
Código de Hamming - Correcção • A correcção é feita pela adição do bit complementar. • Transmissão: 100011101110 • Recepção: 100011001110 • Recepção após correcção: 100011101110
Código de Redundância Cíclica • È usado para a detecção de erros durante a comunicação de dados. • O CRC também é conhecido como código polinomial, pois as strings de bits são tratadas como representações de polinómios com coeficientes 0 e 1. • Representa-se uma mensagem x com k-1 bits por um polinómio M (x) de grau n; Exemplo: M(x) 1101011 (x^10+x^9+x^7+x^5+x^4)
Código de Redundância Cíclica • G (x) é o polinómio gerador de grau n com n+1 bits; • A escolha de G (x) determina quais os tipos de erros que são detectados. Polinómio Gerador : 11001 (x^4+x^3+1) G(x) Grau do Polinómio Gerador (n)=4 • A mensagem a transmitir será: 110100110000 obtida pela relação B (x)=M (x) x 2^n + R (x) • Divide-se B (x) por G (x);
CRC- Cálculo do Código no Transmissor • O resto R (x) é obtido pela relação: B (x) = G(x)*Q (x) + R (x) • A mensagem a ser enviada é obtida através da seguinte relação: • T (x)= B (x) - R (x) (XOR) 110100110000 -1010 110100111010 mensagem a enviar
CRC- Detecção de Erros • Na recepção podem ocorrer duas situações: • Caso chegue o polinómio – T(x) • Ao dividir T (x) por G (x) no receptor o resto é zero • Neste caso não houve erro de transmissão; • Note-se que uma cadeia com erros pode dar resto 0; mas se G(x) for bem escolhido isto é muito improvável
CRC- Detecção de Erros • Se houver um erro, a invés de chegar o polinómio T(x) chega T(x)+E (x) • Ao dividir T(x) + E (x) /G(x) o resto é diferente de zero; • Neste caso houve erro de transmissão; • Cada bit 1 em E (x) corresponde a um bit invertido; • T(x)/G(x) é sempre zero. O resultado é E (x)/G(x) • Todos os erros de bit isolado serão detectados porque E (x)= xi, onde i indica o bit com erro.
Código de Berger • Contam-se os zeros que cada palavra contém, e adiciona-se o número aos bits de verificação para formar o código; • Se o comprimento da palavra for do tamanho k, o esquema de codificação precisa de log2 (k) extra bits. • O código de Berger detecta todos os códigos unidireccionais, inclusive aqueles que corrompem os bits de verificação. • Seja I o numero de bits de informação e k o número de bits de verificação; • Então k=log2(I+1).
Código de Berger • Exemplo: • Código de Berger para a palavra 0111010 • Seja I= 7 bits de informação • Se k = log2(7 + 1)= 3 bits de verificação (valor absoluto) • 4 bits em binário 100 • Complemento de 100 011 • Bits de verificação obtidos = 011 • O código de Berger para 0111010 é 0111010011
Conclusão • Distância de Hamming; • A distância mínimadmin de um código é a mais pequena distância de Hamming entre duaspalavras de código válidas. • A detecção de erros é sempre possível quando o número de erros de transmissão numa palavra de código é menor que dmin. • Se número de erros é maior ou igual a dmin, a palavra com erros pode corresponder a palavras válidas e os erros não são detectados.
Conclusão • Código de Hamming; • Prevê a criação de bits redundantes, inserindo-os em determinadas posições do byte. • Este código é capaz de detectar erros duplos e corrigir erros simples. Muitos chips de memória para semicondutores usam estes códigos. • O uso deste código torna-se eficiente, em termos do número de bits necessários relativamente ao número de bits de dados, á medida que o comprimento da palavra aumenta.
Conclusão • Código de Redundância Cíclica; • Todos os erros de 1 bit; • Todos os erros de 2 bits se o grau de C (x) é superior a 3; • Todas as situações em que há um número ímpar de erros, desde que C (x) tenha os termos k + 1; • Todos os “burst errors” até m bits se C (x) é de grau m • “Burst errors” de comprimento maior ou igual a 16 bits
Conclusão • Código de Berger; • Detecta erros unidireccionais de entre todos os códigos nos quais a informação e os bits de verificação possam ser separados. • Este código apresenta o menor número de bits de verificação comparado com outros códigos separáveis. • Uma alternativa a este código pode ser obtida pela contagem do número de 1s em cada palavra e acrescentar o complementar um a um como bits de verificação.
Thanks!! Questions!!!