实验三 哈夫曼编码_第1页
实验三 哈夫曼编码_第2页
实验三 哈夫曼编码_第3页
实验三 哈夫曼编码_第4页
实验三 哈夫曼编码_第5页
全文预览已结束

下载本文档

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

文档简介

实验一离散信源及其信息测度、实验目的1、理解信源编码的意义;2、熟悉MATLAB程序设计;3、掌握哈夫曼编码的方法及计算机实现;二、实验原理通信的根本问题是如何将信源输出的信息在接收端的信宿精确或近似的复制出来。为了有效地复制信号,就通过对信源进行编码,使通信系统与信源的统计特性相匹配。若接收端要求无失真地精确地复制信源输出的信息,这样的信源编码即为无失真编码。即使对于一个小的时间段内,连续信源输出的信息量也可以是无限大的,所以对其是无法实现无失真编码的;而离散信源输出的信息量却可以看成是有限的,所以只有离散信源才可能实现无失真编码。凡是能载荷一定的信息量,且码字的平均长度最短,可分离的变长码的码字集合都可以称为最佳码。为此必须将概率大的信息符号编以短的码字,概率小的符号编以长的码字,使得平均码字长度最短。变字长编码的最佳编码定理:在变字长码中,对于概率大的信息符号编以短字长的码;对于概率小的信息符号编以长字长的码。如果码字长度严格按照符号概率的大小顺序排列,则平均码字长度一定小于俺任何顺序排列方式得到的码字长度。哈夫曼编码就是利用了这个定理,讲等长分组的信源符号,根据其概率分布采用不等长编码。概率大的分组,使用短的码字编码;概率小的分组,使用长的码字编码。哈夫曼编码把信源按概率大小顺序排列,并设法按逆次序分配码字的长度。在分配码字的长度时,首先将出现概率最小的两个符号相加,合成一个概率;第二步把这个合成的概率看成是一个新组合符号的概率,重复上述做法,直到最后只剩下两个符号的概率为止。完成以上概率相加顺序排列后,再反过来逐步向前进行编码。每一步有两个分支,各赋予一个二进制码,可以对概率大的编为0码,概率小的编为1码。反之亦然。哈夫曼编码的具体步骤归纳如下:统计n个信源消息符号,得到n个不同概率的信息符号。将这n个信源信息符号按其概率大小依次排序:p(x1)>p(x2)>…土p(xn)取两个概率最小的信息符号分别配以0和1两个码元,并将这两个概率相加作为一个新的信息符号的概率,和未分配的信息符号构成新的信息符号序列。将剩余的信息符号,按概率大小重新进行排序。重复步骤3,将排序后的最后两个小概论相加,相加和与其他概率再排序。如此反复重复n-2次,最后只剩下两个概率。从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字,构成霍夫曼编码字。编码结束。哈夫曼编码产生最佳整数前缀码,即没有一个码字是另一个码字的前缀,因此哈夫曼编码是唯一码。编码之后,哈夫曼编码的平均码长为:K=Z"p(x)Kiii=1哈夫曼编码的效率为:信源熵H(x)门=「:=平均码长K三、实验内容实验一、对信源进行哈夫曼编码,并计算编码效率。1、按照实验一中的方法生成一10维离散无记忆信源X的概率分布。2、对信源概率进行排序,(排序可用sort命令)。3、取两个概率最小的信息符号分别配以0和1两个码元,并将这两个概率相加作为一个新的信息符号的概率,和未分配的信息符号构成新的信息符号序列,(分配的0,1可另建一个向量保存)。4、将剩余的信息符号,按概率大小重新进行排序。5、重复步骤3,将排序后的最后两个小概论相加,相加和与其他概率再排序(利用for循环)。6、如此反复重复n-2次,最后只剩下两个概率。7、从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字,构成霍夫曼编码字。编码结束。8、计算平均码长与编码效率。实验二、查看huffmandict函数,了解该函数的用途,调用格式,利用该函数对实验一中的数据进行编码,并比较两者结果。

实验

名称

课程

名称

~姓

名班内序号姜圆香05离散信源及其信息测度信息论基础专业、班级信计11101班实验

名称

课程

名称

~姓

名班内序号姜圆香05离散信源及其信息测度信息论基础专业、班级信计11101班实验时间2014.3.24学号实验地

点八、、20110621610教四楼1、按照实验一中的方法生成一10维离散无记忆信源X的概率分布。2、对信源概率进行排序,(排序可用sort命令)。3、取两个概率最小的信息符号分别配以0和1两个码元,并将这两个概率相加作为一个新的信息符号的概率,和未分配的信息符号构成新的信息符号序列,(分配的0,1可另建一个向量保存)。4、将剩余的信息符号,按概率大小重新进行排序。5、重复步骤3,将排序后的最后两个小概论相加,相加和与其他概率再排序(利用for循环)。6、如此反复重复n-2次,最后只剩下两个概率。7、从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字,构成霍夫曼编码字。编码结束。8、计算平均码长与编码效率。实验二:查看huffmandict函数,了解该函数的用途,调用格式,利用该函数对实验一中的数据进行编码,并比较两者结果。实验一:编程实现哈夫曼编码代码:m=rand(1,10)s=sum(m);p=m/sq=p;n=10;a=zeros(n-1,n);生成一个n-1行n列的数组fori=1:n-1[q,l]=sort(q);a(i,:)=[l(1:n-i+1),zeros(1,i-1)];q=[q(1)+q(2),q(3:n),1];endfori=1:n-1c(i,1:n*n)=blanks(n*n);endc(n-1,n)='1'c(n-1,n)='1';c(n-1,2火n)'0';fori=2:n-1c(n-i,1:n-1)=c(n-i+1,n*(find(a(n-i+1,:)==1))-(n-2):n*(find(a(n-i+1,:)==1)));c(n-i,n)='1';在分支的第一个元素后补1c(n-i,n+1:2火n-1)=c(n-i,1:n-1);c(n-i,2火n)='0';在分支的第一个元素后补0forj=1:i-1c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(a(n-i+1,:)==j+1)-1)+1:n*find(a(n-i+1,:)==j+1));endend完成Huffman编码endfori=1:nh(i,1:n)=c(1,n*(find(a(1,:)==i)-1)+1:find(a(1,:)==i)*n);ll(i)=length(find(abs(h(i,:))~=32));计算每一个Huffman码长endl=sum(p.*ll);fprintf('\nfprintf('\n计算平均码长Huffman编码结果为:\n');h编码的平均码长为l=sum(p.*ll);fprintf('\nfprintf('\n0.16220.79430.31120.52850.16560.60200.26300.65410.68920.MS20.03300.0.16220.79430.31120.52850.16560.60200.26300.65410.68920.MS20.03300.16150.06330.10750.03370.12240.05350.13300.14010.1521H=1111000101011011101001011011010001编码的平均码长为:l=3.1834实验二:利用huffmandict函数实现编码代码:y=p/sum(p)symbols=[1:10][dict,avglen]=huffmandict(symbols,y)temp=dict;fori=1:length(temp)temp{i,2}=num2str(temp{i,2});endtemp实验结果:0.03300.0.03300.16150.06330.10750.03370.12240.05350.13300.14010.symbols=12345678910dict=[1][1x4double][2][1x3double][3][1x4double][4][1x3double][5][1x4double][6][1x3double][7][1x4double][8][1x3double][9][1x3double][10][1x3double]1521avglen=3.1835temp='1111''000''1010''110''1110'TOC\o"1-5"\h\z

温馨提示

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

评论

0/150

提交评论