哈夫曼编码及Matlab实现资料_第1页
哈夫曼编码及Matlab实现资料_第2页
哈夫曼编码及Matlab实现资料_第3页
哈夫曼编码及Matlab实现资料_第4页
哈夫曼编码及Matlab实现资料_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

收集于网络,如有侵权请联系管理员删除收集于网络,如有侵权请联系管理员删除哈夫曼编码及Matlab

实现

哈夫曼编码及Matlab哈夫曼编码及Matlab实现1=)■■■哈夫曼编码是一种所得码字是异前置的变长码,其平均码长最短,被称为最佳变长码,也称为哈夫曼编码。其具体编码方法如下:(1)将信源信息(符号)按概率大小排队;(2)从最小概率的两个消息开始编码,并给予一定的编码规则,如小概率的下支路编为1(或0),大概率的上支路变为0(或1),若两者概率相等,仍是下支路为1上支路为0;(3)将已经编码的两个消息对应概率合并,并重新按概率大小排队,重复步骤(2);(4)重复步骤(3),直至合并概率归一为止;(5)变成的变长码是按后出先编方式,即从概率归一的树根沿编码路线逆行至对应的消息。实验内容:消息概率(U(p))u10.20u2消息概率(U(p))u10.20u20.19u30.18u40.17u50.15u60.10编码1.010110.200.260.350.390.610.190.0.26/0.350.390.180.0.20/0.26-0.170.is0.气0.15017」屮110000010100110给定离散信源:U-uuuuuuu=1234567_p_0.200.190.180.170.150.100.01对其进行哈夫曼编码,其理论结果如下:

u0.0101117哈夫曼编码Matlab代码:p=[0.2,0.19,0.18,0.17,0.15,0.1,0.01];p=sort(p,'descend');%降序排列H=sum(-p.*log2(p));%求得信息熵n=length(p);%离散信源长度q=p;m=zeros(n-1,n);fori=1:n-1%对第一行进行编码[q,l]=sort(q);m(i,:)=[l(1:n-i+1),zeros(1,i-1)];q=[q(1)+q(2),q(3:n),1];endfori=1:n-1c(i,:)=blanks(n*n);endc(n-1,n)=T;c(n-1,2*n)='0';fori=2:n-1c(n-i,1:n-1)=c(n-i+1,n*(find(m(n-i+1,:)==1))...-(n-2):n*(find(m(n-i+1,:)==1)));c(n-i,n)='1';%在支路的第一个元素最后补1c(n-i,n+1:2*n-1)=c(n-i,1:n-1);c(n-i,2*n)='0';%在支路的第一个元素最后补0forj=1:i-1c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,...n*(find(m(n-i+1,:)==j+1)-1)+1:n*find(m(n-i+1,:)==j+1));%分配码字endendfori=1:nh(i,1:n)=c(1,n*(find(m(1,:)==i)-1)+1:find(m(1,:)==i)*n);ll(i)=length(find(abs(h(i,:))〜=32));%计算每一个哈夫曼编码的长度endL=sum(p.*ll);%求得平均码长t=H/L;%求得编码效率

运行结果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论