信息论实验指导书应用MATLAB软件实现.docx

上传人:b****6 文档编号:7900194 上传时间:2023-01-27 格式:DOCX 页数:32 大小:443.87KB
下载 相关 举报
信息论实验指导书应用MATLAB软件实现.docx_第1页
第1页 / 共32页
信息论实验指导书应用MATLAB软件实现.docx_第2页
第2页 / 共32页
信息论实验指导书应用MATLAB软件实现.docx_第3页
第3页 / 共32页
信息论实验指导书应用MATLAB软件实现.docx_第4页
第4页 / 共32页
信息论实验指导书应用MATLAB软件实现.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

信息论实验指导书应用MATLAB软件实现.docx

《信息论实验指导书应用MATLAB软件实现.docx》由会员分享,可在线阅读,更多相关《信息论实验指导书应用MATLAB软件实现.docx(32页珍藏版)》请在冰豆网上搜索。

信息论实验指导书应用MATLAB软件实现.docx

信息论实验指导书应用MATLAB软件实现

 

《信息论》实验指导书—-应用MATLAB软件实现(总25页)

《信息与编码理论》上机实验指导书

———————应用MATLAB软件实现

 

UPC通信工程系

前言

本实验系列是采用MATLAB软件,主要针对《信息论基础》课程中的相关内容进行的实验。

MATLAB是一完整的并可扩展的计算机环境,是一种进行科学和工程计算的交互式程序语言。

它的基本数据单元是不需要制定维数的矩阵,它可直接用于表达数学的算式和技术概念,解决同样的数值计算问题,使用MATLAB要比使用Basic、Fortran和C语言等提高效率许多倍。

MATLAB还是一种有利的教学工具,在大学的线性代数课程以及其它领域的高一级课程的教学中,已称为标准的教学工具。

该指导书共安排了4个实验,现就一些情况作简要说明:

各实验要求学生在MATLAB系统上尽量独立完成,弄懂。

实验内容紧扣课程教学内容的各主要基本概念,希望同学们在完成每个实验后,对所学的内容起到巩固和加深理解的作用。

每个实验做完后必须交一份实验报告。

恳请各位实验老师和同学在实验中提出宝贵意见,以利于以后改进提高。

 

实验一离散信源及其信息测度.......................................3

实验二离散信道及其容量...........................................6

实验三无失真信源编码.............................................8

实验四有噪信道编码..............................................10

附录部分常用MATLAB命令.......................................12

 

实验一离散信源及其信息测度

一、[实验目的]

离散无记忆信源是一种最简单且最重要的信源,可以用完备的离散型概率空间来描述。

本实验通过计算给定的信源的熵,加深对信源及其扩展信源的熵的概念的理解。

二、[实验环境]

  windowsXP,MATLAB

三、[实验原理]

信源输出的各消息的自信息量的数学期望为信源的信息熵,表达式如下

信源熵是信源的统计平均不确定性的描述,是概率函数

的函数。

四、[实验内容]

1、有条100字符英文信息,假定其中每字符从26个英文字母和1个空格中等概选取,那么每条信息提供的信息量为多少若将27个字符分为三类,9个出现概率占2/7,13个出现概率占4/7,5个出现占1/7,而每类中符号出现等概,求该字符信源的信息熵。

2、二进制通信系统使用0、1,由于存在失真,传输会产生误码,用符号表示下列事件:

u0:

一个0发出;u1:

一个1发出;v0:

一个0收到;v1:

一个1收到;给定下列概率:

p(u0)=1/2,p(v0|u0)=3/4,p(v0|u1)=1/2。

求:

(a)已知发出一个0,求收到符号后得到的信息量;(b)已知发出的符号,求收到符号后得到的信息量;

3、给定离散无记忆信源X,其概率空间为

求该信源的熵和其二次、三次扩展信源的熵。

(编写一M函数文件:

function[H_X1,H_X2,H_X3]=t03(X1,P1)

%t03求信源和其二次、三次扩展信源的熵

%输入为X1,P1,分别为信源符号和概率阵

%输出为原离散信源的熵H_X1和二次、三次扩展信源的熵H_X2、H_X3

4、某离散二维平稳信源的概率空间:

设发出的符号只与前一个符号有关。

求:

(a)认为信源符号之间无依赖性时,信源X的信息熵H(X);(b)认为有依赖性时的条件熵H(X2|X1);(c)联合熵H(X1X2);(d)根据以上三者之间的关系,验证结果的正确性。

5、有两个二元随机变量X和Y,它们的联合概率分布函数如下表:

YX

0

1

0

1/8

3/8

1

3/8

1/8

同时定义另一随机变量Z=X*Y,试求:

a、熵H(X),H(Z),H(X,Z)和H(X,Y,Z);

b、条件熵H(X|Y),H(X|Z),H(Y|X,Z);

c、互信息I(X;Y),I(X;Z),I(X;Y|Z);

五、[实验过程]

每个实验项目包括:

1)设计思路2)实验中出现的问题及解决方法;

