下载此文档

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


文档分类:通信/电子 | 页数:约14页 举报非法文档有奖
1/14
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/14 下载此文档
文档列表 文档介绍
《信息论课程设计》———实现香农编码、费诺编码信计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

《实现香农编码、费诺编码》杨兴勃 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数14
  • 收藏数0 收藏
  • 顶次数0
  • 上传人allap
  • 文件大小124 KB
  • 时间2019-09-20
最近更新