信息论课程设计.docx
- 文档编号:10143812
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:9
- 大小:77.54KB
信息论课程设计.docx
《信息论课程设计.docx》由会员分享,可在线阅读,更多相关《信息论课程设计.docx(9页珍藏版)》请在冰豆网上搜索。
信息论课程设计
信息论与编码课程设计报告
设计题目:
统计信原熵与香农编码
专业班级电科11-02班
学号
学生姓名000oo
指导教师成、
教师评分
2014年 3月25日
目录
一、设计任务与要求3
二、设计思路3
三、设计流程图4
四、程序运行及结果4
五、心得体会6
参考文献7
附录:
源程序8
一、设计任务与要求
1.统计信源熵
要求:
统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。
2.香农编码
要求:
任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。
二、设计思路
这次课程设计是我们组一同商量,经过分析后决定选设统计任意文本文件中各字符数量,计算信源熵,香农编码的方法来计算信源熵和编码效率。
对于本次的设计思路,我们主要是设计任意文本去计算信源熵,并以只为基础,再继而计算设计香农编码,计算其编码效率。
步骤如下:
(1)先输入字符串,并统计各个字符出现的次数;
(2)计算信源熵:
(3)将信源消息符号按其出现的概率大小依次排列:
(4) 确定满足下列不等式整数码长Ki:
(5) 为了编成唯一可译码,计算第i个消息的累加概率。
(6)将累加概率Pi变成二进制数。
(7) 取Pi二进制数的小数点后Ki位即为该消息符号的二进制码字在这个编码步骤的的基础上,我们先统计信源熵,然后依次求出码长和码字。
三、设计流程图
统计信源熵和香农编码:
四、程序运行及结果
本次实验的运行结果:
5、心得体会
本次课程设计是老师根据课程所授的知识,让我们利用课外时间,通过自主学习,查找相关知识来编程,一方面增加了我们对本课程重点知识的认识和了解,另一方面通过课程设计这个平台,给我们一个团队合作,自主学习研究和锻炼学习和编程能力的机会,并且通过编写实验代码和调试运行,我们可以逐步积累调试程序的经验并逐渐培养我们的编程能力以及用计算机解决实际问题的能力。
在这个课程设计过程中,我感觉最大的难题就是对C语言编程的运用不够熟练,但是通过相应的复习,我还是收获很多,并把握住了一些基本知识点,最后经过不断尝试编写程序,还是较好的完成了本模块的设计。
其实对于这个编程任务, 我本来以为写程序半天就足够了,所以没有当一回事。
结果等到最后一周的时候,我准备开始做本次作业了,结果当我信誓旦旦的准备写程序时,突然不知道如何下手了,尽管心里充满了整个程序的详细步骤,但是就是写不出任何的东西,有些关键语句就是想不出来,无奈,只能重归课本,就这样一边查书,一边写程序,就这样把书上基础知识和一些特殊语句复习了一遍后,才顺利的把程序写出来了。
另外就是对于香农编码中的码字的求解,当时对于字符串的显示结果一直不理想,结果在室友的点拨、提醒下,我可以以单个字符逐个显示,以达到显示字符串的目的,这个障碍一解决,顿时有了信心,终于在我的反复调试下,终于达到了我想要的效果,至此,程序总算告一段落了。
在本次课程设计过程中,我受益颇多。
除了对本课程知识有了进一步的掌握,对c语言编写程序加深了依次复习之外,还有就是明白了一些做人,做事的道理。
对于自己未尝试的,一定要提前做出准备,对于某些必须要做的事,一定要自己主动去承担,莫要过分依赖别人,因为最终的后果还得你自己来承担。
另外我还加深了对一句话的认识:
只要你真心实意的付出了,一定会有收获的!
!
!
参考文献
[1]曹雪虹、张宗橙编著《信息论与编码》.清华大学出版社,2009年第二版
[2]贾宗璞、许合利编著《C语言程序设计》.人民邮电出版社,2010年第一版
[3]严蔚敏、吴伟民编著《数据结构》。
清华大学出版社,1997年第一版
[4]徐雅静,段清堂,王远征,《概率论与统计》.科学出版社,2009年第一版
附录:
源程序
#include
#include"string.h"
#include
voidmain()
{
charch[200],chh[50],m,mz[50][10];//定义变量和数组
charc[50][50];
intn[50],ml[50],sum=0,i=0,j,len,flag,k1;
floatrate[50],lj[50],lj1[50],H=0,t,k=0;
printf("作者:
郭勇宏,耿海洲,贺文\n");
printf("请输入需统计概率的字符串:
\n");
gets(ch,256);//接收字符串
len=strlen(ch);//计算字符串长度
printf("TheLenthis:
%d\n",len);
while(i { flag=0; for(j=0;j { if(ch[i]==chh[j]||ch[i]==chh[j]-32||ch[i]==chh[j]+32) { n[j]++; flag=1; } } if(flag==0) { n[sum]=1; chh[sum]=ch[i]; sum++; } i++; } printf("Total: %d\n",sum); for(i=0;i { rate[i]=(float)n[i]/len; } for(i=0;i { printf("%chas%dandtherateis%.2f%%\n",chh[i],n[i],100*rate[i]); H=H+rate[i]*log10(1/rate[i])/log10 (2);//计算信源熵 } for(j=0;j for(i=0;i if(rate[i] {t=rate[i]; m=chh[i]; rate[i]=rate[i+1]; chh[i]=chh[i+1]; rate[i+1]=t; chh[i+1]=m; } lj[0]=0; for(i=0;i { lj[i+1]=lj[i]+rate[i];//累加概率 ml[i]=(int)(-log10(rate[i])/log10 (2));//码长 if(ml[i]! =(-log10(rate[i])/log10 (2))) ml[i]++; } for(i=0;i { k=k+rate[i]*n[i]; } printf("符号\t概率\t累加概率-logp(x)码长\t码字\n"); for(i=0;i { printf("%c\t%.4f\t%.4f\t%.4f\t%d\t",chh[i],rate[i],lj[i],-log10(rate[i])/log10 (2),ml[i]); lj1[i]=lj[i]; for(k1=0;k1 {lj1[i]=lj1[i]*2; if(lj1[i]<1) { printf("0"); lj1[i]--; } else { printf("1"); lj1[i]--; } k1++; if(k1==ml[i]) printf("\n"); } } printf("信源熵H(x)是: %.2fbit/符号\n",H); printf("编码效率R是: %.2fbit/码元\n",H/k); while (1); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息论 课程设计