Você está na página 1de 4

Teoria da Informação e Códigos

Irineu Antunes Júnior Feb. 2021

I.3 - Codificação de Fonte


Estude este capítulo da apostila e complete após as marcas de completar com texto b e de completar com
código b.
I.3.1 Introdução
Um sinal de trânsito automatizado envia 4 tipos de mensagens para a central de monitoramento (inoperante,
amarelo, vermelho e verde) conforme o esquema a seguir.

Definimos:
• Mensagem: as informações consideradas de interesse.
No diagrama, são consideradas relevantes apenas quatro mensagens: inoperante; amarelo; vermelho; verde.
• Símbolo: elemento usado para representar cada mensagem.
No diagrama, temos dois tipos de símbolos:
Palavra quaternária: 0; 1; 2; 3 (saída da fonte)

Palavra binária: 00; 01; 10; 11 (saída do codificador)

Obs.: De maneira geral, mensagens podem ser representadas por qualquer abstração matemática (vetores
num espaço qualquer, como formas de onda, matrizes, intervalos numéricos etc.) ou por qualquer grandeza
física (sinal com modulação analógica ou digital). Por isto, em princípio, os esquemas de modulação em sistemas
de comunicação podem ser considerados como formas de codificação e vice-versa.
• Tabela de consulta (codebook) da fonte
inoperante: 0
amarelo: 1
vermelho: 2
verde: 3
• Tabela de consulta (codebook) do codificador
0: 00
1: 01
2: 10
3: 11
• Código: o conjunto de palavras
C = [ C0 C1 C2 C3 ]
No diagrama anterior, a codificação de fonte foi feita usando o código
C = [ 00 01 10 11 ]
• Comprimento: a respectiva quantidade de dígitos de cada palavra
L = [ L1 L2 ... ]

Obs.: No caso de outras formas de representação, o comprimento pode ser tomado segundo uma métrica
que represente a magnitude (intensidade ou tamanho) dos elementos utilizados.

1
• Probabilidades: vetor com as probabilidades da fonte
P = [ P0 P1 ... ]
ordenadas de forma monotônica decrescente: P0 ≥ P1 ≥ . . . etc.
Para possibilitar cálculos usando vetores e matrizes, supomos que os respectivos elementos dos vetores C e L
seguem a ordenação de P.
Tendo em conta o esquema aqui exemplificado, cabe a pergunta:
Exite uma forma mais vantajosa de se codificar as mensagens da fonte?
Para responder, deve-se estabelecer uma medida de desempenho, por isto, definimos ainda:
• Comprimento médio:
X
Lm = Pi Li = PL> (dígitos)
que é a soma dos comprimentos de cada palavra ponderada pela frequência com a qual ocorre.
• Entropia: é uma medida estatística da fonte.
Para DMS, vale
X
H= Pi Ji = PJ> (bits)
em que Ji = -log(Pi) é a quantidade de informação da mensagem índice i e o logarítmo na base 2.
Na forma de vetor
J = [ -log(P0) -log(P1) . . . ]
Ressalte-se que a entropia depende apenas do conjunto de probabilidades P, logo é exclusivamente uma
característica da fonte.
O Teorema da Codificação de Fonte (DMS) afirma que o comprimento médio
H ≤ Lm
em que
H é a entropia em bits (ou bits/símbolo da fonte) que é uma quantidade adimensional;
Lm é o comprimento médio das palavras em dígitos;
Como exemplo, considere um vídeo com cada pixel gerado por uma DMS (“imagem de ruído”) e que tenha 8
bits de informação por pixel; este vídeo sofrerá distorções irreversíveis se for empregado código binário com
comprimento médio menor do que 8 dígitos binários por pixel.
Na prática, sabemos que vídeos típicos têm correlação espacial entre os pixels (as probabilidades de cada pixel
dependem das probabilidades dos pixels vizinhos) e, ainda, cada pixel é produzido por um processo estacionário
(as probabilidades variam com o tempo), resultando numa entropia menor do que o caso DMS.
Note que o modelo de fonte DMS acaba proporcionando um valor elevado para o comprimento mínimo possível,
superestimando a entropia de muitas fontes práticas.
Por fim, definimos:
• Eficiência do código:
efic = H / Lm
de maneira que um código é dito ótimo se alcançar a eficiência máxima, o que ocorre quando o seu comprimento
médio é mínimo.
E, nas condições do teorema, tem-se que 0 ≤ efic ≤ 1.
Voltando ao diagrama do sinal de trânsito, supondo que as mensagens sejam transferidas a uma taxa constante,
em condições normais, a mensagem ‘inoperante’ é raramente emitida, a mensagem ‘amarelo’ ocorre por pouco
tempo e as demais são as mais frequentes.
Isto sugere que uma forma de diminuir o comprimento médio e aumentar a eficiência é usar menos dígitos para
as mensagens mais frequentes.

