二元霍夫曼编码 - 信息论与编码实验报告

二元霍夫曼编码 - 信息论与编码实验报告

ID:12149708

大小:154.50 KB

页数:22页

时间:2018-07-15

二元霍夫曼编码 - 信息论与编码实验报告_第1页
二元霍夫曼编码 - 信息论与编码实验报告_第2页
二元霍夫曼编码 - 信息论与编码实验报告_第3页
二元霍夫曼编码 - 信息论与编码实验报告_第4页
二元霍夫曼编码 - 信息论与编码实验报告_第5页
资源描述:

《二元霍夫曼编码 - 信息论与编码实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、计算机与信息工程学院综合性实验报告专业:通信工程年级/班级:2011级2013—2014学年第一学期课程名称信息论与编码指导教师刘艳芳本组成员学号姓名实验地点计科楼111实验时间周五5-6节项目名称二元霍夫曼编码实验类型综合性一、实验目的根据霍夫曼编码的原理,用MATLAB设计进行霍夫曼编码的程序,并得出正确的结果。二、实验仪器或设备1、一台计算机。2、MATLABr2013a。三、二元霍夫曼编码原理1、将信源消息符号按其出现的概率大小依次排列,p1>p2>…>pq2、取两个概率最小的字母分别配以0和1两个码元,并将这两个概率相加作为一个新字母的概率,从而得到只包含q-1个符号的新信源S1

2、。3、对重排后的缩减信源S1重新以递减次序排序,两个概率最小符号重复步骤(2)的过程。4、不断继续上述过程,直到最后两个符号配以0和1为止。5、从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字。四、霍夫曼编码实现程序function[outnum]=lml_huffman(a)%主程序,输入一组概率,输出此组概率的霍夫曼编码%a:一组概率值,如a=[0.20.30.10.4]等%outnum:输出的霍夫曼码,以cell中的字符数组表示ifsum(a)~=1warning('输入概率之和不为“1”,但程序仍将继续运行')end[cho,sequ,i,l]=probali

3、ty(a);globallmlcode%用于输出霍夫曼码,定义为cell型globalcellnum%用于编码的累加计算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(outp

4、ut,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:此函数为编码第一步ifj==(l-i)output=[input'0'];elseifj==(l-i+1)output=[input'1'];elseoutput=input;enden

5、dfunction[ecode]=comset(code,pro)%将概率和编码进行关联%code:已编成的霍夫曼码%pro:输入的一组概率%ecode:最终完成的码l=length(code);ecode=cell(l,2);fori=1:llang(i)=length(code{i});end[a,b]=sort(lang);fori=1:lecode{i,1}=code{b(i)};ecode{i,2}=pro(i);endfunction[final,a]=dealnum(imput,m)%整理并在全局变量中输出已完成的霍夫曼码%输入:imput:程序运算后的生成cell型矩阵%m

6、:标识数%输出:final:整理后的霍夫曼码%a:标识数globallmlcodeglobalcellnumifm==1lmlcode{cellnum}=imput;cellnum=cellnum+1;final='';a='';elseifm==2[final1,a1]=dealnum(imput{1,1},imput{1,2});[final2,a2]=dealnum(imput{2,1},imput{2,2});[final3,a3]=dealnum(final1,a1);[final4,a4]=dealnum(final2,a2);final=[final3final4];a=[a

7、3a4];elsefinal=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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。