二元霍夫曼编码-信息论与编码实验报告.doc_第1页
二元霍夫曼编码-信息论与编码实验报告.doc_第2页
二元霍夫曼编码-信息论与编码实验报告.doc_第3页
二元霍夫曼编码-信息论与编码实验报告.doc_第4页
二元霍夫曼编码-信息论与编码实验报告.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

计算机与信息工程学院综合性实验报告专业:通信工程 年级/班级:2011级 20132014学年第一学期课程名称信息论与编码指导教师刘艳芳本组成员学号姓名实验地点计科楼111实验时间周五5-6节项目名称二元霍夫曼编码实验类型综合性一、 实验目的根据霍夫曼编码的原理,用MATLAB设计进行霍夫曼编码的程序,并得出正确的结果。二、 实验仪器或设备1、一台计算机。2、MATLAB r2013a。三、 二元霍夫曼编码原理1、将信源消息符号按其出现的概率大小依次排列,p1p2pq2、取两个概率最小的字母分别配以0和1两个码元,并将这两个概率相加作为一个新字母的概率,从而得到只包含q-1个符号的新信源S1。3、对重排后的缩减信源S1重新以递减次序排序,两个概率最小符号重复步骤(2)的过程。4、不断继续上述过程,直到最后两个符号配以0和1为止。5、从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字。四、 霍夫曼编码实现程序function outnum=lml_huffman(a)%主程序,输入一组概率,输出此组概率的霍夫曼编码%a:一组概率值,如a=0.2 0.3 0.1 0.4等%outnum:输出的霍夫曼码,以cell中的字符数组表示if sum(a)=1 warning(输入概率之和不为“1”,但程序仍将继续运行)endcho,sequ,i,l=probality(a);global lmlcode %用于输出霍夫曼码,定义为cell型global cellnum %用于编码的累加计算cellnum=1;lmlcode=cell(l,1);j=1; %第一部分add_num=char;l_add=addnum(add_num,i,j,l);output,m=disgress(sequ,i,j,l,l_add);dealnum(output,m); %在全局变量中输出霍夫曼码j=2; %第二部分l_add=addnum(add_num,i,j,l);output,n=disgress(sequ,i,j,l,l_add);dealnum(output,n);outnum=comset(lmlcode,cho(1,:);%将概率和编码进行关联function output=addnum(input,i,j,l)%对概率矩阵中每一行最后两个不为0的数进行编码,即在某个编码后添加0,1或空%输出:% input:输入的某个未完成的编码% (i,j):当前检索目标在sequ矩阵中的位置% l:sequ矩阵的列数%PS: sequ矩阵在此函数中未用到%PS:此函数为编码第一步if j=(l-i) output=input 0;else if j=(l-i+1) output=input 1; else output=input; endendfunction ecode=comset(code,pro)%将概率和编码进行关联%code:已编成的霍夫曼码%pro:输入的一组概率%ecode:最终完成的码l=length(code);ecode=cell(l,2);for i=1:l lang(i)=length(codei);enda,b=sort(lang);for i=1:l ecodei,1=codeb(i); ecodei,2=pro(i);endfunction final,a=dealnum(imput,m)%整理并在全局变量中输出已完成的霍夫曼码%输入: imput:程序运算后的生成cell型矩阵% m:标识数%输出: final:整理后的霍夫曼码% a:标识数global lmlcodeglobal cellnumif m=1 lmlcodecellnum=imput; cellnum=cellnum+1; final=; a=;else if m=2 final1,a1=dealnum(imput1,1,imput1,2); final2,a2=dealnum(imput2,1,imput2,2); final3,a3=dealnum(final1,a1); final4,a4=dealnum(final2,a2); final=final3 final4; a=a3 a4; else final=imput; a=m; endendfunction outnum,p=findsumother(sequ,i,j,l,add_num)%当前检索目标在sequ(i,j)处为非1时的处理程序,即跳转到下一级进行整理%输入: sequ:概率转移矩阵% (i,j):当前检索目标在sequ矩阵中的位置% l:sequ矩阵的列数% add_num:当前进行的编码%输出:(与disgress类同)% outnum:进行霍夫曼编码,用cell型表示% p:标识数j=l-i+2-sequ(i,j);i=i-1;add_num1=addnum(add_num,i,j,l);outnum,p=disgress(sequ,i,j,l,add_num1);function outnum1,outnum2,p,q=findsumis1(sequ,i,j,l,add_num)%当前检索目标在sequ(i,j)处为1时的处理程序,%即对下一级的最小两概率进行求和移位编码整理%输入: sequ:概率转移% (i,j):当前检索目标在sequ矩阵中的位置% l:sequ矩阵的列数% add_num:当前进行的编码%输出:(与disgress类同)% outnum1&outnum2:进行霍夫曼编码,用cell型表示% p&q:标识数i=i-1;j1=l-i;j2=l-i+1;add_num1=addnum(add_num,i,j1,l);outnum1,p=disgress(sequ,i,j1,l,add_num1);add_num2=addnum(add_num,i,j2,l);outnum2,q=disgress(sequ,i,j2,l,add_num2);function output,m=disgress(sequ,i,j,l,add_num)%当前检索目标,累加数,输出下一级霍夫曼码及其个数,此函数被调用次数最多%输入:sequ:概率转移矩阵% (i,j):当前检索目标在sequ矩阵中的位置% l:sequ矩阵的列数% add_num:当前进行的编码%输出:output:进行霍夫曼编码,用cell型表示% m:标识数%PS:此函数为编码第二步if i=1 if sequ(i,j)=1 output1,output2,p,q=findsumis1(sequ,i,j,l,add_num); output=cell(2); output1,1=output1; output1,2=p; output2,1=output2; output2,2=q; m=2; else if sequ(i,j)=1 output1,p=findsumother(sequ,i,j,l,add_num); output=output1; m=p; end endelse output=add_num; m=1;end五、 实验程序实现方法演示若在command window中输入的概率数组为p=0.1 0.15 0.20 0.25 0.30使用子函数output,sequ,i,j=probality(p)对此组概率进行预处理,处理结果如下图所示: 0.3000 0.3000 0.4500 0.55000.2500 0.2500 0.3000 0.45000.2000 0.2500 0.2500 0.1500 0.2000 0.1000 output图5.1 概率数据处理过程简图5 4 1 14 3 3 23 1 2 2 2 1 sequ图5.2 对图1中数据的转移方式标示图图2标明了对图1中各数据的位置转移过程。图1中每一列最后两个数据标为1,其他数据从下到上依次标为2、3、4.如第一列最后两个数据标为1,则其上依次为2、3、4。故在第二列中sequ(2,3)=1的含义是:output(2,3)=0.25为第一列中标为1的数据转移而来;sequ(2,2)=3的含义是:output(2,2)=0.25为第一列中标为3的数据转移而来;在第三列中sequ(2,3)=3的含义是:output(2,3)=0.3为第二列中标为3的数据转移而来,等等。依据矩阵output及sequ可以得到霍夫曼编码的码树图如下:1111010100010000.550.30.250.30.250.30.250.450.450.10.20.250.20.15010010110011图5.3 特定概率数组的编码码树六、 结果分析与总结(1)实验结果分析1、在command window中输入:p=0.1 0.15 0.20 0.25 0.30,生成数组p2、之后在command window中输入:a=lml_huffman(p),输出结果为:a = 00 0.3000 01 0.2500 11 0.2000 100 0.1500 101 0.1000其中outnum为cell型,第一列为字符型,输出的是霍夫曼码,第二列为输入的概率数组,与第一列中的霍夫曼码相对应。将以上输出结果在下表中统计。表6.1 编码分析表信源消息符号ai符号概率p(ai)累加概率Pi=-log p(ai)码字长度li码字a10.301.

温馨提示

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

评论

0/150

提交评论