信息理论与编码实验指导书电子与电气工程学院罗晓琴编实验要求1、实验前认真阅读实验指导书的内容,并完成预习任务。
2、复习Matlab的相关知识,完成仿真。
3、要熟悉本次实验的任务。
4、实验过程中要认真记录实验结果,仿真结果需经指导教师审阅。
5、实验后每位同学要独立完成实验报告的内容。
目录实验一离散信源的自信息量和熵 (3)实验二最大离散熵定理 (6)实验三费诺编码 (9)实验四霍夫曼编码 (13)实验五香农编码 (16)实验一:计算离散信源的自信息量和熵一、实验目的1、熟悉离散信源的特点。
2、学习Matlab 仿真离散信源的方法。
3、学习离散信源自信息量和信源熵的计算方法。
4、熟悉 Matlab 编程。
二、实验设备 1、计算机2、软件:Matlab 三、实验原理本实验主要完成信源概率分布的自信息量以及信源熵的计算。
计算公式如下:一个字符它所携带的信息量是和该字符出现的概率有关,概率可以表征自信息量的大小自信息的计算公式为:21()log aI a p = 自信息量有两个含义:第一、当事件发生前,表示该事件发生的不确定性; 第二、当事件发生后,标是该事件所提供的信息量. 自信息量的单位取决于对数所取的底,若以2为底,单位为比特,以e 为底,单位为奈特,以10为底,单位为哈特。
在通信系统中,通常取比特为单位,底数2略去不写。
由于自信息I(a)是一个随机变量,不能用来表征整个信源的不确定度。
所以我们用平均自信息量来表征整个信源的不确定度。
平均自信息量就是信源输出所有消息的自信息的数学期望,又称为信息熵、信源熵,简称熵。
熵(平均自信息)的计算公式为:22111()log log qqi i i i i iH x p p p p ====-∑∑信息熵H (x )是对信源的平均不确定性的描述。
它从平均意义上来表征信源的总体信息测度。
对于某特定的信源,其信息熵是一个确定的数值。
信息熵具有如下三种物理意义。
第一,信息熵H (x )是表示信源输出后,每个消息或符号所提供的平均信息量。
第二,信息熵H (x )是表示信源输出前,信源的平均不确定性。
第三,信息熵H (x )可表征变量X 的随机性。
由此可以看出,自信息量与信息熵的含义是不同的: (1)信息熵是表征信源本身统计特性的一个物理量,它表示信源的平均不确定性,是信源输出的每一个消息所能提供的平均信息量;自信息量表示的是每一个消息的信息量度。
(2)信息熵是针对信源的,是信源输出的信息量,表示信源输出前的平均不确定性;自信息量是针对信宿的,是接收者在消除了信源不确定性后所获得的信息的度量。
(3)若信道无干扰,接收者获得的信息量在数量上等于信源的熵,若有干扰时,则两者不相等。
四、实验内容1、已知信源概率分布为:p=[1/2,1/4,1/8,1/8],编写出计算自信息量的Matlab 程序。
程序:function [I] = deal(p)n=4;for i =1: nI(i)=-log2(p(i)) ;end打开空白的M文件编辑器,将上述程序输入。
保存。
通过M文件调用的形式完成仿真。
步骤:在command window中输入p=[1/2,1/4,1/8,1/8]→调用deal.M文件→输入[I]=deal([1/2,1/4,1/8,1/8]),仿真实现。
2、写出信源概率分布为:p=[1/2,1/4,1/8,1/8]离散信源熵的Matlab 程序。
程序:function [H] = deal(p)n =4;H =0;for i =1: nI(i)=-log2(p(i)) ;H = H + p(i)*I(i);end打开空白的M文件编辑器,将上述程序输入。
保存。
通过M文件调用的形式完成仿真。
步骤:在command window中输入p=[1/2,1/4,1/8,1/8]→调用deal.M文件→输入[H]=deal([1/2,1/4,1/8,1/8]),仿真实现。
3、写出信源概率分布为:p=[1/2,1/4,1/8,1/8]的离散信源自信息量和信源熵的Matlab程序。
function [I H] = deal(p)n = length(p);H = 0;for i =1: nI(i)=-log2(p(i)) ;H = H + p(i)*I(i);end步骤:在command window中输入p=[1/2,1/4,1/8,1/8]→调用deal.M文件→输入[I H]=deal([1/2,1/4,1/8,1/8]),仿真实现。
4、将程序在计算机上仿真实现,验证程序的正确性并完成思考题的程序设计。
五、思考题1、说明离散信源自信息量和信息熵的不同含义。
乙地信源空间为:求此两个信源的熵。
求各种天气的自信息量。
六、实验报告要求总结离散信源的特点及离散信源平均信息量的计算,写出实验内容中的仿真程序及结果,完成思考题中MATLAB实现语句,并附上仿真实现的结果。
实验二 最大离散熵定理一、实验目的1、熟悉熵函数的基本性质。
2、掌握最大熵定理。
3、学习Matlab 仿真二维曲线图的方法。
4、熟悉 Matlab 编程。
二、实验设备 1、计算机2、软件:Matlab 三、实验原理信息熵H (x )是随机变量X 的概率分布p (x )的函数,它有如下性质: 1、对称性H(P)=H(p 1,p 2,p 3,…,p n )= H(p 2,p 3,…,p n p 1)=…=H(p n,,p 1,p 2,p 3,…,p n-1) 概率分布的顺序是可以任意互换的,互换后的概率分布表示的是相同的随机变量,随机变量的总体结构没有变化,则可证明对应的熵函数的值也不会变。
该性质表明熵函数只与信源的总体统计特性有关。
这也说明,信息熵只抽取了信源信息输出的统计特征,而没有考虑信息的具体含义和效用。
也就是说,信息熵有它的局限性,它不能描述时间本身的具体含义和主观价值等。
2、确定性 H(1,0)=0在概率矢量P=(p 1,p 2,p 3,…,p n )中,只要有一个分量为1,其它分量必为0,这由概率分布的完备性可以得到。
也就是说信源的平均不确定度为0。
3、非负性H(P)=H(p 1,p 2,p 3,…,p n )≥0因为P=(p 1,p 2,p 3,…,p n )是概率分布,0≤pi ≤1,-logpi ≥0,故上式成立。
需要注意的是,只有离散信源熵才有非负性,连续信源的相对熵将可能出现负值。
4、扩展性10lim +→n H ε(p 1,p 2,p 3,…,p n -ε,ε)=H n (p 1,p 2,p 3,…,p n )这个性质的含义是:增加一个基本不会出现的小概率事件,信源的熵保持不变。
虽然小概率事件的出现给予接收者的信息量很大,但在熵的计算中,它占的比重很小,可以忽略不计,这也是熵的总体平均性的体现。
5、连续性10lim +→n H ε(p 1,p 2,p 3,…,p n-1-ε,p q +ε)= H n (p 1,p 2,p 3,…,p n )即信源概率空间中的概率分量的微小波动,不会引起熵的变化。
6、递增性H (p 1,p 2,p 3,…,p n-1,q 1,q 2,q 3,…q m )=H(p 1,p 2,p 3,…,p n )+ p n H(q 1/ p n ,q 2/ p n ,q 3/ p n ,…q m / p n ) q 1+q 2+q 3,…+q m =p n这个性质表明,假如有一个信源的n 个元素的概率分布为(p 1,p 2,p 3,…,p n ),其中某个元素pn又被划分为m个元素,这某个元素的概率之和等于pn,,这样得到的新信源的熵增加了一项,增加的一项是由于划分产生的不确定性。
7、极值性H(p1,p2,p3,…,pn) ≤H(1/n,1/n,…,1/n)=logn上式中,当且仅当n个离散消息等概率出现时等式成立。
这一性质说明,对不同概率分布p(xi)所构成的熵,只有当等概率分布时,信源的不确定性最大,熵达到极大值。
8、上凸性熵函数H(p)是概率矢量P=(p1,p2,p3,…,pn)的严格上凸函数,正因为熵函数具有上凸性,所以熵函数具有极值,熵函数的最大值存在。
9、唯一性四、实验内容1、已知二元信源概率空间为p(x)=[x 1-x],对应的二元信源的熵可表示为:H(x)=-xlog2(x)-(1-x)log2(1-x)。
通过Matlab软件画出概率分布函数p(x)与熵函数之间的二维曲线图,编写出程序。
仿真结果如下图所示:编程过程中要注意的地方:x的步长设置为0.001,H(x)的运算为矩阵运算,必须用点乘:“.*”。
2、用同样的方法画出三元信源空间的熵函数与概率分布的三维曲线图。
仿真结果如下所示。
p1p2H五、思考题1、熵函数的基本性质有哪些?2、最大熵定理的结论是什么? 六、实验报告要求写出用Matlab 软件画出概率分布函数p (x )与熵函数之间的二维、三维曲线图的程序,并附上仿真结果图。
并对本实验进行总结、分析。
实验三 费诺编码一、实验目的1、掌握费诺编码的编码原理2、熟悉 Matlab 编程。
3、通过Matlab 仿真费诺编码的过程。
二、实验设备 1、计算机2、软件:Matlab 三、实验原理费诺编码的步骤:1、将概率按从大到小的顺序排列;2、按编码进制数将概率分组,使每组概率和尽可能接近或相等;3、给每组分配一位码元;4、将每一分组再按同样原则划分,重复2和3,直到概率不再可分为止。
四、实验内容对给定信源⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡04.007.009.01.03.04.0)(654321x x x x x x X q X 进行二进制费诺编码,通过MATLAB 进行编码过程仿真,并计算平均码长。
程序如下: clc; clear;A=[0.4,0.3,0.1,0.09,0.07,0.04]; A=fliplr(sort(A)); [m,n]=size(A); for i=1:n B(i,1)=A(i); enda=sum(B(:,1))/2; for k=1:n-1if abs(sum(B(1:k,1))-a)<=abs(sum(B(1:k+1,1))-a) break; endfor i=1:nif i<=kB(i,2)=0;elseB(i,2)=1;endendEND=B(:,2)'; END=sym(END); j=3;while (j~=0)p=1;while(p<=n)x=B(p,j-1);for q=p:nif x==-1 break;elseif B(q,j-1)==xy=1; continue;elsey=0;break;endendendif y==1q=q+1;if q==p|q-p==1B(p,j)=-1;elseif q-p==2B(p,j)=0;END(p)=[char(END(p)),'0'];B(q-1,j)=1;END(q-1)=[char(END(q-1)),'1'];elsea=sum(B(p:q-1,1))/2;for k=p:q-2if abs(sum(B(p:k,1))-a)<=abs(sum(B(p:k+1,1))-a); break;endendfor i=p:q-1if i<=kB(i,j)=0;END(i)=[char(END(i)),'0'];elseB(i,j)=1;END(i)=[char(END(i)),'1'];endendendendp=q;endC=B(:,j);D=find(C==-1);[e,f]=size(D);if e==nj=0;elsej=j+1;endendBAENDfor i=1:n[u,v]=size(char(END(i)));L(i)=v;endavlen=sum(L.*A)五、思考题对给定信源⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡05.010.015.020.025.025.0)(654321x x x x x x X q X 进行二进制费诺编码。