




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河南理工大学课程设计报告信息论与编码课程设计报告设计题目: 统计信源熵与香农编码 专业班级 电 信 12-06 学 号 学生姓名 指导教师 教师评分 2015年 3 月 30日目 录一、设计任务与要求2二、设计思路2三、设计流程图3四、程序运行及结果4五、心得体会6参考文献7附录:源程序8- 12 -一、设计任务与要求1.统计信源熵要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。2.香农编码要求:任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。二、设计思路本次课程设计中主要运用C语言编程以实现任务要求,分析所需要的统计量以及相关变量,依据具体公式和计算步骤编写语句,组成完整C程序。1、信源熵定义:信源各个离散消息的自信息量的数学期望为信源的平均信息量,一般称为信源的信息熵,也叫信源熵或香农熵,有时称为无条件熵或熵函数,简称熵,记为H()。计算公式:2、香农编码过程:(1)将信源消息符号按其出现的概率大小依次排列为(2)确定满足下列不等式的整数码长为(3)为了编成唯一可译码,计算第i个消息的累加概率(4)将累计概率变换成二进制数。(5)取二进制数的小数点后位即为该消息符号的二进制码字。3、 设计流程图1、 统计信源熵 开始 读取给定文件 判断文件是否打开 否 并且不为空 是 统计文本字符,直 关闭文件 至文本字符读完。 统计同一字符(不分 大小写)出现的次数 计算字符概率 计算信源熵 输出 结束 2、香农编码 开始 输入概率 计算累加概率 计算码字 计算码长 计算平均码长 计算信源熵 计算编码效率 输出 结束 四、 程序运行及结果1、统计信源熵 2、 香农编码 五、心得体会通过这次课程设计明显的体会到知识匮乏所带来的种种问题,首先是对C语言编程的不熟练,课程知识在与C语言的结合中没有清晰的思路,具体实现程序语言的编写较为困难。在程序的调试中出现的问题无法及时快速的解决,有些错误甚至无法找到合适的解决方法,以至于不断的修改程序,浪费了大量的时间。在设计期间出现的问题还是非常多的,要求熟悉相关软件的操作使用,需要不断的搜集所需的各种资料,及时解决遇到的问题。课程设计很是考察个人能力和团队合作协调能力,在面对自己所不熟悉甚至不了解的问题时,是怎样一步步的设计完成给定的任务,及时有成效的解决面临的问题的。从整体的分析设计到后面语句变量的敲定最终完成课题是对自己极其有益的锻炼,从中收获的不仅是知识上的,也是学习经验的积累和思维能力的提升,虽然一次课程设计任务不是那么繁重,可是认真去完成其中的一个个细节也是一种难得的体验。参考文献1曹雪虹,张宗橙.信息论与编码清华大学出版社.2009.2贾宗璞,许合利.C语言程序设计人民邮电出版社.2010.3盛骤,谢式千,潘承毅.概率论与数理统计M.高等教育出版.1989.附录:源程序1、 统计信源熵#include #include #include /*memcpy所需头文件*/#include #define N 1000/*宏定义N,此处N代表读取文本文件最大字符数为1000*/ int main(void) char sN,MN; int i = 0,j=0,n=0,L=0; int len, num27 = 0; double result=0,p27= 0; FILE *f; char tempN; /*打开文件.txt*/ if(!(f = fopen(D:VC+6.0text518.txt,rb) printf(文件打开失败!n); return 0; while(!feof(f)/*feof检查文件是否结束。如结束,否则返回0.*/ len=fread(temp,1,1000,f);/*fread返回读取的字符个数。从f锁指定的文件中读取长度为1的1000个数据项,存到temp所指向的内存区。返回所读取的数据个数。*/fclose(f);/*关闭f所指向的文件*/ templen=0;/*将temp数组元素清空(0空字符)*/ memcpy(s,temp,sizeof(temp); /*从temp中拷贝sizeof个字节到目标s中。sizeof返回一个对象或者类型所占的内存字节数*/ /*计算各个字母、空格出现数目*/for(i=0; i=a&si=A&si=Z) numsi-65+; printf(文本文件中各字符(不区分大小写)数量:n);for(j=0; j26; j+) Mj=numj; printf(%4c:%dt,j+65,Mj);/*输出格式,%3c在该字符前在空三个空格*/L+; if(L=5)/*输出格式,每行五个字母*/printf(n);L=0; printf(空格:%dt,num26); /*计算各个字母、空格出现概率*/ printf(n文本文件中各个字符概率:n);for(i=0; i26; i+) pi=(double)numi/strlen(s); printf(%3c:%ft,i+65,pi);n+;if(n=5)/*输出格式,每行五个字母概率*/ printf(n);n=0; p26=(double)num26/strlen(s);printf(空格:%ft,p26);printf(n); /*计算信源熵*/ for(i=0; i27; 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 #include #define max_CL 10 /*最大容量的代码的长度*/ #define max_PN 6 /*输入序列的个数*/ typedef float datatype; typedef struct SHNODE datatype pb; /*第i个消息符号出现的概率*/ datatype p_sum; /*第i个消息符号累加概率*/ int kl; /*第i个消息符号对应的码长*/ int codemax_CL; /*第i个消息符号的码字*/ struct SHNODE *next; shnolist; datatype sym_arrymax_PN; /*序列的概率*/ void pb_scan(); /*得到序列概率*/ void pb_sort(); /*序列概率排序*/ void valuelist(shnolist *L); /*计算累加概率码长码字*/ void codedisp(shnolist *L); void pb_scan() int i; datatype sum=0; printf(input %d possible!n,max_PN); for(i=0;i); scanf(%f,&sym_arryi); sum=sum+sym_arryi; /*判断序列的概率之和是否等于1在实现这块模块时scanf()对float数的缺陷故只要满足0.99sum1.0001|sum0.99) printf(sum=%f,sum must (0.999sum1.0001),sum); pb_scan(); /*选择法排序*/ void pb_sort() int i,j,pos; datatype max; for(i=0;imax_PN-1;i+) max=sym_arryi; pos=i; for(j=i+1;jmax) max=sym_arryj; pos=j; sym_arrypos=sym_arryi; sym_arryi=max; void codedisp(shnolist *L) int i,j; shnolist *p; datatype hx=0,KL=0; /*hx存放序列的熵的结果KL存放序列编码后的平均码字的结果*/ p=L-next; printf(numtgailvtsumt-lb(p(ai)tlenthtcoden); printf(n); for(i=0;ipb,p-p_sum,-3.332*log10(p-pb),p-kl); j=0; for(j=0;jkl;j+) printf(%d,p-codej); printf(n); hx=hx-p-pb*3.332*log10(p-pb); /*计算消息序列的熵*/ KL=KL+p-kl*p-pb; /*计算平均码字*/ p=p-next; printf(H(x)=%ftKL=%fnR=%fbit/code,hx,KL,hx/KL); /*计算编码效率*/ shnolist *setnull() shnolist *head; head=(shnolist *)malloc(sizeof(shnolist); head-next=NULL; return(head); shnolist *my_creat(datatype a,int n) shnolist *head,*p,*r; int i; head=setnull(); r=head;/87 for(i=0;ipb=ai; p-next=NULL; r-next=p; r=p; return(head); void valuelist(shnolist *L) shnolist *head,*p; int j=0; int i; datatype temp,s; head=L; p=head-next; temp=0; while(jp_sum=temp; temp=temp+p-pb; p-kl=-3.322*log10(p-pb)+1; /*编码*/ s=p-p_sum; for(i=0;ikl;i+) p-codei=0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新能源汽车维修工技能操作考核试卷及答案
- 淡水水生植物繁育工抗压考核试卷及答案
- 园林养护工操作考核试卷及答案
- 数控钻工技能比武考核试卷及答案
- 室内装饰设计师协同作业考核试卷及答案
- 发电集控值班员专项考核试卷及答案
- 湖南省长沙市2025年八年级上学期第一次月考物理模拟试题附答案
- 浙江省杭州市2025年九年级上学期月考英语试题卷附答案
- 海底隧道工程中的隧道使用性能评估
- 漏油诊断与分析报告
- DB43-T 2724-2023 农村公路养护工程预算编制办法及定额
- CJ/T 480-2015高密度聚乙烯外护管聚氨酯发泡预制直埋保温复合塑料管
- 儿科试题及答案泌尿感染
- 肥胖症诊疗指南(2024年版)解读
- 入股瑜伽店协议书
- 旅游团队境外医疗援助补充协议
- 联通智慧矿山协议合同
- 混凝土考试试题及答案
- 《小学交通安全教育》课件
- 四川省成都市2025届高三上学期第一次诊断性考试化学检测试卷(附答案)
- 2025报关单填制规范
评论
0/150
提交评论