1 / 14
文档名称:

《实现香农编码、费诺编码》杨兴勃.doc

格式:doc   大小:124KB   页数:14页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

《实现香农编码、费诺编码》杨兴勃.doc

上传人:allap 2019/9/20 文件大小:124 KB

下载得到文件列表

《实现香农编码、费诺编码》杨兴勃.doc

文档介绍

文档介绍:《信息论课程设计》———实现香农编码、费诺编码信计0801班杨兴勃0808060121目录香农编码一、课题描述:二、课程设计目的:三、课程设计要求:四、算法分析:五、香农编码流程图:六、程序设计代码:七、实验结果:八、总结:九、参考文献:费诺编码一、问题描述:二、实****目的:三、算法分析:四、费诺编码流程图:五、费诺编码源程序代码:六、费诺编码测试结果截图:七、总结:八、参考文献:香农编码一、课题描述:对于给定的信源的概率分布,按照香农编码的方法进行计算机实现。二、课程设计目的:(1)进一步熟悉香农编码算法;(2)掌握程序设计和调试技术中数值的进制转换、数值愈字符串之间的转换等技术。三、课程设计要求:(1)输入:信源符号个数、信源的概率分布;(2)输出:每一个信源符号对应的香农编码码字。四、算法分析:、数据结构分别用数组p、q、k存放输入的概率,累加概率、码字长度;、算法基本原理给定某个信源符号的概率分布,通过以下的步骤进行香农编码:1)信源符号按概率从大到小排列;2)对信源符号求累加和,表达式:Pi=Pi-1+p(xi);3)求自信息量,确定码字长度。自信息量I(xi)=-log(p(xi));码字长度取大于等于自信息量的最小整数;4)将累加和用二进制表示,并取小数点后码字的长度的码。五、香农编码流程图:开始输入符号个数N和相应概率X[i]按概率由大到小排序按公式求码长求出对应位的概率累加和按乘2取余法则,将累加概率转换为二进制结合求得的对应码长,将二进制的累加概率取对应长度的作为相应码字输出信源、概率、累加概率、码长和码字结束六、程序设计代码:#include<iostream>#include<>#include<string>#include<iomanip>usingnamespacestd;voidbubble(double*p,intn)//排序{ for(inti=0;i<n-1;i++) { for(intj=i+1;j<n;j++) { if(p[i]<p[j]) { doubletemp=p[i]; p[i]=p[j]; p[j]=temp; } } }}voidleijia(double*p,double*pa,intn)//累加概率{ doublesum=; for(inti=0;i<n;i++) { pa[i]=sum; sum+=p[i]; }}voidlength(double*p,int*k,intn)//码字的长度{ for(inti=0;i<n;i++) { for(intj=0;j<20;j++) { if(j<1-log(p[i])/log(2)&&j>=-log(p[i])/log(2)) k[i]=j; } doubleI=-log(p[i])/log(2); inttemp=int(I); if(I-temp==0)k[i]=temp; elsek[i]=temp+1; }}voidcode(int*k,double*pa,string*str,intn)//求编码{ for(inti=0;i<n;i++) { doubles=pa[i]; for(intj=0;j<k[i];j++) { s=2*s; if(s>=1) { str[i]+="1"; s=s-1; } elsestr[i]+="0"; } }}voidmain(){ intn; cout<<"信源符号个数n="; cin>>n; double*p=newdouble[n]; cout<<"信源符号的概率依次为:"; for(inti=0;i<n;i++) { cin>>p[i]; } bubble(p,n); double*pa=newdouble[n]; leijia(p,pa,n); int*k=newint[n]; length(p,k,n); string*str=newstring[n]; code(k,pa,str,n); cout<<setw(10)<<"p(ai)"<<setw(10)<<"Pa(aj)"<<setw(10)<<"Ki"<<setw(10) <<"码字"<<endl; for(i=0;i<n;i++) { cout<<setw(10)<<p[i]<<setw(10)<<pa[i]<<setw(10)<<k[i]<<setw(10)<<str[i]<<endl; }}七、实验结果:八、总结:通过本次上机,我对香农编码有了进一步的了解,掌握了其具体过程的实现方法,也对新源编码这一概念有了更加深刻的理解,在编码的过程中,是我对C以及C++语言的基础知识掌握更加牢固,特别是巩固了对输出流格式控制的相关知识,总而言之,这次课程设计实践让我受益匪浅。九、参考文献:1