1)设计思路

1、每字符从26个英文字母和1个空格中等概选取,一共100个字符,那么可以

组成27^100条消息,每条消息出现的概率是1/(27^100),由自信息量公式可

得每条消息的自信息量。

2、求出各种条件概率,将其代入信息量公式计算信息量。

3、离散无记忆信源X熵,可将其概率代入信息熵的计算公式得到,二次,三次

扩展信源,可先求出其概率空间。

4.由离散二维平稳信源的概率空间,及信息熵,条件熵,联合熵的公式,可得到

我们要的结果。

5、计算各种情况的概率,X的概率,Y的概率,Z=XY联合概率等,然后代入公

式求解。

6、程序代码:

clearall,clc;

%

%有条100字符英文信息,假定其中每字符从26个英文字母和1个空格中等概选取

%求每条信息提供的信息量

H1=log2(27^100)

%

%事件:

u0:

一个0发出;u1:

一个1发出;v0:

一个0收到;v1:

一个1收到;

%给定下列概率:

p(u0)=1/2,p(v0|u0)=3/4,p(v0|u1)=1/2

p_u0=1/2;

p_v0_u0=3/4;

p_v0_u1=1/2;

p_v1_u0=1-p_v0_u0;

%(a)已知发出一个0,求收到符号后得到的信息量;

H_V_u0=p_v0_u0*log2(p_v0_u0)-p_v1_u0*log2(p_v1_u0);

%(b)已知发出的符号,求收到符号后得到的信息量

p_u1=1-p_u0;

p_v1_u1=1-p_v0_u1;

p_u0v0=p_v0_u0*p_u0;

p_u0v1=p_v1_u0*p_u0;

p_u1v0=p_v0_u1*p_u1;

p_u1v1=p_v1_u1*p_u1;

H_V_U=-p_u0v0*log2(p_v0_u0)-p_u0v1*log2(p_v1_u0)-p_u1v0*log2(p_v0_u1)-p_u1v1*l

og2(p_v1_u1)

%

c=[,];

[y1,y2,y3]=t05(c)

%信源的熵和其二次、三次扩展信源的熵

%

P_X1X2=[1/41/180;1/181/31/18;01/187/36];%联合分布

%(a)认为信源符号之间无依赖性时,信源X的信息熵H(X);

P_X=sum(P_X1X2);

H_X=sum(-P_X.*log2(P_X));

