ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:21.67KB ,
资源ID:15600834      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-15600834.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(信息论与编码实验指导书.docx)为本站会员(b****7)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

信息论与编码实验指导书.docx

1、信息论与编码实验指导书信息论与编码实验指导书1 课程实验目的本课程是一门实践性很强的专业课和核心课程,根据课程理论教学的需要安排了6学时的配套实验教学,主要内容涉及信息度量的计算方法、典型信源编码方法、典型信道容量计算方法和数据压缩方法四个实验,这四个实验的开设一方面有助于学生消化、巩固课程理论教学的知识,另一方面又可培养学生实践动手能力,同时为后续课程做好准备。2 课程实验要求2.1 课程实验准备要求(1)课程实验主要为设计性实验,要求学生熟悉掌握在VC环境下编写和调试C+程序的方法。(2)要求学生在实验前复习实验所用到的预备知识。可以查阅教材或者相关的参考资料,这需要学生有自主的学习意识和

2、整理知识的能力。(3)根据实验项目,设计相关的数据结构和算法,再转换为对应的书面程序,并进行静态检查,尽量减少语法错误和逻辑错误。上机前的充分准备能高效利用机时,在有限的时间内完成更多的实验内容。2.2 课程实验过程要求(1)生成源代码。将课前编写好的书面代码,利用VC自带的编辑器尽快输入为转换为源代码;(2)程序调试和软件测试。要求学生熟练掌握调试工具,调试正确后,认真整理源程序和注释,给出带有完整注释且格式良好的源程序清单和结果。(3)完成实验报告。根据实验内容和完成情况,按照附件1给定的格式完成课程实验报告的编写。2.3 课程实验报告要求在每次课程实验后要及时进行总结和整理,并编写课程实

3、验报告。报告格式按江西蓝天学院实验报告纸格式填写。实验一 二维随机变量信息熵的计算实验目的掌握二变量多种信息量的计算方法。实验学时2学时实验准备1熟悉二变量多种信息量的计算方法,设计实验的数据结构和算法;2编写计算二维随机变量信息量的书面程序代码。实验内容及步骤离散二维随机变换熵的计算说明:(1)利用random函数和归一化方法构造一个二维离散随机变量(X,Y);(2)分别计算X与Y的熵、联合熵、条件熵:H(X)、H(Y)、H(X,Y)H(X|Y)、I(X|Y);(3)对测试通过的程序进行规范和优化;(4)编写本次实验的实验报告。附实验一主要内容及源程序实验一 离散二维随机变量信息熵的计算1

4、实验内容(1)利用random函数和归一化方法构造一个二维离散随机变量(X,Y);(2)分别计算X与Y的熵、联合熵、条件熵:H(X)、H(Y)、H(X,Y)H(X|Y)、I(X|Y);2 数据结构与算法描述(1)函数的定义:函数的数据成员 1.随机生成函数的代码: int k,n,t=0; double a44,b=0,c=0; for(k=0;k4;k+) for(n=0;n4;n+) akn=rand()%100; t+=akn; cout从到间随机取得行列的random函数:endl; for(k=0;k4;k+) for(n=0;n4;n+) coutsetw(5)akn; coute

