信息论报告

合集下载

信息论实验报告

信息论实验报告

信息论实验报告班级:姓名:学号:实验一:信道容量的迭代算法1.实验目的(1)进一步熟悉信道容量的迭代算法;(2)学习如何将复杂的公式转化为程序;(3)掌握C 语言数值计算程序的设计和调试技术。

2、实验要求(1)已知:信源符号个数r 、信宿符号个数s 、信道转移概率矩阵P 。

(2)输入:任意的一个信道转移概率矩阵。

信源符号个数、信宿符号个数和每个具体的转移概率在运行时从键盘输入。

(3)输出:最佳信源分布P*,信道容量C 。

3.算法分析1:procedure CHANNEL CAPACITY(r,s,(ji p )) 2:initialize:信源分布i p =1/r ,相对误差门限σ,C=—∞3:repeat4:5:6: C 2211log [exp(log )]r s ji ij r j p φ==∑∑7:until C Cσ∆≤8:output P*= ()i r p ,C9:end procedure4.程序调试21211exp(log )exp(log )sji ij j r s ji ij r j p p φφ===∑∑∑i p 1i ji r i ji i p p p p =∑ijφ1、头文件引入出错f:\visualc++\channel\cpp1.cpp(4) : fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory————#include<unistd.h>纠错://#include<unistd.h>f:\visualc++\channel\cpp1.cpp(5) : fatal error C1083: Cannot open include file: 'values.h': No such file or directory————#include<values.h>纠错://#include<values.h>2、变量赋值错误f:\visualc++\channel\cpp1.cpp(17) : error C2065: 'ij' : undeclared identifierf:\visualc++\channel\cpp1.cpp(17) : error C2440: 'initializing' : cannot convert from 'int' to 'float ** ' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast————float **phi_ij=ij=NULL;纠错:float **phi_ij=NULL;3、常量定义错误f:\visualc++\channel\cpp1.cpp(40) : error C2143: syntax error : missing ';' before 'for' ————for(i=0;i<r;i++)phi_ij[i]=(float *)calloc(s,sizeof(float));f:\visualc++\channel\cpp1.cpp(52) : error C2021: expected exponent value, not ' '————if(fabs(validate -1.0)>DELTA)f:\visualc++\channel\Cpp1.cpp(84) : error C2021: expected exponent value, not ' '————if(fabs(p_j)>=DELTA)f:\visualc++\channel\Cpp1.cpp(100) : error C2021: expected exponent value, not ' '————if(fabs(phi_ij[i][j])>=DELTA)f:\visualc++\channel\Cpp1.cpp(116) : error C2021: expected exponent value, not ' ' ————while(fabs(C-C_pre)/C>DELTA);纠错:#define DELTA 0.000001;F:\visualc++\channel\Cpp1.cpp(68) : error C2065: 'MAXFLOAT' : undeclared identifierF:\visualc++\channel\Cpp1.cpp(68) : warning C4244: '=' : conversion from 'int' to 'float', possible loss of data————C=-MAXFLOAT;纠错:#define MAXFLOAT 1000000;3、引用中文逗号f:\visualc++\channel\cpp1.cpp(60) : error C2018: unknown character '0xa1'f:\visualc++\channel\cpp1.cpp(60) : error C2018: unknown character '0xb1'f:\visualc++\channel\cpp1.cpp(60) : error C2065: 'Starting' : undeclared identifierf:\visualc++\channel\cpp1.cpp(60) : error C2059: syntax error : '.'f:\visualc++\channel\cpp1.cpp(60) : error C2017: illegal escape sequencef:\visualc++\channel\cpp1.cpp(60) : error C2018: unknown character '0xa1'f:\visualc++\channel\cpp1.cpp(60) : error C2018: unknown character '0xb1'————fprintf(stdout,”Starting..\n”);纠错:fprintf(stdout,"Starting..\n");4、没有进行强制转换F:\visualc++\channel\Cpp1.cpp(65) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data————p_i[i]=1.0/(float)r;纠错:p_i[i]=(float)(1.0/(float)r);F:\visualc++\channel\Cpp1.cpp(101) : warning C4244: '+=' : conversion from 'double' to 'float', possible loss of data————sum[i]+=p_ji[i][j]*log( phi_ij[i][j])/ log(2.0);纠错:sum[i]+=(float)(p_ji[i][j]*log( phi_ij[i][j])/ log(2.0));F:\visualc++\channel\Cpp1.cpp(103) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data————sum[i]=pow(2.0,sum[i]);纠错:sum[i]=(float)(pow(2.0,sum[i]));F:\visualc++\channel\Cpp1.cpp(114) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data————C= log(p_j)/ log(2.0);纠错:C= (float)(log(p_j)/ log(2.0));4、表达式错误F:\visualc++\channel\Cpp1.cpp(86) : error C2065: 'phi_ji' : undeclared identifierF:\visualc++\channel\Cpp1.cpp(86) : error C2109: subscript requires array or pointer typeF:\visualc++\channel\Cpp1.cpp(86) : error C2109: subscript requires array or pointer type ————phi_ij[i][j]=p_i[i]* phi_ji[i][j]/p_j;纠错:phi_ij[i][j]=p_i[i]* p_ji[i][j]/p_j;F:\visualc++\channel\Cpp1.cpp(122) : error C2065: 'fprint' : undeclared identifierF:\visualc++\channel\Cpp1.cpp(122) : error C2018: unknown character '0xa1'F:\visualc++\channel\Cpp1.cpp(122) : error C2018: unknown character '0xb1'F:\visualc++\channel\Cpp1.cpp(122) : error C2065: 'The' : undeclared identifierF:\visualc++\channel\Cpp1.cpp(122) : error C2146: syntax error : missing ')' before identifier 'iteration'F:\visualc++\channel\Cpp1.cpp(122) : error C2017: illegal escape sequenceF:\visualc++\channel\Cpp1.cpp(122) : error C2017: illegal escape sequenceF:\visualc++\channel\Cpp1.cpp(122) : error C2018: unknown character '0xa1'F:\visualc++\channel\Cpp1.cpp(122) : error C2018: unknown character '0xb1'————fprint(stdout,”The iteration number is %d.\n\n”,k);纠错:fprintf(stdout,"The iteration number is %d.\n\n",k);F:\visualc++\channel\Cpp1.cpp(145) : error C2143: syntax error : missing ')' before ';' ————free((p_i);纠错:free(p_i);5、没有返回值F:\visualc++\channel\Cpp1.cpp(149) : warning C4508: 'main' : function should return a value; 'void' return type assumed、纠错:return 0;5.改进程序/*引入头文件*/#include<stdio.h>#include<math.h>#include<stdlib.h>/*定义常量*/#define DELTA 0.0000001//DELTA为相对误差门限#define MAXFLOAT 1000000;//MAXFLOAT为初始化信道容量值int main( void){/*定义全局变量*//*register允许直接从寄存器中读取变量,提高速率*/register int i,j;//i、j为整型变量register int k;//信道容量迭代计算次数int r,s;//r为信源符号个数,s为新宿符号个数float *p_i=NULL;//r个信源符号发生的概率float **p_ji=NULL;//信源到新宿的信道转移概率矩阵Pfloat **phi_ij=NULL;float C,C_pre,validate;//C为信道容量,C_pre为信道最大容量,validate为判定输入转移概率矩阵是否合法float * sum=NULL;//信源符号所带的全部信息量float p_j;//条件概率/*输入信源符号和新宿符号个数*/printf("请输入信源符号个数r、信宿符号个数s...\n");printf("+++++注意!!!r必须大于等于s!!+++++\n");fscanf(stdin,"%d",&r);fscanf(stdin,"%d",&s);/*为 p_i,p_ji 和 phi_ij 分配内存空间*/p_i=(float *)calloc(r,sizeof(float));p_ji=(float **)calloc(r,sizeof(float));/*为每个p_ji分配大小为s的内存空间*/for(i=0;i<r;i++)p_ji[i]=(float *)calloc(s,sizeof(float));phi_ij=(float **)calloc(r,sizeof(float*));/*输入转移概率矩阵*/for(i=0;i<r;i++)/*为每个phi_ij分配大小为s的内存空间*/phi_ij[i]=(float *)calloc(s,sizeof(float));printf("信道转移概率矩阵P...\n");for(i=0;i<r;i++)for(j=0;j<s;j++)fscanf(stdin,"%f",&p_ji[i][j]);/*判定输入的转移概率矩阵是否正确*/for(i=0;i<r;i++){validate=0.0;for(j=0;j<s;j++){validate +=p_ji[i][j];}if((validate-1.0)>=0)//如果转移概率矩阵的概率和大于1,输入数据不合法{fprintf(stdout,"invalid input data.\n");exit(-1);}}/*显示开始计算..*/fprintf(stdout,"Starting..\n");/*初始化 p_i 和 phi_ij*/for(i=0;i<r;i++){/* p_i为等概率,即概率为1/r*/p_i[i]=(float)(1.0/(float)r);}/*初始化信道容量c,迭代次数k和临时变量variable*/C=-MAXFLOAT;k=0;/* 为sum分配大小为r的内存空间*/sum=(float *)calloc(r,sizeof(float));/*开始迭代计算*/do{k++;//每进行一次迭代,迭代次数k加1/* 计算phi_ij(k)*/for(j=0;j<s;j++){p_j=0.0;for(i=0;i<r;i++)p_j+=p_i[i]*p_ji[i][j];if(fabs(p_j)>=DELTA)for(i=0;i<r;i++)phi_ij[i][j]=p_i[i]* p_ji[i][j]/p_j;elsefor(i=0;i<r;i++)phi_ij[i][j]=0.0;}/*计算p_i(k+1)*/p_j=0.0;for(i=0;i<r;i++){sum[i]=0.0;for(j=0;j<s;j++){/*相对误差门限为0*/if(fabs(phi_ij[i][j])>=DELTA)sum[i]+=(float)(p_ji[i][j]*log( phi_ij[i][j])/ log(2.0)); }sum[i]=(float)(pow(2.0,sum[i]));p_j+=sum[i];}for(i=0;i<r;i++){p_i[i]=sum[i]/p_j;}C_pre=C;C= (float)(log(2.0)/log(p_j) );}while(fabs(C-C_pre)/C>DELTA);free(sum);sum=NULL;/*显示结果*/fprintf(stdout,"The iteration number is %d.\n\n",k);//迭代次数fprintf(stdout,"The capacity of the channel is %.6f bit/symbol:\n\n",C);//信道容量fprintf(stdout,"The best input probability distribution is :\n");//最佳信源分布 for(i=0;i<r;i++)fprintf(stdout,"%.6f\n",p_i[i]);fprintf(stdout,"\n");/* 释放指针空间*/for(i=s-1;i>=0;i--){free(phi_ij[i]);phi_ij[i]=NULL;}free(phi_ij);phi_ij=NULL;for(i=r-1;i>=0;i--){free(p_ji[i]);p_ji[i]=NULL;}free(p_ji);p_ji=NULL;free(p_i);p_i=NULL;exit(0);return 0;}6.实验结果6.实验二:唯一可译码判决准则1.实验目的(1)进一步熟悉唯一可译码判决准则;(2)掌握C语言字符串处理程序的设计和调试技术。

