SM - Sistemas Multimédia CODIFICAÇÃO DE FONTE (parte 2) 4.º / 6.º semestre LEIC (verão 2016/2017)
Tópicos Propriedades dos códigos de fonte Código ótimo e código ideal Singularidade, descodificação única, descodificação instantânea, livre de prefixo Desigualdade de Kraft Definição Propriedades Algoritmos de construção de códigos Huffman, Shannon-Fano, Unário, Golomb 23/03/2017 2
Propriedades dos códigos de fonte Um código ótimo verifica as seguintes condições: Se p( xi) p( x j) então As duas palavras maiores têm o mesmo comprimento l( c( xi)) l( c( x j)) diferem apenas no último dígito correspondem aos símbolos menos prováveis O comprimento médio das palavras está contido no intervalo H( X) L H( X) 1 23/03/2017 3
Propriedades dos códigos de fonte Um código diz-se ideal, para determinada fonte, quando L H(X) Como consequência, a eficiência do código ideal é 100% H( X) H( X) 1 L H( X) 23/03/2017 4
Propriedades dos códigos de fonte Por exemplo, o código {0, 10, 110, 111} é ótimo Para a distribuição de probabilidades dada por {1/2, 1/4, 1/8, 1/8} este código torna-se ideal O código {0,10,110,1110} não é ótimo e nunca poderá ser ideal 23/03/2017 5
Propriedades dos códigos de fonte Singularidade Um código diz-se singular se existirem símbolos diferentes codificados com a mesma palavra de código x i x j c( xi) c( x j) Um código diz-se não singular quando a símbolos diferentes correspondem palavras de código diferentes x i x j c( xi) c( x j) 23/03/2017 6
Propriedades dos códigos de fonte Singularidade Por exemplo: o código {0, 0, 10, 11} é singular o código {1, 0, 10, 11} é não singular 23/03/2017 7
Propriedades dos códigos de fonte Descodificação única Um código tem descodificação única quando a sua extensão para a ordem n é não singular Não existe ambiguidade de descodificação, quando se concatenam palavras do código 23/03/2017 8
Propriedades dos códigos de fonte Descodificação única Por exemplo: o código {1, 0, 10, 11} não tem descodificação única A sequência 11 será uma ocorrência do quarto símbolo ou duas ocorrências do primeiro símbolo? A sequência 10 será uma ocorrência do terceiro símbolo ou uma ocorrência do primeiro símbolo seguida de uma ocorrência do segundo símbolo? os códigos {0, 01, 011, 0111} e {0, 10, 110, 1110} têm descodificação única 23/03/2017 9
Propriedades dos códigos de fonte Descodificação instantânea Um código tem descodificação instantânea quando se carateriza por ter auto-pontuação Como consequência, conseguimos descodificar imediatamente a sequência de símbolos, através da análise da sequência de códigos 23/03/2017 10
Propriedades dos códigos de fonte Descodificação instantânea Por exemplo: o código {0, 01, 011, 0111} tem descodificação única, mas não instantânea o código {0, 10, 110, 1110} tem descodificação única e instantânea o código {0, 10, 110, 111} tem descodificação única e instantânea o código {00, 10, 01, 11} tem descodificação única e instantânea 23/03/2017 11
Propriedades dos códigos de fonte Livre de prefixo Um código diz-se livre de prefixo, quando as palavras de menor dimensão não são prefixo das palavras de maior dimensão Tem sempre descodificação instantânea 23/03/2017 12
Propriedades dos códigos de fonte Livre de prefixo Por exemplo: o código {0, 01, 011, 011} não é livre de prefixo o código {0, 10, 110, 1110} é livre de prefixo o código {0, 10, 110, 111} é livre de prefixo 23/03/2017 13
É definida por Desigualdade de Kraft Se determinado conjunto de M palavras de código com comprimento l i respeitar a desigualdade de Kraft, então existe um código instantâneo formado por Um conjunto com esse número de palavras, M As palavras têm comprimento l i 23/03/2017 14
Desigualdade de Kraft Considerando o código {0, 1, 11}, temos e como tal não respeita a desigualdade de Kraft Considerando o código {0, 10, 11}, temos respeitando a desigualdade de Kraft, com igualdade Para o código {0, 10, 110}, temos 23/03/2017 15
Desigualdade de Kraft Considerações sobre o valor de D: Com D > 1, não é possível estabelecer um código instantâneo com M palavras com os comprimentos indicados Com D 1, é possível estabelecer um código instantâneo com M palavras com os comprimentos indicados Com D=1, o código é completo (tem aproveitamento máximo) Com D < 1, o código tem redundância https://en.wikipedia.org/wiki/kraft%27s_inequality 23/03/2017 16
Código de Huffman Ordenar os símbolos por probabilidade decrescente e considerá-los como nós duma árvore Enquanto houver mais do que um nó: Agrupar os dois nós de menor probabilidade e formar um novo nó com probabilidade igual à soma dos dois nós que se agruparam; Arbitrariamente atribuir os códigos 0 e 1 a cada ramo dos nós que se juntaram O código de cada símbolo obtém-se pela leitura sequencial da raiz até ao nó final (folha) a que pertence o símbolo em causa https://en.wikipedia.org/wiki/huffman_coding 23/03/2017 17
Código de Huffman Exemplo de construção de árvore a 3/8 1 a 1 b 1/4 1 b 01 c 1/4 1 0 0 5/8 c 001 d 1/8 0 3/8 d 000 Entropia da fonte H(X) = 1.9056 Eficiência = H(X) / L Comprimento médio das palavras do código L = 2 = 0,9528 23/03/2017 = 95,28 % 18
Código de Huffman Cálculo em MATLAB do código de Huffman Fonte com 8 símbolos % Lista de símbolos. symbols = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}; % Probabilidades dos símbolos. p = [0.25, 0.2, 0.2, 0.18, 0.09, 0.05, 0.02, 0.01]; % Obter o código. dict = huffmandict(symbols,p) 23/03/2017 19
Código de Huffman Cálculo em MATLAB do código de Huffman Fonte com 8 símbolos a --> 01 prob=0.25 b --> 11 prob=0.20 c --> 10 prob=0.20 d --> 000 prob=0.18 e --> 0010 prob=0.09 f --> 00110 prob=0.05 g --> 001110 prob=0.02 h --> 001111 prob=0.01 H(X)=2,5821 e L=2,63; eficiência = 98,18 % 23/03/2017 20
Código de Huffman Histogramas da eficiência e da redundância, para 1000 codificações de fontes de M=16 símbolos 23/03/2017 21
Código de Shannon-Fano Ordenar os símbolos por probabilidade decrescente Considerar todos os símbolos para a alocação inicial de bits De forma recursiva, dividir os símbolos em duas partes, approximadamente com o mesmo peso (probabilidade) Atribuir bit 1 a uma parte Atribuir bit 0 à outra parte Proceder assim, até todas as partes conterem apenas um símbolo 23/03/2017 22
Código de Shannon-Fano Exemplo https://en.wikipedia.org/wiki/shannon%e2%80%93fano_coding Fonte com M=6 símbolos e probabilidades {0,36; 0,18; 0,18; 0,12; 0,09; 0,07} 23/03/2017 23
Código de Shannon-Fano Fonte com M=5 símbolos e probabilidades {0,35; 0,17; 0,17; 0,16; 0,15} Simbolo Probabilidade #1 #2 #3 A 0,35 0 0 B 0,17 0 1 C 0,17 1 0 D 0,16 1 1 0 E 0,15 1 1 1 23/03/2017 24
Algumas considerações Código de Huffman realiza abordagem bottom-up Código de Shannon-Fano constrói o código de forma top-down O código de Huffman é, regra geral, mais eficiente Por exemplo, para a distribuição de probabilidades {0,35; 0,17; 0,17; 0,16; 0,15} (com H(X)= 2,23) o código de Huffman obtém palavras com comprimento {1, 3, 3, 3, 3}, com L=2,30; eficiência de 97,08% o código de Shannon-Fano obtém palavras com comprimentos {2, 2, 2, 3, 3}, com L=2,31; eficiência de 96,66% 23/03/2017 25
Código unário Ordenar os símbolos por probabilidade decrescente Realizar a atribuição das configurações binárias 0 10 110 1110 11110 111110... 111111111...0 23/03/2017 26
Código de Golomb Ordenar os símbolos (números inteiros não negativos) por probabilidade decrescente Representa os números n através do resultado da sua divisão inteira pelo parâmetro m, obtendo-se o quociente q e o resto r o quociente q é representado através de código unário o resto é r é representado por código binário natural modificado 23/03/2017 27
n q r 0 0 0 1 0 1 2 0 2 3 1 0 4 1 1 5 1 2 6 2 0 7 2 1 8 2 2 9 3 0 10 3 1......... Código de Golomb Análise da evolução de q e r para m=3 e m=5 m=3 n q r 0 0 0 1 0 1 2 0 2 3 0 3 4 0 4 5 1 0 6 1 1 7 1 2 8 1 3 9 1 4 10 2 0......... m=5 23/03/2017 28
Código de Golomb Codificação do quociente em código unário q Código 0 0 1 10 2 110 3 1110 4 11110 5 111110 6 1111110...... 23/03/2017 29
Código de Golomb Codificação do resto em código binário modificado Para m=3, temos: O primeiro valor do resto é codificado com 1 bit Os restantes valores são codificados como r+1, usando 2 bits Para m=5, temos: Os primeiros três valores do resto é codificado com 2 bits Os restantes valores são codificados como r+3, usando 3 bits 23/03/2017 30
Código de Golomb Palavras de código para m=3 n q r Código 0 0 0 00 1 0 1 010 2 0 2 011 3 1 0 100 4 1 1 1010 5 1 2 1011 6 2 0 1100 7 2 1 11010 8 2 2 11011 9 3 0 11100 10 3 1 111010............ 23/03/2017 31
Código de Golomb Palavras de código para m=5 n q r Código 0 0 0 000 1 0 1 001 2 0 2 010 3 0 3 0110 4 0 4 0111 5 1 0 1000 6 1 1 1001 7 1 2 1010 8 1 3 10110 9 1 4 10111 10 2 0 11000............ 23/03/2017 32
Algumas considerações Os algoritmos de Huffman e Shannon-Fano constroem a lista de palavras de código, de forma fechada Lista de símbolos Função massa de probabilidade para os símbolos O código unário e o código de Golomb estabelecem regras de construção gerais e não necessitam de receber listas fechadas de símbolos e probabilidades 23/03/2017 33