已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河南理工大学课程设计报告书 信息论与编码课程设计报告 设计题目:判断唯一可译码、香农编码 专业班级 电信12-03 学 号 311208000607 学生姓名 曹 琳 指导教师 成凌飞 教师评分 2015年 3月21日目 录一、设计任务与要求2二、设计思路2三、设计流程图3四、程序运行及结果4五、心得体会6参考文献7附录:源程序801、 设计任务与要求 通过本次课程设计的练习,使学生进一步巩固信源熵、信源编码的基本原理,掌握具体的编码方法,熟悉编程软件的使用,培养学生自主设计、编程调试的开发能力,同时提高学生的实践创新能力。1、判断唯一可译码利用尾随后缀法判断任意输入的码是否为唯一可译码,即设计一个程序实现判断输入码组是否为唯一可译码这一功能。2、香农编码熟悉运用香农编码,并能通过C语言进行编程,对任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。二、设计思路1、判断唯一可译码在我们学习使用了克劳夫特不等式之后,知道唯一可译码必须满足克劳夫特不等式。但是克劳夫特不等式仅仅是存在性的判定定理,即该定理不能作为判断一种码是否为唯一可译码的依据。也就是说当码字长度和码符号数满足克劳夫特不等式时,则必可以构造出唯一可译码,否则不能构造出唯一可译码。因此我们必须找到一种能够判断一种码是否为唯一可译码的方法,尾随后缀法。 尾随后缀法算法描述:设C为码字集合,按以下步骤构造此码的尾随后缀集合F: (1) 考查C中所有的码字,若Wi是Wj的前缀,则将相应的后缀作为一个尾随后缀放入集合F0中; (2) 考查C和Fi两个集合,若WjC是WiFi的前缀或WiFi 是WjC的前缀,则将相应的后缀作为尾随后缀码放入集合Fi+1中; (3)F包含于Fi即为码C的尾随后缀集合; (4) 若F中出现了C中的元素,则算法终止,返回假(C不是唯一可译码);否则若F中没有出现新的元素,则返回真。在我们设计的算法中,需要注意的是我们需要的是先输出所有尾随后缀的集合,然后再判断该码是否是唯一可译码,即如F中出现了C中的元素,则C不是唯一可译码,否则若F中没有出现新的元素,则C为唯一可译码。而不是F中出现C中的元素就终止,这也是在本题的要求中需要注意的问题。2、 香农编码 香农第一定理指出了平均码长与信源之间的关系,同时也指出了可以通过编码使平均码长达到极限值,这是一个很重要的极限定理。香农第一定理指出,选择每个码字的长度Ki满足下式: I(xi)KI(xi)+1, 就可以得到这种码。这种编码方法就是香农编码。香农编码法有重要的理论意义。编码步骤如下:(1) 将信源消息符号按其出现的概率大小依次排列: p(x1)p(x2)p(xn)(2) 确定满足下列不等式整数码长Ki:-log2p(xi)Ki-log2p(xi)+1(3) 为了编成唯一可译码,计算第i个消息的累加概率; (4)将累加概率Pi变成二进制数; (5)取Pi二进制数的小数点后Ki位即为该消息符号的二进制码字。 开 始三、设计流程图1、判断唯一可译码 其框图如下: 输入码字个数与码字 进行尾随后缀编码判断是否为唯一可译码调用main()函数 结 束2、 香农编码 其框图如下: 开 始 输入符号概率将概率从大到小排序 求前j个的累加和 求码长Ki十进制转换为二进制 结 束四、程序运行及结果1、判断唯一可译码 其运行结果如下图所示:2、 香农编码 其运行结果如下图所示: 五、心得体会这次信息论与编码的程序设计,对于我来说是一个挑战。课程设计是培养学生综合运用所学知识,发现问题、提出问题、分析问题和解决问题的过程,锻炼学生的逻辑思维能力和实践能力,是对学生实际工作能力的具体训练和考察过程。在整个课程程序中,我们充分应用和调用各个程序模块,从而部分实现了此次程序设计的所应该有的功能。就是我在课程设计是比较成功的方面,而在这个过程中,让我感觉收获最大的就是我们都能利用这次课程设计学到很多我们在课本上没有的知识,充分的发挥了我们的主动性,使我们学会了自主学习,和独立解决问题的能力。这次的程序软件基本上运行成功,可以简单的输入进行压缩,并且运用简单的数字告诉程序的操作者下一步该如何进行,使得程序规模相对较小,即功能还不很全面,应用也不很普遍。总而言之,这次数据结构课程设计让我们感触很深,使我们每个人都了解到学习不应该只局限于课本,因为课本上告诉我们的只是很有限的一部分,只是理论上的死知识,所涉及的范围也是狭窄的。我们若想在有限的范围内学习到无限的知识,就要我们自己懂得争取,懂得自学,懂得充分利用身边的任何资源。在我们的程序中有一部分查找许多该方面的资料,我竭力将所获得的信息变成自己的资源。我动手上机操作的同时,在了解和看懂的基础上对新学的知识进行改进和创新,但是在我们的程序软件中还有很多的不足,需要加以更新。通过这次课程设计,我们都意识到了自己动手实践的弱势,特别是在编程方面,于是我们知道了计算机的实践操作是很重要的,只有通过上机编程才能充分的了解自己的不足。通过这次的课程设计,我们深刻意识到自己在学习中的弱点,同时也找到了克服这些弱点的方法,这是在此活动中得到的一笔很大的财富。同时也感谢老师给我们这次机会,发现自身存在的缺点与不足,从而在以后的大学生活中更好的提升和完善自我。参考文献1曹雪虹.信息论与编码M. 北京:清华大学出版社,2009.22河南理工大学概率论与数理统计教研组.概率论与数理统计M. 北京:高等教育出版社,2013.43贾宗璞.C语言程序设计M.北京:北京邮电大学出版社,2010附录:源程序1、 判断唯一可译码#include #include #include struct stringschar *string; struct strings *next;struct strings Fstr, *Fh, *FP;/输出当前集合void outputstr(strings *str)docoutstringnext;while(str);coutb?b:a; inline int MAX(int a, int b) return ab?a:b; #define length_a (strlen(CP)#define length_b (strlen(tempPtr)/判断一个码是否在一个码集合中,在则返回0,不在返回1int comparing(strings *st_string,char *code)while(st_string-next)st_string=st_string-next;if(!strcmp(st_string-string,code)return 0;return 1;/判断两个码字是否一个是另一个的前缀,如果是则生成后缀码void houzhui(char *CP,char *tempPtr)if (!strcmp(CP,tempPtr)cout集合C和集合F中有相同码字:endlCPendl不是唯一可译码码组!next=NULL;cp_temp-string=new charabs(length_a-length_b)+1; char *longstr;longstr=(length_alength_b ? CP : tempPtr);/将长度长的码赋给longstr/取出后缀for (int k=MIN(length_a,length_b); kstringk - MIN(length_a,length_b)=longstrk;cp_temp-stringabs(length_a-length_b)=NULL;/判断新生成的后缀码是否已在集合F里,不在则加入F集合if(comparing(Fh,cp_temp-string)FP-next=cp_temp;FP=FP-next;void main()/功能提示和程序初始化准备couttt唯一可译码的判断!nstring=new charstrlen(c); strcpy(Ch-string, c); Ch-next=NULL; char f=F :; Fh-string=new charstrlen(f); strcpy(Fh-string, f); Fh-next=NULL;/输入待检测码的个数int Cnum;coutCnum;cout输入待检测码endl;for(int i=0; iCnum; i+) couti+1tempstr; CP-next=new (struct strings);CP=CP-next;CP-string=new charstrlen(tempstr) ;strcpy(CP-string, tempstr);CP-next = NULL; outputstr(Ch); CP=Ch; while(CP-next-next) CP=CP-next;tempPtr=CP;dotempPtr=tempPtr-next;houzhui(CP-string,tempPtr-string);while(tempPtr-next); outputstr(Fh);struct strings *Fbegin,*Fend; Fend=Fh; while(1) if(Fend = FP)cout是唯一可译码码组!next) CP=CP-next;tempPtr=Fbegin;for(;)tempPtr=tempPtr-next;houzhui(CP-string,tempPtr-string);if(tempPtr = Fend)break;outputstr(Fh);/输出F集合中全部元素 2、 香农编码#include#include#include#includeclass Tpublic: T() T(); void Create(); void Coutpxj(); void Coutk(); void Coutz(); void Print();protected: int n; double *p; double *pxj; int *k; double *mz;void T:Create() coutn; p=new doublen; cout请分别输入这n个概率:n; for(int i=0;ipi; pxj=new doublen; k=new intn; mz=new doublen; double sum=0.0; for(i=0;in;i+) sum+=pi; if(sum!=1.0) throw 1; else for(i=0;in;i+) int k=i; for(int j=i+1;jn;j+) if(pkpj) k=j; double m=pi; pi=pk; pk=m; T:T() delete p; delete pxj; delete k; delete mz;void T:Coutpxj() pxj0=0; for(int i=1;in;i+) pxji=0; for(int j=0;ji;j+) pxji+=pj; void T:Coutk() for(int i=0;i0) ki=(int)d+1; else ki=(int)d; void T:Print() coutXisetw(8)P(xi) setw(8)Pa(xj) setw(8)Ki setw(8)码字 endl; for(int i=0;in;i+) coutXi+1 setw(8)setprecision(2)pi setw(8)setprecision(2)pxji setw(8)ki ; mzi=pxji; for(int j=0;j=0) cout1; mzi=2*mzi-1; else cout0; mzi=2*mzi; coutend
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《GBT 2384-2021染料中间体 熔点范围测定通 用方法》专题研究报告
- 公司皮带工岗位应急处置技术规程
- 水土保持员操作能力模拟考核试卷含答案
- 玩具制作工岗位设备安全技术规程
- 施工方和司机责任协议书
- 函数模型的应用(2大考点+7大题型)-2026年新高考数学一轮复习(讲义+专练)解析版
- 流量高峰时段调控办法
- 海南省海口市2023-2024学年八年级上学期期末地理试题(A)
- 揭秘小满销售策略
- 硕士教育新篇章
- 拔河后班会课件
- 拆迁签约仪式活动方案
- 隶书春联教学课件
- 2024版煤矿标准化管理体系-通风部分解读 培训课件
- 巡察考试试题及答案
- QMD1590-TE IG100氮气灭火系统安装、使用、操作及维护说明书
- T/CECS 10386-2024排水工程微型顶管用高性能硬聚氯乙烯管及连接件
- 《先天性胆总管扩张》课件
- 员工物品退还协议书
- 2025年中级消防设施操作员(维保类)考试题库及答案(浓缩500题)
- 学生心理健康一生一策档案表
评论
0/150
提交评论