资源预览内容
第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
第9页 / 共15页
第10页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划shannon码的编码实验总结本科生实验报告实验课程信息理论与编码学院名称信息科学与技术学院专业名称学生姓名学生学号指导教师实验地点实验成绩二一六年九月-二一六年十一月填写说明1、适用于本科生所有的实验报告;2、专业填写为专业全称,有专业方向的用小括号标明;3、格式要求:用A4纸双面打印或在A4大小纸上用蓝黑色水笔书写。打印排版:正文用宋体小四号,倍行距,页边距采取默认形式。字符间距为默认值;页码用小五号字底端居中。具体要求:题目;摘要;关键词小四号黑体参考文献,参考文献用五号宋体,参照参考文献著录规则。实验一:香农编码一、实验目的掌握通过计算机实现香农编码的方法。二、实验要求对于给定的信源的概率分布,按照香农编码的方法进行计算机实现。三、实验基本原理给定某个信源符号的概率分布,通过以下的步骤进行香农编码1.将信源消息符号按其出现的概率大小排列p(x1)?p(x2)?p(xn)2确定满足下列不等式的整数码长Ki;?log2p(xi)?Ki?log2p(xi)?13为了编成唯一可译码,计算第i个消息的累加概率pi?p(xk)k?1i?14将累加概率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#includeusingnamespacestd;int_tmain(intargc,_TCHAR*argv)inttest;intN;coutN;coutXi;/由小到大排序for(i=0;i=1)/累加概率乘2大于1,对应码字加1,累加概率自身取余pai=pai*2-1;codei+=1;else/累加概率乘2小于1时,对应码字加0,累加概率自身取余codei+=0;pai*=2;codei=codei.substr(0,Ki);/求码字for(i=0;idata()#includevector#includealgorithm#includeusingnamespacestd;structbitree/定义结构用于存储编码结果的二叉树结构,在译码时用到charch;/用于存储码符号charmz;/用于存储码字bitree*lchild;bitree*rchild;structdata/用于存储相关的信源符号以及其概率doublep;charch;vectorcode;intml;boolsortspecial(datadt1,datadt2)/用于排序时用return;voidprint2(vectorvd)/用于打印译码结果for(inti=0;i&vd)/用于读入相关的信源符号以及概率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(vector&vd,intbegin1,intend1,doublepn,bitree*&bt)/进行编码,用递归的方法进行编码intbegin=begin1,end=end1;if(begin=end)return;elseif(begin+1=end)return;elseif(begin+2=end)vdbegin._back(0);vdbegin.ml+;append(0,vdbegin.ch,bt);vdend-1._back(1);vdend-1.ml+;append(1,vdend-1.ch,bt);return;elsedoublesum0=0,sum1=0,sum2=0;dosum1+=vdbegin.p;sum2=sum1+vdbegin+1.p;begin+;while(fabs(sum1/)fabs(sum2/);/用于找到上下两组码的分点使得其概率和近于相同for(inti=begin1;irchild);/对分点前的进行编码Creatmz1(vd,begin,end1,pn-sum1,bt-lchild);/对分点后的进行编码*/voidprint1(vectorvd)/用于打印编码结果coutlchild!=NULL)clear(bt-lchild);if(bt!=NULL&bt-rchild!=NULL)clear(bt-rchild);deletebt;booldes_code(vector&vr,vectorvt,bitree*bt)/用二叉编码树进行解码if(bt=NULL)coutlchild!=NULL|mbt-rchild!=NULL)|pitlchild=NULL&mbt-rchild=NULL&mbt-mz!=0)_back(mbt-(转载于:写论文网:shannon码的编码实验总结)mz);mbt=bt;if(mbt-lchild!=NULL&vtpit=1)mbt=mbt-lchild;pit+;elseif(mbt-rchild!=NULL&vtpit=0)mbt=mbt-rchild;pit+;elseif(mbt-lchild!=NULL&mbt-rchild!=NULL)break;if(mbt-lchild!=NULL&mbt-rchild!=NULL)coutmz);returntrue;voidread1(vector&vd)/用于读入要解码的序列coutdt;while(dt!=#)_back(dt);cindt;voidprint_H_L_R(vectorvd)/用于计算并打印信息熵,平均码长,效率doubleH=0,L=0,R=0;for(inti=0;ich=#;bt-mz=*;bt-lchild=NULL;bt-rchild=NULL;vectorvd;vectorvr;vectorvt;cout*下面将对Fano编,译码的过程进行演示*endl;cout_endl;coutendl;cout*下面显示编码的过程及相关参数和结果*endl;read(vd);if()=1)vd0._back(0);vd0.ml+;append(0,vd0.ch,bt);coutendl;实验四香农编码一、实验目的:掌握香农编码的方法二、实验内容:?X?a1,a2,a3,a4,a5,a6?对信源?并计算?进行二进制香农编码。?P(X)?其平均码长,信源熵,和编码效率。三、实验步骤将信源符号按概率从大到小的顺序排列。用Pa表示第i个码字的累加概率确定满足下列不等式的整数K,并令K为第i个码字的长度?log2Pa(i)?K(i)?1?log2Pa(i)将Pa用二进制表示,并取小数点后K位最为a的编码四、实验数据及结果分析将信源符号按概率从大到小的顺序排列。P=;用Pa表示第i个码字的累加概率。Pa=确定满足下列不等式的整数K。K=将Pa用二进制表示,并取小数点后K位最为a的编码0001100101110111110计算其平均码长,信源熵,和编码效率平均码长L=信源熵H=编码效率xiaolv=五、代码附录N=input(N=);%输入信源符号的个数s=0;L=0;H=0;Pa=zeros(1,6);fori=1:NP(i)=input(P=);%输入信源符号概率分布s=s+P(i);endifs=1error(不符合概率分布);endP=sort(P,descend);Pa(1)=0;fori=2:NPa(i)=Pa(i-1)+P(i-1);enddisp(Pa);fori=1:Na=-log2(P(i);ifmod(a,1)=0%计算第i个码字的长度K(i)=a;elseK
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号