信息论实验指导书.docx
《信息论实验指导书.docx》由会员分享,可在线阅读,更多相关《信息论实验指导书.docx(22页珍藏版)》请在冰豆网上搜索。
信息论实验指导书
信息论与编码实验指导书
任课教师:
刘亚荣
桂林理工大学电计系
Matlab基础:
1、变量不需指定类型,拿来就用;变量区分大小写
2、向量定义:
x=[1/2,1/4,1/4](行向量);y=(0:
360)*pi/180;向量的转置x'(列向量)
3、.*./A运算,逐个元素进行运算。
例x仁[1/2,1/4,1/4],x2=[2,4,
4],则x1*x2没定义;x1*x2'有定义(=3);x1.*x2有定义(逐元素相乘=[1,1,1])
4、变量值显示:
如果一行的后面没有分号,则显示出该行的变量结果。
如a=3显
示出a=3。
5、画图命令plot(x,y);x(向量)是一系列坐标,y(向量)是一系列值。
6、求和:
sum(),求积分:
求微分:
符号微分
diff(f)——求f对自由变量的一阶微分diff(f,v)——求f对符号变量v的一阶微分diff(f,v,n)——求f对符号变量v求n阶微分符号积分
int(f,v)——求表达式f的对符号变量v的不定积分
int(f,v,a,b)求表达式f的对符号变量v的在(a,b)范围内定积分
7M函数文件的基本结构
函数文件由function语句引导,其基本结构为:
function输出形参表=函数名(输入形参表)注释说明部分
函数体语句说明:
(1)关于函数文件名:
函数文件名与函数名也可以不相同。
当两者不同时,
MATLA将忽略函数名而确认函数文件名,因此调用时使用函数文件名。
(2)关于注释说明部分。
注释说明包括三部分内容:
①紧随函数文件引导行之后以%开头的第一
注释行。
②第一注释行及之后连续的注释行。
③与在线帮助文本相隔一空行的注释行。
(3)关于return语句。
执行到该语句就结束函数的执行,程序流程转至调用该函数的位置。
通常,在函数文件中也可不使用return语句,这时在被调函数执行完成后自动返回。
8显示图形
1、%plot函数绘制结果t=0:
pi/100:
2*pi;%定义数据点
y=sin(t);
plot(t,y)%显示图形
gridon%显示网格xlabel('t');%显示x轴的变量ylabel('sin(t)');%显示y轴的变量
2、%plot函数中x-y副的使用t=0:
pi/100:
2*pi;
y=sin(t);
plot(t,y)
gridon
y2=sin(t-0.25);
y3=sin(t-0.5);plot(t,y,t,y2,t,y3)
实验一:
计算离散信源的熵
一、实验设备:
1、计算机
2、软件:
Matlab
二、实验目的:
1、熟悉离散信源的特点;
2、学习仿真离散信源的方法
3、学习离散信源平均信息量的计算方法
4、熟悉Matlab编程;
三、实验内容:
1、写出计算自信息量的Matlab程序
2、写出计算离散信源平均信息量的Matlab程序。
3、掌握二元离散信源的最大信息量与概率的关系。
4、将程序在计算机上仿真实现,验证程序的正确性并完成习题。
四、实验报告要求
写出习题的
简要总结离散信源的特点及离散信源平均信息量的计算MATLA实现语句。
信息论基础:
自信息的计算公式
1
1(a)log2Matlab实现:
I=log2(0p)或I=-Iog2(p)
Pa
熵(平均自信息)的计算公式
q1q
H(x)pilog2—Pilog2Pi
i1pii1
;或者h=h-x(i)*log2(x(i));
Matlab实现:
HX=sum(-x.*log2(x))
习题:
1.甲地天气预报构成的信源空间为:
乙地信源空间为:
晴小雨
求此两个信源的熵。
求各种天气的自信息量
案:
H(X)1.75;H(Y)0.5436
2、某信息源的符号集由A、B、C、DE组成,设每一符号独立出现,其出现的概率分别为,1/4,1/8,1/8,3/16,5/16,试求该信源符号的平均信息量。
3、设有四个消息分别以概率1/4,独立的。
试计算其平均信息量。
(答案:
H(X)=2.2272bit符号)1/8,1/8,1/2传送,每一消息的出现是相互
(答案:
H(X)=1.75bit/符号)
4.设一个二元信源(只有0和1两种符号)其概率空间为:
X01
P(x)P,1P
编程画出H与p的关系,并说明当P呈什么分布时,平均信息量达到最大值。
(说明:
H=-p*log2(p)-(1-p).log2(1-p);)
实验二:
验证熵的可加性与强可加性
1.【例2.6】
有一离散无记忆信源
X
a1a?
a3
P(x)
111
2'4'4
验证二次扩展信源X2的熵等于离散信源X的熵的2倍,即
H(X2)2H(X)
答案:
H(X)1.5;H(X2)3.0
2.验证两个统计独立的信源X,Y,验证:
H(XY)H(X)H(Y)
H(X)1.5,
其中:
X
a1
a2a3
Y
b1
bA
P(x)
1
11
P(y)
1
11
J
2
4,4
3
3'3
H(Y)1.585H(XY)3.085
3、条件熵的计算与熵的强可加性
验证离散二维平稳信源,满足:
H(X,X2)H(XJH(X2|XJ
某一离散二维平稳信源
X
P(x)
012
1141
36'9'4
X/2其联合概率分布P(X!
X2)为:
X
0
1
2
0
1
1
18
0
1
1
1
1
18
|3
18
2
0]
1
18
7
36
编程计算:
1)联合熵日以梯2)
2)条件熵H(X2|Xi)
3)验证:
日以梯2)H(X1)H(X2|X1)
答案:
H(X1)1.5426;H(X2|X1)0.8717
H(X1X2)2.4144H(X1)H(X2|X1)2.4144
%联合熵的计算
HXY=0;
fori=1:
size(b,1)
forj=1:
size(b,2)
ifb(i,j)>0
HXY=HXY-b(i,j).*log2(b(i,j));end
end
end
HXY
实验三:
离散信道的平均互信息的计算
1.【习题3.1】
设信源
通过一干扰信道,接收到符号为Y[力,丫2],其信道矩阵为:
51
P66
31
4'4
1)求信源X中事件X1和X2分别含有的自信息;
2)收到消息yj(j1,2)后,获得的关于Xi(i1,2)的信息量;
3)求信源X和输出变量丫的信息熵;
4)信道疑义度H(X|Y)和噪声熵H(Y|X);
5)接收到消息丫后获得的平均互信息;答案:
1.I(x1)0.737I(x2)1.3219
2.
0.3219
1(X1;%)0.0589,1(心y2)0.263,1(x?
;yj0.0931,1(x?
;y?
)
3.H(X)0.971,H(Y)0.7219
4.H(X|Y)0.9635H(Y|X)0.7145
5.I(X;Y)0.0074
2.二元信道的互信息与信源分布的关系有二元信源:
X01p(x)1
0.80.2
0.20.8
有二元信道,其传递矩阵为:
P1pp,其中p0.2,即传递矩阵Pp1p
编程实现下面题目:
1)画出平均互信息I(X;Y)随信源分布的关系曲线,并求出最大平均互信息
验证:
信道容量C(最大平均互信息)满足:
C1H(p)
2)验证:
信道容量C(最大平均互信息)满足:
C1H(p)
实验四:
离散信道及其信道容量
一、实验设备:
1、计算机
2、软件:
Matlab
二、实验目的:
1、了解信道传输概率的状态图和信道转移概率矩阵特点;
2、了解什么是信道容量和最佳输入概率分布;
3、列出计算信道容量和平均互信息的计算步骤;
4、熟悉Matlab编程;
三、实验内容:
1、写出几种特殊离散信道的信道容量计算的Matlab程序。
2、将程序在计算机上仿真实现,验证程序的正确性。
3、完成习题
四、实验报告要求简要总结离散信道的特点及信道容量的计算,并写出具体仿真步骤。
习题:
计算下面几类信道的信道容量
C:
1无损信道
1/2
1/2
0
0
0
0
P0
0
3/5
3/10
1/10
0
Clogr
0
0
0
0
0
1
答案:
c=1.585
2无噪有损信道
1
0
P
1
0
Clogs
0
1
答案:
c=1
3对称
尔离
散信
道
【例
3.6】
1
1
1
1
P
3
1
3
1
6
1
6
1
ClogsH(P1LPs)
6
6
3
3
答案:
c=0.0817
4一般信道,其信道矩阵为:
求1)其信道容量C,2)最佳输入分布p(aj
答案:
4.C0.3109,
p(a)(0.1702,0.3955,0.4343)
beta=
-1.9732
-1.1610
-0.8927
pa=
0.17020.39550.4343
解:
一般信道信道容量计算步骤:
ss
(1)p(bj|ai)jp(bj|a)ogp(bj|aj;求j
j1j1
(2)clog2
ji
(3)p(bj)2jc求p(bj)
r
(4)p(bj)p(ai)p(bjIai)求p(aj
i1
实验五:
连续信源的差熵与波形信道的信道容量
一、实验设备:
1、计算机
2、软件:
Matlab
二、实验目的:
1、熟悉连续信源的特点;
2、学习仿真连续信源的方法
3、学习连续信源平均信息量的计算方法
4、熟悉Matlab编程;
三、实验内容:
1、写出计算连续信源平均信息量的Matlab程序。
2、将程序在计算机上仿真实现,验证程序的正确性。
3、完成习题并写出具体实现步骤。
四、实验报告要求
简要总结连续信源的特点及连续信源平均信息量的计算
知识点:
Matlab符号运算
1、定义符号:
symsx定义表达式里面的变量
2、定义函数:
p=1/sqrt(2*pi*uA2)*exp(-(x-m)A2/(2*uA2));
x的在负无穷到正无穷范围内
3、积分:
int(f,x,-inf,inf);求表达式f的对符号变量
定积分
int(f,v,a,b)求表达式f的对符号变量v的在(a,b)范围内定积分
例题:
求x21
I22dx,
(x2x2)
symsx
f=(xA2+1)/(xA2-2*x+2)A2;
I=int(f)
4、符号运算中的运算符
(1)基本运算符
符号矩阵:
“+”“”,
a)?
?
符号数组:
”“”,“•分别实现符号数组的乘、除、求幕,即数组间元素与元素的运算。
没有Iog2和loglO,其余与数值运算相同
(2)关系运算符
运算符“==”“~=”
5、连续信源的差熵与波形信道的信道容量:
h(x)rp(x)logp(x)dx
R
Blog(lNS)
练习:
、计算下面几类信源的差熵:
1均匀分布连续信源
p(x)
ba(axb)
0(xb,xa)
其中b
8,a4
symsx,a=4;
b=8;
p=1/(b-a);
f=P*(log(p)/log
(2));hx=-int(f,x,a,b);hx=double(hx);
hx
2咼斯信源
其中m3,24
3指数分布信源【习题4.2]
p(x)ex(x0;0)
其中1/44拉普拉斯概率分布信源【习题4.2]
1p(x)2eIx(x;0)
其中1/4
解答:
均匀分布信源的差熵为:
hlog(ba)2
高斯分布信源的差熵为:
h1log(2e2)3.0471
指数分布信源的差熵为:
hlog(e)3.4427
拉普拉斯分布信源的差熵为:
hlog(送)4.4427
二、波形信道的信道容量
实验目的:
掌握香农公式,即信息传输率、带宽、信噪比的关系
CWlog(1-pS)
【习题4.18】设在平均功率受限高斯加性波形信道中,信道带宽为3kHz,又设(信
号功率+噪声功率”噪声功率=10dB。
(即10lg(1空)10dB,其中lg是以10为底Pn
的对数)。
1)试计算该信道传送的最大信息率(单位时间);
2)若信噪比降为5dB,要达到相同的最大信息传输率,信道带宽应是多少?
答案:
1.最大信息传输率Rt9965.784(bit/s)
2.带宽应为:
W=4.8439e+003
实验六:
无失真信源编码与保真度准则下的信源编码
一、实验设备:
1、计算机
2、软件:
Matlab
二、实验目的:
1、理解无失真信源编码与保真度准则下的信源编码的物理意义;
2、理解无失真信源编码与保真度准则下的信源编码的区别;
3、熟悉Matlab编程;
三、实验内容:
1、学习应用信源编码定理解决实际问题。
2、将程序在计算机上仿真实现,验证程序的正确性。
3、完成习题并写出具体实现步骤。
四、实验报告要求
写出习题实现的具体步骤习题:
SS2
41,每秒钟发出2.66个信源符号
55
将此信源的输出符号送入某一个二元信道中进行传输(假设信道是无噪无损的)而信道每秒钟只传递两个二元符号。
试问信源不通过编码能否直接与信道连接?
若通过适当编码能否在此信道中进行无失真传输?
若能连接,试说明如何编码并
说明原因。
0111
实验七:
有噪信道编码定理
一、实验设备:
1、计算机
2、软件:
Matlab
二、实验目的:
1、理解有噪信道编码定理的物理意义;
2、熟悉Matlab编程;
三、实验内容:
1、学习应用有噪信道编码定理解决实际问题。
2、将程序在计算机上仿真实现,验证程序的正确性。
3、完成习题并写出具体实现步骤。
四、实验报告要求
写出习题实现的具体步骤。
习题:
1
1
1
2
3
6
1、(习题6.1)设有一离散信道,其信道传递矩阵为:
1
1
1,并设
6
2
3
1
1
1
3
6
2
11
P(Xi)-,p(x2)p(x3)-,试分别按最小错误概率准则与最大似然译码准则确
定译码规则,并计算相应的平均错误概率。
实验八、九:
无失真的信源编码(Huffman、香农-费诺-埃利斯
编码编码)
一、实验设备:
1、计算机
2、软件:
Matlab
二、实验目的:
1、掌握无失真的信源编码的基本原理;
2、熟练掌握Huffman以及香农-费诺-埃利斯编码的方法步骤;
三、实验内容:
1、根据Huffman编码的方法步骤,用Matlab编写二元Huffman编码的程序;
2、用习题1验证程序的正确性。
3、编写程序实现香农-费诺-埃利斯编码,并完成习题。
四、实验报告要求
1、分析给出的二元Huffman编码的Matlab源程序的局限性,考虑如何改进。
2、写出习题实现具体步骤。
源程序:
function[h,l]=huffman(p)
iflength(find(p<0))~=0,
error('Notaprob.vector,negativecomponent(s)')
end
ifabs(sum(p)-1)>10e-10,
error('Notaprob.vector,componentsdonotaddupto1')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)='O:
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)='O:
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);
习题:
1、某一离散信源概率分布:
p=[1/2,1/4,1/8,1/16,1/16]求信源的熵,并对该信源进行二元哈夫曼编码,得到码字和平均码长以及编码效率。
S0s2s3可
2、设一离散无记忆信源P(s)yyyy,对其进行香农-费诺-
埃利斯编码,并求平均码长及编码效率。
答案:
q邑s3S4(001,10,1101,1111),L2.75(二元码/信源符号)
香农-费诺-埃利斯编码步骤:
1
2)l(aQlog()1
P(aQ
3)Wk取F(S)的二进制小数的小数点后l(ak)作为ak所对应的码字
%求码字,编码过程
实验十信道的纠错编码(线性分组码)
一、实验设备:
1、计算机
2、软件:
Matlab
二、实验目的:
通过线性分组码的实验,进一步加深对线性分组码编码理论的理解。
三、实验内容:
1、对线性分组码编码规则进行验证。
2、对译码数据输出进行验证。
四、实验报告要求
1、完成例题,并写出具体实现步骤。
2、分析整理实验数据。
例题:
已知(7,3)码的生成矩阵为G=[1001110;0100111;0011101],列出
所有许用码组,并求监督矩阵,检验该码的纠错能力。
源程序:
%线性分组码编码器及译码器
%可实现循环码编译
%Purpose:
%Linerencodinganddecoding
functionlinearcoding
%Definevariables:
%G生成矩阵
%u编码输出
%input_nk输入序列
%input_C纠错输出码序列
%R信道输出码
%H校验矩阵
%e差错图案
%s伴随式
%信道编码
input_nk=input('enterthesymbol:
');%input_nk输入序列(输入信息位)
G=input('inputG:
');%G生成矩阵
[c,d]=size(G);%求矩阵的行、列数
O=G(:
1:
c);
Q=inv(O);%生成o的逆矩阵
G=Q*G;
G=abs(rem(G,2));%abs函数可以求实数的绝对值P=G(:
c+1:
d);
a=d;
b=c;if(rem(length(input_nk),b)~=0)input_nk=[input_nk,zeros(1,b-rem(length(input_nk),b))];
end
n=length(input_nk)/b;u=zeros(1,n);
j=1;
fori=1:
b:
n*b
forp=1:
1:
a
sum=0;
forq=1:
1:
bsum=input_nk(1,q+i-1)*G(q,p)+sum;
endu(j)=rem(sum,2);j=j+1;
end
end
%信道纠错译码
R=input('inputR:
');%R信道输出码即接收码字H=[P',eye(a-b)];F=H';%H校验矩阵if(rem(length(R),a)~=0)
R=[R,zeros(1,a-rem(length(R),a))];
end
n=length(R)/a;
s=zeros(1,n*(a-b));%s伴随式
q=1;
fori=1:
a:
n*a
forj=1:
1:
(a-b)
sum=0;
fork=1:
1:
a
sum=R(1,k+i-1)*F(k,j)+sum;
end
s(q)=rem(sum,2);q=q+1;
end
end
e=zeros(1,length(R));
l=zeros(1,n*(a-b));
z=1;
fork=1:
(a-b):
n*(a-b)
fori=1:
1:
a
e(1,z)=1;
forj=1:
1:
(a-b)if(F(i,j)==1)l(j)=s(j+k-1);elsel(j)=1-s(j+k-1);end;e(1,z)=l(j)*e(1,z);
end
z=z+1;
end
end
forv=1:
1:
length(R)input_C(1,v)=rem(R(1,v)+e(1,v),2);
end
%结果输出
disp('theoutputcode:
');
disp(u);
disp('thecorrectedcode:
');disp(input_C);%input_C纠错输出码序列
习题:
1
0
0
0
1
1
1
1、若(7,4)码的生成矩阵为
0
G
1
0
0
1
0
1
0
0
1
0
0
1
1
0
0
0
1
1
1
0
1)写出(7,4)码的全部码元;
(注意考虑如果
G不是典型生成矩阵如何?
编程
应体现出如何把生成矩阵典型化)
2)求校验矩