信息论与编码实验报告

信息论与编码实验报告

信息论与编码实验报告一、实验目的本实验主要目的是通过实验验证信息论与编码理论的基本原理,了解信息的产生、传输和编码的基本过程,深入理解信源、信道和编码的关系,以及各种编码技术的应用。

二、实验设备及原理实验设备:计算机、编码器、解码器、信道模拟器、信噪比计算器等。

实验原理:信息论是由香农提出的一种研究信息传输与数据压缩问题的数学理论。

信源产生的消息通常是具有统计规律的,信道是传送消息的媒体,编码是将消息转换成信号的过程。

根据信息论的基本原理,信息的度量单位是比特(bit),一个比特可以表示两个平等可能的事件。

信源的熵(Entropy)是用来衡量信源产生的信息量大小的物理量,熵越大,信息量就越多。

信道容量是用来衡量信道传输信息的极限容量,即信道的最高传输速率,单位是比特/秒。

编码是为了提高信道的利用率,减少传输时间,提高传输质量等目的而进行的一种信号转换过程。

常见的编码技术有霍夫曼编码、香农-费诺编码、区块编码等。

三、实验步骤1.运行编码器和解码器软件,设置信源信息,编码器将信源信息进行编码,生成信道输入信号。

2.设置信道模拟器的信道参数,模拟信道传输过程。

