优秀Huffman编码实验报告.docxVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
优秀Huffman编码实验报告

实验二:Huffman编码的实现实验学时:3实验类型:(演示、验证、综合、√设计、研究)实验要求:(√必修、选修)实验目的理解和掌握huffman编码的基本原理和方法,实现对信源符号的huffman编码。实验内容理解和掌握huffman编码的基本原理和方法通过MATLAB编程实现对单信源符号的huffma编码计算信源的信息熵、平均码长以及编码效率实验原理Huffman编码按信源符号出现的概率而编码,其平均码长最短,所以是最优码。无失真信源编码定理:对于熵为H(X)的离散无记忆的平稳信源,必存在一种无失真编码,使每符号的平均码长满足不等式:二元Huffman编码:若将编码设计为长度不等的二进制编码,即让待传字符串中出现概率大的字符采用尽可能短的码字,而把长的码字分配给概率小的信源符号。构造方法如下:将信源概率分布按大小以递减次序排列;合并两概率最小者,得到新信源;并分配0/1符号。新信源若包含两个以上符号返回(a),否则到(c)。从最后一级向前按顺序写出每信源符号所对应的码字。实验数据源1.2.五、实验组织运行要求以学生自主训练为主的开放模式组织教学六、实验条件(1)微机(2)MATLAB编程工具七、实验原理七、实验代码clear% S=[0.4,0.2,0.2,0.1,0.1];S=[0.24,0.20,0.18,0.16,0.14,0.08];% S=[0.20,0.19,0.18,0.17,0.15,0.10,0.01];S0=sort(S); %将序列进行升序排列S1=fliplr(S0); %将升序排列的概率进行左右翻转得到降序排列t=length(S1); %得到信源符号的个数coding_table=[S1]; %创建编码过程表,第一列for i=1:length(S1)-1 s=coding_table(t,i)+coding_table(t-1,i); %最小两个值相加 S1(t-1)=s; S1(t)=0; t=t-1; S1=fliplr(sort(S1)); %进行重新降序排列coding_table=[coding_table,S1]; %排序结果加入到编码过程表 for j=1:length(S1) if s==S1(j) b(i)=j; %记录两个最小概率相加得到的值在新排序中的位置。并且相加得到的概率值在遇到相同大小的概率值情况下优先放到上面 break; end endendcoding_table %编码过程表code=sym([0,1]);code1=code;n=3; d=1;t=length(S1);for j=t-2:-1:1 %默认最后第二列的两个概率值给定的编码为0,1;所以从倒数第三列开始编码,完成一次循环就再往前一列进行编码,直到第一列 for i=1:n-2 if i1coding_table(i,j)==coding_table(i-1,j) %若一列中出现相同的概率值。d+1,使在下面相同的概率值能够得到相对应的编码 d=d+1; else d=1; endcoding_table(b(j),j+1)=2; %令每一列中由前一列最小两个数相加得到的概率值为2。使其不与前一列的 temp=coding_table(:,j+1); x=find(temp==coding_table(i,j)); %判断该列概率值(除最小两个值之外)在后一列中的位置,并获得后一列的相应位置的编码。 code(i)=code1(x(d)); end code(n-1)=[char(code1(b(j))),0]; %提取这一列两个最小值相加在后一列中的位置以及其编码。将该编码后面分别加0,1形成新的编码分别给这一列的两个最小概率值 code(n)=[char(code1(b(j))),1]; n=n+1; code1=code;endfliplr(S0);%排序后的原概率序列 code%编码结果for i=1:length(S1) [a,b]=size(char(code(i))); L(i)=b;Endmachang=sum(L.*S); %计算平均码长、熵、编码效率H

文档评论(0)

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

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

1亿VIP精品文档

相关文档