信息22 - 副本_第1页
信息22 - 副本_第2页
信息22 - 副本_第3页
信息22 - 副本_第4页
信息22 - 副本_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、信息论与编码课程设计设计题目:1.统计信源熵 2.香农编码 2015/3/7摘要信息是从人类出现以来就存在于这个世界上,人类社会的生存和发展都离不开信息的获取、传递、处理、再生、控制和处理。而信息论正是一门把信息作为研究对象,以揭示信息的本质特性和规律为基础,应用概率论、随即过程和数理统计等方法来研究信息的存储、传输、处理、控制、和利用等一般规律的学科。主要研究如何提高信息系统的可靠性、有效性、保密性和认证性,以使信息系统最优化。在信息论的指导下,信息技术得到飞速发展,这使得信息论渗透到自然科学和社会科学的所有领域,并且应用与众多领域:编码学、密码学与密码分析、数据压缩、数据传输、检测理论、估

2、计理论等。信息论的主要基本理论包括:信息的定义和度量;各类离散信源和连续信源的信源熵;有记忆,无记忆离散和连续信道的信道容量,平均互信息;无失真信源编码相关理论。 求离散性信源熵也是信息论课程实践学习中必须要经历,在了解常规的求解方式的同时,利用计算机语言进行实践编程。用预先规定的方法将文字、数字或其他对象编成数码,或将信息、数据转换成规定的电脉冲信号。编码在电子计算机、电视、遥控和通讯等方面广泛使用。其中哈夫曼编码有广泛的应用,通过本次实验,了解编码的具体过程,通过编程实现编码。本次实验所使用的机器语言均为C语言。关键字:信息论 信源熵 香农编码 C语言编程设计目录摘要21任务与要求41.1

3、统计信源熵41.2香农编码41.3报告要求42设计思路42.1香农编码原理42.2编译工具53设计流程图54程序运行及结果64.1程序运行64.2运行结果75、心得体会86参考文献.97附录(源程序)91任务与要求1.1统计信源熵 要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。1.2香农编码要求:任意输入消息概率,利用上述编码方法进行编码,并计算信源熵和编码效率。1.3报告要求(1)学生可独立完成,或组队共同完成。每队人数不多于4人。提交一份独立完成的课程设计报告(纸质和电子版),做5分钟PPT汇报,并演示程序。每队选择1人汇报和演示程序,其他人答辩。(2)课

4、程设计报告包括设计任务与要求、设计思路、设计流程图、程序运行及结果、心得体会、参考文献、附录(源程序)等内容。2设计思路2.1香农编码原理     香农第一定理指出了平均码长与信源之间的关系,同时也指出了可以通过编 码使平均码长达到极限值,这是一个很重要的极限定理。如何构造这种码?香农第一定理指出,选择每个码字的长度Ki满足下式:I(xi)KI(xi)+1, 就可以得到这种码。这种编码方法就是香农编码。香农编码法冗余度稍大,实用性不大,但有重要的理论意义。编码步骤如下: (1) 将信源消息符号按其出现的概率大小依次排列 p(

5、x1)p(x2)p(xn) (2) 确定满足下列不等式整数码长Ki:-log2p(xi)Ki-log2p(xi)+1 (3) 为了编成唯一可译码,计算第i个消息的累加概率 Pi=å-+1 1ikp(xk) (4) 将累加概率Pi变成二进制数。 (5) 取Pi二进制数的小数点后Ki位即为该消息符号的二进制码字。(6) 信源编码效率计算公式: =H(X)K.2.2编译工具 Visual C+ 6.0,简称VC或者VC6.0,是微软推出的一款C+编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。Visual C+是一个功能强大的可视化软件开发工具。Visual C+6.0由许多组

6、件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。Visual C+是一个功能强大的可视化软件开发工具。3设计流程图 开始 读入txt文档判断读入字符属于26字符 N中哪个的大 去掉 Y统计每个字符总数目及文档总符号数计算符号概率、累加概率 计算信源熵开始输入一组概率由大到小排序确定码长,信源熵,累加概率确定码字输概率,累加概率,信源熵,字长,码字结束4程序运行及结果4.1程序运行将程序进行编译纠正错误之处如图一所示: 图一4.2运行结果信源熵:编译无错误后输入文

7、档Snubs are mainly teenagers aged between 13 and 25, who are having fun with the service. There are all sorts of things snubs like to share for immediate consumption, ranging from wacky facial expressions to pictures of a meal they're about to eat. It's a way to share a moment with a specific

8、 friend and - in a way - a bit of an antidote to traditional social networking. In fact, the motivation for creating the app was to create a service that provided more privacy than other social networks.的打开地址。 运行结果如图二所示:香农编码:输入任意一组概率例如(0.1 0.2 0.3 0.15 0.25)结果应为:0.300;0.2501;0.2100;0.15110;0.1111;编码