3.将信道输出信号输入到解码器,解码器将信道输出信号进行解码,恢复信源信息。

4.计算信道容量和实际传输速率,比较两者的差异。

5.改变信道参数和编码方式,观察对实际传输速率的影响。

四、实验结果与分析通过实验,我们可以得到不同信道及编码方式下的信息传输速率,根据信道参数和编码方式的不同,传输速率有时会接近信道容量,有时会低于信道容量。

这是因为在真实的传输过程中,存在信噪比、传输距离等因素导致的误码率,从而降低了实际传输速率。

在实验中,我们还可以观察到不同编码方式对传输速率的影响。

例如,霍夫曼编码适用于信源概率分布不均匀的情况,可以实现数据压缩,提高传输效率。

而区块编码适用于数据容量较大的情况,可以分块传输,降低传输错误率。

此外,通过实验我们还可以了解到信息论中的一些重要概念,如信源熵、信道容量等。

信息论与编码实验报告

信息论与编码实验报告

实验一 绘制二进熵函数曲线(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 i i i λλλλ-+≥-+≤=--+-=-=≤≤⎩⎨⎧⎭⎬⎫-===⎥⎦⎤⎢⎣⎡∑单位为 比特/符号 或 比特/符号序列。

当某一符号xi 的概率p(xi)为零时,p(xi)log p(xi) 在熵公式中无意义,为此规定这时的 p(xi)log p(xi) 也为零。

当信源X 中只含有一个符号x 时,必有p(x)=1,此时信源熵H (X )为零。

四、实验内容:用Excel 和Matlab 软件制作二进熵函数曲线。

根据曲线说明信源熵的物理意义。

(一) Excel具体步骤如下: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)的计算。

