信息论实验指导书
- 格式:doc
- 大小:1.36 MB
- 文档页数:19
《—信息论基础—》实验指导书童基均编写适用专业:通信工程浙江理工大学信息电子学院二○○八年三月前言信息论是现代通信与信息工程的理论基础。
作为电子信息科学与技术专业本科生的学科基础课,本课程主要讲授:信息的定义和测度、信源和信息熵、连续熵和信息变差、信道和互信息、平均互信息和信道容量、数据处理和信息测量理论、无失真信源编码理论和编码方法等内容。
本课程按“单符号离散信息系统”、“多符号离散信息系统”、“连续信息系统”三个“系统”层面,逐步深入展开,以严密的数学分析贯串始终。
通过教学,使学生掌握信息理论的基本概念和信息分析方法,为今后进一步研究信息科学和信息技术打下坚实的理论基础。
实验一: 离散信道容量的迭代计算实验学时:3实验类型:(演示、验证、综合、√设计、研究)实验要求:(√必修、选修) 一、实验目的通过本实验的学习,理解和掌握信道容量的概念和物理意义;了解信道容量的计算方法尤其是迭代计法;采用计算机编程实现迭代算法。
二、实验内容信道容量的概念和物理意义; 信道容量的计算方法;采用计算机编程实现信道容量的计算 三、实验原理、方法和手段1.离散信道的物理模型为:信道容量定义为平均互信息的最大值:()max{(;)}p X C I X Y 。
2.信道容量表征了一个信道传送信息的最大能力,实际中传送的信息量小于信道容量,否则传送过程中出现错误。
3.由信道容量的定义可知,I(X,Y)的值由信道的传送概率决定的,因而信道的传递概率决定了信道的信道容量。
给定了信道的传递概率,可以通过推导方法求得信道的信道容量,一般可以求出传递效率达到信道容量时候的输入信号的分布,但是这种方法不方便计算机实现。
4.迭代法,便于计算机实现:迭代法分成三个模块,一个迭代计算反向实验信道(|)p x y ,另一个迭代计算()p x ,第三个检查一次迭代前后信道容量误差的变化是否小于检测值ε(可取0.0001),如果小于检测值则停止计算,输出结果。
《信息理论与编码》实验指导书武汉理工大学教材中心2009年7月实验一绘制二进熵函数曲线一、实验目的1.熟悉Matlab 工作环境及工具箱;2.掌握Matlab 绘图函数;3.理解熵函数表达式及其性质。
二、实验内容实验内容与要求内容:用Matlab 软件绘制二进熵函数曲线。
要求:1. 提前预习实验,认真阅读教材及相应的参考书,熟悉实验原理;2. 遵守实验室规定,实验过程中服从实验室管理人员和实验指导老师的管理;3. 独立完成实验,认真做好实验记录;4. 实验结束后,认真填写实验报告。
知识要点1. 信源熵的概念及其性质。
参照教材及参考书。
2. 二进熵公式:注意:虽然理论上定义0 ·log0 = 0 ,但是,在实际运算时,对数函数logx 的变量x 不能取0 值,而应设置一个系统默认的最小值eps 。
三、实验总结1、绘制二进熵函数曲线,观察曲线形状。
2、结合熵函数的性质,分析二进熵函数曲线的特点。
四、思考与提高1、绘制三元熵函数曲线,观察曲线形状。
2、结合熵函数的性质,分析三元熵函数曲线的特点。
p=0.00001:0.00001:0.99999;h=-p.*log2(p)-(1-p).*log(1-p);plot(p,h);title('二进熵函数曲线');ylabel('H(p,1-p)');p=linspace(eps,1-eps,100);q=linspace(eps,1-eps,100);[P,Q]=meshgrid(p,q);P_Q=P+Q;for n=1:100for m=1:100if P_Q(n,m)>=1Q(n,m)=nan;endendendH=-P.*log2(P)-Q.*log2(Q)-(1-P-Q).*log2(1-P-Q);mesh(P,Q,H);title('三维熵函数图像');实验二一般信道容量迭代算法一、实验目的1、熟悉Matlab 工作环境及工具箱;2、掌握一般信道容量迭代算法的原理。
设计并完成以下三个实验,要求有实验目的、原理、步骤、结果、程序和分析讨论(30分,每个实验10分) 实验①信道容量的计算实验②Huffman 编码或者算术编码实验 实验③信道编码方案设计实验一 信道容量的计算一、 实验目的1、 熟悉Matlab 工作环境以及工具箱;2、 掌握一般信道容量迭代算法原理。
3、 学习如何将复杂的公式转化为程序实现。
二、 实验要求1、 已知信源符号个数,信宿符号个数,信道转移概率矩阵P 。
2、 输入任意的一个信道转移概率矩阵,信源符号个数,信宿符号个数和每个具体转移概率,得出结果。
三、 实验原理定理:设信道的前向转移概率矩阵J K k j a b q Q ⨯=))((,0P 是任给的输入字母的一个初始概率分布,其所有分量)(0k a P 均不为零。
按照下式不断对概率分布进行迭代、更新:∑=+=Ki ri i r rk k rk r P a p P a p a p11)()()()()(ββ其中[]⎪⎪⎭⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧===∑∑===J j Ki i j i rk j k j pp k rk a b q a p a b q a b q Y a x I P r11)()()(log)(exp );(exp )(β则由此所得的),(Q p I r 序列收敛于信道容量C 。
在上述定理中,输入字母概率分布的更新方法具有很明显的意义,即不断将具有较大互信息);(Y a x I k =的输入字母的概率加以提高,将具有较小互信息);(Y a x I k =的输入字母的概率加以降低。
四、实验程序及结果。
进行Matlab仿真,仿真程序如下:contmax.m文件function [P_X,C,N]=contmax(P_YX,E)%计算任意信道的信道容量C及最佳输入分布P_X%P_X为输入概率分布%C为信道容量%N为迭代次数%P_YX为DMC信道的转移矩阵%E为预设精度if length(find(P_YX<0)~=0) %转移矩阵中各元素必须大于等于0 error('Not a probable vector, Negative component');endB=abs(sum(P_YX')-1);if max(B)>10e-10 %转移矩阵的行和必须等于1,否则重新输入error('Not a probable vector, Component do not add up to "1" ');end%变量初始化C1=1;C=0;N=0; r=size(P_YX);P_X=ones(1,r(1))/r(1);%调整P_YX的零元素值Pyx=(P_YX==0).*eps;P_YX=P_YX+Pyx;%迭代求解while (abs(C1-C))>EP_Y=P_X*P_YX;I1=sum((P_YX.*log2(P_YX))');I2=log2(P_Y)*(P_YX'); BETA=exp(I1-I2);B=P_X*(BETA');C1=log(B);C=log(max(BETA));P_X=P_X.*BETA/B;N=N+1; %迭代次数end保存为contmax.m文件执行程序为:p=0.4;P_YX=[1,0,0;0,1-p,p;0,p,1-p]; %信道的转移矩阵[P_X,C,n]=contmax(P_YX,0.001) %预设迭代精度e=0.001C0=log2(1+2*(p^p)*((1-p)^(1-p))) %通过算式直接求得信道容量执行结果:P_X =0.4887 0.2557 0.2557C =1.0340n =9C0 =1.0333五、分析讨论迭代精度对计算结果的影响。
信息理论与编码实验教学指导书(试用教材)电子信息工程系2019年4月实验1.1 汉明码的编译码实验板实验一、实验目的1. 学习汉明码编译码的基本概念; 2. 掌握汉明码的编译码方法; 3. 验证汉明码的纠错能力。
二、实验仪器1. RZ9681实验平台 2. 实验模块: ● 主控模块● 信道编码与频带调制模块-A4 ● 频带解调与信道译码模块-A5 3. 100M 双通道示波器 4. 信号连接线 5. PC 机(二次开发)三、实验原理3.1汉明编译码介绍汉明码(Hamming Code )是一个可以有多个校验位,具有检测并纠正一位错误代码的纠错码,所以它也仅用于信道特性比较好的环境中,如以太局域网中,因为如果信道特性不好的情况下,出现的错误通常不是一位。
汉明码的检错、纠错基本思想是将有效信息按某种规律分成若干组,每组安排一个校验位进行奇偶性测试,然后产生多位检测信息,并从中得出具体的出错位置,最后通过对错误位取反(也是原来是1就变成0,原来是0就变成1)来将其纠正。
3.2汉明编译码原理汉明码编码采用()4,7汉明码,信息位数4=k ,监督位数3=-=k n r ,可以纠一位错码,生成矩阵⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=1101000101010001100101110001G ,编码情况见表 1。
表 1()4,7 Hamming 编码表汉明码译码计算校正子[]321,,S S S S =,其中24561a a a a S ⊕⊕⊕= 13562a a a a S ⊕⊕⊕= 03463a a a a S ⊕⊕⊕=校正子S 的值决定了接收码元中是否有错码,并且指出错码的位置,见表2。
表2 错码位置示意3.3 举例说明信息位10013456=a a a a ,根据表 1()4,7 Hamming 编码表,编码为1001100,如果在信道传输的过程中产生一位误码,编码接收时变为1101100,我们计算校正子:124561=⊕⊕⊕=a a a a S 113562=⊕⊕⊕=a a a a S 003463=⊕⊕⊕=a a a a S校正子110=S ,查找表2 错码位置示意,5a 产生误码,则译码输出信息位1001。
《信息论》实验指导书—-应用M A T L A B软件实现-CAL-FENGHAI.-(YICAI)-Company One1《信息与编码理论》上机实验指导书———————应用MATLAB软件实现UPC通信工程系前言本实验系列是采用MATLAB软件,主要针对《信息论基础》课程中的相关内容进行的实验。
MATLAB是一完整的并可扩展的计算机环境,是一种进行科学和工程计算的交互式程序语言。
它的基本数据单元是不需要制定维数的矩阵,它可直接用于表达数学的算式和技术概念,解决同样的数值计算问题,使用MATLAB要比使用Basic、Fortran和C语言等提高效率许多倍。
MATLAB还是一种有利的教学工具,在大学的线性代数课程以及其它领域的高一级课程的教学中,已称为标准的教学工具。
该指导书共安排了4个实验,现就一些情况作简要说明:各实验要求学生在MATLAB系统上尽量独立完成,弄懂。
实验内容紧扣课程教学内容的各主要基本概念,希望同学们在完成每个实验后,对所学的内容起到巩固和加深理解的作用。
每个实验做完后必须交一份实验报告。
恳请各位实验老师和同学在实验中提出宝贵意见,以利于以后改进提高。
目录实验一离散信源及其信息测度 (3)实验二离散信道及其容量 (6)实验三无失真信源编码 (8)实验四有噪信道编码 (10)附录部分常用MATLAB命令 (12)实验一 离散信源及其信息测度一、[实验目的]离散无记忆信源是一种最简单且最重要的信源,可以用完备的离散型概率空间来描述。
本实验通过计算给定的信源的熵,加深对信源及其扩展信源的熵的概念的理解。
二、[实验环境]windows XP,MATLAB三、[实验原理]信源输出的各消息的自信息量的数学期望为信源的信息熵,表达式如下 1()[()]()log ()qi i i H X E I xi p x p x ===-∑信源熵是信源的统计平均不确定性的描述,是概率函数()p x 的函数。
《信息论与编码》实验指导书前言当前,信息论与编码已经成为电子信息类专业高年级学生必修的专业基础课。
尽管各个院校开设课程名称有所不同,但都是以香农信息论为核心内容的。
这是一门理论性和系统性很强的课程。
涉及多个学科,需要广泛数学知识。
为了能透彻掌握信息论基本概念和分析方法,做实验进行实践练习是不可缺少的环节。
通过综合性、验证性实验,可以加深对理论和概念的理解,增强分析和解决实际问题的能力。
为此,河北工业大学信息学院编写了《信息论与编码实验指导书》,由于可供参考的实验指导书有限,本书的不妥和错误之处,恳请读者予以批评指正。
马杰2008年2月目录实验一信息熵与图像熵计算--------------------------------------- 1实验二 Huffman 编码实验------------------------------------------ 6实验三算术编码实验------------------------------------------------ 11 实验四 CRC校验编码实验------------------------------------------17实验一信息熵与图像熵计算(2学时)一、实验目的1.复习MATLAB的基本命令,熟悉MATLAB下的基本函数。
2.复习信息熵基本定义, 能够自学图像熵定义和基本概念。
二、实验内容1.能够写出MATLAB源代码,求信源的信息熵。
2.根据图像熵基本知识,综合设计出MATLAB程序,求出给定图像的图像熵。
三、实验仪器、设备1.计算机-系统最低配置 256M内存、P4 CPU。
2.Matlab仿真软件- 7.0 / 7.1 / 2006a 等版本Matlab软件。
四、实验原理1. MATLAB中数据类型、矩阵运算、图像文件输入与输出知识复习。
2.利用信息论中信息熵概念,求出任意一个离散信源的熵(平均自信息量)。
自信息是一个随机变量,它是指某一信源发出某一消息所含有的信息量。
实验一 信道容量的迭代算法一、 实验目的1、掌握信道容量的概念。
2、了解迭代法计算信道容量的流程。
3、熟悉Matlab 程序的设计和调试方法。
二、 实验要求1、学习Matlab 软件编程和调试方法;2、输入:任意一个信道转移概率矩阵。
包括信源符号个数、信宿符号个数、信道转移概率,在程序运行时从键盘输入;3、输出:输入的信道矩阵、信道容量C 。
三、 算法描述1. 初始化信源分布),,,,,(21)0(r i p p p p p ⋅⋅⋅⋅⋅⋅= (一般初始化为均匀分布),置迭代计数器0=k ,设信道容量相对误差门限为,0,>δδ可设-∞=)0(C ; 2. r i p pp p i k i ij k i ij k ji ,,2,1)()()(⋅⋅⋅==∑ϕ;s j ,,1⋅⋅⋅= 3. r i p p p i j k ji ij j k ji ij k i ,,1ln exp ln exp )()()1(⋅⋅⋅=⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=∑∑∑+ϕϕ 4. ⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧⎥⎦⎤⎢⎣⎡=∑∑+i j k ji ij k p C )()1(ln exp ln ϕ 5. 如果,)1()()1(δ≤-++k k k C C C 转向76. 置迭代序号k k →+1,转向27. 输出)1(+k i p 和)1(+k C 的结果8. 停止四、 实验报告内容1、画出信道容量迭代算法流程图;2、给出实验结果的截图(输入信道矩阵和信道容量计算结果);3、对各种情况的实验结果进行分析和检验。
附:实验用Matlab 源程序。
(如果使用了非给定源程序)实验报告提交:电子文档(邮箱:yangxiaoping2004@ )实验过程:结果出来时,请实验老师检查并做记录(1个结果即可)。
实验二 唯一可译码判决准则一、 实验目的1、了解唯一可译码的概念。
2、掌握唯一可译码判决准则。
3、掌握Matlab 程序调试方法。
信息理论与编码实验指导书电子与电气工程学院罗晓琴编实验要求1、实验前认真阅读实验指导书的内容,并完成预习任务。
2、复习Matlab的相关知识,完成仿真。
3、要熟悉本次实验的任务。
4、实验过程中要认真记录实验结果,仿真结果需经指导教师审阅。
5、实验后每位同学要独立完成实验报告的内容。
目录实验一离散信源的自信息量和熵 (3)实验二最大离散熵定理 (6)实验三费诺编码 (9)实验四霍夫曼编码 (13)实验五香农编码 (16)实验一:计算离散信源的自信息量和熵一、实验目的1、熟悉离散信源的特点。
2、学习Matlab仿真离散信源的方法。
3、学习离散信源自信息量和信源熵的计算方法。
4、熟悉 Matlab 编程。
二、实验设备1、计算机2、软件:Matlab三、实验原理本实验主要完成信源概率分布的自信息量以及信源熵的计算。
计算公式如下:一个字符它所携带的信息量是和该字符出现的概率有关,概率可以表征自信息量的大小自信息的计算公式为:21()l o g aI a p 自信息量有两个含义:第一、当事件发生前,表示该事件发生的不确定性;第二、当事件发生后,标是该事件所提供的信息量.自信息量的单位取决于对数所取的底,若以2为底,单位为比特,以e 为底,单位为奈特,以10为底,单位为哈特。
在通信系统中,通常取比特为单位,底数2略去不写。
由于自信息I(a)是一个随机变量,不能用来表征整个信源的不确定度。
所以我们用平均自信息量来表征整个信源的不确定度。
平均自信息量就是信源输出所有消息的自信息的数学期望,又称为信息熵、信源熵,简称熵。
熵(平均自信息)的计算公式为:22111()log log qq i i i i i i H x p p p p ====-∑∑ 信息熵H (x )是对信源的平均不确定性的描述。
它从平均意义上来表征信源的总体信息测度。
对于某特定的信源,其信息熵是一个确定的数值。
信息熵具有如下三种物理意义。
第一,信息熵H (x )是表示信源输出后,每个消息或符号所提供的平均信息量。
信息论与编码实验指导书任课教师:刘亚荣桂林理工大学电计系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 ony2 = 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 程序。
《信息论与编码》实验指导书网络与通信工程学院2014年6月目录实验一绘制信源熵函数曲线 (3)实验二哈夫曼编解码 (6)实验三离散信道容量 (10)1实验一绘制信源熵函数曲线(2学时)一、实验目的1.掌握离散信源熵的原理和计算方法。
2.熟悉matlab软件的基本操作,练习应用matlab软件进行信源熵函数曲线的绘制。
3.理解信源熵的物理意义,并能从信源熵函数曲线图上进行解释其物理意义。
二、实验原理1.离散信源相关的基本概念、原理和计算公式产生离散信息的信源称为离散信源。
离散信源只能产生有限种符号。
假定X是一个离散随机变量,即它的取值范围R={x1,x2,x3,…}是有限或可数的。
设第i个变量x i发生的概率为p i=P{X=x i}。
则:定义一个随机事件的自信息量I(x i)为其对应的随机变量x i出现概率对数的负值。
即:I(x i)= -log2p(x i)定义随机事件X的平均不确定度H(X)为离散随机变量x i出现概率的数学期望,即:∑∑-==i ii ii ixpxpxIxpXH)(log)()()()(2单位为比特/符号或比特/符号序列。
平均不确定度H(X)的定义公式与热力学中熵的表示形式相同,所以又把平均不确定度H(X)称为信源X的信源熵。
必须注意一下几点:a)某一信源,不管它是否输出符号,只有这些符号具有某些概率特性,必有信源的熵值;这熵值是在总体平均上才有意义,因而是个确定值,一般写成H(X),X是指随机变量的整体(包括概率分布)。
b)信息量则只有当信源输出符号而被接收者收到后,才有意义,这就是给与信息者的信息度量,这值本身也可以是随机量,也可以与接收者的情况有关。
c) 熵是在平均意义上来表征信源的总体特征的,信源熵是表征信源的平均不确定度,平均自信息量是消除信源不确定度时所需要的信息的量度,即收到一个信源符号,全部解除了这个符号的不确定度。
或者说获得这么大的信息量后,信源不确定度就被消除了。
信息论与编码实验指导书1 课程实验目的本课程是一门实践性很强的专业课和核心课程,根据课程理论教学的需要安排了6学时的配套实验教学,主要内容涉及信息度量的计算方法、典型信源编码方法、典型信道容量计算方法和数据压缩方法四个实验,这四个实验的开设一方面有助于学生消化、巩固课程理论教学的知识,另一方面又可培养学生实践动手能力,同时为后续课程做好准备;2 课程实验要求课程实验准备要求1课程实验主要为设计性实验,要求学生熟悉掌握在VC环境下编写和调试C++程序的方法;2要求学生在实验前复习实验所用到的预备知识;可以查阅教材或者相关的参考资料,这需要学生有自主的学习意识和整理知识的能力;3根据实验项目,设计相关的数据结构和算法,再转换为对应的书面程序,并进行静态检查,尽量减少语法错误和逻辑错误;上机前的充分准备能高效利用机时,在有限的时间内完成更多的实验内容;课程实验过程要求1生成源代码;将课前编写好的书面代码,利用VC自带的编辑器尽快输入为转换为源代码;2程序调试和软件测试;要求学生熟练掌握调试工具,调试正确后,认真整理源程序和注释,给出带有完整注释且格式良好的源程序清单和结果;3完成实验报告;根据实验内容和完成情况,按照附件1给定的格式完成课程实验报告的编写;课程实验报告要求在每次课程实验后要及时进行总结和整理,并编写课程实验报告;报告格式按江西蓝天学院实验报告纸格式填写;实验一二维随机变量信息熵的计算实验目的掌握二变量多种信息量的计算方法;实验学时2学时实验准备1.熟悉二变量多种信息量的计算方法,设计实验的数据结构和算法;2.编写计算二维随机变量信息量的书面程序代码;实验内容及步骤离散二维随机变换熵的计算说明:1利用random函数和归一化方法构造一个二维离散随机变量X,Y;2分别计算X与Y的熵、联合熵、条件熵:HX、HY、HX,YHX|Y、IX|Y;3对测试通过的程序进行规范和优化;4编写本次实验的实验报告;附实验一主要内容及源程序实验一离散二维随机变量信息熵的计算1 实验内容1利用random函数和归一化方法构造一个二维离散随机变量X,Y;2分别计算X与Y的熵、联合熵、条件熵:HX、HY、HX,YHX|Y、IX|Y;2 数据结构与算法描述1函数的定义:函数的数据成员1.随机生成函数的代码:int k,n,t=0;double a44,b=0,c=0;for k=0;k<4;k++{for n=0;n<4;n++{akn=rand%100;t+=akn;}}cout<<"从到间随机取得行列的random函数:"<<endl;for k=0;k<4;k++{for n=0;n<4;n++{cout<<setw5<<akn;}cout<<endl;}2.函数归一化代码:cout<<"函数归一化:"<<endl;for k=0;k<4;k++{for n=0;n<4;n++{cout<<setw12<<akn/t;}cout<<endl;}3. HY、 HX计算代码:cout<<"HY计算:"<<setw20<<"HX计算:"<<endl;int e=1;for k=0;k<4;k++{double i=0,g=0;for n=0;n<4;n++{i+=akn/t;g+=ank/t;}cout<<"PY"<<k+1<<":"<<i<<setw8<<"PX"<<e<<":"<<g<<endl;++e;b-=ilogi/log;c-=glogg/log;}cout<<"HY=-∑pYlog pY="<<b<<endl;cout<<"HX=-∑pXlog pX="<<c<<endl;4.联合熵HX,Y计算代码:cout<<"联合熵HX,Y计算:"<<endl;b=0;int r,u,h=0;for k=0;k<4;k++{for n=0;n<4;n++{if akn=0{b-=akn/tlogakn/t/log;}else{r=k,u=n;h=1;break;}}}if h==0cout<<"HX,Y=-∑∑pX,Ylog pX,Y="<<b<<endl;else cout<<"P"<<r+1<<","<<u+1<<"为零,中断,无值"<<endl;5.条件熵HX|Y计算代码:cout<<"条件熵HX|Y计算:"<<endl;b=0,h=0;for k=0;k<4;k++{double i=0;for n=0;n<4;n++{i+=akn/t;}for n=0;n<4;n++{if akn=0{b-=akn/tlogakn/t/i/log;}else {h=1;break;}}}if h==0{cout<<"HX|Y=-∑∑PX,YlogPX,Y/PY="<<b<<endl;}else cout<<"P"<<r+1<<","<<u+1<<"为零,中断,无值"<<endl;cout<<"IX|Y计算:"<<endl;if h==0cout<<"IX|Y=HX-HX|Y="<<c-b<<endl;else cout<<"P"<<r+1<<","<<u+1<<"为零,中断,无值"<<endl;2主函数main 实现初始化操作,完成对子函数的调用因为整个程序是写在main函数中,就不列出,会在下面源程序清单中给出程序;3 实验数据与实验结果这里设定函数为4行4列的随机矩阵;然后函数归一化,即:把所有数字相加,再用每个数去除,就得到了归一化后的矩阵;而HX、HY、HX,YHX|Y、IX|Y就根据课本上的公式,然后编程;输出结果如下:4 程序代码清单:include<>include<cmath>include<iomanip>include<>include<iostream>using namespace std;void main{int k,n,t=0;double a44,b=0,c=0;srand unsigned timeNULL;for k=0;k<4;k++{for n=0;n<4;n++{akn=rand%100;t+=akn;}}cout<<"从0到100间随机取得行列的random函数:"<<endl;for k=0;k<4;k++{for n=0;n<4;n++{cout<<setw5<<akn;}cout<<endl;}cout<<"函数归一化:"<<endl;for k=0;k<4;k++{for n=0;n<4;n++{cout<<setw12<<akn/t;}cout<<endl;}cout<<"HY计算:"<<setw20<<"HX计算:"<<endl;int e=1;for k=0;k<4;k++{double i=0,g=0;for n=0;n<4;n++{i+=akn/t;g+=ank/t;}cout<<"PY"<<k+1<<":"<<i<<setw8<<"PX"<<e<<":"<<g<<endl;++e;b-=ilogi/log;c-=glogg/log;}cout<<"HY=-∑pYlog pY="<<b<<endl;cout<<"HX=-∑pXlog pX="<<c<<endl;cout<<"联合熵HX,Y计算:"<<endl;b=0;int r,u,h=0;for k=0;k<4;k++{for n=0;n<4;n++{if akn=0{b-=akn/tlogakn/t/log;}else{r=k,u=n;h=1;break;}}}if h==0cout<<"HX,Y=-∑∑pX,Ylog pX,Y="<<b<<endl;else cout<<"P"<<r+1<<","<<u+1<<"为零,中断,无值"<<endl;cout<<"条件熵HX|Y计算:"<<endl;b=0,h=0;for k=0;k<4;k++{double i=0;for n=0;n<4;n++{i+=akn/t;}for n=0;n<4;n++{if akn=0{b-=akn/tlogakn/t/i/log;}else {h=1;break;}}}if h==0{cout<<"HX|Y=-∑∑PX,YlogPX,Y/PY="<<b<<endl;}else cout<<"P"<<r+1<<","<<u+1<<"为零,中断,无值"<<endl;cout<<"IX|Y计算:"<<endl;if h==0cout<<"IX|Y=HX-HX|Y="<<c-b<<endl;else cout<<"P"<<r+1<<","<<u+1<<"为零,中断,无值"<<endl;}实验二简单信源编码方法实现实验目的掌握Huffman编码方法;实验学时2学时实验准备1.熟悉离散信源的编码方法,重点是Huffman编码方法,设计Huffman编码的数据结构和算法;2.编写Huffman编码的书面程序代码;实验内容及步骤离散信源的Huffman编、译码方法说明:1利用random函数构造一个一维离散随机变量分布PX;2构造离散随机变量的概率压缩表;3根据概率压缩表构造Huffman编码表,并实现Huffman编码;4完成Huffman译码;4编写本次实验的实验报告;附实验二实验内容及程序源程序实验二离散信源的Huffman编、译码方法1 实验内容1利用random函数构造一个一维离散随机变量分布PX;2根据概率压缩表构造Huffman编码表,并实现Huffman编码;3完成Huffman译码;2 数据结构与算法描述1函数的定义:函数的数据成员1.随机生成归一化一维离散变量函数代码:void aa int n{double w=0;a=new double n;srand unsigned timeNULL;cout<<"随机生成归一化一维离散变量:"<<endl;forint i=0;i<n;i++{ai=rand%50;w+=ai;}forint i=0;i<n;i++{ai=ai/w;}double p;forint i=0;i<n-1;i++{forint j=n-2;j>=i;j--{if aj<aj+1{p=aj+1;aj+1=aj;aj=p;}}}cout<<"PX:";forint i=0;i<n;i++{3;cout<<ai<<setw8;}}2.Huffman译码函数代码:void huffman double a,string c,int n{elem mp;stack sn;double b;b=new double n;forint i=0;i<n;i++{bi=ai;} double d;d=new double n;forint i=0;i<n;i++{di=i;}double e;e=new double n;forint i=0;i<n;i++{ei=i;}string t;forint m=n;m>=2;m--{bm-2+=bm-1;=dm-2;=dm-1;mp;double mp,mp1;forint i=0;i<n-1;i++{forint j=n-2;j>=i;j--{if bj<bj+1{mp=bj+1; mp1=dj+1;bj+1=bj; dj+1=dj;bj=mp;dj=mp1;}}}cout<<left<<setw6<<"\nPX:";forint i=0;i<m-1;i++{3;cout<<setw8<<bi;}}while{mp=;forint i=0;i<n;i++{if==ei{t=ci;}}forint i=0;i<n;i++{if==ei{ci=t;ci+="0";}else if==ei{ci=t;ci+="1";}}}}2主函数main 实现初始化操作,完成对子函数的调用void main{int n;cout<<"输入N:";cin>>n;c=new stringn;aan;huffmana,c,n;cout<<endl;cout<<setw6<<"各项Huffman编码为:"<<endl;forint i=0;i<n;i++{3;cout<<setw8<<ai;0;cout<<setwn+4<<ci;cout<<endl;}}3 实验数据与实验结果测试数据:随机生成归一化离散变量,如下图数据,并计算出各项Huffman编码;实验结果:4 程序代码清单:include<>include<cstdio>include<iomanip>include<>include<cassert>include<string>include<iostream>using namespace std;double a;string c;struct elem{double a2;double a3;};class stack{int size;int top;elem list;public:stack const int sz=0{size=sz;top=0;list=new elemsz;}~stack{delete list;}void clear{top=0;}void push const elem& item{asserttop<size;listtop++=item;} elem pop{assertisEmpty;return list--top;}elem topValue const{assertisEmpty;return listtop-1;}bool isEmpty const{return top==0;}};void aa int n{double w=0;a=new double n;srand unsigned timeNULL;cout<<"随机生成归一化一维离散变量:"<<endl;forint i=0;i<n;i++{ai=rand%50;w+=ai;}forint i=0;i<n;i++{ai=ai/w;}double p;forint i=0;i<n-1;i++{forint j=n-2;j>=i;j--{if aj<aj+1{p=aj+1;aj+1=aj;aj=p;}}}cout<<"PX:";forint i=0;i<n;i++{3;cout<<ai<<setw8;}}void huffman double a,string c,int n{elem mp;stack sn;double b;b=new double n;forint i=0;i<n;i++{bi=ai;}double d;d=new double n;forint i=0;i<n;i++{di=i;} double e;e=new double n;forint i=0;i<n;i++{ei=i;} string t;forint m=n;m>=2;m--{bm-2+=bm-1;=dm-2;=dm-1;mp;double mp,mp1;forint i=0;i<n-1;i++{forint j=n-2;j>=i;j--{if bj<bj+1{mp=bj+1; mp1=dj+1;bj+1=bj; dj+1=dj;bj=mp;dj=mp1;}}}cout<<left<<setw6<<"\nPX:";forint i=0;i<m-1;i++{3;cout<<setw8<<bi;}}while{mp=;forint i=0;i<n;i++{if==ei{t=ci;}}forint i=0;i<n;i++{if==ei{ci=t;ci+="0";}else if==ei{ci=t;ci+="1";}}}}void main{int n;cout<<"输入N:";cin>>n;c=new stringn;aan;huffmana,c,n;cout<<endl;cout<<setw6<<"各项Huffman编码为:"<<endl;forint i=0;i<n;i++{3;cout<<setw8<<ai;0;cout<<setwn+4<<ci;cout<<endl;}}实验三典型信道容量计算实验目的掌握用递推算法计算典型信道的容量的方法;实验学时2学时实验准备1.熟悉二进信道的概率转移矩阵表示,掌握信道容量的递推算法,设计用递推算法计算二进信道容量的数据结构和算法;2.编写用递推算法计算二进信道容量的书面程序代码;实验内容及步骤用递推算法计算二进信道的容量说明:1构造各种二进信道的概率转移矩阵;2用递推算法计算各种二进信道的容量;3不断调整误差精度对系统进行测试,并进行对比分析;4编写本次实验的实验报告;附实验三内容及源程序实验三用递推算法计算二进信道的容量1 实验内容1构造各种二进信道的概率转移矩阵;2用递推算法计算各种二进信道的容量;3不断调整误差精度对系统进行测试,并进行对比分析;2 数据结构与算法描述1函数的定义:函数的数据成员1.随机生成二元对称信道函数代码:void aa{double e=0;cout<<"随机生成二元对称信道为:"<<endl;int i=0;forint j=0;j<2;j++{a0j=rand%100;e+=a0j;}forint j=0;j<2;j++{a0j=a0j/e;}a11=a00;a10=a01;forint i=0;i<2;i++{forint j=0;j<2;j++{cout<<setw12<<aij;}cout<<endl;}}2.随机生成二元删除信道函数代码:void cc{double e=0;cout<<"随机生成二元删除信道为:"<<endl;forint j=0;j<2;j++{b0j=rand%100;e+=b0j;}forint j=0;j<2;j++{b0j=b0j/e;}b02=0;b10=0;e=0;forint j=1;j<3;j++{b1j=rand%100;e+=b1j;}forint j=1;j<3;j++{b1j=b1j/e;}forint i=0;i<2;i++{forint j=0;j<3;j++{cout<<setw12<<bij;}cout<<endl;}}3.求二元对称信道最大信道容量和最大容量时w的值的函数代码:void bb{double w=0;double e2={0,0};for w=0;w<=1;w+={double tmp=0;tmp=wa00+1-wa01log1/wa00+1-wa01/log+wa01+1-wa00log1/wa01+1-wa00/log-a00log1/a00/log+a01log1/a01/l og;if e0<tmp{e0=tmp;e1=w;}}cout<<"最大信道容量为:"<<setw6<<e0<<" 此时w的值为:"<<e1<<endl;cout<<endl;}4. 求二元删除信道最大信道容量和最大容量时w的值的函数代码:void dd{double P22;P10=0;P11=1;double temp2={0,1};do{double tmp1=0,tmp=0;forint i=0;i<2;i++{forint j=0;j<3;j++{if bij=0{tmp1+=P1ibijlogbij/log;}}}double temp223;forint i=0;i<2;i++{forint j=0;j<3;j++{temp2ij=P1ibij;}}forint j=0;j<3;j++{temp20j=temp20j+temp21j;}forint j=0;j<3;j++{if temp20j=0{tmp-=temp20jlogtemp20j/log;}}tmp-=tmp1;if tmp>=temp0{temp0=tmp;temp1=P10;}P10+=;P11-=;}while P10<=;cout<<"最大信道容量为:"<<temp0<<" 信源的w值为"<<temp1<<endl;}2主函数main 实现初始化操作,完成对子函数的调用void main{srand unsigned timeNULL;aa;bb;cc;dd;}3 实验数据与实验结果测试数据:随机生成了22矩阵和23矩阵,并求得最大容量和w的值;实验结果:4 程序代码清单:include<iostream>include<>include<iomanip>include<cmath>using namespace std;double a22;double b23;void aa{double e=0;cout<<"随机生成二元对称信道为:"<<endl;int i=0;forint j=0;j<2;j++{a0j=rand%100;e+=a0j;}forint j=0;j<2;j++{a0j=a0j/e;}a11=a00;a10=a01;forint i=0;i<2;i++{forint j=0;j<2;j++{cout<<setw12<<aij;}cout<<endl;}}void bbdouble w=0;double e2={0,0};for w=0;w<=1;w+={double tmp=0;tmp=wa00+1-wa01log1/wa00+1-wa01/log+wa01+1-wa00log1/wa01+1-wa00/log-a00log1/a00/log+a01log1/a01/l og;if e0<tmp{e0=tmp;e1=w;}}cout<<"最大信道容量为:"<<setw6<<e0<<" 此时w的值为:"<<e1<<endl;cout<<endl;}void cc{double e=0;cout<<"随机生成二元删除信道为:"<<endl;forint j=0;j<2;j++{b0j=rand%100;e+=b0j;}forint j=0;j<2;j++{b0j=b0j/e;}b02=0;b10=0;e=0;forint j=1;j<3;j++{b1j=rand%100;e+=b1j;}forint j=1;j<3;j++{b1j=b1j/e;}forint i=0;i<2;i++{forint j=0;j<3;j++{cout<<setw12<<bij;}cout<<endl;}void dd{double P22;P10=0;P11=1;double temp2={0,1};do{double tmp1=0,tmp=0;forint i=0;i<2;i++{forint j=0;j<3;j++{if bij=0{tmp1+=P1ibijlogbij/log;}}}double temp223;forint i=0;i<2;i++{forint j=0;j<3;j++{temp2ij=P1ibij;}}forint j=0;j<3;j++{temp20j=temp20j+temp21j;}forint j=0;j<3;j++{if temp20j=0{tmp-=temp20jlogtemp20j/log;}}tmp-=tmp1;if tmp>=temp0{temp0=tmp;temp1=P10;}P10+=;P11-=;}while P10<=;cout<<"最大信道容量为:"<<temp0<<" 信源的w值为"<<temp1<<endl; }void main{srand unsigned timeNULL;aa;bb;cc;dd;}。
没实验一 绘制二进熵函数曲线(2个学时)一、实验目的:1. 掌握Excel 的数据填充、公式运算和图表制作2. 掌握Matlab 绘图函数3. 掌握、理解熵函数表达式及其性质 二、实验要求:1. 提前预习实验,认真阅读实验原理以及相应的参考书。
2. 在实验报告中给出二进制熵函数曲线图 三、实验原理:1. Excel 的图表功能2. 信源熵的概念及性质()()[]()[]())(1)(1 .log )( .)( 1log 1log )(log )()(10 , 110)(21Q H P H Q P H b nX H a p H p p p p x p x p X H p p p x x X P X ii i λλλλ-+≥-+≤=--+-=-=≤≤⎩⎨⎧⎭⎬⎫-===⎥⎦⎤⎢⎣⎡∑四、实验内容:用Excel 或Matlab 软件制作二进熵函数曲线。
具体步骤如下:1、启动Excel 应用程序。
2、准备一组数据p 。
在Excel 的一个工作表的A 列(或其它列)输入一组p ,取步长为0.01,从0至100产生101个p (利用Excel 填充功能)。
3、取定对数底c ,在B 列计算H(x) ,注意对p=0与p=1两处,在B 列对应位置直接输入0。
Excel 中提供了三种对数函数LN(x),LOG10(x)和LOG(x,c),其中LN(x)是求自然对数,LOG10(x)是求以10为底的对数,LOG(x,c)表示求对数。
选用c=2,则应用函数LOG(x,2)。
在单元格B2中输入公式:=-A2*LOG(A2,2)-(1-A2)*LOG(1-A2,2) 双击B2的填充柄,即可完成H(p)的计算。
4、使用Excel 的图表向导,图表类型选“XY 散点图”,子图表类型选“无数据点平滑散点图”,数据区域用计算出的H(p)数据所在列范围,即$B$1:$B$101。
在“系列”中输入X值(即p值)范围,即$A$1:$A$101。
信息论实验报告一实验一1、实验内容(1)英文信源由26个英文字母和1个空格组成,假定字符从中等概选取,那么一条100个字符的信息提供的信息量为多少?(2)若将27个字符分为三类,9个出现概率占2/7,13个出现概率占4/7,5个出现占1/7,而每类中符号出现等概,求该字符信源的信息熵。
2、设计思路及步骤I=log2P iH(X)=∑−P i log2Pii26个字母和一个空格,因等概选取可以先求得其中一个字符的信息量,通过扩展实现计算100个字符的信息量。
对于第二问,可以将字符分为三组,又因每组字符的概率相等,因此可以求出每组每一个字符的概率。
通过信息熵的定义可以求出结果。
3、程序代码及调试过程4、出现的问题及解决方法(1)没有看清题目要求,漏掉空格(2)是否可以将三组字符看作整体5、结果及说明通过实验结果可以看出100个字符的信息量,以及字符信源熵。
比较H2与H3可以看出,并不可以简单的将三组数据看作整体。
6、实验总结本实验通过计算多字符的信息量与分组信息熵,让我们加深了信息论中有关信息量与信息熵的概念与定义,同时也让我们熟悉了matlab的基本操作。
实验二1、实验内容绘制二进制信源熵函数曲线。
2、设计思路及步骤根据信源熵的定义以及公式计算出熵,通过matlab的矩阵运算计算出熵数组,然后通过plot函数画出图像。
3、程序代码及调试过程4、出现的问题及解决方法矩阵乘法出错,,需要使用matlab中的点乘5、结果及说明信源熵的图像为凸形曲线,熵在信源等概分布时取最大值,先增大再减小。
6、实验总结本实验通过对信源熵的作图让我们熟悉了matlab中图像生成函数,以及矩阵运算。
实验三,四1、实验内容求信源的熵和其二次、三次扩展信源的熵。
离散二维平稳信源的概率空间:求:(a)信源符号之间无依赖性时,信源X的信息熵H(X);(b)信源符号有依赖性时的条件熵H(X2|X1);(c)联合熵H(X1X2);(d)根据以上三者之间的关系,验证结果的正确性。
《信息论与编码》实验指导书邹东尧等编计算机与通信工程学院信息与通信工程系2010年10月绪论随着信息产业的飞速发展,对从事信息、通信、电子工程类等专业的人员的要求也越来越高,而《信息论与编码》是这类专业的专业必修课,这门课主要介绍了有关信息论的基本原理以及信源编码、信道编码的内容。
通过理论与实践的结合,才能更好的领会知识的真谛。
《信息论与编码》结合实验的实践,让学生更能深刻的理解和掌握这门课的基本概念、基本理论,并培养学生的动手实践能力。
本实验指导书正是配合教学计划的实验教学而编写,主要是基于matlab 仿真软件对信源编解码和信道容量进行仿真。
本书共有三个实验:绘制信源熵函数曲线、哈夫曼编解码和离散信道容量,为实验大纲要求的必做实验。
本书主要由邹东尧编写,主要参考了李祖贺等编写的《信息论与编码》实验指导书,并得到了李祖贺等老师的大力支持,特此对他们表示衷心的感谢!由于时间仓促,错误难免,恳请读者谅解和指正!郑州轻工业学院计算机与通信工程学院信息与通信工程系2010年10月目录实验一绘制信源熵函数曲线 (5)实验二哈夫曼编解码 (9)实验三离散信道容量 (14)1实验一绘制信源熵函数曲线一、实验目的1.掌握离散信源熵的原理和计算方法。
2.熟悉matlab软件的基本操作,练习应用matlab软件进行信源熵函数曲线的绘制。
3.理解信源熵的物理意义,并能从信源熵函数曲线图上进行解释其物理意义。
二、实验原理1.离散信源相关的基本概念、原理和计算公式产生离散信息的信源称为离散信源。
离散信源只能产生有限种符号。
假定X是一个离散随机变量,即它的取值范围R={x1,x2,x3,…}是有限或可数的。
设第i个变量x i发生的概率为p i=P{X=x i}。
则:定义一个随机事件的自信息量I(x i)为其对应的随机变量x i出现概率对数的负值。
即:I(x i)= -log2p(x i)定义随机事件X的平均不确定度H(X)为离散随机变量x i出现概率的数学期望,即:∑∑-==i ii i i i x p x p x I xp X H )(log )()()()( 单位为 比特/符号 或 比特/符号序列。
信息理论与编码实验指导书电子与电气工程学院罗晓琴编实验要求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 )是表示信源输出后,每个消息或符号所提供的平均信息量。
信息理论与编码实验指导书电子与电气工程学院罗晓琴编实验要求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 进行二进制费诺编码。