fprintf('X的信源熵:

H_X=%\n',H_X);

%(b)认为有依赖性时的条件熵H(X2|X1);

P_X1_X2=[P_X1X2(:

1)/P_X

(1),P_X1X2(:

2)/P_X

(2),P_X1X2(:

3)/P_X(3)];%条件矩阵

P_X1_X2(find(P_X1_X2==0))=1;%将0换为1

H_X1_X2=sum(-P_X1X2.*log2(P_X1_X2));

fprintf('X的条件熵:

\nH_X1_X2=%\n',H_X1_X2);

%(c)联合熵H(X1X2)

P_X1X2(find(P_X1X2==0))=1;%将0换为1

H_X1X2=sum(-P_X1X2.*log2(P_X1X2));

fprintf('X的联合熵:

\nH_X1X2=%\n',H_X1X2);

%

%有两个二元随机变量X和Y,同时定义另一随机变量Z=X*Y,试求:

%a、熵H(X),H(Z),H(X,Z)和H(X,Y,Z);

%b、条件熵H(X|Y),H(Y|X,Z);

%c、互信息I(X;Y),I(X;Y|Z);

功能函数t03:

function[H_X1,H_X2,H_X3]=t03(X1,P1)

%t03

%输入为X1,P1,分别为信源符号和概率阵

%输出为原离散信源的熵和扩展信源的熵

X2=X_grow

(2);

p0=;

p1=1-p0;

H_X1=sum(-P1.*log2(P1));

l=length(X1);

P=zeros(1:

l^2);

fori=1:

l^2

l1=length(find(X2(i,:

)));

P2(i)=p0^(l-l1)*p1^l1;

end

H_X2=sum(-P2.*log2(P2));

%------------------------------------

---------------

functions=X_grow(n)

s=zeros(2^n,n);

fori=2:

2^n

j=n;

%forj=6:

-1:

1

s(i,:

)=s(i-1,:

);

s(i,j)=s(i-1,j)+1;

forj=n:

-1:

1

if(s(i,j)==2)

s(i,j)=0;

s(i,j-1)=s(i,j-1)+1;

end

end

End

功能函数t05:

function[H_X1,H_X2,H_X3]=t05(P1)

H_X1=sum(-P1.*log2(P1));

x=zeros(1,length(P1)^2);

y=zeros(1,length(P1)^3);

a=1;

b=1;

fori=1:

length(P1)

forj=1:

length(P1)

x(a)=P1(i)*P1(j);

a=a+1;

end

end

H_X2=sum(-x.*log2(x));

fori=1:

length(P1)

forj=1:

length(P1)

fork=1:

length(P1)

y(b)=P1(i)*P1(j)*P1(k);

b=b+1;

end

end

end

H_X2=sum(-x.*log2(x));

H_X3=sum(-y.*log2(y));

部分结果:

H1=

H_V_U=

y1=

y2=

y3=

X的信源熵:

H_X=

X的条件熵:

H_X1_X2=

X的条件熵:

H_X1_X2=

X的条件熵:

H_X1_X2=

X的联合熵:

H_X1X2=

X的联合熵:

H_X1X2=

X的联合熵:

H_X1X2=

2)实验中出现的问题及解决方法;

实验中遇到的问题有很多,如各种概率空间的计算,弄混,概念不清楚,

公式不熟悉,对信息论的定理概念及意义不理解,不能灵活运用。

对于各种概率的计算,需要准确分析,然后逐一进行计算。

信息论的定理概念及意义,翻书查阅,尽可能的熟悉,理解,并加以运用。

六、[实验总结]

通过实验,回顾了各种概率的求解方法,该实验主要是计算消息的信息量,

信息熵。

在实验过程中,不断地学习查阅课本,巩固了上课的知识,对所学的定

理和公式有了更加深刻的认识和理解。

 

实验二离散信道及其容量

一、[实验目的]

1、理解离散信道容量的内涵;

2、掌握求二元对称信道(BSC)互信息量和容量的设计方法;

3、掌握二元扩展信道的设计方法并会求其平均互信息量。

二、[实验环境]

  windowsXP,MATLAB7

三、[实验原理]

  若某信道输入的是N维序列x,其概率分布为q(x),输出是N维序列y,则平均互信息量记为I(X;Y),该信道的信道容量C定义为

四、[实验内容]

1、给定BSC信道,信源概率空间为

信道矩阵

求该信道的I(X;Y)和容量,画出I(X;Y)和

、C和p的关系曲线。

2、编写一M脚本文件,实现如下功能:

在任意输入一信道矩阵P后,能够判断是否离散对称信道,若是,求出信道容量C。

3、已知X=(0,1,2);Y=(0,1,2,3),信源概率空间和信道矩阵分别为

 

求:

平均互信息量;

4、对题

(1)求其二次扩展信道的平均互信息I(X;Y)。

五、[实验过程]

每个实验项目包括:

1)设计思路2)实验中出现的问题及解决方法;

 

1)设计思路

1、信道容量

max(X;Y)

C=I

,因此要求给定信道的信道容量,只要知道该信道

的最大互信息量,即求信道容量就是求信道互信息量的过程。

程序代码:

clearall,clc;

w=;

w1=1-w;

p=;

X

P

01

=

p1=1-p;

savedata1pp1;

I_XY=(w*p1+w1*p)*log2(1/(w*p1+w1*p))+(w*p+w1*p1)*log2(1/(w*p+w1*p1))-...

(p*log2(1/p)+p1*log2(1/p1));

C=1-(p*log2(1/p)+p1*log2(1/p1));

