信息论实验指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息论与编码实验指导书
任课教师:刘亚荣
桂林理工大学电计系
Matlab基础:
1、变量不需指定类型,拿来就用;变量区分大小写
2、向量定义: x=[1/2, 1/4, 1/4](行向量); y=(0:360)*pi/180; 向量的转
置x’(列向量)
3、 .* ./ .^运算,逐个元素进行运算。
例x1=[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)范围内定积分
7 M函数文件的基本结构
函数文件由function语句引导,其基本结构为:
function 输出形参表=函数名(输入形参表)
注释说明部分
函数体语句
说明:
(1)关于函数文件名: 函数文件名与函数名也可以不相同。
当两者不同时,
MATLAB将忽略函数名而确认函数文件名,因此调用时使用函数文件名。
(2)关于注释说明部分。
注释说明包括三部分内容:①紧随函数文件引导行之后以%开头的第一注释行。
②第一注释行及之后连续的注释行。
③与在线帮助文本相隔一空行的注释行。
(3)关于return语句。
执行到该语句就结束函数的执行,程序流程转至调用该函数的位置。
通常,在函数文件中也可不使用return语句,这时在被调函数执行完成后自动返回。
8显示图形
1、%plot函数绘制结果
t= 0:pi/100:2*pi; %定义数据点
y = sin(t);
plot(t,y) %显示图形
grid on %显示网格
xlabel('t'); %显示x轴的变量
ylabel('sin(t)'); %显示y轴的变量
2、%plot 函数中x-y 副的使用
t = 0:pi/100:2*pi;
y = sin(t);
plot(t,y)
grid on
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、将程序在计算机上仿真实现,验证程序的正确性并完成习题。
四、实验报告要求
简要总结离散信源的特点及离散信源平均信息量的计算,写出习题的MATLAB 实现语句。
信息论基础:
自信息的计算公式 21()log a
I a p = Matlab 实现:I=log2(1/p) 或I=-log2(p) 熵(平均自信息)的计算公式
22111()log log q
q i i i i i i H x p p p p ====-∑∑ Matlab 实现:HX=sum(-x.*log2(x));或者h=h-x(i)*log2(x(i));
习题:
1. 甲地天气预报构成的信源空间为:
1111(),,,8482
X p x ⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦ 小雨 云 大雨晴 乙地信源空间为:
17(),88
Y p y ⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦ 小雨晴 求此两个信源的熵。
求各种天气的自信息量。
案:() 1.75;()0.5436H X H Y ==
2、某信息源的符号集由A 、B 、C 、D 、E 组成,设每一符号独立出现,其出现的概率分别为,1/4,1/8,1/8,3/16,5/16,试求该信源符号的平均信息量。
(答案:H(X) = 2.2272bit/符号)
3、设有四个消息分别以概率1/4,1/8,1/8,1/2传送,每一消息的出现是相互独立的。
试计算其平均信息量。
(答案:H(X) =1.75bit/符号)
4. 设一个二元信源(只有0和1两种符号)其概率空间为:
(),1X p x p p ⎡⎤⎡⎤=⎢⎥⎢⎥-⎣⎦⎣⎦
0 1 编程画出H 与p 的关系,并说明当P 呈什么分布时,平均信息量达到最大值。
(说明:H=-p.*log2(p)-(1-p).log2(1-p);)
实验二:验证熵的可加性与强可加性
1. 【例
2.6】
有一离散无记忆信源
123111(),,244a a a X p x ⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦
验证二次扩展信源2X 的熵等于离散信源X 的熵的2倍,即
2()2()H X H X =
答案:2() 1.5;() 3.0H X H X ==
2. 验证两个统计独立的信源,X Y ,验证:
()()()H XY H X H Y =+
其中:
123111(),,244a a a X p x ⎡
⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦ 123
1
1
1
(),,333b b b Y p y ⎡⎤
⎡⎤⎢⎥
=
⎢⎥⎢⎥⎣⎦⎣⎦
() 1.5,() 1.585() 3.085H X H Y H XY ===
3、条件熵的计算与熵的强可加性
验证离散二维平稳信源,满足:12121()()(|)
H X X H X H X X =+
某一离散二维平稳信源
01211
4
1
(),,3694X p x ⎡⎤
⎡⎤⎢⎥
=⎢⎥⎢⎥⎣⎦⎣⎦
12X X 其联合概率分布12()p X X 为:
编程计算:
1) 联合熵12()H X X
2) 条件熵21(|)H X X
3) 验证:12121()()(|)H X X H X H X X =+
答案: 12112121() 1.5426;(|)0.8717
() 2.4144()(|) 2.4144H X H X X H X X H X H X X ===+=
%联合熵的计算
HXY=0;
for i=1:size(b,1)
for j=1:size(b,2)
if b(i,j)>0
HXY=HXY-b(i,j).*log2(b(i,j));
end
end
end
HXY
实验三:离散信道的平均互信息的计算
1. 【习题3.1】
设信源
12()0.6,0.4X x x p x ⎡⎤⎡⎤
=⎢⎥⎢⎥⎣⎦⎣⎦
通过一干扰信道,接收到符号为12[,]Y y y =,其信道矩阵为:
5
16631,44P ⎡⎤
⎢⎥
=⎢⎥
⎢⎥⎢⎥⎣⎦
1) 求信源X 中事件1x 和2x 分别含有的自信息;
2) 收到消息(1,2)j y j =后,获得的关于(1,2)i x i =的信息量;
3) 求信源X 和输出变量Y 的信息熵;
4) 信道疑义度(|)H X Y 和噪声熵(|)H Y X ;
5) 接收到消息Y 后获得的平均互信息;
答案:
12111221221.()0.737() 1.3219
2.(;)0.0589,(;)0.263,(;)0.0931,(;)0.3219
3.()0.971,()0.7219
4.(|)0.9635(|)0.7145
5.(;)0.0074
I x I x I x y I x y I x y I x y H X H Y H X Y H Y X I X Y ====-=-======
2. 二元信道的互信息与信源分布的关系
有二元信源:
01()1X p x ωω⎡⎤⎡⎤=⎢⎥⎢⎥-⎣⎦⎣⎦
有二元信道,其传递矩阵为:
11p p P p p -⎡⎤=⎢⎥-⎣⎦, 其中0.2p =,即传递矩阵0.80.20.20.8P ⎡⎤=⎢⎥⎣⎦
编程实现下面题目:
1) 画出平均互信息(;)I X Y 随信源分布ω的关系曲线,并求出最大平均互信息。
验证:信道容量C (最大平均互信息)满足:1()C H p =-
2)验证:信道容量C (最大平均互信息)满足:1()C H p =-
实验四:离散信道及其信道容量
一、实验设备:
1、计算机
2、软件:Matlab
二、实验目的:
1、了解信道传输概率的状态图和信道转移概率矩阵特点;
2、了解什么是信道容量和最佳输入概率分布;
3、列出计算信道容量和平均互信息的计算步骤;
4、熟悉 Matlab 编程;
三、实验内容:
1、写出几种特殊离散信道的信道容量计算的 Matlab 程序。
2、将程序在计算机上仿真实现,验证程序的正确性。
3、完成习题
四、实验报告要求
简要总结离散信道的特点及信道容量的计算,并写出具体仿真步骤。
习题:
计算下面几类信道的信道容量C :
1 无损信道
1/21/20000003/53/101/100000001P ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦
log C r = 答案:c=1.585
2 无噪有损信道
101001P ⎡⎤
⎢⎥=⎢⎥⎢⎥⎣⎦
log C s =
答案:c=1
3 对称离散信道【例3.6】
1111336611116633P ⎡⎤
⎢⎥
=⎢⎥
⎢⎥⎢⎥⎣⎦
1log ()s C s H p p =-L
答案:c=0.0817
4 一般信道,其信道矩阵为:
111244121636113884P ⎡⎤
⎢⎥
⎢⎥
⎢⎥
=⎢⎥⎢⎥
⎢⎥⎢⎥⎣⎦
求1)其信道容量C ,2)最佳输入分布()i p a
答案:4. 0.3109,()(0.1702,0.3955,0.4343)
C p a ==
beta =
-1.9732
-1.1610
-0.8927
pb =
0.2053 0.3605 0.4342
pa =
0.1702 0.3955 0.4343
解:一般信道信道容量计算步骤:
(1)j i j s
j i j j s j i j a b p a b p a b p ββ求);|(log )|()|(1
1∑∑===
(2)j s j c β∑==12
log
(3))(2
)(j c j b p b p j 求-=β (4))()|()()(1i r i i j
i
j a p a b p a p b p 求∑==
实验五:连续信源的差熵与波形信道的信道容量
一、实验设备:
1、计算机
2、软件:Matlab
二、实验目的:
1、熟悉连续信源的特点;
2、学习仿真连续信源的方法
3、学习连续信源平均信息量的计算方法
4、熟悉 Matlab 编程;
三、实验内容:
1、写出计算连续信源平均信息量的Matlab 程序。
2、将程序在计算机上仿真实现,验证程序的正确性。
3、完成习题并写出具体实现步骤。
四、实验报告要求
简要总结连续信源的特点及连续信源平均信息量的计算。
知识点:
Matlab 符号运算
1、定义符号: syms x 定义表达式里面的变量
2、定义函数:p=1/sqrt(2*pi*u^2)*exp(-(x-m)^2/(2*u^2));
3、积分: int(f, x, -inf, inf); ——求表达式f 的对符号变量x 的在负无穷到正无穷范围内
定积分
int(f,v,a,b) ——求表达式f 的对符号变量v 的在(a,b)范围内定积分
例题:求
syms x
f=(x^2+1)/(x^2-2*x+2)^2;
I=int(f)
4、符号运算中的运算符
(1)基本运算符
符号矩阵:“+”,“-”,“*”,“\”,“/”,“^”
“ ’ ”
⎰+-+=,)22(1222dx x x x I
◆ 符号数组:“.*”,“./”,“.\”,“.^”分别实现符号数组的乘、除、求幂,即数组间元素
与元素的运算。
◆ 没有log2和log10,其余与数值运算相同
(2)关系运算符
◆ 运算符“==”,“~=”。
5、连续信源的差熵与波形信道的信道容量:⎰-=R dx x p x p x h )(log )()(
)1log(N S
B c +=
练习:
一、计算下面几类信源的差熵:
1 均匀分布连续信源
1
()
()(,)0a x b p x b a
x b x a ⎧≤≤⎪=-⎨><⎪⎩
其中8,4b a ==
syms x,
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高斯信源
22()())2x m p x σ-=-
其中23,4m σ==
3指数分布信源【习题4.2】
()(0;0)x p x e x λλλ-=≥>
其中1/4λ=
4拉普拉斯概率分布信源【习题4.2】
||
1
()(;0)2
x p x e x λλλ-=-∞<<∞>
其中1/4λ=
解答:
均匀分布信源的差熵为:log()2h b a =-=
高斯分布信源的差熵为:21
log(2) 3.04712
h e πσ==
指数分布信源的差熵为:log() 3.4427e
h λ
==
拉普拉斯分布信源的差熵为:2log(
) 4.4427e
h λ
==
二、波形信道的信道容量
实验目的:掌握香农公式,即信息传输率、带宽、信噪比的关系
log(1)s
n
P C W P =+
【习题 4.18】设在平均功率受限高斯加性波形信道中,信道带宽为3kHz, 又设(信号功率+噪声功率)/噪声功率=10dB 。
(即10lg(1)10s
n
P dB P +
=,其中lg 是以10为底的对数)。
1) 试计算该信道传送的最大信息率(单位时间);
2) 若信噪比降为5dB ,要达到相同的最大信息传输率,信道带宽应是多少? 答案:
1. 最大信息传输率9965.784(/)t R bit s =
2. 带宽应为: W = 4.8439e+003
实验六:无失真信源编码与保真度准则下的信源编码
一、实验设备: 1、计算机
2、软件:Matlab 二、实验目的:
1、理解无失真信源编码与保真度准则下的信源编码的物理意义;
2、理解无失真信源编码与保真度准则下的信源编码的区别;
3、熟悉 Matlab 编程; 三、实验内容:
1、学习应用信源编码定理解决实际问题。
2、将程序在计算机上仿真实现,验证程序的正确性。
3、完成习题并写出具体实现步骤。
四、实验报告要求
写出习题实现的具体步骤。
习题:
1、(习题5.4)若有一信源,
12
41
()
55
s s
S
P s
⎡⎤
⎡⎤⎢⎥
=
⎢⎥⎢⎥
⎣⎦
⎣⎦
,每秒钟发出2.66个信源符号。
将此信源的输出符号送入某一个二元信道中进行传输(假设信道是无噪无损的),而信道每秒钟只传递两个二元符号。
试问信源不通过编码能否直接与信道连接?若通过适当编码能否在此信道中进行无失真传输?若能连接,试说明如何编码并说明原因。
2、(习题7.1)一个四元对称信源
0,1,2,3
1111
()
4444
U
P u
⎡⎤
⎡⎤⎢⎥
=
⎢⎥⎢⎥
⎣⎦
⎣⎦
,接收符号为
{0,1,2,3}
V=,其失真矩阵为
0111
1011
1101
1110
D
⎡⎤
⎢⎥
⎢⎥
=
⎢⎥
⎢⎥
⎣⎦
,求max
D和min
D。
实验七:有噪信道编码定理
一、实验设备:
1、计算机
2、软件:Matlab
二、实验目的:
1、理解有噪信道编码定理的物理意义;
2、熟悉 Matlab 编程;
三、实验内容:
1、学习应用有噪信道编码定理解决实际问题。
2、将程序在计算机上仿真实现,验证程序的正确性。
3、完成习题并写出具体实现步骤。
四、实验报告要求
写出习题实现的具体步骤。
习题:
1、(习题 6.1)设有一离散信道,其信道传递矩阵为:11
12361
1162311136
2⎡⎤⎢⎥⎢⎥⎢
⎥
⎢⎥⎢⎥⎢⎥⎢⎥⎣
⎦
,并设12311
(),()(),24
p x p x p x ===试分别按最小错误概率准则与最大似然译码准则确
定译码规则,并计算相应的平均错误概率。
实验八、九:无失真的信源编码(Huffman 、香农-费诺-埃利斯
编码编码)
一、实验设备: 1、计算机
2、软件:Matlab 二、实验目的:
1、掌握无失真的信源编码的基本原理;
2、熟练掌握Huffman 以及香农-费诺-埃利斯编码的方法步骤; 三、实验内容:
1、根据 Huffman 编码的方法步骤,用 Matlab 编写二元 Huffman 编码的程序;
2、用习题 1 验证程序的正确性。
3、编写程序实现香农-费诺-埃利斯编码,并完成习题。
四、实验报告要求 1、分析给出的二元 Huffman 编码的 Matlab 源程序的局限性,考虑如何改进。
2、写出习题实现具体步骤。
源程序:function [h,l]=huffman(p)
if length(find(p<0))~=0,
error('Not a prob.vector,negative component(s)') end
if abs (sum(p)-1)>10e-10,
error('Not a prob.vector,components do not add up to 1') end
n=length(p);
q=p;
m=zeros(n-1,n); for i=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
for i=1:n-1
c(i,:)=blanks(n*n); end
c(n-1,n)='0'; c(n-1,2*n)='1'; for i=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'; for j=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
for i=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] 求信源的熵,并对该
信源进行二元哈夫曼编码,得到码字和平均码长以及编码效率。
2、设一离散无记忆信源⎥⎥⎦⎤⎢⎢⎣⎡=⎥⎦⎤⎢⎣⎡81812141)(4321
s s s s s P S ,对其进行香农-费诺-埃利斯编码,并求平均码长及编码效率。
答案:
[])
/(75.2),1111,1101,10,
001(43
21
信源符号二元码==L s s s s 香农-费诺-埃利斯编码步骤: 1))(2
1
)()()(1
1k k i i k a P a P a F S F +
==∑-=
2)1))(1log()(+⎥⎥⎤
⎢⎢
⎡=k k a P a l
3)所对应的码字作为后的二进制小数的小数点)(取k k k a a l S F W )(
%求码字,编码过程
实验十 信道的纠错编码(线性分组码)
一、实验设备:
1、计算机
2、软件:Matlab 二、实验目的:
通过线性分组码的实验,进一步加深对线性分组码编码理论的理解。
三、实验内容:
1、对线性分组码编码规则进行验证。
2、对译码数据输出进行验证。
四、实验报告要求
1、完成例题,并写出具体实现步骤。
2、分析整理实验数据。
例题:已知(7,3)码的生成矩阵为G=[1 0 0 1 1 1 0;0 1 0 0 1 1 1;0 0 1 1 1 0 1],列出
所有许用码组,并求监督矩阵,检验该码的纠错能力。
源程序:
% 线性分组码编码器及译码器 % 可实现循环码编译 % Purpose:
% Liner encoding and decoding function linearcoding % Define variables:
% G 生成矩阵 % u 编码输出
% input_nk 输入序列
% input_C 纠错输出码序列 % R 信道输出码 % H 校验矩阵 % e 差错图案 % s 伴随式
%信道编码
input_nk=input('enter the symbol:'); % input_nk 输入序列(输入信息位) G=input('input G:'); % 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;
for i=1:b:n*b
for p=1:1:a
sum=0;
for q=1:1:b
sum=input_nk(1,q+i-1)*G(q,p)+sum;
end
u(j)=rem(sum,2);
j=j+1;
end
end
%信道纠错译码
R=input('input R:'); % 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;
for i=1:a:n*a
for j=1:1:(a-b)
sum=0;
for k=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;
for k=1:(a-b):n*(a-b)
for i=1:1:a
e(1,z)=1;
for j=1:1:(a-b)
if(F(i,j)==1)l(j)=s(j+k-1);
else l(j)=1-s(j+k-1);end;
e(1,z)=l(j)*e(1,z);
end
z=z+1;
end
end
for v=1:1:length(R)
input_C(1,v)=rem(R(1,v)+e(1,v),2); end
%结果输出
disp('the output code:');
disp(u);
disp('the corrected code:');
disp(input_C); % input_C 纠错输出码序列习题:
1、若(7,4)码的生成矩阵为
1000111
0100101
0010011
0001110 G
⎡⎤
⎢⎥
⎢⎥=
⎢⎥
⎢⎥
⎣⎦
1)写出(7,4)码的全部码元;(注意考虑如果G不是典型生成矩阵如何?编程应体现出如何把生成矩阵典型化)
2)求校验矩阵;
3)判断B(0101101)是否为许用码字;
4)判断该码的纠检错能力;
5)求该码的对偶码。