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

上传人:b****3 文档编号:4130720 上传时间:2023-05-06 格式:DOCX 页数:33 大小:68.57KB
下载 相关 举报
信息论与编码实验指导书.docx_第1页
第1页 / 共33页
信息论与编码实验指导书.docx_第2页
第2页 / 共33页
信息论与编码实验指导书.docx_第3页
第3页 / 共33页
信息论与编码实验指导书.docx_第4页
第4页 / 共33页
信息论与编码实验指导书.docx_第5页
第5页 / 共33页
信息论与编码实验指导书.docx_第6页
第6页 / 共33页
信息论与编码实验指导书.docx_第7页
第7页 / 共33页
信息论与编码实验指导书.docx_第8页
第8页 / 共33页
信息论与编码实验指导书.docx_第9页
第9页 / 共33页
信息论与编码实验指导书.docx_第10页
第10页 / 共33页
信息论与编码实验指导书.docx_第11页
第11页 / 共33页
信息论与编码实验指导书.docx_第12页
第12页 / 共33页
信息论与编码实验指导书.docx_第13页
第13页 / 共33页
信息论与编码实验指导书.docx_第14页
第14页 / 共33页
信息论与编码实验指导书.docx_第15页
第15页 / 共33页
信息论与编码实验指导书.docx_第16页
第16页 / 共33页
信息论与编码实验指导书.docx_第17页
第17页 / 共33页
信息论与编码实验指导书.docx_第18页
第18页 / 共33页
信息论与编码实验指导书.docx_第19页
第19页 / 共33页
信息论与编码实验指导书.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《信息论与编码实验指导书.docx》由会员分享,可在线阅读,更多相关《信息论与编码实验指导书.docx(33页珍藏版)》请在冰点文库上搜索。

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

信息论与编码实验指导书

 

信息论与编码实验指导书

 

1课程实验目的

本课程是一门实践性很强的专业课和核心课程,根据课程理论教学的需要安排了6学时的配套实验教学,主要内容涉及信息度量的计算方法、典型信源编码方法、典型信道容量计算方法和数据压缩方法四个实验,这四个实验的开设一方面有助于学生消化、巩固课程理论教学的知识,另一方面又可培养学生实践动手能力,同时为后续课程做好准备。

2课程实验要求

2.1课程实验准备要求

(1)课程实验主要为设计性实验,要求学生熟悉掌握在VC环境下编写和调试C++程序的方法。

(2)要求学生在实验前复习实验所用到的预备知识。

可以查阅教材或者相关的参考资料,这需要学生有自主的学习意识和整理知识的能力。

(3)根据实验项目,设计相关的数据结构和算法,再转换为对应的书面程序,并进行静态检查,尽量减少语法错误和逻辑错误。

上机前的充分准备能高效利用机时,在有限的时间内完成更多的实验内容。

2.2课程实验过程要求

(1)生成源代码。

将课前编写好的书面代码,利用VC自带的编辑器尽快输入为转换为源代码;

(2)程序调试和软件测试。

要求学生熟练掌握调试工具,调试正确后,认真整理源程序和注释,给出带有完整注释且格式良好的源程序清单和结果。

(3)完成实验报告。

根据实验内容和完成情况,按照附件1给定的格式完成课程实验报告的编写。

2.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实验内容

(1)利用random函数和归一化方法构造一个二维离散随机变量(X,Y);

(2)分别计算X与Y的熵、联合熵、条件熵:

H(X)、H(Y)、H(X,Y)H(X|Y)、I(X|Y);

2数据结构与算法描述

(1)函数的定义:

函数的数据成员

1.随机生成函数的代码:

intk,n,t=0;

doublea[4][4],b=0,c=0;

for(k=0;k<4;k++)

{

for(n=0;n<4;n++)

{

a[k][n]=rand()%100;

t+=a[k][n];

}

}

cout<<"从到间随机取得行列的random函数:

"<

for(k=0;k<4;k++)

{

for(n=0;n<4;n++)

{

cout<

}

cout<

}

2.函数归一化代码:

cout<<"函数归一化:

"<

for(k=0;k<4;k++)

{

for(n=0;n<4;n++)

{

cout<

}

cout<

}

3.H(Y)、H(X)计算代码:

cout<<"H(Y)计算:

"<

"<

inte=1;

for(k=0;k<4;k++)

{

doublei=0,g=0;

for(n=0;n<4;n++)

{

i+=(a[k][n]/t);

g+=(a[n][k]/t);

}

cout<<"P(Y"<

"<

"<

++e;

b-=(i*log(i)/log(2.0));

c-=(g*log(g)/log(2.0));

}

cout<<"H(Y)=-∑p(Y)logp(Y)="<

cout<<"H(X)=-∑p(X)logp(X)="<

4.联合熵H(X,Y)计算代码:

cout<<"联合熵H(X,Y)计算:

"<

b=0;

intr,u,h=0;

for(k=0;k<4;k++)

{

for(n=0;n<4;n++)

{

if(a[k][n]!

=0)

{

b-=((a[k][n]/t)*log(a[k][n]/t)/log(2.0));

}

else

{

r=k,u=n;

h=1;

break;

}

}

}