9、效率为:0.873809bit/符号。运行结果如图三所示: 图二 图三5、心得体会课程设计是非常锻炼我们能力的一种方法,在准备课程设计的过程中,各方都有所提高。首先,再一次对课本知识进行学习,将所有设计到的知识重新温 习一遍,并且针对设计,还要看些其它相关书籍,对知识进行升华,其次,针对 课程设计,必须针对其要求进一步提取有效内容,锻炼分析问题,解决问题的能 力,尽管本次课程设计相对简单些,我们还是需要从各方面进行准备,另外就是 编写程序,这是本次课程设计的关键,编写程序,从不懂到会,这无疑又是一种 极大的提高,还有在编程时遇见了不少问题,各种函数的应用都在考验着我们, 然后便是我们小组的合作

10、精神, 随着学习的深入和实践的锻炼,我们越来越觉得 团队合作对于我们的重要性, 在现在的社会, 几乎没有人可以脱离团体单独工作, 科技的发展,人类的进步,我们社会工作状态都呈现了一种个人分工,集体作战 的策略,因此,在我们未正式进入社会之前,能够锻炼自己的团队精神,让我们受益匪浅。6、参考文献1 曹雪虹、张宗橙编著 信息论与编码 .清华大学出版社,2009 年第 2 版 2 贾宗璞、许合利编著 C 语言程序设计 .人民邮电出版社,2010 年第 1 版 3 严蔚敏、吴伟民编著 数据结构(C 语言版) .清华大学出版社,1997 年第 1版7、附录(源程序)信源熵:#include <st

11、dio.h>#include <stdlib.h>#include <math.h>#include <conio.h> main()char str26 = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', '

12、;p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ; int i ; int j ;int Count26 = 0;/字母计数int Total = 0;/符号总数 float Pr26 = 0;/符号概率 float L_Pr26 = 0;/-log(P) FILE *fp;/文件指针 char c;/定义一个字符型变量 float H = 0;/信息量 char F

13、ilename30; printf ("请输入文件名称: "); scanf ("%20s", Filename);/读取输入 if (fp = fopen( Filename, "r") = NULL)/以只读方式打开 printf("输入有误,读取失败! ");/输出提示信息 /*统计每个符号数目,和符号总数*/ while (c = fgetc(fp) != EOF)/读取一个非0字符,EOF文本结束标志 /putchar(c); for ( i = 0; i < 26; i+)/ if(c = str

14、i) | (c = (stri - 32) Total+;/计算字符总数 Counti+;/编号为i的字母数目 fclose(fp);/关闭文件 printf("nn");for( i = 0; i < 26; i+)Pri = (float)(Counti) / Total;/计算出符号概率 if(Pri = 0.0)/排除符号概率为零的 ,直接命 L_chProbi = 0L_Pri = 0;elseL_Pri = -(log(Pri)/log(2); H += Pri*L_Pri;/信源墒 printf("信源熵为: %fbit/字符nn",

15、H);/输出信源墒 printf("信源符号 数目 符号概率p" );for( i = 0; i < 26; i+) if(Counti != 0) printf("n%2c(%c)", stri,stri - 32); printf("%10d %10f ", Counti, Pri );香农编码:#include <stdio.h>#include <stdlib.h>#include <math.h>#include <conio.h> main() int i ; int

16、j ;int N ;float H = 0;/信息量 float Pr100 = 0;/符号概率float A_Pr100 = 0;/累加概率 float L_Pr100 = 0;/-log(P) int Length100 = 0;/字长 float K = 0;/平均码长 printf("请输入一组概率的个数n");scanf("%d",&N);printf("n"); printf("请输入一组概率:n");for( i = 1; i<= N; i+)scanf("%f",&

17、amp;Pri); for( j = 1; j <= N ; j+) for( i = 0; i <= N -j ; i+) if(Pri < Pri + 1) float z = Pri; Pri = Pri + 1; Pri + 1 = z; /*计算累加概率*/A_Pr0 = 0;for( i = 1; i < N; i+)A_Pri =A_Pri - 1 + Pri - 1;/*计算出字长*/ for( i = 0; i < N; i+) L_Pri = -(log(Pri)/log(2); for( j = 0; j < L_Pri; j+)Lengthi+; for( i = 0; i < N; i+) K += Pri*Lengthi;/平均码长 H += Pri*L_Pri;/信源墒 printf(" 编码效率为:%fbit/码元", H/K);/输出编码效率printf(" 信源熵为: %fbit/字符nn",H);/输出信源墒 printf(" 概率p 累加概率 -lb

温馨提示

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

评论

0/150

提交评论