- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
shannon码的编码实验总结
本科生实验报告 实验课程信息理论与编码 学院名称信息科学与技术学院 专业名称 学生姓名 学生学号 指导教师 实验地点 实验成绩 二〇一六年九月----二〇一六年十一月 填写说明 1、适用于本科生所有的实验报告; 2、专业填写为专业全称,有专业方向的用小括号标明; 3、格式要求: ①用A4纸双面打印或在A4大小纸上用蓝黑色水笔书写。②打印排版:正文用宋体小四号,倍行距,页边距采取默认形式。字符间距为默认值;页码用小五号字底端居中。 ③具体要求: 题目; 摘要; 关键词 小四号黑体 参考文献,参考文献用五号宋体,参照《参考文献著录规则》。 实验一:香农编码 一、实验目的 掌握通过计算机实现香农编码的方法。 二、实验要求 对于给定的信源的概率分布,按照香农编码的方法进行计算机实现。 三、实验基本原理 给定某个信源符号的概率分布,通过以下的步骤进行香农编码 1.将信源消息符号按其出现的概率大小排列 p(x1)?p(x2)???p(xn) 2.确定满足下列不等式的整数码长Ki; ?log2p(xi)?Ki??log2p(xi)?1 3.为了编成唯一可译码,计算第i个消息的累加概率 pi??p(xk) k?1i?1 4.将累加概率Pi变换成二进制数。 5.取Pi二进制数的小数点后Ki位即为该消息符号的二进制码。 四、实验内容 x2x3x4x5x6x7??X??x1?q(X)???????进行二进制香农编码。1.对给定信源? x2x3x4x5x6??X??x1??q(X)??????进行二进制香农编码。2.对给定信源? 3.自已选择一个例子进行香农编码。 五、实验设备 PC计算机,C++ 六、实验报告要求 1、画出程序设计的流程图, 2、写出程序代码, 3、写出在调试过程中出现的问题, 4、对实验的结果进行分析。 七、流程图 八、程序代码 //:定义控制台应用程序的入口点。 // #include #include #include usingnamespacestd; int_tmain(intargc,_TCHAR*argv[]) { inttest;intN; coutN; coutX[i]; } //由小到大排序 for(i=0;i=1)//累加概率乘2大于1,对应码字加1,累加概率自身取余 {pa[i]=pa[i]*2-1;code[i]+=1; } else//累加概率乘2小于1时,对应码字加0,累加概率自身取余 { code[i]+=0; pa[i]*=2;}}{code[i]=code[i].substr(0,K[i]);}//求码字for(i=0;idata() #includevector #includealgorithm #include usingnamespacestd; structbitree {//定义结构用于存储编码结果的二叉树结构,在译码时用到 charch;//用于存储码符号 charmz;//用于存储码字 bitree*lchild; bitree*rchild; }; structdata {//用于存储相关的信源符号以及其概率 doublep; charch; vectorcode; intml; }; boolsortspecial(datadt1,datadt2) {//用于排序时用 return; } voidprint2(vectorvd) {//用于打印译码结果 for(inti=0;ivd) {//用于读入相关的信源符号以及概率 intn; while(true) { coutn; cout; cin; =0; _back(dt); i++; } doublesum=0; vector::iteratorpit; /*for(pit=();pit!=();pit++) { sum+=pit-p; } if(sum!=1) { coutch=ch1; bit-mz=ch2; bit-lchild=NULL; bit-rchild=NULL; if(ch1==0) bt-rchild=bit; elsebt-lchild=bit; } voidCreatmz1(vect
文档评论(0)