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