吉林建筑大学
电气与电子信息工程学院
信息理论与编码课程设计报告
设计题目: 哈夫曼编码的分析与实现 
专业班级:    电子信息工程 101   
学生姓名:                       
学    号:                       
指导教师:  吕卅    王超       
设计时间: 2013.11.18-2013.11.29   
教师评语:
成绩            评阅教师                日期                 
一、设计的作用、目的
《信息论与编码》是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充。其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能,提高实践技能,培养独立分析问题、解决问题及实际应用的能力
通过完成具体编码算法的程序设计和调试工作提高编程能力深刻理解信源编码、信道编译码的基本思想和目的,掌握编码的基本原理与编码过程,增强逻辑思维能力,培养和提高自学能力以及综合运用所学理论知识去分析解决实际问题的能力逐步熟悉开展科学实践的程序和方法
二、设计任务及要求
通过课程设计各环节的实践,应使学生达到如下要求:
1. 理解无失真信源编码的理论基础,掌握无失真信源编码的基本方法;
2. 掌握哈夫曼编码/费诺编码方法的基本步骤及优缺点;
3. 深刻理解信道编码的基本思想与目的,理解线性分组码的基本原理与编码过程;
4. 能够使用MATLAB或其他语言进行编程,编写的函数要有通用性。
三、设计内容
一个有8个符号的信源X,各个符号出现的概率为:
编码方法:先将信源符号按其出现的概率大小依次排列,并取概率最小的字母分别配以0和1两个码元(先0后1或者先1后0,以后赋值固定),再将这两个概率相加作为一个新字母的概率,与未分配的二进制符号的字母重新排队。并不断重复这一过程,直到最后两个符号配以0和1为止。最后从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即为对应的码字。
哈夫曼编码方式得到的码并非唯一的。在对信源缩减时,两个概率最小的符号合并后的概率与其他信源符号的概率相同时,这两者在缩减中的排序将会导致不同码字,但不同的排序将
会影响码字的长度,一般讲合并的概率放在上面,这样可获得较小的码方差。
四、设计原理
4.1哈夫曼编码步骤
    (1将信源消息符号按照其出现的概率大小依次排列为
               
    (2取两个概率最小的字母分别配以0和1两个码元,并将这两个概率相加作为一个新的概率,与未分配的二进制符号的字母重新排队。
    (3对重新排列后的两个最小符号重复步骤(2)的过程。
    (4)不断重复上述过程,知道最后两个符号配以0和1为止。
    (5)从最后一级开始,向前返回得到的各个信源符号所对应的码元序列,即为相应的码字。
4.2哈夫曼编码特点
哈夫曼编码是用概率匹配的方法进行信源匹配方法进行信源。它的特点是:
1哈夫曼的编码方法保证了概率大的符号对应于短码,概率小的符号对应于长码,充分应用了短码
2缩减信源的最后两个码字总是最后一位不同,从而保证了哈夫曼编码是即时码。
3)哈夫曼编码所形成的码字不是唯一的,但编码效率是唯一的,在对最小的两个速率符号赋值时可以规定大的为“1”,小得为“0”,如果两个符号的出现概率相等时,排列时无论哪个在前都可以,所以哈夫曼所构造的码字不是唯一的,对于同一个信息源,无论上述的顺序如何排列,他的平均码长是不会改变的,所以编码效率是唯一的。
4)只有当信息源各符号出现的概率很不平均的时候,哈夫曼编码的效果才明显。
5)哈夫曼编码必须精确的统计出原始文件中每个符号出现频率,如果没有这些精确的统计将达不到预期效果。哈夫曼编码通常要经过两遍操作 ,第一遍进行统计,第二遍产生编码,
所以编码速度相对慢。另外实现电路复杂,各种长度的编码的编译过程也是比较复杂的,因此解压缩的过程也比较慢。
6)哈夫曼编码只能用整数来表示单个符号,而不能用小数,这很大程度上限制了压缩效果。哈夫曼所有位都是合在一起的,如果改动其中一位就可以使其数据变得面目全非。
五、设计步骤
5.1以框图形式画出哈夫曼编码过程(哈夫曼编码要求构建哈夫曼树)。
表1 哈夫曼编码
信源
编码
概率
编码过程
码字
码长
X1
0.4
  0.4      0.4      0.4      0.4    0.4    0.6  0 1.0
  0.18    0.18    0.19    0.23    0.37  0 0.4  1
  0.1      0.13    0.18    0.19  0 0.23  1
  0.1      0.1      0.13  0  0.18  1
  0.09    0.1  0  0.1  1
  0.07  0  0.09  1
  0.06  1
0
1
1
1
X2
0.18
001
3
X3
0.1
011
3
X4
0.1
0000
4
X5
0.07
0100
4
X6
0.06
0101
4
X7
0.05
00010
5
X8
0.04
00011
5
哈夫曼树:
给定n个实数w1,w2,......,wn(n2),求一个具有n个结点的二叉数,使其带权路径长度最小。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明哈夫曼树的WPL是最小的。
(1) 根据与n个权值{w1,w2…wn}对应的n个结点构成具有n棵二叉树的森林F={T1,T2…Tn},其中第i棵二叉树Ti(1 i n)都只有一个权值为wi的根结点,其左、右子树均为空。
(2) 在森林F中选出两棵根结点的权值最小的树作为一棵新树的左、右子树,且置新树的根结点的权值为其左、右子树上根结点权值之和。
(3)从F中删除构成新树的那两棵,同时把新树加入F中。
(4)重复第(2)和第(3)步,直到F中只含有一棵为止,此树便为Huffman树。
图1哈夫曼树
5.2计算平均码长、编码效率、冗余度。
平均码长为:
  ==0.4×1+0.18×3+0.1×3+0.1×4+0.07×4+0.06×4+
0.05×5+0.04×5=2.61(码元/符号)
    信源熵为:
        -(0.4log0.4+0.18log0.18+0.1log0.1+
0.1log0.1+0.07+log0.07+0.06log0.06+0.05log0.05+0.04log0.04)
=2.55bit/符号
信息传输速率为:
      R===0.977bit/码元
编码效率为:
      ===0.977
冗余度为:
=1-=1-0.977=0.023
六、哈夫曼编码的实现
6.1软件介绍
Visual C++ 6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将哈夫曼编码树的带权路径长度高级语言翻译为机器语言(低级语言)的程序。Visual C++是一个功能强大的可视化软件开发工具。自1993Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。Visual C++6.0Microsoft开发, 它不仅是一个C++ 编译器,而且是一个基于Windows操作系统的可视化集成开发环境integrated development environmentIDE)。Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Studio
组件集成为和谐的开发环境。Microsoft的主力软件产品。Visual C++是一个功能强大的可视化软件开发工具。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。