收藏 分享(赏)

实验三 哈夫曼编码.doc

上传人:dzzj200808 文档编号:2339550 上传时间:2018-09-11 格式:DOC 页数:6 大小:52.50KB
下载 相关 举报
实验三 哈夫曼编码.doc_第1页
第1页 / 共6页
实验三 哈夫曼编码.doc_第2页
第2页 / 共6页
实验三 哈夫曼编码.doc_第3页
第3页 / 共6页
实验三 哈夫曼编码.doc_第4页
第4页 / 共6页
实验三 哈夫曼编码.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、实验一 离散信源及其信息测度一、实验目的1、理解信源编码的意义;2、熟悉 MATLAB程序设计; 3、掌握哈夫曼编码的方法及计算机实现;二、实验原理通信的根本问题是如何将信源输出的信息在接收端的信宿精确或近似的复制出来。为了有效地复制信号,就通过对信源进行编码,使通信系统与信源的统计特性相匹配。若接收端要求无失真地精确地复制信源输出的信息,这样的信源编码即为无失真编码。即使对于一个小的时间段内,连续信源输出的信息量也可以是无限大的,所以对其是无法实现无失真编码的;而离散信源输出的信息量却可以看成是有限的,所以只有离散信源才可能实现无失真编码。凡是能载荷一定的信息量,且码字的平均长度最短,可分离

2、的变长码的码字集合都可以称为最佳码。为此必须将概率大的信息符号编以短的码字,概率小的符号编以长的码字,使得平均码字长度最短。变字长编码的最佳编码定理:在变字长码中,对于概率大的信息符号编以短字长的码;对于概率小的信息符号编以长字长的码。如果码字长度严格按照符号概率的大小顺序排列,则平均码字长度一定小于俺任何顺序排列方式得到的码字长度。哈夫曼编码就是利用了这个定理,讲等长分组的信源符号,根据其概率分布采用不等长编码。概率大的分组,使用短的码字编码;概率小的分组,使用长的码字编码。哈夫曼编码把信源按概率大小顺序排列,并设法按逆次序分配码字的长度。在分配码字的长度时,首先将出现概率最小的两个符号相加

3、,合成一个概率;第二步把这个合成的概率看成是一个新组合符号的概率,重复上述做法,直到最后只剩下两个符号的概率为止。完成以上概率相加顺序排列后,再反过来逐步向前进行编码。每一步有两个分支,各赋予一个二进制码,可以对概率大的编为 0 码,概率小的编为 1 码。反之亦然。哈夫曼编码的具体步骤归纳如下:1. 统计 n 个信源消息符号,得到 n 个不同概率的信息符号。2. 将这 n 个信源信息符号按其概率大小依次排序:p(x1) p(x2) p(xn)3. 取两个概率最小的信息符号分别配以 0 和 1 两个码元,并将这两个概率相加作为一个新的信息符号的概率,和未分配的信息符号构成新的信息符号序列。4.

4、将剩余的信息符号,按概率大小重新进行排序。5. 重复步骤 3,将排序后的最后两个小概论相加,相加和与其他概率再排序。6. 如此反复重复 n-2 次,最后只剩下两个概率。7. 从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字,构成霍夫曼编码字。编码结束。哈夫曼编码产生最佳整数前缀码,即没有一个码字是另一个码字的前缀,因此哈夫曼编码是唯一码。编码之后,哈夫曼编码的平均码长为: 1()niiiKpxK哈夫曼编码的效率为: ()=HxK信 源 熵平 均 码 长三、实验内容实验一、对信源进行哈夫曼编码,并计算编码效率。1、按照实验一中的方法生成一 10 维离散无记忆信源 X 的概率

