实验1Huffman编码生成器-matlab.docxVIP

  1. 1、本文档共8页,可阅读全部内容。
  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文档。上传文档
查看更多
实验1Huffman编码生成器-matlab

信息论与编码实验报告 姓 名: 学 号: 院 系: 班 级: 指导教师: 实验1 Huffman编码生成器-matlab一、实验目的掌握Huffman编码的原理掌握MatLab开发环境的使用(尤其是程序调试技巧)二、实验内容根据信源编码——Huffman编码的原理,制作二进制Huffman编码生成器的软件。要求软件输入信源的概率矢量,软件能够对运行的结果生成报告,分别是:信源编码所得的码字、平均码长、编码效率及码字方差(要求码字方差最小)。三、实验环境计算机Windows 2000 或以上MatLab四、实验原理Huffman编码算法为使平均码长最短,必须使最后一步缩减信源有m个信源符号。如果第一步给概率最小的符号分配码元时,所取的符号数就不一定是m个。对于m进制编码,若所有码字构成全树,可分离的码字数必为m+k(m-1),式中k为非负整数,即缩减次数。若信源所含的符号数n不能构成m进制的全树,就必须增加s(sm-1)个不用的码字来形成全树。五、实验程序流程图六、实验结果 根据Matlab示例1的程序编写主程序:P=[0.2 0.2 0.1 0.3 0.15 0.05];disp(码字方差小);h例uffman_better(P);结果:码字方差小很好!输入正确,编码结果如下:Huffman编码所得码字W: [1] [2] [3] [4] [5] [6] 11 10 0000 01 001 0001Huffman编码平均码字长度L:2.4500Huffman编码所得码字W的方差V:0.5475Huffman编码的编码效率q: 0.9831 根据Matlab示例2的程序编写主程序:P=[0.2 0.4 0.1 0.3];disp(码字方差小);huffman(P);结果:码字方差小很好!输入正确,编码结果如下:Huffman编码所得码字W: [1] [2] [3] [4] 000 1 001 01Huffman编码平均码字长度L: 1.9000Huffman编码的编码效率q: 0.9718以下有两个Matlab程序示例:Huffman编码Matlab示例1% huffman编码生成器 %% 函数说明: %% [W,L,V,q]=huffman_better(P) 为huffman_better编码函数 % % P为信源的概率矢量,W为编码返回的码字,V为码字的方差%% L为编码返回的平均码字长度,q为编码效率 %%*******************************************************%function [W,L,V,q]=huffman_better(P) if (length(find(P=0)) ~=0) error(Not a prob.vector,negative component); % 判断是否符合概率分布条件end if (abs(sum(P)-1)10e-10) error(Not a prob.vector,component do not add up to 1) % 判断是否符合概率和为1end n=length(P); % 计算输入元素个数p=P; mark=zeros(n-1,n); % mark为n-1行、n列矩阵,记录每行最小两概率叠加后概率排列次序% 1) 确定概率大小值的排列,得到mark矩阵。t=1;for i=1:n-1 [p,num]=sort(p); % 对输入元素排序并记录元素在原数组中的行位置或列位置 if (i~=1) if (count~=0) k=max(a(t,:)); for s=count:-1:1 num(k-s)= num(k-s+1); % 若有与新项相等的项,则将新项尽可能排列在其右侧 end num(k)=1; end t=t+1; end mark(i,:)=[num(1:n-i+1),zeros(1,i-1)]; p=[p(1)+p(2),p(3:n),1]; % 前两项求和得新项 count=0; % 用于计数,记录与新项相等的元素个数‘;止于’ for j=2:n-i if (p(1)==p(j)) % 判断p中是否有与求和后的新项相等的项 count=count+1; a(t,count)=j; end endend % 2) 生成一个n-1行、n1(n×n)列矩阵table,每行可看做n个段,% 每段长为n,记录一个码字(每个码字的长度不会超过n)。 for i=1:n-1 table(i,:)=blanks(n

文档评论(0)

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

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

1亿VIP精品文档

相关文档