(matlab)あるシーケンスをHuffman符号化する

5425 ワード

使用方法:シーケンスを入力し、このシーケンスを多重(デフォルトは2元)Huffman符号化します.
@author Boychenney
@version 2011年12年30日

Contents

  • パラメータ説明
  • パラメータの説明


    @param Pj_i変換確率行列
    @param Pi初期入力確率分布ベクトル、必ずカラムベクトル
    *@param levelのデフォルトは2です.つまり、二元Huffman符号化を行います.
    @return comp符号化後のコードワード
    *複数の出力が必要な場合、2番目は辞書(dict)、3番目はソースエントロピー(entropy)、4番目は対応する符号化情報(str)
    function [comp,varargout]=huffEncode(seq,p,level) 
    % Huffman  
    if nargin < 3 
     level=2; 
    end 

     
    % log2(r) 
    a=log2(level); 

     
    %  
    len=length(p); 

     
    % , 1 len 
    symbols=1:len; 

     
    % huffmandict ——  
    [dict,avg_len]=huffmandict(symbols,p,level); 

     
    % ,  
    p(p<1e-6)=1; 
    entropy=-p*log2(p.'); 

     
    % :huffmanenco 
    comp=huffmanenco(seq,dict); 

     
    %  
    source_len=length(seq); %  
    eta = entropy/(avg_len*a); %  :eta=H(x)/( *log2(r)) 
    codeseq_len=length(comp); %  
    actual_avg_len=codeseq_len/source_len; % = /  
    actual_eta= entropy/(actual_avg_len*a); % =H(x)/( *log2(r)); 

     
    %  
    str = sprintf(' :
    :%8.4f bit/ ; :%d
    :%8.4f; :%8.4f
    :%8.4f%%; :%8.4f%% '
    ,...
     entropy,source_len,avg_len,actual_avg_len,eta*100,actual_eta*100); 
     %  
     if nargout>1 
     varargout{1}=dict; 
     end 
     if nargout>2 
     varargout{2}=entropy; 
     end 
     if nargout>3 
     varargout{3}=str; 
     end 

     
    【 】 

    p=[0.2,0.19,0.18,0.17,0.15,0.1,0.01];%ソースには7つのシンボルがあり、確率分布はpである.
    slen=1000;
    seq=randsrc(1,slen,[1:7;p]);%1~7からなるランダムシーケンスを1000個生成
    [comp,dict,entropy,str]=huffEncode(seq,p);%シーケンスをhuffman符号化する
    disp('−−符号化されるソースシンボルおよび確率分布−');
    table=[1:7;p];
    disp(table);
    disp('-----二元符号化---=');
    disp(str);%二元ハフマン符号化効果を表示
    [comp2,dict2,entropy2,str2]=huffEncode(seq,p,3);
    disp('-----三元符号化---=');
    disp(str2);%三元ハフマン符号化効果を表示
    【 】
    
    --- ---
    
      Columns 1 through 6
    

     
        1.0000    2.0000    3.0000    4.0000    5.0000    6.0000
    
        0.2000    0.1900    0.1800    0.1700    0.1500    0.1000
    

     
      Column 7
    

     
        7.0000
    
        0.0100
    

     
    ----- ---=
    
       :  2.6087 bit/ ; :1000
    
       :  2.7200; :  2.7440
    
      : 95.9075%; : 95.0686% 
    
    ----- ---=
    
       :  2.6087 bit/ ; :1000
    
       :  1.8000; :  1.7980
    
      : 91.4386%; : 91.5404% 
    

    Published with MATLAB® 7.11