Você está na página 1de 7

UNIVERSIDADE DE PERNAMBUCO

ESCOLA POLITCNICA DE PERNAMBUCO

Cdigos Corretores de Erro x Huffman

Raphael de Lima Queiroz Ribeiro


Lucas Oliveira Santos e Silva

Atividade requerida pela professora Aline


Cavalcanti, da disciplina Teoria da Informao,
do semestre 2016.2, Turma IM.

Recife,

03 de dezembro de 2016.

1
SUMRIO

Introduo 03

Hamming (7,4) 04

Exemplo 05

Hamming x Huffman 06

Concluso 07

2
Introduo

Na Teoria da informao um importante tpico o da codificao. O Papel da


codificao a de proporcionar uma forma de envio e recebimento de mais
informao em menos tempo, resumidamente, arranjar formas de compresso de
dados. Uma das codificaes mais utilizadas o Huffman, sendo encontrada em
mtodos de compresso bastante conhecidas como o zip e em imagens que sofrem
compresso, como o JPEG e o PNG.

Mas e quando essa informao codificada, enviada por um canal e


transmitida ser que conseguimos fazer uso de qualquer tipo de codificao, por
exemplo o prprio Huffman?

Resposta curta: no. Resposta longa: dependendo do meio que estamos


enviando nossa informao, perdas podem ocorrer. Se tivermos trabalhando com
binrios por exemplo, o 0 pode se transformar em um 1. E ai que entramos na
segunda parte desse nosso trabalho.

Utilizando cdigos corretores de erro podemos na hora da demodulao


ajeitar os erros que foram criados pelos rudos externos ao nosso sistema. Entre os
existente podemos citar os cdigos de redundncia modular tripla, a codificao de
Berger, a codificacao de Reed-Solomon, e a codificao de Hamming (7,4).

Nesse trabalho daremos um foco no ultimo, alm de fazer a demonstrao


prtica desse cdigo.

3
Hamming (7,4)

Um dos cdigos corretores de erros mais conhecidos, Hamming criou uma


famlia de cdigos. Porm quando falamos de cdigo de Hamming normalmente
estamos nos referindo ao Hamming (7,4).

O Cdigo de Hamming faz o seguinte: ele codifica 4 bits de dados em bits de


7, adicionando 3 bits de paridade, ou seja, a cada quatro bits de informao temos 3
de paridade. Esse cdigo pode corrigir qualquer erro de um nico bit, ou detectar
todos os erros de um e dois bits. Sendo assim se o nosso problema no ocorrer
durante um burst, o cdigo Hamming(7,4) passa no teste. uma situao
extremamente atpica a ocorrncia da alterao de 2 bits nos 7, sendo o canal
considerado extremamente ruidoso.

Esse cdigo pode ser calculado com recursos da lgebra linear, atravs de
matrizes, visto que um cdigo completamente linear. Para efeito prtico
normalmente considerado 2 matrizes, a matriz geradora do cdigo H e a matriz de
paridade H.

A correo do erro no cdigo acontece de uma forma simples. Supondo que


um nico erro ocorreu podemos escrever matematicamente que:

= +

com ei sendo a posio i do vetor nulo com 1 em i. Multiplicando pelo vetor H


ficamos com:

= ( + ) = +

Sendo o Hr o vetor corrigido.

A descodificao realizada depois de termos certeza que o vetor recebido


est livre de erros, voltando a termos apenas 4 bits.

A seguir podemos ver o exemplo bem bsico do cdigo Hamming (7,4),


escrito por J C e disponvel no frum oficial do Matlab o Mathworks.

4
Exemplo
%Simulao de Codigo Hamming-JC-4/15/06
%Para rodar pressione F5 e observe a janela de comandos
%Simulao para codificao e decodificao de um Cdigo Hamming (7,4). O
%Decodificador pode corrigir um erro como mostrado e como a teoria nos diz.
%A tabela no final do arquivo mostra as vrias possibilidades de sada com
%diferentes posies de erro. O erro pode ser colocado em qualquer um dos 7
%bits e a sua correo ser feita.
clear
n = 7%Numero de bits de palavra por bloco
k = 4%Numero de bits de mensagem por bloco
A = [ 1 1 1;1 1 0;1 0 1;0 1 1 ];%Parity submatrix-Need binary(decimal
combination of 7,6,5,3)
G = [ eye(k) A ]%Generator matrix
H = [ A' eye(n-k) ]%Parity-check matrix
% CODIFICADOR%
msg = [ 1 1 1 1 ] %Message block vector-change to any 4 bit sequence
code = mod(msg*G,2)%Encode message
%ERRO DO CANAL(ADICIONE UM ERRO NO CDIGO)%
%code(1)= ~code(1);
code(2)= ~code(2);
%code(3)= ~code(3);
%code(4)= ~code(4);%Selecione 1, comente os outros
%code(5)= ~code(5);
%code(6)= ~code(6);
%code(7)= ~code(7);
recd = code %Received codeword with error
% DECODIFICADOR%
syndrome = mod(recd * H',2)
%Find position of the error in codeword (index)
find = 0;
for ii = 1:n
if ~find
errvect = zeros(1,n);
errvect(ii) = 1;
search = mod(errvect * H',2);
if search == syndrome
find = 1;
index = ii;
end
end
end
disp(['Position of error in codeword=',num2str(index)]);
correctedcode = recd;
correctedcode(index) = mod(recd(index)+1,2)%Corrected codeword
%Strip off parity bits
msg_decoded=correctedcode;
msg_decoded=msg_decoded(1:4)

5
%Error position Syndrome Decimal 4 bit word codeword dmin
% 1 111 7 0000 0000000
% 2 110 6 0001 0001011 3
% 3 101 5 0010 0010101 4
% 4 011 3 0011 0011110 3
% 5 100 4 0100 0100110 3
% 6 010 2 0101 0101101 3
% 7 001 1 0110 0110011 4
%No error will give syndrome of 000 0111 0111000 3
% 1000 1000111 4
% 1001 1001100 3
% 1010 1010010 4
% 1011 1011001 3
% 1100 1100001 3
% 1101 1101010 3
% 1110 1110100 4
% 1111 1111111 3
%Any exclusive or additions of any two codewords should give another
%codeword.

Hamming x Huffman

Apesar de ter sido pedido um tpico falando as vantagens e desvantagens de


adotar um ao outro, essa comparao no muito boa, j que eles tm papis
diferentes e inclusive podem ser aplicados junto. Artigos que falam de tamanho ideal
de palavra para um cdigo em conjunto Huffman-Hamming existem na internet.

Mas basicamente a vantagem existente no Hamming a possibilidade de


detectar e corrigir um erro no cdigo aps a decodificao, no existente no
Huffman.

6
Concluso

Nesse trabalho foi possvel termos uma ideia de cdigos corretores de erros,
em especial o Hamming (7,4). Compreendemos o seu funcionamento e vimos um
exemplo prtico, que pode ser visto por um software como, por exemplo, o Matlab.
Tambm chegamos concluso de que o Hamming e o Huffman podem ser
utilizados em conjunto.