5、分布。2、对信源概率进行排序, (排序可用 sort 命令) 。3、取两个概率最小的信息符号分别配以 0 和 1 两个码元,并将这两个概率相加作为一个新的信息符号的概率,和未分配的信息符号构成新的信息符号序列, (分配的 0,1 可另建一个向量保存) 。4、将剩余的信息符号,按概率大小重新进行排序。5、重复步骤 3,将排序后的最后两个小概论相加,相加和与其他概率再排序(利用 for 循环) 。6、如此反复重复 n-2 次,最后只剩下两个概率。7、从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字,构成霍夫曼编码字。编码结束。8、计算平均码长与编码效率。实验二、查看 huff

6、mandict 函数,了解该函数的用途,调用格式,利用该函数对实验一中的数据进行编码,并比较两者结果。实 验 三实验名称 离散信源及其信息测度课程名称 信息论基础姓 名 姜圆香 专业、班级 信计 11101 班学 号 201106216班内序号 05 实验时间 2014.3.24实验地点 10 教四楼实验内容实验一:对信源进行哈夫曼编码,并计算编码效率。1、按照实验一中的方法生成一 10 维离散无记忆信源 X 的概率分布。2、对信源概率进行排序, (排序可用 sort 命令) 。3、取两个概率最小的信息符号分别配以 0 和 1 两个码元,并将这两个概率相加作为一个新的信息符号的概率,和未分配的

7、信息符号构成新的信息符号序列, (分配的 0,1 可另建一个向量保存) 。4、将剩余的信息符号,按概率大小重新进行排序。5、重复步骤 3,将排序后的最后两个小概论相加,相加和与其他概率再排序(利用 for 循环) 。6、如此反复重复 n-2 次,最后只剩下两个概率。7、从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字,构成霍夫曼编码字。编码结束。8、计算平均码长与编码效率。实验二:查看 huffmandict 函数,了解该函数的用途,调用格式,利用该函数对实验一中的数据进行编码,并比较两者结果。实验过程及结果分析实验一:编程实现 哈夫曼编码代码:m=rand(1,10)

8、s=sum(m);p=m/sq=p;n=10;a=zeros(n-1,n); 生成一个n-1行n 列的数组for i=1:n-1q,l=sort(q) ;a(i,:)=l(1:n-i+1),zeros(1,i-1) ;q=q(1)+q(2),q(3:n),1; endfor i=1:n-1c(i,1:n*n)=blanks(n*n); endc(n-1,n)=1; c(n-1,2*n)=0; for i=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 ; 在分支的第一

9、个元素后补1c(n-i,n+1:2*n-1)=c(n-i,1:n-1) ;c(n-i,2*n)=0 ; 在分支的第一个元素后补0for j=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 编码for i=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(

10、p.*ll); 计算平均码长fprintf(n Huffman编码结果为:n); hfprintf(n 编码的平均码长为:n); l实验结果:Huffman 编码结果为:H=1111 000 1010 110 1110100 1011 011 010 001编码的平均码长为:l =3.1834实验二:利用 huffmandict 函数实现编码代码: y=p/sum(p)symbols = 1:10 dict,avglen = huffmandict(symbols,y) temp = dict;for i = 1:length(temp)tempi,2 = num2str(tempi,2);e

11、ndtemp实验结果:symbols =1 2 3 4 5 6 7 8 9 10dict = 1 1x4 double 2 1x3 double 3 1x4 double 4 1x3 double 5 1x4 double 6 1x3 double 7 1x4 double 8 1x3 double 9 1x3 double10 1x3 doubleavglen =3.1835temp = 1 1 1 1 1 2 0 0 0 3 1 0 1 0 4 1 1 0 5 1 1 1 0 6 1 0 0 7 1 0 1 1 8 0 1 1 9 0 1 0 10 0 0 1 实验小结:本次实验,在熟练掌握哈弗曼编码的理论知识后,还很大程度考验了我们的编程能力,将树结构的引入以及对树的各结点的赋值实现 Huffman 编码。虽然自己最后没有独立的把整个过程实现,而是查阅了相关资料,但是,如果遇到需要编码的地方,我完全可以在 Matlab 里面用 Huffman 函数来实现编码,同样达到目的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报