信息论基础-实验报告参考模板

信息论基础-实验报告参考模板

信息论基础实验报告课程名称:信息论基础姓名:学院:计算机学院专业:计算机系统结构学号:2015 年7 月18 日信源熵值的计算一、实验目的1 进一步熟悉信源熵值的计算2 熟悉vs2010 使用二、实验原理信息论中,熵:随机变量不确定性的度量。

设X为一离散型随机变量,其取之空间为X,概率密度函数为p(x) = Pr(X = x), x∈X则离散型随机变量X的熵H(X)定义为H(X) = -∑p(x)log p(x)x∈X其中log的底为2,此时熵的单位为比特。

流程:第一步:打开一个名为“zhangdongdong”的TXT文档,读入一篇英文歌词see you again存入一个数组temp,为了程序准确性将所读内容转存到另一个数组S,计算该数组中每个字母与空格的出现次数(遇到小写字母都将其转化为大写字母进行计数),每出现一次该字符的计数器+1。

第二步:计算信源总大小计算出每个字母和空格出现的概率;最后,通过统计数据和信息熵公式计算出所求信源熵值程序流程图:开始---->打开文档将英文字母读入数组----->计算每个字母及空格出现次数,算出频率---> 求出信息熵------>输入结果三、实验内容1、写出计算自信息量的C 程序2、已知:信源符号为英文字母(不区分大小写)和空格。

输入:一篇英文的信源文档。

输出:给出该信源文档的中各个字母与空格的概率分布,以及该信源的熵。

四、实验环境Microsoft Windows 7VS2010五、编码程序六、运行结果其中文档内容如下:七、实验总结在实验中,我进一步了解到信源熵的计算,理论和实践的结合让我对这个知识点了解的更加深刻了。

友情提示:范文可能无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用,感谢您的下载!。