2
A seguir comparamos a eficiência de alguns códigos e aproveitamos para explicar algumas formas de
classificação.
Exemplo 1 - Considere os 6 códigos na tabela.

Cód. I Cód. II Cód. III Cód. IV Cód. V Cód. VI


00 00 0 0 1 1
01 01 1 10 01 01
00 10 00 110 001 001
11 11 11 111 0001 0001

e probabilidades da fonte P = [ 0.5 0.25 0.125 0.125 ]


G Complete o código e o execute, determinando:
a) A entropia da fonte.
# a)
P=[ 0.5 b
H=-sum(log2(P).*P)
# ESaída:
H = 1.7500

b) O comprimento médio de cada código.


# b)
L=[[ 2 2 1 1 1 1]
[ 2 2 1 2 2 2 ]
[ 2 2 2 3 3 3 ]
[ 2 2 2 3 4 4 ]];
Lm=P*L
# ESaída:
Lm =

2.0000 2.0000 1.2500 1.7500 1.8750 1.8750

c) A eficiência de cada código.


# c)
efic=H./b
# ESaída:
efic =

0.87500 0.87500 1.40000 1.00000 0.93333 0.93333

d) A codificação da mensagem 0123100011021 usando cada um dos códigos.


# d)
m=[0 1 2 3 1 0 0 0 1 1 0 2 1 ]; # mensagem (símbolos da fonte)
t={... # tabela
{'00'};{'00'};{'0' };{'0' }; {'1' };{'1'}
{'01'};{'01'};{'1' };{ '10' };{ '01' };{ '01'}
{'00'};{'10'};{'00'};{ '110'};{ '001'};{ '001'}
{'11'};{'11'};{'11'};{'111'};{'0001'};{'0001'}};
c1=[t{1} t{7} t{13} t{19}]; # código 1
c2=[t{2} t{8} t{14} t{20}]; # código 2
c3=[t{3} t{9} t{15} t{21}]; # código 3
c4=[t{4} t{10} t{16} t{22}]; # código 4

3
c5=[t{5} t{11} t{17} t{23}]; # código 5
c6=[t{6} t{12} t{18} t{24}]; # código 6
m=m+1; # índices de cada símbolo na mensagem (índices começam em 1)
m1=[c1{m}] # mensagem 1 (dígitos binários na saída do codificador 1)
m2=[c2{m}] # mensagem 2 (dígitos binários na saída do codificador 2)
m3=[c3{m}] # mensagem 3 (dígitos binários na saída do codificador 3)
m4=[c4{m}] # mensagem 4 (dígitos binários na saída do codificador 4)
m5=[c5{m}] # mensagem 5 (dígitos binários na saída do codificador 5)
m6=[c6{m}] # mensagem 6 (dígitos binários na saída do codificador 6)
# ESaída:
m1 = 00010011010000000101000001
m2 = 00011011010000000101001001
m3 = 0100111000110001
m4 = 010110111100001010011010
m5 = 1010010001011110101100101
m6 = 1010010001011110101100101

Exercícios
v Considere os códigos do Exemplo 1 e escreva um programa que faça o seguinte:
1. Refaça o Exemplo 1 para o caso de fonte com distribuição uniforme.
2. Faça a decodificação da saída de cada codificador.
3. Classifique os códigos e informando:
• o comprimento (fixo ou variável);
• a decodificação unívoca;
• se é ótimo;
• se é de prefixo;
• se tem decodificação instantânea.
4. Determine o(s) código(s) ótimo(s):
a) nas condições do Exemplo 1 e
b) para o caso de distribuição uniforme.

Você também pode gostar