信息论与编码实验报告材料

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实用标准文档大全本科生实验报告实验课程信息理论与编码学院名称信息科学与技术学院专业名称学生姓名学生学号指导教师实验地点实验成绩二〇一六年九月----二〇一六年十一月实用标准文档大全填写说明1、适用于本科生所有的实验报告(印制实验报告册除外);2、专业填写为专业全称,有专业方向的用小括号标明;3、格式要求:①用A4纸双面打印(封面双面打印)或在A4大小纸上用蓝黑色水笔书写。②打印排版:正文用宋体小四号,1.5倍行距,页边距采取默认形式(上下2.54cm,左右2.54cm,页眉1.5cm,页脚1.75cm)。字符间距为默认值(缩放100%,间距:标准);页码用小五号字底端居中。③具体要求:题目(二号黑体居中);摘要(“摘要”二字用小二号黑体居中,隔行书写摘要的文字部分,小4号宋体);关键词(隔行顶格书写“关键词”三字,提炼3-5个关键词,用分号隔开,小4号黑体);正文部分采用三级标题;第1章××(小二号黑体居中,段前0.5行)1.1×××××小三号黑体×××××(段前、段后0.5行)1.1.1小四号黑体(段前、段后0.5行)参考文献(黑体小二号居中,段前0.5行),参考文献用五号宋体,参照《参考文献著录规则(GB/T7714-2005)》。实用标准文档大全实验一:香农(Shannon)编码一、实验目的掌握通过计算机实现香农编码的方法。二、实验要求对于给定的信源的概率分布,按照香农编码的方法进行计算机实现。三、实验基本原理给定某个信源符号的概率分布,通过以下的步骤进行香农编码1.将信源消息符号按其出现的概率大小排列)()()(21nxpxpxp2.确定满足下列不等式的整数码长Ki;1)(log)(log22iiixpKxp3.为了编成唯一可译码,计算第i个消息的累加概率11)(ikkixpp4.将累加概率Pi变换成二进制数。5.取Pi二进制数的小数点后Ki位即为该消息符号的二进制码。四、实验内容1.对给定信源01.01.015.017.018.019.02.0)(7654321xxxxxxxXqX进行二进制香农编码。2.对给定信源05.010.015.020.025.025.0)(654321xxxxxxXqX进行二进制香农编码。3.自已选择一个例子进行香农编码。五、实验设备PC计算机,C++实用标准文档大全六、实验报告要求1、画出程序设计的流程图,2、写出程序代码,3、写出在调试过程中出现的问题,4、对实验的结果进行分析。七、流程图八、程序代码//test.cpp:定义控制台应用程序的入口点。//#includestdafx.h#includeiostream#includeiomanipusingnamespacestd;int_tmain(intargc,_TCHAR*argv[]){inttest;intN;cout请输入信源符号个数:;cinN;cout请输入各符号的概率:endl;double*X=newdouble[N];//离散无记忆信源inti,j;for(i=0;iN;i++){coutX[i+1]=;cinX[i];}//由小到大排序for(i=0;iN;i++)for(j=i+1;jN;j++)if(X[i]X[j]){doubletemp=X[i];X[i]=X[j];X[j]=temp;}①将信源发出的N个消息,按其概率递减顺序排列②确认码长为1-log2(p(xi))③计算出第𝑛个消息的累加概率④将累加概率转换为二进制④求码字及输出码字实用标准文档大全int*K=newint[N];//确定码长for(i=0;iN;i++){K[i]=int(-(log(X[i])/log(2.0)))+1;//确认码长为1-log2(p(xi))if(K[i]==(-(log(X[i])/log(2.0)))+1)//当K[i]=-log2(p(xi))时,K[i]--K[i]--;}//累加概率double*pa=newdouble[N];pa[0]=0.0;double*p=newdouble[N];p[0]=0.0;for(i=1;iN;i++){pa[i]=pa[i-1]+X[i-1];p[i]=pa[i];}//将累加概率转换为二进制string*code=newstring[N];for(i=0;iN;i++)for(j=0;jN;j++)//这里默认最大码长不超过信源符号个数{doubletemp=pa[i]*2;if(temp=1)//累加概率乘2大于1,对应码字加1,累加概率自身取余{code[i]+=1;pa[i]=pa[i]*2-1;}else//累加概率乘2小于1时,对应码字加0,累加概率自身取余{code[i]+=0;pa[i]*=2;}}for(i=0;iN;i++){code[i]=code[i].substr(0,K[i]);}//求码字//输出码字coutsetw(12)信源setw(12)概率p(x)setw(12)累加概率Pa(x)setw(8)码长Ksetw(8)码字endl;for(i=0;iN;i++)coutsetw(12)i+1setw(12)X[i]setw(12)p[i]setw(8)K[i]setw(8)(code+i)-data()endl;delete[]X;delete[]pa;实用标准文档大全delete[]K;delete[]code;cintest;return0;}实验二:费诺编码一、实验目的掌握通过计算机实现费诺编码。二、实验要求对于给定的信源的概率分布,按照费诺编码的方法进行计算机实现。三、实验基本原理费诺编码的步骤:1.将概率按从大到小的顺序排列;2.按编码进制数将概率分组,使每组概率和尽可能接近或相等;3.给每组分配一位码元;4.将每一分组再按同样原则划分,重复2和3,直到概率不再可分为止。实用标准文档大全四、实验内容1.对给定信源01.01.015.017.018.019.02.0)(7654321xxxxxxxXqX进行二进制费诺编码。2.对给定信源05.010.015.020.025.025.0)(654321xxxxxxXqX进行二进制费诺编码。3.自已选择一个例子进行费诺编码。五、实验设备PC计算机,C++六、实验报告要求1、画出程序设计的流程图,2、写出程序代码,3、写出在调试过程中出现的问题,4、对实验的结果进行分析。七、流程图八、程序代码//feinuo.cpp:定义控制台应用程序的入口点。//#includestdafx.h#includeiostream#includeiomanip#includecmath#includestring①将信源发出的N个消息,按其概率递减顺序排列②调用fano费诺编码函数,判断该组中符号个数是否大于2,计算该组概率累加和③定位使两组概率和尽可能相近或相等的位置c,一组码字加“0”,另一组码字加“1”④判断分组点位置,进而分情况自身调用,直至各子集仅含一个消息为止实用标准文档大全usingnamespacestd;//int_tmain(intargc,_TCHAR*argv[])intn;string*sign;double*p;string*code;voidfano(inta,intb)//费诺编码函数{if((b-a)=1)//判断该组中符号个数是否大于2{doublesum=0;for(inti=a;i=b;i++)sum+=p[i];//计算该组概率累加和doubles1=0,*s=newdouble[10];for(inti=a;i=b;i++){s1+=p[i];s[i]=fabs(2*s1-sum)/sum;}doublemin=s[a];intc;for(inti=a;i=b;i++)if(s[i]=min){min=s[i];c=i;//定位使两组概率和尽可能相近或相等的位置c}for(inti=a;i=b;i++){if(i=c)code[i]+=0;//码字加0elsecode[i]+=1;//码字加1}//判断分组点位置,进而分情况自身调用if(c==a)fano(c+1,b);elseif(c==b-1)fano(a,c);else{fano(a,c);fano(c+1,b);}}}voidmain()实用标准文档大全{intfeinuo;cout请输入信源符号个数n:;cinn;p=newdouble[n];sign=newstring[n];code=newstring[n];cout请输入信源符号:;for(inti=0;in;i++)cinsign[i];cout请输入信源符号的概率:;for(inti=0;in;i++)cinp[i];for(inti=0;in;i++)for(intj=i+1;jn;j++)if(p[i]p[j]){doubletemp=p[i];p[i]=p[j];p[j]=temp;stringm=sign[i];sign[i]=sign[j];sign[j]=m;}fano(0,n-1);//费诺编码coutsetw(8)信源符号setw(8)概率setw(8)码字setw(8)码长endl;for(inti=0;in;i++)coutsetw(8)sign[i]setw(8)p[i]setw(8)code[i]setw(8)code[i].length()endl;delete[]p;delete[]sign;delete[]code;cinfeinuo;}实用标准文档大全实验三:霍夫曼编码一、实验目的掌握通过计算机实现霍夫曼编码二、实验要求对于给定的信源的概率分布,按照霍夫曼编码的方法进行计算机实现。三、实验基本原理霍夫曼编码的步骤:(1).把信源符号按概率大小顺序排列,并设法按逆次序分配码字的长度。(2).在分配码字长度时,首先将出现概率最小的两个符号的概率相加合成一个概率(3).把这个合成概率看成是一个新组合符号地概率,重复上述做法直到最后只剩下两个符号概率为止。(4).完成以上概率顺序排列后,再反过来逐步向前进行编码,每一次有二个分支各赋予一个二进制码,可以对概率大的赋为0,概率小的赋为1。四、实验内容1.对给定信源01.01.015.017.018.019.02.0)(7654321xxxxxxxXqX进行二进制霍夫曼编码。2.对给定信源05.010.015.020.025.025.0)(654321xxxxxxXqX进行二进制霍夫曼编码。3.自已选择一个例子进行霍夫曼编码。五、实验设备PC计算机,C++六、实验报告要求1、画出程序设计的流程图,2、写出程序代码,3、写出在调试过程中出现的问题,4、对实验的结果进行分析。实用标准文档大全七、流程图八、程序代码#includestdio.h#includestring.h#includestdlib.h#includemalloc.h#includeconio.h//------typedefstruct{unsignedintweight;unsignedintparent,lchild,rchild;}HTNode,*HuffmanTree;typedefchar**HuffmanCode;typedefstruct{unsignedints1;unsignedints2;}MinCode;voidError(char*message);HuffmanC

1 / 29
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功