Tipos de codigos de fonte
Luis Henrique Assumpcao Lolis
13 de setembro de 2013
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 1
Conteudo
1 Codigo de prefixo
2 Codigo de Fano
3 Codigo de Huffman
4 Lempel-Ziv
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 2
Codigos de fonte
Compressao de dados sem perda : compactacao de dados.
Relembrando
Relembrando : O codigo deve ser unicamente decodificavelQualquer sequencia de palavras codigo e ligada a uma unicasequencia de sımbolos da fonte.
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 3
Sumario
1 Codigo de prefixo
2 Codigo de Fano
3 Codigo de Huffman
4 Lempel-Ziv
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 4
Codigo de prefixo
Para garantir a condicao, as palavras codigos pequenas naopodem ser prefixos de outras palavras codigo maiores.
O prefixo e do primeiro ao penultimo digito da palavra-codigo.
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 5
Para calcular um codigo de prefixo
1 Ordenar os sımbolos por ordem decrescente de probabilidade.2 Alocar 0 para o primeiro sımbolo e 1 aos seguintes.3 Alocar 0 no segundo digito e 1 para os seguintes.4 Repetir a operacao ate chegar no ultimo sımbolo.
Sımbolo Probabilidade
u1 1/4
u2 1/4
u3 1/8
u4 1/8
u5 1/16
u6 1/16
u7 1/32
u8 1/32
u9 1/32
u10 1/32
Codigo binario
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 6
Para calcular um codigo de prefixo
1 Ordenar os sımbolos por ordem decrescente de probabilidade.2 Alocar 0 para o primeiro sımbolo e 1 aos seguintes.3 Alocar 0 no segundo digito e 1 para os seguintes.4 Repetir a operacao ate chegar no ultimo sımbolo.
Sımbolo Probabilidade
u1 1/4
u2 1/4
u3 1/8
u4 1/8
u5 1/16
u6 1/16
u7 1/32
u8 1/32
u9 1/32
u10 1/32
Codigo binario
0
10
110
1110
11110
111110
1111110
11111110
111111110
111111111
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 6
Esse codigo e conhecido como codigo de vırgula, pois o zeroindica o fim da palavra codigo e o fato de uma palavra codigonao ter mais que 9 sımbolos.
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 7
Sumario
1 Codigo de prefixo
2 Codigo de Fano
3 Codigo de Huffman
4 Lempel-Ziv
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 8
Codigo de Fano
1 Ordenar os sımbolos por ordemdecrescente de probabilidade
2 Para o grupo de maiorprobabilidade atribuir 0 aosdois primeiros e 1 para osdemais
3 Para o grupo com 0 atribuıdo,diferenciar os sımbolos por 0 e1 na segunda linha
4 Na segunda linha a partir dosegundo grupo mais provavel,atribuir 0 aos dois primeiros e 1aos demais.
5 Repetir o procedimento aossımbolos seguintes.
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 9
Ex:Codigo de Fano
Calcular o codigo binario usando o metodo de Fano para aseguinte sequencia de sımbolos e probabilidades:
Sımbolo Probabilidade
u1 0,3u2 0,2u3 0,15u4 0,1u5 0,1u6 0,05u7 0,05u8 0,05
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 10
Sumario
1 Codigo de prefixo
2 Codigo de Fano
3 Codigo de Huffman
4 Lempel-Ziv
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 11
Codigo de Huffman
Criado para se aproximar ao maximo do limite do teorema deShannon : L ≥ (V)Para isso cada palavra codigo e analisada por vez. O numerode bits da palavra codigo e a mais perto da quantidade deinformacao do sımbolo que ela representa.
O codigo basicamente reagrupa os dois sımbolos de menorprobabilidade em um so e vai reagrupando ate sobrar somentedois grupos.
O codigo e calculado da seguinte maneira:
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 12
1 Listar os sımbolos em ordem decrescente de probabilidade. Osdois sımbolos de menor probabilidade sao listados com 0 e 1.Essa etapa e chamada de Splitting.
2 Esses dois sımbolos sao combinados e geram um outrosımbolo cuja probabilidade e a soma das probabilidades dossımbolos de origem. Etapa chamada de Combining
3 Repete as operacoes ate sobrar dois sımbolos, onde vai seacordar um 0 e um 1 para esses sımbolos
sımbolo pk pk pk pk pk Codigo r = 2
u1 0,4
u2 0,3
u3 0,1
u4 0,1
u5 0,06
u6 0,04
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 13
Calcular a eficiencia do codigo
1 Primeiro se calcula a entropia do codigo
H(V) =K−1∑k=0
pk log2
(1
pk
)=
0, 4 log2
(1
0, 4
)+ 0, 3 log2
(1
0, 3
)+ 2 · 0, 1 log2
(1
0, 1
)+
0, 06 log2
(1
0, 06
)+ 0, 04 log2
(1
0, 04
)= 2, 1435
2 Depois se calcula o tamanho medio da palavra codigo
L =
K−1∑k=0
pklk =
0, 4 + 2 · 0, 3 + 3 · 0, 1 + 4 · 0, 1 + 4 · 0, 06 + 4 · 0, 04 = 2, 2
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 15
Calcular a eficiencia do codigo1 Primeiro se calcula a entropia do codigo
H(V) =K−1∑k=0
pk log2
(1
pk
)=
0, 4 log2
(1
0, 4
)+ 0, 3 log2
(1
0, 3
)+ 2 · 0, 1 log2
(1
0, 1
)+
0, 06 log2
(1
0, 06
)+ 0, 04 log2
(1
0, 04
)= 2, 1435
2 Depois se calcula o tamanho medio da palavra codigo
L =
K−1∑k=0
pklk =
0, 4 + 2 · 0, 3 + 3 · 0, 1 + 4 · 0, 1 + 4 · 0, 06 + 4 · 0, 04 = 2, 2
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 15
Calcular a eficiencia do codigo1 Primeiro se calcula a entropia do codigo
H(V) =K−1∑k=0
pk log2
(1
pk
)=
0, 4 log2
(1
0, 4
)+ 0, 3 log2
(1
0, 3
)+ 2 · 0, 1 log2
(1
0, 1
)+
0, 06 log2
(1
0, 06
)+ 0, 04 log2
(1
0, 04
)= 2, 1435
2 Depois se calcula o tamanho medio da palavra codigo
L =
K−1∑k=0
pklk =
0, 4 + 2 · 0, 3 + 3 · 0, 1 + 4 · 0, 1 + 4 · 0, 06 + 4 · 0, 04 = 2, 2
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 15
Exercıcio:
1 Faca o codigo de Huffman dos seguines sımbolos
2 Indique sua eficiencia
Sımbolo Probabilidade Codigo Binariou1 1/32u2 1/16u3 1/4u4 1/8u5 1/8u6 1/4u7 1/32u8 1/32u9 1/32
u10 1/16
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 16
Sumario
1 Codigo de prefixo
2 Codigo de Fano
3 Codigo de Huffman
4 Lempel-Ziv
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 17
Lempel-Ziv
Huffman necessita das probabilidades da fonte. Lempel-Ziv eadaptativo e nao necessita de conhecer o modeloprobabilıstico da fonte.
Codigo de tamanho constante. O numero de palavraspossıveis indica o tamanho do codigo. O dicionario e enviadojuntamente com a informacao para decodificacao. Eficientepara grandes sequencias com alta taxa de repeticao.
O codigo separa a fonte em segmentos que sao as menoressubsequencias nao encontradas anteriormente. Baseado nanocao de dicionario. Se a letra ja esta no dicionario nao eadicionada.
No caso de sequencia binaria, as duas primeiras palavras(”0”e ”1”) ja tem o endereco 0 como indicado.
O enderecos sao contados a partir do ”1”, que e o enderecoda palavra ”0”
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 18
Lempel-Ziv
Separar a sequencia0101011100010101110100101110101010110
1 0 esta no dicionario.2 01 nao esta no dicionario, adicionar.3 0 esta. 01 esta, 010 nao, adicionar.4 1 esta, 11 nao, adicionar.
01,010,11,10,00,101,011,1010,0101,110,10101,0110
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 19
Lempel-Ziv
Indexar os segmentos que foram separados. O ”0”ja esta noendereco ”1”e o ”1”ja esta no endereco ”2”.
01,010,11,10,00,101,011,1010,0101,110,10101,0110
Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 20
Lempel-Ziv
O codigo e o endereco do prefixo do seguimento e o ultimodıgito.
0,01,1,010,11,10,00,101,011,1010,0101,110,10101,0110
0 1 000001 2 00001
01 3 00011010 4 0011011 5 0010110 6 0010000 7 00010
101 8 01101011 9 00111
1010 10 100000101 11 01001110 12 01010
10101 13 101010110 14 10010
sem prefixo
sem prefixoprefixo 01, endereço 1, último dígito 0prefixo 1, endereço 2 (10 binário), último dígito 1
prefixo 011, endereço 8 (1000 binário), último dígito 0
o ”0”recebe o prefixo 0000 (pois naotem prefixo de ninguem) e o valor ”0”.o ”1”recebe o prefixo 0000 (pois naotem prefixo de ninguem) e o valor ”1”.o ”01”recebe o prefixo 0001 (pois oprefixo e o ”0”de endereco ”1”) e ovalor ”1”.
0 ”010”recebe o prefixo 0011 (pois o
prefixo e o ”01”de endereco ”3”) e o
valor ”0”.Luis Henrique Assumpcao Lolis Tipos de codigos de fonte 21