霍夫曼编码的MATLAB实现完整版_精品文档.doc
- 文档编号:973211
- 上传时间:2022-10-14
- 格式:DOC
- 页数:2
- 大小:28.50KB
霍夫曼编码的MATLAB实现完整版_精品文档.doc
《霍夫曼编码的MATLAB实现完整版_精品文档.doc》由会员分享,可在线阅读,更多相关《霍夫曼编码的MATLAB实现完整版_精品文档.doc(2页珍藏版)》请在冰豆网上搜索。
%哈夫曼编码的MATLAB实现(基于0、1编码):
clc;
clear;
A=[0.3,0.2,0.1,0.2,0.2];信源消息的概率序列
A=fliplr(sort(A));%按降序排列
T=A;
[m,n]=size(A);
B=zeros(n,n-1);%空的编码表(矩阵)
fori=1:
n
B(i,1)=T(i);%生成编码表的第一列
end
r=B(i,1)+B(i-1,1);%最后两个元素相加
T(n-1)=r;
T(n)=0;
T=fliplr(sort(T));
t=n-1;
forj=2:
n-1%生成编码表的其他各列
fori=1:
t
B(i,j)=T(i);
end
K=find(T==r);
B(n,j)=K(end);%从第二列开始,每列的最后一个元素记录特征元素在
%该列的位置
r=(B(t-1,j)+B(t,j));%最后两个元素相加
T(t-1)=r;
T(t)=0;
T=fliplr(sort(T));
t=t-1;
end
B;%输出编码表
END1=sym('[0,1]');%给最后一列的元素编码
END=END1;
t=3;
d=1;
forj=n-2:
-1:
1%从倒数第二列开始依次对各列元素编码
fori=1:
t-2
ifi>1&B(i,j)==B(i-1,j)
d=d+1;
else
d=1;
end
B(B(n,j+1),j+1)=-1;
temp=B(:
j+1);
x=find(temp==B(i,j));
END(i)=END1(x(d));
end
y=B(n,j+1);
END(t-1)=[char(END1(y)),'0'];
END(t)=[char(END1(y)),'1'];
t=t+1;
END1=END;
end
A%排序后的原概率序列
END%编码结果
fori=1:
n
[a,b]=size(char(END(i)));
L(i)=b;
end
avlen=sum(L.*A)%平均码长
H1=log2(A);
H=-A*(H1')%熵
P=H/avlen%编码效率
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 霍夫曼 编码 MATLAB 实现 完整版 精品 文档