信息论实习报告

信息论实习报告

实习报告实习单位:某某信息科技有限公司实习时间:2023年2月18日至2023年3月18日实习岗位:信息论实习生一、实习背景及目的随着信息技术的快速发展,信息论作为一门研究信息传输和处理的理论基础,在各领域中发挥着越来越重要的作用。

为了加深我对信息论知识的理解,提高实际操作能力,我选择了某某信息科技有限公司进行为期一个月的实习。

实习目的在于将所学理论知识与实际工作相结合,拓宽知识面,培养实践操作技能。

二、实习内容及收获1. 实习内容(1)参与公司项目研发,负责信息传输过程中的信号处理和编码工作。

(2)协助工程师进行实验室测试,收集实验数据,分析实验结果。

(3)学习公司内部技术文档,了解公司的信息论技术应用和发展方向。

(4)参加公司组织的培训课程,提升自己在信息论方面的专业知识。

2. 实习收获(1)理论知识应用:通过实际参与项目研发,我将所学的信息论知识应用于实际工作中,提高了理论知识的实际运用能力。

(2)实践操作技能:在实验室测试过程中,我学会了使用各种测试设备,掌握了实验数据的收集和分析方法。

(3)团队协作:与公司同事共同完成项目任务,我学会了如何进行有效沟通,提高了团队协作能力。

(4)行业认识:通过实习,我更加了解了信息论在实际应用中的重要性,以及对相关行业的发展趋势有了更深入的认识。

三、实习中遇到的问题及解决办法在实习过程中,我遇到了一些问题,主要包括:(1)理论知识与实际应用的衔接:在实际工作中,我发现所学理论知识并不能直接应用于实际问题,需要不断地学习和摸索。

(2)技术难题:在项目研发过程中,遇到了一些技术难题,需要向工程师请教和寻求帮助。

解决办法:(1)加强学习:通过阅读相关资料和参加公司培训,提高自己的理论水平和实际操作能力。

(2)积极请教:遇到问题时,主动向工程师请教,争取他们的指导和帮助。

四、实习总结通过本次实习,我对信息论在实际应用中的重要性有了更深入的认识,同时自己的实践操作能力和团队协作能力也得到了锻炼和提高。

信息论实验报告

信息论实验报告

桂林理工大学实验报告班级:通信09-2班学号:3090731219 姓名:崔泽实验名称:计算离散信源的熵日期:2011年5月10日一、实验目的1、熟悉离散信源的特点2、熟悉离散信源平均信息量的计算方法二、实验内容1、写出计算自信息量的Matlab程序2、写出计算离散信源平均信息量的Matlab程序3、掌握二元离散信源的最大信息量与概率的关系4、完成习题三、习题1、程序:x=[0.5 0.25 0.125 0.125 ];y=[0.875 0.125];b=-x.*log2(x)H1=sum(b)c=-y.*log2(y)H1=sum(c)X=-log2(x)Y=-log2(y)程序运行结果:b = 0.5000 0.5000 0.3750 0.3750H1 =1.7500c = 0.1686 0.3750H1 = 0.5436X = 1 2 3 3Y =0.1926 3.0000由上面结果可以看出,甲信源的熵为: 1.7500已信源的熵为:0.5436甲地各种天气的信息量晴,云,大雨,小雨分别为1 2 3 3已地各种天气的信息量晴,小雨分别为0.1926 3.00002、Matlab程序:x=[1/4 1/8 1/8 3/16 5/16];a=-x.*log2(x);H=sum(a)程序运行结果:H = 2.22723、Matlab程序:X=[1/4 1/8 1/8 1/2];a=-x.*log2(x);H=sum(a)程序运行结果:H = 1.75003、Matlab程序:p=0.00011:0.1:0.99999;x=[p,1-p];a=-x.*log2(x);H=sum(a)plot(x,a)pHH = 7.0879当p呈等概率分布时,平均信息量达到最大值7.0879桂林理工大学实验报告班级:通信09-2班学号:3090731225 姓名:崔泽实验名称:离散信道德平均互信息及其信道容量的计算日期:2011年5月20日一、实验目的1、了解信道传输概率的状态图和信道转移概率的矩阵的特点2、了解什么是信道容量和最佳输入概率分布3、熟悉计算平均互信息和信道容量的计算步骤二、实验内容1、写出计算互信息和平均互信息的Matlab程序2、写出计算几种特殊离散信道的信道容量的Matlab程序3、完成习题三、习题1、Matlab程序:w=0.01:0.1:0.99;a1=log2(0.8./(0.6.*w+0.2));a2=log2(0.2./((-0.6).*w+0.8))I=0.8.*w.*a1+0.2.*(1-w).*a2+0.2.*w.*a2+0.8.*(1-w).*a1plot(w,I)程序运行结果:Imax=1.1681;即 C=1.1681;2、(1)原理:C=logr Matlab程序:r=3;c=log2(r)运算结果:c =1.5850(2)原理:C=log2(s)Matlab程序:S=2;C=log2(s)运行结果:C=1(3)原理:C=log2(s)-H(p1,p2,…,ps); Matlab程序:s=4;c=log2(s)+2/3*log2(1/3)+1/3*log2(1/6) 运行结果:c =0.0817(4)4、一般信道,其信道矩阵为:111244121636113884P⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦桂林理工大学实 验 报 告班级:通信09-2班 学号:3090731225 姓名:崔泽 实验名称:有噪信道编码定理 日期:2011年5月30日一、实验目的1、理解有噪信道编码定理的物理意义2、熟悉 Matlab 编程二、实验内容1、学习应用有噪信道编码定理解决实际问题2、将程序在计算机上仿真实现,验证程序的正确性3、完成习。