if(h==0)

cout<<"H(X,Y)=-∑∑p(X,Y)logp(X,Y)="<

elsecout<<"P("<

5.条件熵H(X|Y)计算代码:

cout<<"条件熵H(X|Y)计算:

"<

b=0,h=0;

for(k=0;k<4;k++)

{

doublei=0;

for(n=0;n<4;n++)

{

i+=(a[k][n]/t);

}

for(n=0;n<4;n++)

{

if(a[k][n]!

=0)

{

b-=((a[k][n]/t)*log((a[k][n]/t)/i)/log(2.0));

}

else{h=1;break;}

}

}

if(h==0){cout<<"H(X|Y)=-∑∑P(X,Y)log(P(X,Y)/P(Y))="<

elsecout<<"P("<

cout<<"I(X|Y)计算:

"<

if(h==0)cout<<"I(X|Y)=H(X)-H(X|Y)="<

elsecout<<"P("<

(2)主函数main()实现初始化操作,完成对子函数的调用

因为整个程序是写在main函数中,就不列出,会在下面源程序清单中给出程序。

3实验数据与实验结果

这里设定函数为4行4列的随机矩阵。

然后函数归一化,即:

把所有数字相加,再用每个数去除,就得到了归一化后的矩阵。

而H(X)、H(Y)、H(X,Y)H(X|Y)、I(X|Y)就根据课本上的公式,然后编程。

输出结果如下:

4程序代码清单:

#include

#include

#include

#include

#include

usingnamespacestd;

voidmain()

{

intk,n,t=0;

doublea[4][4],b=0,c=0;

srand((unsigned)time(NULL));

for(k=0;k<4;k++)

{

for(n=0;n<4;n++)

{

a[k][n]=rand()%100;

t+=a[k][n];

}

}

cout<<"从0到100间随机取得行列的random函数:

"<

for(k=0;k<4;k++)

{

for(n=0;n<4;n++)

{

cout<

}

cout<

}

cout<<"函数归一化:

"<

for(k=0;k<4;k++)

{

for(n=0;n<4;n++)

{

cout<

}

cout<

}

cout<<"H(Y)计算:

"<

"<

inte=1;

for(k=0;k<4;k++)

{

doublei=0,g=0;

for(n=0;n<4;n++)

{

i+=(a[k][n]/t);

g+=(a[n][k]/t);

}

cout<<"P(Y"<

"<

"<

++e;

b-=(i*log(i)/log(2.0));

c-=(g*log(g)/log(2.0));

}

cout<<"H(Y)=-∑p(Y)logp(Y)="<

cout<<"H(X)=-∑p(X)logp(X)="<

cout<<"联合熵H(X,Y)计算:

"<

b=0;

intr,u,h=0;

for(k=0;k<4;k++)

{

for(n=0;n<4;n++)

{

if(a[k][n]!

=0)

{

b-=((a[k][n]/t)*log(a[k][n]/t)/log(2.0));

}

else

{

r=k,u=n;

h=1;

break;

}

}

}

if(h==0)

cout<<"H(X,Y)=-∑∑p(X,Y)logp(X,Y)="<

elsecout<<"P("<

cout<<"条件熵H(X|Y)计算:

"<

b=0,h=0;

for(k=0;k<4;k++)

{

doublei=0;

for(n=0;n<4;n++)

{

i+=(a[k][n]/t);

}

for(n=0;n<4;n++)

{

if(a[k][n]!

=0)

{

b-=((a[k][n]/t)*log((a[k][n]/t)/i)/log(2.0));

}

else{h=1;break;}

}

}

if(h==0){cout<<"H(X|Y)=-∑∑P(X,Y)log(P(X,Y)/P(Y))="<

elsecout<<"P("<

cout<<"I(X|Y)计算:

"<

if(h==0)cout<<"I(X|Y)=H(X)-H(X|Y)="<

elsecout<<"P("<

}

 

实验二简单信源编码方法实现

[实验目的]

掌握Huffman编码方法。

[实验学时]

2学时

[实验准备]

1.熟悉离散信源的编码方法,重点是Huffman编码方法,设计Huffman编码的数据结构和算法;

2.编写Huffman编码的书面程序代码。

[实验内容及步骤]

离散信源的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)函数的定义:

函数的数据成员

1.随机生成归一化一维离散变量函数代码:

voidaa(intn)

{

doublew=0;

a=newdouble[n];

srand((unsigned)time(NULL));

cout<<"随机生成归一化一维离散变量:

"<

for(inti=0;i

{

a[i]=rand()%50;

w+=a[i];

}

for(inti=0;i

{

a[i]=a[i]/w;

}

doublep;

for(inti=0;i

{

for(intj=n-2;j>=i;j--)

{

if(a[j]

{

p=a[j+1];

a[j+1]=a[j];

a[j]=p;

}

}

}

cout<<"P(X):

";

for(inti=0;i

{

cout.precision(3);

cout<

}

}

2.Huffman译码函数代码:

voidhuffman(double*a,string*c,intn)

{

elemmp;stacks(n);

double*b;b=newdouble[n];for(inti=0;i

double*d;d=newdouble[n];for(inti=0;i

double*e;e=newdouble[n];for(inti=0;i

stringt;

for(intm=n;m>=2;m--)

{

b[m-2]+=b[m-1];

mp.a2=d[m-2];mp.a3=d[m-1];

s.push(mp);

doublemp,mp1;

for(inti=0;i

{

for(intj=n-2;j>=i;j--)

{

if(b[j]

{

mp=b[j+1];mp1=d[j+1];

b[j+1]=b[j];d[j+1]=d[j];

b[j]=mp;d[j]=mp1;

}

}

}

cout<

";

for(inti=0;i

{

cout.precision(3);

cout<

}

}

while(!

s.isEmpty())

{

mp=s.pop();

for(inti=0;i

{

if(mp.a2==e[i])

{

t=c[i];

}

}

for(inti=0;i

{

if(mp.a2==e[i])

{

c[i]=t;

c[i]+="0";

}

elseif(mp.a3==e[i])

{

c[i]=t;

c[i]+="1";

}

}

}

}

(2)主函数main()实现初始化操作,完成对子函数的调用

voidmain()

{

intn;

cout<<"输入N:

";

cin>>n;

c=newstring[n];

aa(n);

huffman(a,c,n);

cout<

cout<

"<

for(inti=0;i

{

cout.precision(3);

cout<

cout.precision(0);

cout<

cout<

}

}

3实验数据与实验结果

测试数据:

随机生成归一化离散变量,如下图数据,并计算出各项Huffman编码。

实验结果:

4程序代码清单:

#include

#include

#include

#include

#include

#include

#include

usingnamespacestd;

double*a;

string*c;

structelem

{

doublea2;

doublea3;

};

classstack

{

intsize;

inttop;

elem*list;

public:

stack(constintsz=0){size=sz;top=0;list=newelem[sz];}

~stack(){delete[]list;}

voidclear(){top=0;}

voidpush(constelem&item){assert(top

elempop(){assert(!

isEmpty());returnlist[--top];}

elemtopValue()const{assert(!

isEmpty());returnlist[top-1];}

boolisEmpty()const{returntop==0;}

};

voidaa(intn)

{

doublew=0;

a=newdouble[n];

srand((unsigned)time(NULL));

cout<<"随机生成归一化一维离散变量:

"<

for(inti=0;i

{

a[i]=rand()%50;

w+=a[i];

}

for(inti=0;i

{

a[i]=a[i]/w;

}

doublep;

for(inti=0;i

{

for(intj=n-2;j>=i;j--)

{

if(a[j]

{

p=a[j+1];

a[j+1]=a[j];

a[j]=p;

}

}

}

cout<<"P(X):

";

for(inti=0;i

{

cout.precision(3);

cout<

}

}

voidhuffman(double*a,string*c,intn)

{

elemmp;stacks(n);

double*b;b=newdouble[n];for(inti=0;i

double*d;d=newdouble[n];for(inti=0;i

double*e;e=newdouble[n];for(inti=0;i

stringt;

for(intm=n;m>=2;m--)

{

b[m-2]+=b[m-1];

mp.a2=d[m-2];mp.a3=d[m-1];

s.push(mp);

doublemp,mp1;

for(inti=0;i

{

for(intj=n-2;j>=i;j--)

{

if(b[j]

{

mp=b[j+1];mp1=d[j+1];

b[j+1]=b[j];d[j+1]=d[j];

b[j]=mp;d[j]=mp1;

}

}

}

cout<

";

for(inti=0;i

{

cout.precision(3);

cout<

}

}

while(!

s.isEmpty())

{

mp=s.pop();

for(inti=0;i

{

if(mp.a2==e[i])

{

t=c[i];

}

}

for(inti=0;i

{

if(mp.a2==e[i])

{

c[i]=t;

c[i]+="0";

}

elseif(mp.a3==e[i])

{

c[i]=t;

c[i]+="1";

}

}

}

}

voidmain()

{

intn;

cout<<"输入N:

";

cin>>n;

c=newstring[n];

aa(n);

huffman(a,c,n);

cout<

cout<

"<

for(inti=0;i

{

cout.precision(3);

cout<

cout.precision(0);

cout<

cout<

}

}

实验三典型信道容量计算

[实验目的]

掌握用递推算法计算典型信道的容量的方法。

[实验学时]

2学时

[实验准备]

1.熟悉二进信道的概率转移矩阵表示,掌握信道容量的递推算法,设计用递推算法计算二进信道容量的数据结构和算法;

2.编写用递推算法计算二进信道容量的书面程序代码。

[实验内容及步骤]

用递推算法计算二进信道的容量

说明:

(1)构造各种二进信道的概率转移矩阵;

(2)用递推算法计算各种二进信道的容量;

(3)不断调整误差精度对系统进行测试,并进行对比分析;

(4)编写本次实验的实验报告。

 

附实验三内容及源程序

实验三用递推算法计算二进信道的容量

1实验内容

(1)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

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

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