




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信息论实验报告学生: 班级:学号:实验一 香农编码一、 程序设计的流程图开始 输入N输入信源概率X(N)由大到小排序求累加概率累加概率转为二进制确定码长Ki求码字输出码字结束二、程序清单#include #include#includeusing namespace std;void swap(double *x,double *y);int main() int N; cout输入信源个数N; double SN; /注意变量在数组中的影响 cout输入信源概率endl; for(int i=0;iSi; for(int i=0;iN;i+) for(int j=i;jN;j+) if(SiSj) swap(Si,Sj); int nmN; for(int i=0;iN;i+) nmi=int(-(log(Si)/log(2)+1; if(nmi=(-(log(Si)/log(2)+1) nmi-; double AAN; AA0=S0; for(int i=1;iN;i+ ) AAi=AAi-1+Si; string MMN; for(int i=0;iN;i+) double tem=0; double aa=AAi; for(int j=0;j1) MMi+=1; aa=tem-1; else MMi+=0; aa=tem; string BBN; for(int i=0;iN;i+) for(int j=0;jnmi;j+) BBi+=MMij; cout输出编码endl; for(int i=0;iN;i+) coutBBi=1? N调用fano()进行编码 Y编码输出结束二、程序清单#include #include#includeusing namespace std;void dw(int n,int H,int W,double *si,string *m);int main() int N; cout输入信源个数N; double SN; cout输入信源概率endl; for(int i=0;iSi; for(int i=0;iN;i+) for(int j=i;jN;j+) if(SiSj) double a; a=Si; Si=Sj; Sj=a; string MMN; dw(N,0,N-1,S,MM); cout输出编码endl; for(int i=0;iN;i+) coutMMi=1) for(int j=H;j=W;j+) sum+=*(si+j); double bn; for(int i=H;i=W;i+) sm+=*(si+i); bi=fabs(2*sm-sum)/sum; int ZH; double a=bH; for(int i=H;i=W;i+) if(bi=a) a=bi; ZH=i; for(int i=H;i=W;i+) if(i=ZH) mi+=0; else mi+=1; int nn=n;double *ss;ss=si; string *mm;mm=m; if(ZH=H) dw(nn,ZH+1,W,ss,mm); else if(ZH=W-1) dw(nn,H,ZH,ss,mm); else dw(nn,H,ZH,ss,mm); dw(nn,ZH+1,W,ss,mm); 实验三.霍夫曼 开始一、程序流程图输入lettersStrcmp(“%是”,是) 否 是计算字符个数与出现次数I+输出letersIcnt? 是 否条用霍夫曼编码结束二、 程序清单#include#includeusing namespace std; struct HNode double weight; int parent; int lchild; int rchild;void HuffmanTree(HNode *HuffNode,int n,double *si,string *m);int hc(string m);void nv(string *m,int n);int main() int N; cout输入信源个数N; double *S=new doubleN; cout输入信源概率endl; for(int i=0;iSi; string *MM=new stringN; for(int i=0;iN;i+) for(int j=i;jN;j+) if(SiSj) double a; a=Si; Si=Sj; Sj=a; HNode *node=new HNode2*N-1; HuffmanTree(node,N,S,MM); nv(MM,N); cout输出编码endl; for(int i=0;iN;i+) coutMMiendl;void HuffmanTree(HNode *HuffNode,int n,double *si,string *m) int i,j,x1,x2,c,p; float m1,m2; for (i=0;i2*n-1;i+) HuffNodei.weight=0; HuffNodei.parent=-1; HuffNodei.lchild=-1; HuffNodei.rchild=-1; for (i=0;in;i+) HuffNodei.weight=sii; for (i=0;in-1;i+) m1=m2=1; x1=x2=0; for (j=0;jn+i;j+) if (HuffNodej.parent=-1&HuffNodej.weightm1) m2=m1; x2=x1; m1=HuffNodej.weight; x1=j; else if (HuffNodej.parent=-1&HuffNodej.weightm2) m2=HuffNodej.weight; x2=j; HuffNodex1.parent=n+i; HuffNodex2.parent=n+i; HuffNoden+i.weight=HuffNodex1.weight+HuffNodex2.weight; HuffNoden+i.lchild=x1; HuffNoden+i.rchild=x2; for(i=0;in;i+) c=i; p= HuffNodec.parent; while(p!=-1) if(HuffNodep.lchild =c) mi+=0; else mi+=1; c=p; p=HuffNodec.parent; int hc(string m) int a=0; for(int i=0;mi!=0;i+) a+; return a;void nv(string *m,int n)char mnn; int b; for(int i=0;in;i+) b=hc(mi); for(int j=0;jb;j+) mnj=mib-j-1; mi=mn; 实验四.信道一、程序流程图 开始均匀分布迭代计算器k=0C(K+1)输出结果K=k+1结束否是三、 程序清单#include #include #include using namespace std;int main() int ni,no; int i,j; cout输入信源个数ni; cout输出信源个数no; double *Si=new doubleni; double *So=new doubleno; cout输入信源概率endl; for (i=0;iSii; coutendl; /再输入信道转移概率矩阵/注意进行判断,某行如果总概率大于1,则出现错误应从新输入 cout输入转移概率:endl; float *p; /转移条件概率 p=new float *ni; for (i=0;ini;i+) pi=new floatno; for (i=0;ini;i+) for (j=0;jpij; for (i=0;ini;i+) float a=0; for (j=0;jno;j+) a+=pij; if (a!=1.0) cout输入数据有误,请检查后再次输入。endl; float *pp; /后验概率 pp=new float *ni; for (i=0;ini;i+) ppi=new floatno; float C_Pre,C; /当前信道容量和前一次循环信道容量 C=10.0; double Pe=0.000001; /两次信道容量相差的阈值 int r=0; /迭代次数 float *p_up; /计算第r+1次循环输入分布p_in分子 p_up=new floatni; float p_down; /计算第r+1次循环输入分布p_in分母 do r+;/求第r次循环反条件概率p_ij for (j=0;jno;j+) Soj=0.0; for (i=0;i0) for (i=0;ini;i+) ppij=Sii*pij/Soj; /p(xy)/w(y),p(xy)=p(y/x)*p(x) else for (i=0;ini;i+) ppij=0; /求第r+1次循环输入分布p_in p_down=0.0; for (i=0;ini;i+) p_upi=0.0; for (j=0;j=0.000001) p_upi+=pij*log(ppij)/log(2.0); p_upi=pow(2.0,p_upi); p_down+=p_upi; for (i=0;ini;i+) Sii=p_upi/p_down; /求C(r+1) C_Pre=C; C=log(p_down)/log(2.0); cout第r次的容量为:CPe); cout迭代的次数为:rendl;实验五.循环码一、程序流程图退出输入码长nSwitch(n)生成多项式系数矩阵输入校验位输入信源信息向量cUx(g,c,r,n)X=1?X(g,c,r,n)开始选择编码方式序号二、 程序清单#include#include using namespace std;int N;void UX(int *g,int *c,int r,int n);void X(int *g,int *c,int r,int n);int main() N=10; int i,n,m,t,r; int gN,cN; cout*循环码编码方法(码长n=10)*nendl; coutt输入码长n:m; n=m; switch(n)/求生成多项式 case 1 :cout输入校验位r=%d:,n-1r; switch(r) case 0:g0=1;break; break; case 2 :cout输入校验位r=%d:n-1r; switch(r) case 0:g0=1;break; case 1:g0=1;g1=1;break; break; case 3 :cout输入校验位r=%d:n-1r; switch(r) case 0:g0=1;break; case 1:g0=1;g1=1;break; case 2:g0=1;g1=1;g2=1;break; break; case 4 :cout输入校验位r=%d:n-1r; switch(r) case 0:g0=1;break; case 1:g0=1;g1=1;break; case 2:g0=1;g1=0;g2=1;break; case 3:g0=1;g1=1;g2=1;g3=1;break; break; case 5 :cout输入校验位r=%d:n-1r; switch(r) case 0:g0=1;break; case 1:g0=1;g1=1;break; case 4:g0=1;g1=1;g2=1;g3=1;g4=1;break; break; case 6 :cout输入校验位r=%d:n-1r; switch(r) case 0:g0=1;break; case 1:g0=1;g1=1;break; case 2:g0=1;g1=1;g2=1;break; case 3:g0=1;g1=0;g2=0;g3=1;break; case 4:g0=1;g1=0;g2=1;g3=0;g4=1;break; case 5:g0=1;g1=1;g2=1;g3=1;g4=1;g5=1;break; break; case 7 :cout输入校验位r=%d:n-1r; switch(r) case 0 :g0=1;break; case 1 :g0=1;g1=1;break; case 3 :g0=1;g1=0;g2=1;g3=1;break; case 4 :g0=1;g1=1;g2=1;g3=0;g4=1;break; case 6 :g0=1;g1=1;g2=1;g3=1;g4=1;g5=1; g6=1;break; break; case 8 :cout输入校验位r=%d:n-1r; switch(r) case 0 :g0=1;break; case 1 :g0=1;g1=1;break; case 2 :g0=1;g1=0;g2=1;break; case 3 :g0=1;g1=1;g2=1;g3=1;break; case 4 :g0=1;g1=0;g2=0;g3=0;g4=1;break; case 5 :g0=1;g1=1;g2=0;g3=0;g4=1;g5=1;break; case 6 :g0=1;g1=0;g2=1;g3=0;g4=1;g5=0; g6=1;break; case 7 :g0=1;g1=1;g2=1;g3=1;g4=1;g5=1;g6=1; g7=1;break; break; case 9 :cout输入校验位r=%d:n-1r; switch(r) case 0 :g0=1;break; case 1 :g0=1;g1=1;break; case 2 :g0=1;g1=0;g2=1;break; case 3 :g0=1;g1=0;g2=0;g3=1;break; case 4 :g0=1;g1=0;g2=1;g3=0;g4=1;break; case 5 :g0=1;g1=1;g2=1;g3=1;g4=1;g5=1;break; case 6 :g0=1;g1=1;g2=0;g3=1;g4=0;g5=1; g6=1;break; case 7 :g0=1;g1=0;g2=1;g3=1;g4=1;g5=1; g6=0;g7=1;break; case 8 :g0=1;g1=1;g2=1;g3=1;g4=1;g5=1;g6=1; g7=1;g8=1;break; break; case 10 :cout输入校验位r=%d:n-1r; switch(r) case 0 :g0=1;break; case 1 :g0=1;g1=1;break; case 2 :g0=1;g1=0;g2=1;break; / case 3 :g0=1;g1=0;g2=0;g3=1;break; case 4 :g0=1;g1=1;g2=1;g3=1;g4=1;break; case 5 :g0=1;g1=0;g2=0;g3=0;g4=0;g5=1;break; case 6 :g0=1;g1=1;g2=0;g3=0;g4=0; g5=1;g6=1;break; case 8 :g0=1;g1=0;g2=1;g3=0;g4=1; g5=0;g6=1;g7=0;g8=1;break; case 9 :g0=1;g1=1;g2=1;g3=1;g4=1;g5=1; g6=1;g7=1;g8=1;g9=1;break; break; cout生成多项式系数矩阵为(幂次从低到高):nendl; for(i=0;i=n-1;i+) coutgi ;/生成多项式g(x) cout输入信源信息向量c(%d位):nn-rendl; for(i=0;ici; coutt*选择编码方式及命令*nendl; coutt 1:系统编码nendl; coutt 2:非系统编码nendl; coutt 3:退出程序!nendl; coutt*nt; switch(t) case 1 :X(g,c,r,n);break; case 2 :UX(g,c,r,n);break; case 3 :cout退出程序;exit(0);break; void UX
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025内蒙古鄂尔多斯市杭锦旗教育领域校园专场招聘专业技术人员14人模拟试卷附答案详解(典型题)
- 2025湖南永州市零陵高新技术产业开发区公开选调工作人员4人模拟试卷附答案详解(考试直接用)
- 2025广东中山市高校毕业生三支一扶计划招募60人考前自测高频考点模拟试题及一套参考答案详解
- 2025年潍坊经济开发区公开招聘部属公费师范毕业生(1人)考前自测高频考点模拟试题有答案详解
- 2025内蒙古第七批高层次人才需求目录(2025年4月29日发布)模拟试卷及答案详解一套
- 2025年福建省宁德市霞浦县国资与金融服务中心招聘6人考前自测高频考点模拟试题及答案详解(必刷)
- 2025北京邮电大学集成电路学院招聘3人(人才派遣)考前自测高频考点模拟试题及参考答案详解
- 2025湖南张家界高新技术产业开发区管委会招聘公益性岗位工作人员1人模拟试卷及答案详解(全优)
- 2025湖北华中科技大学同济医学院附属协和医院耳鼻咽喉头颈外科孙宇教授团队专职研究人员招聘考前自测高频考点模拟试题及答案详解(历年真题)
- 2025年陕西国网三批招聘已发布(59人)考前自测高频考点模拟试题附答案详解(突破训练)
- 2025年云南省“爱我国防”知识竞赛考试题库150题(含答案)
- 济南生物考试题目及答案
- 2025西安市第五医院招聘(6人)考试参考试题及答案解析
- 《英语(第三版)》课件-Unit 3
- 2025年江西省高考生物试卷真题(含标准答案及解析)
- 2025-2026学年九年级英语上学期第一次月考 (江苏省连云港专用)原卷
- 2025年食品行业市场风险防范策略方案
- 2025年国有企业中层管理岗位竞聘面试技巧与预测题集
- 电动消防排烟窗施工方案
- 2025年1月浙江省高考政治真题卷含答案解析
- 宗法制度教学课件
评论
0/150
提交评论