资源简介
本人写了一段香农编码的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);
评论
共有 条评论