資源簡介
本人寫了一段香農編碼的matlab代碼,希望對大家有用,有不妥的地方希望大家指出
代碼片段和文件信息
function?[Encodeaverage_code_lengthHencode_inefficiency]?=?shannan_code(p)
%?求香農編碼,p:符號的概率分布
%?Encode:編碼碼字,按照符號概率從大到小排列
%average_code_length:平均碼字長度
%?H:平均碼字長度
%?encode_inefficiency:編碼效率
%Author:Leilei?Zhou
%time:2010-6-4
if(sum(find(p<=0))~=0)?
????error(‘輸入符號概率必須大于零‘);
end
if((sum(p)-1)>1e-6)
????error(‘概率之和不等于1‘);
end
p=fliplr(sort(p));
num=size(p2);
sum_p=zeros(size(p));%累加概率
code_length=zeros(size(p));
Encode={};%細胞矩陣
H=0;%信息熵
average_code_length=0;
%求累加概率、編碼效率等
for?i=1:num
????if(i==1)
????????sum_p(1)=0;
????????code_length(1)=1;
????else
????????sum_p(i)=sum_p(i-1)+p(i-1);
????????
評論
共有 條評論