clc; clf; clear;

L=3; m=2; M=m^L; N=100000;  % M= nombre de symboles de la source
                            % m= nombre de symboles du code 
                            % L= longueur du code
x=randint(N,1,M);  
h=0:0.01:M-1;

figure(1); subplot(221); hist(x,h);                   
xlabel('...'); ylabel('...'); 
title('...');        
grid;


frequence=hist(x,h); Lf=length(frequence);
P=zeros(1,M); I=zeros(1,M);
j=1;
for i=1:Lf
    if frequence(i)>0
    P(j)=frequence(i); j=j+1;
    end;
end;

P=P/N  
I=-log2(P);

H=0;
for i=1:M
    H=H-P(i)*log2(P(i));
end;
H

% -> Source d'une densité de probabilité particulière

M=8; symbols=[0:M-1];
Pz=[0.0078 0.0625 0.2539 0.4713 0.1250 0.060 0.0156 0.0039];
z=randsrc(N,1,[symbols;Pz]);

subplot(222); hist(z,h);
xlabel('...'); ylabel('...'); 
title('...');  grid;

frequence=hist(z,h); Lf=length(frequence);
P=zeros(1,M); Iz=zeros(1,M);
j=1;
for i=1:Lf
    if frequence(i)>0
    P(j)=frequence(i)/N; j=j+1;
    end;
end;
Pz

Hz=0;
for i=1:M
    Hz=Hz-Pz(i)*log2(Pz(i));
end;
Hz


% -> Codage de la source z
[Dico,LMoy]=huffmandict(symbols,P)
code=huffmanenco(z,Dico);
for i=1:8
    symbole=Dico{i,1}; symbole;
    codage=Dico{i,2}; codage;
end
% -> Décodage
decodez=huffmandeco(code,Dico);
erreur=symerr(z,decode)

                                    