欢迎来到天天文库
浏览记录
ID:9482367
大小:282.00 KB
页数:17页
时间:2018-05-01
《信息论与编码课程设计--统计信源熵与哈夫曼编码》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、信息论与编码课程设计信息论与编码课程设计报告设计题目:统计信源熵与哈夫曼编码专业班级学号学生姓名指导教师教师评分 2015年3月25日17信息论与编码课程设计目录一、设计任务与要求3二、设计思路3三、设计流程图5四、程序运行及结果6五、心得体会8参考文献9附录:源程序1017信息论与编码课程设计一、设计任务与要求1.1设计目的信息论与编码是信息、通信、电子工程专业的基础,对理论研究和工程应用均有重要的作用。通过对本次课程设计,我们将学到的理论知识用于实践,用软件编写程序实现具体的计算和逻辑问题,使我们对所学知识有更深层次的认知,加深对课本知识的理解。1.2设计要求(1)
2、统计信源熵要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。(2)哈夫曼编码要求:任意输入消息概率,利用哈夫曼编码方法进行编码,并计算信源熵和编码效率。二、设计思路2.1编码效率计算公式:其中H(X)为信源熵,K表示平均码长。2.3变长码的编码方法能获得最佳码的编码方法主要有:&香农(Shannon)&费诺(Fano)&霍夫曼(Huffman)本设计以霍夫曼编码为例;(1)将信源消息符号按其出现的概率大小依次排列p(x1)≥p(x2)≥…≥p(xn)(2)取两个概率最小的符号分别配以0和1,并将这两个概率相加作为一个新符号的概率,与未分配码
3、元的符号重新排队。17信息论与编码课程设计(3)对重排后的两个概率最小符号重复步骤2的过程。(4)继续上述过程,直到最后两个符号配以0和1为止。(5)从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字。2.3具体设计思路(1)统计信源熵在VC++环境中进行编程(1)运行程序,在对话框里输入一段英文,将26个英文字母及空格作为信源。(2)计算每个字母出现的次数(不区分大小写),再通过计算信源总大小来计算在本篇文章中每个字母出现的概率。(3)通过信源熵计算公式来计算信源熵。(2)哈夫曼编码在VC++环境中进行编程(1)输入概率矩阵,并检验是否正确,即各概
4、率不能小于零,总概率之和等于一。(2)建立各概率符号的位置索引矩阵Index,利于编码后从树根进行回溯,从而得出对应的编码(3)输出所需的哈弗曼编码。(4)计算信源熵,并计算平均码长,算出编码效率。(5)输出结果。17信息论与编码课程设计一、设计流程图3.1统计信源熵的设计思路3.2哈夫曼编码设计思路17信息论与编码课程设计一、程序运行及结果4.1统计信源熵程序运行结果运行程序并输入:Themostdistantwayintheworldisnotthewayfrombirthtotheend.itiswhenisitnearyouthatyoudon'tunderst
5、andiloveu.Themostdistantwayintheworldisnotthatyou'renotsureiloveu.Itiswhenmyloveisbewilderingthesoulbutican'tspeakitout.T测试目的:检验程序是否正确。检验方法:用验证法来检验;看中概率是否为一,并检测信源熵是否正确。检验结果:程序运行结果正确。如下为运行结果截屏17信息论与编码课程设计4.2哈夫曼编码程序运行结果测试输入:0.200.190.180.170.150.100.01测试目的:测试经常出现的信源符号是否对应较短的码长,检测程序运行结果是否正确
6、。正确输出:101100000101001100111信源熵为-2.60868bit/符号平均码长为2.72码元/符号传送速率为0.bit/码元实际输出:与争取而输出一样检测结果:程序无错误以下为运行结果截屏17信息论与编码课程设计一、心得体会刚开始课程设计的时候,自己是毫无头绪的,不知道从哪里下手,最重要的原因是对C语言没有达到熟练的程度,自己不是很自信。但是万事开头难,什么困难只要踏出第一步,接下来就会一步步化解。为了更加熟练地用C语言程序进行编写,我与同组成员仔细地复习以前学过的书籍,经过一段时间后对语法的掌握更加地熟练。但是实际上在编写的时候,手打难免会碰到各类
7、的问题,例如忘记在语句后面打“;”等一系列的小问题,所以自能耐心。对求概率,信源熵,哈夫曼编码的等公式有深入了解后,再构造一个程序的大体框架,再对各个语句的功能进行编写,一步步地完成。运行错误的话要慢慢检查,特别是一些小细节,直到程序完美运行。尽管在完成设计过程中遇到了很多困难,但是通过自己和同组同学的努力最后还是完成了,不仅对信息论这门课的内容有了更加深入的了解,更增长了自己动手编程的能力。其中我最大的感悟是,学习一门课,要把它学好不仅仅是学懂书上的知识点,书本之外的知识也要掌握,这不是在课堂上就能学会的,要靠自己在课后慢慢地积累。身为
此文档下载收益归作者所有