Git Product home page Git Product logo

error-detection-algorithms's Introduction

Trabalho 1 - Descrição

O objetivo do trabalho consiste em implementar codificadores e decodificadores para detecção e correção de erros usando as técnicas de redundância de bloco, CRC e código de Hamming. Os codificadores e decodificadores deverão ser executados em linha de comando recebendo parâmetros de entrada e apresentando o resultado na saída padrão do terminal.

Versão do Python

Python 3.6.5 :: Anaconda, Inc.

Algoritmos

1. Redundância de bloco (BCC)

Codificador:

<string em ASCII> => <string codificada em hexadecimal>  

O Codificador recebe uma string em ASCII e trata os caracteres (cada um possui 7 bits) como um array bidimensional, um bit de paridade é adicionado ao final de cada caractere (assim cada caractere fica com 8 bits), após são calculados bit de paridades para cada "coluna", isto é, paridade do n-ésimo bit de cada caractere, formando assim o bloco que vai ser enviado junto com a mensagem, tudo convertido em hexadecimal.

BCC

Exemplo:

$ python bcc.py -e redes
E4CAC9CAE7CA
$ python bcc.py -e PUCRS@
A0AA87A5A681F

Decodificador:

<código em hexadecimal> => <string em ASCII> ou "ERRO"

A decodificação consiste em converter o código hexadecimal para binário. Cada par de hexadecimais é um caractere mais 1 bit de paridade, a primeira verificação é se a paridade desses 7 bits do caractere é igual ao 8º bit que é a paridade, caso seja diferente, retorna ERRO, isso é verificado em todas os caracteres. A segunda verificação é feita nas "colunas", separando o último bloco que é aquele calculado na codificação, verificamos se a paridade dos n-ésimos bits de cada caractere da mensagem é igual ao n-ésimo bit desse bloco, se algum for diferente retorna ERRO. Após a verificação, é realizado a conversão dos binários para ASCII sendo que cada bloco de bits desconsidera-se o último bit, que é a paridade e não o caractere, para conversão, o último bloco não é convertido, pois esse é o BCC, o bloco que contém as paridades das colunas.

Exemplo:

$ python bcc.py -d E4CAC9CAE7CA
redes
$ python bcc.py -d A0AA87A5A681F
PUCRS@
$ python bcc.py -d E4CAC9CAE7CB
ERRO

2. CRC

Codificador:

<string em ASCII> <polinômio gerador de ordem 5 expresso em binário> => <string codificada em hexadecimal>

O Codificador consiste em receber uma string em ASCII e para cada elemento desta string é realizado a conversão em binário com 11 bits. Logo após isso, para cada binário é executada a codificação onde: realiza-se divisões sucessivas do binário em que se o primeiro bit do binário for igual a 1 então a divisão deve ser realizada através do polinômio, caso contrário, através do binário 0 e assim sucessivamente, no final é adicionado este resultado no lugar dos últimos 4 bits do binário inicial e logo após isso, este binário é convertido para hexadecimal.

codificacao_crc

Exemplo:

$ python crc.py -e redes 10101
72365964C659736
$ python crc.py -e PUCRS@ 11001
50455243852F53640A

Decodificador:

<string em hexadecimal> <polinômio gerador de ordem 5 em binário> => <string em ASCII> e/ou "ERRO"

O decodificador consiste em receber uma string em HEXADECIMAL e para cada 3 caracteres desta string é realizado a conversão para binário. Logo após isso, para cada binário é executada a decodificação onde: realiza-se divisões sucessivas do binário em que se o primeiro bit do binário for igual a 1 então a divisão deve ser realizada através do polinômio caso contrário através do binário 0 e assim sucessivamente, no final se o resultado da divisão for igual a zero então não houve erro, caso contrário houve.

decodificacao_crc

(OBS. os caracteres sem erro devem ser apresentados e indicados os caracteres que tiveram erro na transmissão)

Exemplo:

$ python crc.py -d 72365964C659736 10101
redes
$ python crc.py -d 50455243852F53640A 11001
PUCRS@
$ python crc.py -d 70875663872E73D 10011
p_crs
ERRO nos caracteres 2

3. Código de Hamming

Codificador:

<string em ASCII> => <string codificada em hexadecimal>

O Codificador consiste em receber uma string em ASCII e para cada elemento desta string é realizado a codificação em binário com 8 bits. Logo após isso, para cada binário é executada a codificação onde:

  1. Aloca os espaços no binário para os indices de potência 2 potencia_de_dois, desta forma o o binário terá 11 bits. binario_11_bits
  2. Para cada indice que possue bit igual a 1 é a realizado a conversão em binário.
  3. Executa a operação xor (paridade) entre cada bit dos binários (gerado no passo 2).
    tabela_xor
  4. Para cada bit gerado anteriormete, é colocado no binário de 11 bits seu devido valor e na sua posição de potência de 2. mensagem_final
  5. retorna este binário (11 bits) gerado em hexadecimal.

Exemplo:

$ python hamming.py -e redes
79962C62B62C79E 
$ python hamming.py -e PUCRS@
50252F49D51B51C483  

Decodificador:

<código em hexadecimal> => <string em ASCII> 

O decodificador consite em receber uma string em HEXADECIMAL e para cada 3 caracteres desta string é realizado a conversão para binário. Logo após isso, para cada binário é executada a decodificação onde:

  1. Para cada indice que possue bit igual a 1 é a realizado a conversão em binário.
  2. Executa a operação xor (paridade) entre cada bit dos binários gerados anteriormete.
  3. converte o valor do xor para inteiro e verifica se é igual a zero. Se for então a string não tem erro, caso contrário arruma-se o erro (trocando o valor do bit naquele indice) no binário inicial. tabela_xor_com_problemas
  4. Remove os bits dos indices de potência 2 potencia_de_dois do binário inicial.
  5. Converte este binário para ASCII.

Exemplo:

$ python hamming.py -d 79962C62B62C79E
redes
$ python hamming.py -d 50252F49D51B51C483
PUCRS@
$ python hamming.py -d 79961C62B62C69E
rbdes
ERRO no caractere 2-> Correção: b
ERRO no caractere 5 -> Correção: s

error-detection-algorithms's People

Contributors

vinicerutti avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

thelufenk

error-detection-algorithms's Issues

Problemas na decodificação na hora de corrigir o bit hamming

problema nesta linha do código de decodificação do hamming:

bin_inv[index_error-1] = '1' if bin_inv[index_error-1] == '0' else '0'

Codificação que apresentaram estes problemas:

853513047F8
E229B356
FC5366354FC7D530462C
853513047F8
9D2CE618
CE4B732E
857CB7B45312D063264A

O problema esta no algoritmo ou na entrada de teste?

Erro no BCC_Decoder

Erro está na verificação de paridade das colunas, a string 'e4cac9cae74e' deveria retornar 'redes1'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.