5、ndl; 2.函数归一化代码:cout函数归一化:endl; for(k=0;k4;k+) for(n=0;n4;n+) coutsetw(12)akn/t; coutendl; 3. H(Y)、 H(X)计算代码:coutH(Y)计算:setw(20)H(X)计算:endl; int e=1; for(k=0;k4;k+) double i=0,g=0; for(n=0;n4;n+) i+=(akn/t); g+=(ank/t); coutP(Yk+1):isetw(8)P(Xe):gendl; +e; b-=(i*log(i)/log(2.0); c-=(g*log(g)/log(2.0)

6、; coutH(Y)=-p(Y)log p(Y)=bendl; coutH(X)=-p(X)log p(X)=cendl;4. 联合熵H(X,Y)计算代码:cout联合熵H(X,Y)计算:endl; b=0; int r,u,h=0; for(k=0;k4;k+) for(n=0;n4;n+) if(akn!=0) b-=(akn/t)*log(akn/t)/log(2.0); else r=k,u=n; h=1; break; if(h=0) coutH(X,Y)=-p(X,Y)log p(X,Y)=bendl; else coutP(r+1,u+1)为零,中断,无值endl;5. 条件熵H

7、(X|Y)计算代码:cout条件熵H(X|Y)计算:endl; b=0,h=0; for(k=0;k4;k+) double i=0; for(n=0;n4;n+) i+=(akn/t); for(n=0;n4;n+) if(akn!=0) b-=(akn/t)*log(akn/t)/i)/log(2.0); else h=1;break; if (h=0)coutH(X|Y)=-P(X,Y)log(P(X,Y)/P(Y)=bendl; else coutP(r+1,u+1)为零,中断,无值endl; coutI(X|Y)计算:endl; if(h=0)coutI(X|Y)=H(X)-H(X|

8、Y)=c-bendl; else coutP(r+1,u+1)为零,中断,无值endl;(2)主函数main() 实现初始化操作,完成对子函数的调用因为整个程序是写在main函数中,就不列出,会在下面源程序清单中给出程序。3 实验数据与实验结果这里设定函数为4行4列的随机矩阵。然后函数归一化,即:把所有数字相加,再用每个数去除,就得到了归一化后的矩阵。而H(X)、H(Y)、H(X,Y)H(X|Y)、I(X|Y)就根据课本上的公式,然后编程。输出结果如下:4 程序代码清单:#include#include#include#include#includeusing namespace std;vo

9、id main() int k,n,t=0; double a44,b=0,c=0; srand(unsigned)time(NULL); for(k=0;k4;k+) for(n=0;n4;n+) akn=rand()%100; t+=akn; cout从0到100间随机取得行列的random函数:endl; for(k=0;k4;k+) for(n=0;n4;n+) coutsetw(5)akn; coutendl; cout函数归一化:endl; for(k=0;k4;k+) for(n=0;n4;n+) coutsetw(12)akn/t; coutendl; coutH(Y)计算:s

10、etw(20)H(X)计算:endl; int e=1; for(k=0;k4;k+) double i=0,g=0; for(n=0;n4;n+) i+=(akn/t); g+=(ank/t); coutP(Yk+1):isetw(8)P(Xe):gendl; +e; b-=(i*log(i)/log(2.0); c-=(g*log(g)/log(2.0); coutH(Y)=-p(Y)log p(Y)=bendl; coutH(X)=-p(X)log p(X)=cendl; cout联合熵H(X,Y)计算:endl; b=0; int r,u,h=0; for(k=0;k4;k+) for

11、(n=0;n4;n+) if(akn!=0) b-=(akn/t)*log(akn/t)/log(2.0); else r=k,u=n; h=1; break; if(h=0) coutH(X,Y)=-p(X,Y)log p(X,Y)=bendl; else coutP(r+1,u+1)为零,中断,无值endl; cout条件熵H(X|Y)计算:endl; b=0,h=0; for(k=0;k4;k+) double i=0; for(n=0;n4;n+) i+=(akn/t); for(n=0;n4;n+) if(akn!=0) b-=(akn/t)*log(akn/t)/i)/log(2.

12、0); else h=1;break; if (h=0)coutH(X|Y)=-P(X,Y)log(P(X,Y)/P(Y)=bendl; else coutP(r+1,u+1)为零,中断,无值endl; coutI(X|Y)计算:endl; if(h=0)coutI(X|Y)=H(X)-H(X|Y)=c-bendl; else coutP(r+1,u+1)为零,中断,无值endl;实验二 简单信源编码方法实现实验目的掌握Huffman编码方法。实验学时2学时实验准备1熟悉离散信源的编码方法,重点是Huffman编码方法,设计Huffman编码的数据结构和算法;2编写Huffman编码的书面程序

13、代码。实验内容及步骤离散信源的Huffman编、译码方法说明:(1)利用random函数构造一个一维离散随机变量分布P(X);(2)构造离散随机变量的概率压缩表;(3)根据概率压缩表构造Huffman编码表,并实现Huffman编码;(4)完成Huffman译码;(4)编写本次实验的实验报告。附实验二实验内容及程序源程序实验二 离散信源的Huffman编、译码方法1 实验内容(1)利用random函数构造一个一维离散随机变量分布P(X);(2)根据概率压缩表构造Huffman编码表,并实现Huffman编码;(3)完成Huffman译码;2 数据结构与算法描述 (1)函数的定义:函数的数据成员

14、 1.随机生成归一化一维离散变量函数代码:void aa(int n) double w=0; a=new doublen; srand(unsigned)time(NULL); cout随机生成归一化一维离散变量:endl; for(int i=0;in;i+) ai=rand()%50; w+=ai; for(int i=0;in;i+) ai=ai/w; double p; for(int i=0;i=i;j-) if(ajaj+1) p=aj+1; aj+1=aj; aj=p; coutP(X):; for(int i=0;in;i+) cout.precision(3); couta

15、isetw(8); 2. Huffman译码函数代码:void huffman(double *a,string *c,int n) elem mp;stack s(n); double *b;b=new doublen;for(int i=0;in;i+)bi=ai; double *d;d=new doublen;for(int i=0;in;i+)di=i; double *e;e=new doublen;for(int i=0;i=2;m-) bm-2+=bm-1; mp.a2=dm-2;mp.a3=dm-1; s.push(mp); double mp,mp1; for(int i=

16、0;i=i;j-) if(bjbj+1) mp=bj+1; mp1=dj+1; bj+1=bj; dj+1=dj; bj=mp;dj=mp1; coutleftsetw(6)nP(X):; for(int i=0;im-1;i+) cout.precision(3); coutsetw(8)bi; while(!s.isEmpty() mp=s.pop(); for(int i=0;in;i+) if(mp.a2=ei) t=ci; for(int i=0;in;i+) if(mp.a2=ei) ci=t; ci+=0; else if(mp.a3=ei) ci=t; ci+=1; (2)主函

17、数main() 实现初始化操作,完成对子函数的调用void main() int n; coutn; c=new stringn; aa(n); huffman(a,c,n); coutendl; coutsetw(6)各项Huffman编码为:endl; for(int i=0;in;i+) cout.precision(3); coutsetw(8)ai; cout.precision(0); coutsetw(n+4)ci; coutendl; 3 实验数据与实验结果 测试数据:随机生成归一化离散变量,如下图数据,并计算出各项Huffman编码。 实验结果:4 程序代码清单:#inclu

18、de#include#include#include#include#include#includeusing namespace std;double *a;string *c;struct elem double a2; double a3;class stack int size; int top; elem *list;public: stack(const int sz=0)size=sz;top=0;list=new elemsz; stack()delete list; void clear()top=0; void push(const elem& item)assert(to

19、psize);listtop+=item; elem pop()assert(!isEmpty();return list-top; elem topValue() constassert(!isEmpty();return listtop-1; bool isEmpty() constreturn top=0;void aa(int n) double w=0; a=new doublen; srand(unsigned)time(NULL); cout随机生成归一化一维离散变量:endl; for(int i=0;in;i+) ai=rand()%50; w+=ai; for(int i=

20、0;in;i+) ai=ai/w; double p; for(int i=0;i=i;j-) if(ajaj+1) p=aj+1; aj+1=aj; aj=p; coutP(X):; for(int i=0;in;i+) cout.precision(3); coutaisetw(8); void huffman(double *a,string *c,int n) elem mp;stack s(n); double *b;b=new doublen;for(int i=0;in;i+)bi=ai; double *d;d=new doublen;for(int i=0;in;i+)di=

21、i; double *e;e=new doublen;for(int i=0;i=2;m-) bm-2+=bm-1; mp.a2=dm-2;mp.a3=dm-1; s.push(mp); double mp,mp1; for(int i=0;i=i;j-) if(bjbj+1) mp=bj+1; mp1=dj+1; bj+1=bj; dj+1=dj; bj=mp;dj=mp1; coutleftsetw(6)nP(X):; for(int i=0;im-1;i+) cout.precision(3); coutsetw(8)bi; while(!s.isEmpty() mp=s.pop();

22、for(int i=0;in;i+) if(mp.a2=ei) t=ci; for(int i=0;in;i+) if(mp.a2=ei) ci=t; ci+=0; else if(mp.a3=ei) ci=t; ci+=1; void main() int n; coutn; c=new stringn; aa(n); huffman(a,c,n); coutendl; coutsetw(6)各项Huffman编码为:endl; for(int i=0;in;i+) cout.precision(3); coutsetw(8)ai; cout.precision(0); coutsetw(n+4)ci; coutendl; 实验三 典型信道容量计算实验目的掌握用递推算法计算典型信道的容量的方法。实验学时2学时实验准备1熟悉二进信道的概率转移矩阵表示,掌握信道容量的递推算法,设计用递推算法计算二进信道容量的数据结构和算法;2编写用递推算法计算二进信道容量的书面程序代码。实验内容及步骤用递推算法计算二进信道的容量说明:(1)构造各种二进信道的概率转移矩阵;(2)用递推算法计算各种二进信道的容量;(3)不断调整误差精度对系统进行测试,并进行对比分析;(4)编写本次实验的实验报告。附实验三内容及源程序实验三 用递推算法计算二进信道的容量1 实验内容(1)构造各种二进信道的概率转移矩阵;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2