fprintf('互信息量:

%\n信道容量:

%',I_XY,C);

p=eps:

:

1-eps;

p1=1-p;

C=1-(p.*log2(1./p)+p1.*log2(1./p1));

subplot(1,2,1),plot(p,C),xlabel('p'),ylabel('C');

loaddata1;

w=eps:

:

1-eps;

w1=1-w;

I_XY=(w.*p1+w1.*p).*log2(1./(w.*p1+w1.*p))+(w.*p+w1.*p1).*log2(1./(w.*p+w1.*p1))-..

.(p.*log2(1./p)+p1.*log2(1./p1));

subplot(1,2,2),plot(w,I_XY)

xlabel('w'),ylabel('I_XY');

实验结果:

互信息量:

信道容量:

I(X;Y)和ω、C和p的关系曲线图:

01

0

 

1

p

C

01

0

 

1

w

IY

2、离散对称信道:

当离散准对称信道划分的子集只有一个时,信道关于输入和

输出对称。

离散准对称信道:

若一个离散无记忆信道的信道矩阵中,按照信道的输出集Y

可以将信道划分成n个子集,每个子矩阵中的每一行都是其他行同一组元素的不

同排列。

实验代码:

clc;clear;

P=input('输入信道转移概率矩阵:

');

[r,c]=size(P);

ifsum(P,2)-1~=zeros(1,r)';

error('输入的信道矩阵不合法!

');%矩阵行和一定要为1

end

l=1;

Sum=0;

forj=2:

c

fori=1:

r%i是行变量

fork=1:

r

ifP(k,j)==P(i,1)

Sum=Sum+1;

break;

end

end

end

end

ifSum==r*(c-1)

fprintf('是离散输出对称信道!

\n',j);

elsefprintf('不是对称信道!

');

end

实验结果:

输入信道转移概率矩阵:

[;]

是离散输出对称信道!

输入信道转移概率矩阵:

[;]

不是对称信道!

3、二次扩展信道的互信息量I(X;Y)=H(Y)-H(Y|X).

实验代码:

clc,clear;

p=;

P_X1=[,];

p1=1-p;

X2=[0,0;0,1;1,0;1,1];%二次扩展输入符号阵

Y2=X2;%二次扩展输出符号

P_X2=[P_X1

(1)^2,P_X1

(1)*P_X1

(2),P_X1

(2)*P_X1

(1),P_X1

(2)^2];

%求二次扩展后信道矩阵N

N=zeros(4);

fori=1:

4

forj=1:

4

l=length(find(xor(X2(i,:

),Y2(j,:

))==0));%比较得正确传递元素个数

N(i,j)=p1^l*p^(2-l);

end

end

%下面求I

P_Y2=P_X2*N;

P_XY2=[P_X2

(1)*N(1,:

);P_X2

(2)*N(2,:

);P_X2(3)*N(3,:

);P_X2(4)*N(4,:

)];%联合分布

H_Y2=sum(-P_Y2.*log2(P_Y2));

H_Y_X2=sum(sum(-P_XY2.*log2(N)));

I_XY2=H_Y2-H_Y_X2;

fprintf('2次扩展信道的平均互信息为:

%',I_XY2);

实验结果:

2次扩展信道的平均互信息为:

2)实验中出现的问题及解决方法;

1、信道容量与互信息量有关,而互信息量又与信源熵相关,所以要求得信道容

量就必须知道信道传递概率,然后根据公式一步一步计算。

2、对于判断离散对称信道,不需要弄清楚的是它的概念,根据定义来判断。

3、对于扩展信道,分有记忆的和无记忆的,在不确定的情况下计算扩展信源的

熵,我们要根据定义来计算。

六、[实验总结]

通过本次实验,我对于信道的分类,各种信道的特点有了一定的认识和了解。

实验中涉及的主要是二元对称信道,而它的最佳分布是输入和输出均对称。

实验中最主要的部分还是关于信道容量的计算,此次实验,让我们验证了课

本上的定理,也让我们更好地理解和掌握了课堂上所学的知识。

__

 

实验三无失真信源编码

一、[实验目的]

1、理解香农第一定理指出平均码长与信源之间的关系;

2、加深理解香农编码具有的重要的理论意义。

3、掌握霍夫曼编码的原理;

4、掌握霍夫曼编码的方法和步骤;

二、[实验环境]

  windowsXP,MATLAB7

三、[实验原理]

  香农第一定理:

设离散无记忆信源为

熵为H(S),其N次扩展信源为

熵为H(SN)。

码符号集X=(x1,x2,…,xr)。

先对信源

进行编码,总可以找到一种编码方法,构成惟一可以码,使S中每个信源符号所需的平均码长满足:

当N

是平均码长

对应的码字长度

四、[实验内容]

1、根据实验原理,设计shannon编码方法,在给定

条件下,实现香农编码并算出编码效率。

2、在给定离散无记忆信源

条件下,实现二进制霍夫曼编码,求最后得到的码字并算出编码效率。

五、[实验过程]

每个实验项目包括:

1)设计思路2)实验中出现的问题及解决方法;

某一离散信源概率分布:

p=[1/2,1/4,1/8,1/16,1/16]求信源的熵,并对该信源进行二元哈夫曼编码,得到码字和平均码长以及编码效率。

Matlab程序:

function[h,l]=huffman(p)

p=[1/21/41/81/161/16];

iflength(find(p<0))~=0,

error('Nota,thereisnegativecomponent')

end

ifabs(sum(p)-1)>10e-10

error('Inputisnota,thesunofthecomponentsisnotequalto1')

end

n=length(p);

q=p;

m=zeros(n-1,n);

fori=1:

n-1

[q,l]=sort(q);

m(i,:

)=[l(1:

n-i+1),zeros(1,i-1)];

q=[q

(1)+q

(2),q(3:

n),1];

end

fori=1:

n-1

c(i,:

)=blanks(n*n);

end

c(n-1,n)='0';

c(n-1,2*n)='1';

fori=2:

n-1

c(n-i,1:

n-1)=c(n-i+1,n*(find(m(n-i+1,:

)==1))...

-(n-2):

n*(find(m(n-i+1,:

)==1)));

c(n-i,n)='0';

c(n-i,n+1:

2*n-1)=c(n-i,1:

n-1);

c(n-i,2*n)='1';

forj=1:

i-1

c(n-i,(j+1)*n+1:

(j+2)*n)=c(n-i+1,...

n*(find(m(n-i+1,:

)==j+1)-1)+1:

n*find(m(n-i+1,:

)==j+1));

end;

end

fori=1:

n

h(i,1:

n)=c(1,n*(find(m(1,:

)==i)-1)+1:

find(m(1,:

)==i)*n);

l1(i)=length(find(abs(h(i,:

))~=32));

end

l=sum(p.*l1)

运行结果为:

l=

ans=

1

01

001

0000

0001

 

六、[实验总结]

 

   实验四有噪信道编码

一、[实验目的]

1、理解极大似然译码规则;

2、掌握简单重复编码方法;

3、掌握(5.2)线性码及其编码方法;

二、[实验环境]

  windowsXP,MATLAB7

三、[实验原理]

在确定译码规则F(yj)=xi,i=1,2,3,…,s之后,若信道输出端接收到的符号为yj,则一定译成xi。

如果发送端发送的就是xi,这就是正确译码;反之,若发送端发送的是xk,就认为是错误译码。

经过译码的平均错误概率为

若选择译码函数F(yj)=x*,使之满足条件

则称为极大似然译码规则。

四、[实验内容]

1、有一BSC信道矩阵:

采用简单重复编码,设计函数在编码次数分别为n=3、5、7、9,输入消息符号个数M=2条件下,求译码平均错误概率PE和信息传输速率R的值。

2、对上题的信道矩阵,若采用(5.2)线性码,M=4,n=5,求此时的信息传输速率R和误码率PE。

五、[实验过程]

)设有一离散信道,其信道传递矩阵为:

,并设

试分别按最小错误概率准则与最大似然译码准则确定译码规则,并计算相应的平均错误概率。

1、按最小错误概率准则,

P(ab)=[1/41/61/12,1/241/81/12,1/121/241/8]

Matlab程序:

p=(1/4+1/24)+(1/6+1/8)+(1/12+1/12)

运行结果:

p=

,即相应平均错误概率为:

按最大似然译码准则译码规则:

Matlab程序:

p2=1/2*(1/3+1/6)+1/4*(1/6+1/3)+1/4*(1/3+1/6)

程序运行结果:

p2=

 

即相应平均错误概率为:

 

附录:

部分常用MATLAB命令

管理命令和函数

help

在线帮助文件

doc

装入超文本说明

what

M、MAT、MEX文件的目录列表

type

列出M文件

lookfor

通过help条目搜索关键字

which

定位函数和文件

Demo

运行演示程序

Path

控制MATLAB的搜索路径

管理变量和工作空间

Who

列出当前变量

Whos

列出当前变量(长表)

Load

从磁盘文件中恢复变量

Save

保存工作空间变量

Clear

从内存中清除变量和函数

Pack

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

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1