- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息论与编码实验报告讲义
信息论与编码实验报告
实验课程名称 : 赫夫曼编码 (二进制与三进制编码)
专 业 信息与计算科学
班 级 信息与计算科学1班
学生姓名 李林钟
学 号 2013326601049
指导老师 王老师
一、实验目的
利用赫夫曼编码进行通信可以大大提高通信利用率,缩短信息传输时间,降低传输成本。赫夫曼编码是信源编码中最基本的编码方法。
理解赫夫曼编码,无论是二进制赫夫曼编码,还是m进制赫夫曼编码,都要理解其编码原理和编码步骤。
回顾无失真信源编码定理,理解无失真编码的基本原理和常用编码方法。。
掌握二进制赫夫曼编码和m进制赫夫曼编码的基本步骤,能计算其平均码长,编码效率等。
应用二进制赫夫曼编码或m进制赫夫曼编码处理简单的实际信源编码问题。
二、实验环境与设备
1、操作系统与编程软件:windows操作系统,cfree5.0, Visual C++ 6.0。
2、编程语言:C语言以及C++语言
三、实验内容
1. 二进制赫夫曼编码原理及步骤:
(1)信源编码的计算
设有N个码元组成的离散、无记忆符号集,其中每个符号由一个二进制码字表示,信源符号个数n、信源的概率分布P={p(si)},i=1,…..,n。且各符号xi的以li个码元编码,在变长字编码时每个符号的平均码长为 ;
信源熵为: ;
唯一可译码的充要条件: ;
其中m为码符号个数,n为信源符号个数,Ki为各码字长度。
(2)二元霍夫曼编码规则
(1)将信源符号依出现概率递减顺序排序。
(2)给两个概率最小的信源符号各分配一个码位“0”和“1”,将两个信源符号合并成一个新符号,并用这两个最小的概率之和作为新符号的概率,结果得到一个只包含(n-1)个信源符号的新信源。称为信源的第一次缩减信源,用s1 表示。
(3)将缩减信源 s1 的符号仍按概率从大到小顺序排列,重复步骤(2),得到只含(n-2)个符号的缩减信源s2。
(4)重复上述步骤,直至缩减信源只剩两个符号为止,此时所剩两个符号 的概率之和必为 1,然后从最后一级缩减信源开始,依编码路径向前返回,就得到各信源符号所对应的码字。 (3).算法基本步骤描述
(4).编码及注解(见附页1)
(5).验证截图:
2. 三进制编码:
(1).三进制赫弗曼编码原理:
对于多进制赫夫曼编码,为了提高编码效率,就要是长码的符号数量尽量少、概率尽量小,所以信源符号数量最好满足n=(m-1)*k+r,其中m为进制数,k为缩减的次数。
设计步骤如下:
[1]将信源符号按概率从大到小的顺序排列,令
p(x1)≥ p(x2)≥…≥ p(xn)
[2]给两个概率最小的信源符号p(xn-1)和p(xn)各分配一个码位“0”和“1”,将这两个信源符号合并成一个新符号,并用这两个最小的概率之和作为新符号的概率,或者在新添加一个信源符号,令其概率为0,则个分配一个码位“0”、“1”和“2”,将其合并,结果得到一个只包含(n-1)个信源符号的新信源。称为信源的第一次缩减信源,用S1表示。
[3]将缩减信源S1的符号仍按概率从大到小顺序排列,此后每次合并3个信源符号,得到只含(n-3)个符号的缩减信源S2。
[4]重复上述步骤,直至最后,此时所剩符号的概率之和必为1。然后从最后一级缩减信源开始,依编码路径向前返回,就得到各信源符号所对应的码字。
(2).编码及注解(见附页2)
(3).例题:对如下单符号离散无记忆信源编三进制赫夫曼码。
这里:m=3,n=8
令k=3,m+k(m-1)=9,则 s=9-n=9-8=1
所以第一次取m-s=2个符号进行编码。
由计算可得:
平均码长为:
(3.1)
信息率为:
(3.2)
编码效率为:
(3.3)
(4).验证结果截图:
四.实验总结:
用C语言实现二进制赫夫曼编码对信源无失真编码。由于课本知识点的不太理解,一点都不知道编码的过程,后来通过阅读信息论与编码课本、网上查阅资料,最后才对本次设计有了一定的理解,详细理解了赫夫曼的具体编码过程。经过理解,发现这种编码其实挺简单的,最重要的是怎样用程序把他实现,这对我们的编程能力也是一次考验。设计要
文档评论(0)