信息论与编码课程作业_huffman编码的matlab_实现.docVIP

信息论与编码课程作业_huffman编码的matlab_实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信息论与编码课程作业 ——霍夫曼编码求信源熵和存储前后的信息量的变化 一:设计目的: 学习离散信源平均信息量的计算方法。 理解和掌握huffman编码的基本原理,实现对信源符号的huffman编码 熟悉 Matlab 编程; 二:设计原理和思路 1.信源熵的计算: 公式: Matlab实现:I=log2(1/p) 或I=-log2(p) 熵(平均自信息)的计算公式 Matlab实现:HX=sum(-x.*log2(x));或者h=h-x(i)*log2(x(i)); 2.霍夫曼编码原理; 分为两步,首先是码树形成过程:对信源概率进行合并形成编码码树。然后是码树回溯过程:在码树上分配编码码字并最终得到Huffman 编码。 1、码树形成过程:将信源概率按照从小到大顺序排序并建立相应的位置索引。然后按上述规则进行信源合并,再对信源进行排序并建立新的位置索引,直到合并结束。在这一过程中每一次都把排序后的信源概率存入矩阵p中,位置索引存入矩阵m中。这样,由排序之后的概率矩阵?p以及索引矩阵m就可以恢复原概率矩阵P了,从而保证了回溯过程能够进行下去。 2、码树回溯过程:在码树上分配编码码字并最终得到Huffman 编码。从索引矩阵M 的末行开始回溯。 (1) 在p的末行2元素位置填入0和1。 (2) 根据该行索引1位置指示,将索引1位置的编码(‘1’)填入上一行的第一、第二元 素位置,并在它们之后分别添加‘0’和‘1’。 (3) 将索引不为‘1’的位置的编码值(‘0’)填入上一行的相应位置(第3 列)。 (4) 以m的倒数第二行开始向上,重复步骤(1) ~ (3),直到计算至m的首行为止。 三:设计代码: clear all; format long disp(strcat(信息论与编码课程作业——霍夫曼编码求信源熵和存储前后的信息量的变化,13)); histgram=zeros(1,255); [c,map]=imread(C:\Documents and Settings\Administrator\桌面\infomation\lenna.bmp); x=rgb2gray(c); [a,b]=size(x); for i=1:a for j=1:b k=x(i,j); histgram(k)=histgram(k)+1; end end f=histgram/a/b; symbols=find(f~=0); %灰度值 p=f(symbols); %概率 L=length(p); pp=p; %霍夫曼编码 m=zeros(L-1,L); for i=1:L-1 [p,mark]=sort(p); m(L-i,1:L-i+1)=mark(1:L-i+1); p=[p(1)+p(2),p(3:L),1]; end c=cell(L-1,L); c(1,1)={0}; c(1,2)={1}; for i=2:L-1; ind=find(m(i-1,:)==1); temp=char(c(i-1,ind)); c(i,1)={[temp,0]}; c(i,2)={[temp,1]}; snc=find(m(i-1,:)~=1); for j=3:i+1; con=snc(j-2); c(i,j)=c(i-1,con); end end codeL=[]; averge_long=0; H1=0; disp(strcat(灰度值,32,32,32,概率,32,32,32,32,32,32,32,32,32,霍夫曼编码:)); for i=1:L; ind=find(m(L-1,:)==i); code=char(c(L-1,ind)); codeLength(i)=length(code); averge_long=averge_long+pp(i)*codeLength(i); H1=H1+pp(i)*log2(1/pp(i)); disp(strcat(32,num2str(symbols(i)),32,32,32,num2str(pp(i)),32,32,code)); end disp(strcat(信源熵=,num2str(H1),32,32,32,32,平均码字长度=,num2str(averge_long),32,32,32,32,32,压缩比=,num2str(8/averge_long))); 四:设计运行结果: 信息论与编码课程作业——霍夫曼编码求信源熵和存储前后的信息量的变化

文档评论(0)

wuailuo + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档