信息论实验报告1--信息熵的计算

信息论实验报告1--信息熵的计算
sum=0;
~
fori=1:5
forj=1:4
sum=sum+A(i,j);
end
A(i,:)=A(i,:)/sum;

sum=0;
end
y=A;
求H(x|y):
functiony=H_x_y(A)
"
sum=0;
fori=1:4
forj=1:5
sum=sum+A(j,i);
end
\
A(:,i)=A(:,i)/sum;
实验
总结

本次实验的收获、体会、经验、问题和教训:
\
1、信息熵计算Matlab源码
求H(x):
function[a,b]=H_x(A)
sum =0;
B=zeros(5,1);
;
hx=0;%求H(x)的熵
fori=1:5%i代表行
forj=1:4%j代表列
sum=sum+A(i,j);
end

hx=hx-sum*log2(sum);
求H(x|y),H(y|x)
A=[ 0 0 0; 0 0;0 0;0 0 ;0 0 0];
H_x_y(A)
ans =
0 0 0
0 0
0 0
0 0
0 0 0
H_y_x(A)
ans =
0 0 0
0 0
0 0
0 0
0 0 0
教师
评语
成绩
辽宁工程技术大学上机实验报告
(
实验名称
信息熵的相关计算
院系
/
姓名

实验

目的
简述本次实验目的:
1、理解信息熵的概念

信息论实验报告

信息论实验报告

一、实验目的1. 理解信息论的基本概念和原理;2. 掌握信息熵、条件熵、互信息等基本概念的计算方法;3. 学会使用 MATLAB 进行信息论实验,并分析实验结果;4. 提高编程能力和数据分析能力。

二、实验原理信息论是一门研究信息传输、处理和存储的学科,其核心是信息熵。

信息熵是衡量信息不确定性的度量,表示信息中所包含的平均信息量。

信息熵的计算公式如下:H(X) = -Σ p(x) log2(p(x))其中,H(X) 表示随机变量 X 的熵,p(x) 表示 X 取值为 x 的概率。

条件熵是衡量在已知另一个随机变量 Y 的条件下,随机变量 X 的不确定性。

条件熵的计算公式如下:H(X|Y) = -Σ p(x,y) log2(p(x|y))其中,H(X|Y) 表示在 Y 已知的条件下 X 的熵,p(x,y) 表示 X 和 Y 同时取值为x 和 y 的概率,p(x|y) 表示在 Y 已知的情况下 X 取值为 x 的条件概率。

互信息是衡量两个随机变量之间相互依赖程度的度量。

互信息的计算公式如下:I(X;Y) = H(X) - H(X|Y)其中,I(X;Y) 表示随机变量 X 和 Y 之间的互信息。

三、实验内容1. 使用 MATLAB 编写程序,计算给定信源的概率分布,并计算其熵;2. 使用 MATLAB 编写程序,计算给定两个随机变量的联合概率分布,并计算其条件熵和互信息;3. 分析实验结果,验证信息熵、条件熵和互信息之间的关系。

四、实验步骤1. 输入信源的概率分布,使用 MATLAB 计算 H(X);2. 输入两个随机变量的联合概率分布,使用 MATLAB 计算 H(X,Y)、H(X|Y) 和I(X;Y);3. 分析实验结果,比较 H(X)、H(X|Y) 和 I(X;Y) 之间的关系。

五、实验结果与分析1. 信源概率分布及其熵输入信源的概率分布为:p(x) = [0.2, 0.3, 0.5]计算得到:H(X) = -0.2 log2(0.2) - 0.3 log2(0.3) - 0.5 log2(0.5) ≈ 1.5852. 两个随机变量的联合概率分布及其条件熵和互信息输入两个随机变量的联合概率分布为:p(x,y) = [0.1, 0.2, 0.3, 0.4]计算得到:H(X,Y) = -0.1 log2(0.1) - 0.2 log2(0.2) - 0.3 log2(0.3) - 0.4log2(0.4) ≈ 2.097H(X|Y) = -0.1 log2(0.1) - 0.2 log2(0.2) - 0.3 log2(0.3) - 0.4log2(0.4) ≈ 1.585I(X;Y) = H(X) - H(X|Y) ≈ 0.512分析实验结果,可以发现:(1)信息熵 H(X) 表示信源中包含的平均信息量,当信源概率分布越均匀时,信息熵越大;(2)条件熵 H(X|Y) 表示在已知随机变量 Y 的条件下,随机变量 X 的不确定性,当 X 和 Y 之间的依赖程度越高时,条件熵越小;(3)互信息 I(X;Y) 表示随机变量 X 和 Y 之间的相互依赖程度,当 X 和 Y 之间的依赖程度越高时,互信息越大。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

联合信源各种熵的计算
一、摘要:
在人类社会中,人与人之间要经常互通情报,交换消息,从一般意义上讲这就是通信。

因此传递信息就是通信的根本目的。

信源需要传递的事情一般是属于随机事件,也就是其状态是随机的。

源熵是信息论中用来衡量信源信息量有序化程度的一个概念。

信源熵值与信源有序化程度成反比;有序度越高,信源熵值越低,反之亦成立。

信源各个离散消息的自信息量的数学期望(即概率加权的统计平均值)。

本文主要研究了联合信源的各种伤的计算。

关键词:
条件熵 非条件熵 共熵 联合信源
二、问题分析:
由这两个信源构成了联合信源的各种概率空间:
联合概率空间——{,()}i j XY p x y
条件概率空间——{/,(/)}j i Y X p y x ,{/,(/)}i j X Y p x y
以下分别对二元联合信源的共熵,条件熵,非条件熵和最大熵进行求解。

1、二元联合信源的共熵:
共熵反映的是每当两个信源同时发送一对消息时,所提供的平均信息量。

二元联合信源的共熵(或联合熵)的定义:
,,1
()()log
()log ()()i j i j i j i j
i j
i j H XY p x y p x y p x y p x y ==-∑∑
2、二元联合信源的条件熵:
(1).X 给定的情况下Y 的条件熵:
,,1(/)()log
()log (/)(/)
i j i j j i i j
i j
j i H Y X p x y p x y p y x p y x ==-∑∑
条件熵H(X/Y)所反映的是信源X 给定的条件下,信源Y 所提供的平均信息量。

(2).Y 给定的情况下X 的条件熵:
,,1
(/)()log
()log (/)(/)i j i j i j i j
i j
i j H X Y p x y p x y p x y p x y ==-∑∑
条件熵H(Y/X)所反映的是信源Y 给定的条件下,信源X 所提供的平均信息量。

3、最大熵:
当X,Y 相互独立时,()()()()MAX H XY H X H Y H XY =+-- 三。

、程序代码:
%---------输入先验概率 转移矩阵
fprintf('\n 请输入先验概率P_x 和状态转移概率P_y_x\n'); eps=1e-8;
P_x=input('P_x=')+eps; %+eps 是为了防止概率为0使,对数无意义 P_y_x=input('P_y_x=')+eps;
if (min(P_x(:))<0 | max(P_x(:)>1))|(min(P_y_x(:))<0|max(P_x(:)>1)) error('The data shoud be any numbers between 0 and 1.'); end ; eps=1e-10;
if min(sum(P_y_x')-1)<eps | (sum(P_x)-1)<eps error('The sum of rows should be 1.'); end ;
P_xx=P_x'*ones(size(P_x,1),size(P_y_x,2));
P_xy=P_xx.*P_y_x; % x y 联合概率 fprintf('-----------------------------'); fprintf('\nx y 的联合概率 P_xy=\n'); disp(P_xy);
P_y=sum(P_xy); % y 的概率 fprintf('-----------------------------'); fprintf('\ny 的概率 P_y=\n');
disp(P_y);
P_yy=ones(size(P_xy,1),size(P_y,1))*P_y;
P_x_y=P_xy./P_yy; % x y后验概率
fprintf('-----------------------------');
fprintf('\nx y后验概率 P_x_y=\n');
disp(P_x_y);
%输出各类信息熵
H_x=-sum(P_x.*log2(P_x));
H_y=-sum(P_y.*log2(P_y));
H_y_x=-sum(sum(P_xy.*log2(P_y_x)));
H_xy=-sum(sum(P_xy.*log2(P_xy)));
Hmaxxy=-sum(P_x.*log2(P_x))-sum(P_y.*log2(P_y));
fprintf('-----------------------------');
fprintf('\n x 信息熵 H_x=\n');
disp(H_x); % x 信息熵
fprintf('-----------------------------');
fprintf('\n y 信息熵 H_y=\n');
disp(H_y); % y 信息熵
fprintf('-----------------------------');
fprintf('\n y/x 条件熵 H_x_y=\n');
disp(H_y_x); % y/x 条件熵
fprintf('-----------------------------');
fprintf('\n x y联合熵 H_xy=\n');
disp(H_xy); % x y联合熵
fprintf('-----------------------------');
fprintf('\n xy最大熵 Hmaxxy=\n');
disp(Hmaxxy); % 最大熵
fprintf('Compute done !');
四、实例验证:
例:
有两个信源X,Y,已知概率分布如下表,求联合信源的共熵和条件熵以及最大熵:
通过计算可得结果:
无条件熵:
1
()()log
1.461()()
1
()()log 1.997()
()i i
i j j
j H X p x bit p x H Y p y bit p y =≈=≈∑∑
条件熵:
,1(/)()log
1.956()(/)
i j i j
j i H Y X p x y bit p y x =≈∑
,1
(/)()log
1.420()(/)
i j i j
i j H X Y p x y bit p x y ==∑
最大熵:
()()()() 3.458()MAX H XY H X H Y H XY bit =+--=
联合熵:
,1
()()log
3.417()()
i j i j
i j H XY p x y bit p x y ==∑
接下来对上题应用代码验证结果:
由代码结果与计算结果相一致,所以该程序可行。

五、实验总结
通过本次实验,我对于二元联合信源熵有了进一步的理解。

在查资料和编代码的过程中,我也遇到过很多的障碍。

但是最终通过和同学的讨论以及思考解决了障碍。

我认为这对于我来说是一个很好的锻炼,提高了我的自主学习和拓展的能力。

实验结果基本与事实相一致,但是也有一定的瑕疵。

我相信对于信息论的学习我不会止步于期末考试。

在以后的学习中,我相信这门课程给我带来的知识将给我带来更多的收获。

相关文档
最新文档