资源预览内容
第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
第9页 / 共14页
第10页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
信息论与编码课程设计报告设计题目: 统计信源熵与香农编码 专业班级: 电子信息工程1601 学 号: 201608000010 学生姓名: 顾 祎 指导教师: 成 凌 飞 教师评分: 目 录一、设计任务与要求31、 统计信源熵32、香农编码3二、设计思路31、统计信源熵32、香农编码:4三、设计流程图51、统计信息熵52、香农编码6四、程序运行及结果71、统计信息熵72、香农编码8五、心得体会9六、参考文献10附录11一、 设计任务与要求1、 统计信源熵要求:统计任意文本文件中各字符(区分大小写)数量,计算字符概率,并计算信源熵。2、香农编码要求:任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。二、 设计思路本次课程设计中主要运用C语言编程以实现任务要求,分析所需要的统计量以及相关变量,依据具体公式和计算步骤编写语句,组成完整C语言程序。运行环境为VC+6.0。 1、统计信源熵 定义:信源各个离散消息的自信息量的数学期望为信源的平均信息量,一般称为信源的信息熵,也叫信源熵或香农熵,有时称为无条件熵或熵函数,简称熵,记为H(X)。 计算公式:。统计信源熵就是对一篇英文文章,或者是输入一段字符串,通过对其中的a,b,c,d/A,B,C,D.(区分大小写)和数字符号1,2,3,4以及各个符号如:, 。 !等统计符号的个数N和每一个符号的数目n,有这个公式P=n/N可得每个字母的概率,最后又信源熵计算公式 ,可计算出信源熵H,所以整体步骤就是先统计出英文段落的总字符数,或者是输入字符串的总个数。包括字母(区分大小写)、数字、标点等,然后再统计每个字符的个数,即每遇到同一个字符就+1,直到算出每个字符的个数,进而算出每个字符的概率,再由信源熵计算公式计算出信源熵。2、香农编码: 香农编码主要通过一系列步骤支出平均码长与信源之间的关系,同时使平均码长达到极限值,即选择的每个码字的长度满足下式: 具体步骤如下: 1. 将信源消息符号按其概率从大到小排列2. 确定满足下列不等式的整数码长Ki 3. 令P1=0,计算第i个消息的累加概率4. 将累加概率Pi变换成二进制数,取小数点后Ki位为该消息的码字 在香农编码中对于求解编码效率主要是依靠这个公式:R=H(X)/K,其中 对于求解信源熵主要依靠公式: 三、 设计流程图1、统计信息熵开始 输入字符不计入统计否输入是否为字符 结束 计算信息熵并输出计算并输出每个字符的概率统计同一字符出现的次数并输出是统计字符数量 2、香农编码开始 输入X的个数输入P(x)的概率分布重新输入累加概率是否为1结 束输 出计算信息熵和编码效率计算码字和码长把概率重新排序是四、 程序运行及结果1、统计信息熵2、香农编码五、 心得体会这真是一次有意义的学习旅程。在设计期间,我和我的团队一直沉浸于探索、探讨之中,各种有意思的想法层出不穷。我们总是想尽可能的把课程设计做的足够的完美,足够的精彩,可是同时又不得不面临一个又一个的技术难题。有些经过我们的努力,通过不断地修改不断的翻阅资料得以解决,可是仍有好多的的问题是我们苦思冥想所参索不透的!真是知识用时方恨少啊!课程设计很是考察个人能力和团队合作协调能力,在面对自己所不熟悉甚至不了解的问题时,是怎样一步步的设计完成给定的任务,及时有成效的解决面临的问题的。从整体的分析设计到后面语句变量的敲定最终完成课题是对自己极其有益的锻炼,从中收获的不仅是知识上的,也是学习经验的积累和思维能力的提升,虽然一次课程设计任务不是那么繁重,可是认真去完成其中的一个个细节也是一种难得的体验。还有就是在此过程中,经常遇到自己不能解决的问题,就会请教其他组员,一起共同讨论,直到解决,这是的我们充分认识到了团队协作的重要性,也体验到了在问题得到解决的时候所独有的那份喜悦。也体会到了与队友的合作更是一件快乐的事情,只有彼此都付出,彼此都努力维护才能将作品做的更加完美。在此次课程设计中,我们主要是做了统计信源熵与香农编码这两个题目,初一看题目感觉应该很简单,但真正的去做的时候才发现并不是想象的那么简单,本次课设的困难主要集中在程序的编写上。我们团队是基于C语言编写的程序。C语言虽然一直都在用,可每次都感觉非常难。虽然我们的思路是正确的、明确的,可是由于变量的定义,语法的不规范,以及指针的指向错误等等一系列问题阻碍了我们走向胜利。不过我们是不会轻易放弃的。我们起早贪黑,熬夜到半夜一点,翻书翻了好几本。我认为本次课程设计是成功的,在这学期的课程设计中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教学长,以及不懈的努力,不仅培养了独立思考,在各种其它能力上也都有了提高。更重要的是,在课程设计上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践六、 参考文献1曹雪虹,张宗橙.信息论与编码.北京:清华大学出版社,2009.2杨永国,张冬明.Visual C+6.0实用教程.北京:清华大学出版社,2007.3贾宗璞,许合利.C语言程序设计人民邮电出版社.2014.附录1、统计信息熵#include #include #include #define N 1000int main(void) char sN,MN; int i = 0,j=0,n=0,L=0; int len, num95 = 0; double result=0,p95= 0; FILE *f; char tempN; char c; int sum=0; printf(please input an essay:n); gets(s); sum=strlen(s); printf(%d,sum); for(i=0; i= &si=) numsi-32+; printf(英文文本文件中各字符数量:n); for(j=0; j95; j+) Mj=numj; printf(%4c:%dt,j+32,Mj);/*输出格式,%4c在该字符前在空三个空格*/ L+; if(L=15)/*输出格式,每行十五个字符*/ printf(n); L=0; /*计算各个字符出现概率*/ printf(n文本文件中各个字符概率:n); for(i=0; i95; i+) pi=(double)numi/sum; printf( P(%c)=%ft,i+32,pi); n+; if(n=5)/*输出格式,每行五个字符概率*/ printf(n); n=0; for(i=0; i95; i+) /*计算信源熵*/ if (pi!=0) result=result+pi*log(pi)*1.433;/*信源熵,I(x)=-logp(x)*/ result=-result; printf(信源熵为:%f,result); printf(n); return 0; 2、香农编码 #include #include void main() int i,n, j,k; float sum=0; float b100=0; float p100=0; float m,H1=0,H2=0; float Pi100=0; int L100; char c100100; printf(输入X的个数 n); scanf(%d,&n); printf(n); printf(输入Pi的概率分布n); for(i=0;in;i+) scanf(%f,&pi); for(i=0;i 1e-6) sum=0; printf(错误输入,请重新输入n); printf(输入X的个数n); scanf(%d,&n); printf(n); printf(输入Pi的概率分布n); for(i=0;in;i+) scanf(%f,&pi); for(i=0;i=n;i+) sum=sum+pi; for(j=0;jn-1;j+) for(i=0;in-1-j;i+) if(pipi+1) m=pi; pi=pi+1; pi+1=m; Pi0=0;
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号