信息论报告

合集下载

信息论实验报告

信息论实验报告

信息论实验报告班级:姓名:学号:实验一:信道容量的迭代算法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.进一步学习C++语言概念和熟悉VC 编程环境。

2.学习算术编码基本流程, 学会调试算术编码程序。

3. 根据给出资料,自学自适应0 阶算术编、解码方法。

二、实验内容与原理(一)实验原理:1.算术编码基本原理这是将编码消息表示成实数0 和1 之间的一个间隔,消息越长,编码表示它的间隔就越小,表示这一间隔所需的二进制位就越多。

算术编码用到两个基本的参数:符号的概率和它的编码间隔。

信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在0到1之间。

编码过程中的间隔决定了符号压缩后的输出。

首先借助下面一个简单的例子来阐释算术编码的基本原理。

考虑某条信息中可能出现的字符仅有a b c 三种,我们要压缩保存的信息为bccb。

在没有开始压缩进程之前,假设对a b c 三者在信息中的出现概率一无所知(采用的是自适应模型),暂认为三者的出现概率相等各为1/3,将0 - 1 区间按照概率的比例分配给三个字符,即a 从0.0000 到0.3333,b 从0.3333 到0.6667,c 从0.6667 到1.0000。

进行第一个字符b编码,b 对应的区间0.3333 -0.6667。

这时由于多了字符b,三个字符的概率分布变成:Pa = 1/4,Pb = 2/4,Pc = 1/4。

按照新的概率分布比例划分0.3333 - 0.6667 这一区间,划分的结果可以用图形表示为:+-- 0.6667 Pc = 1/4 | +-- 0.5834 | | Pb = 2/4 | | | +-- 0.4167 Pa = 1/4 | +-- 0.3333 接着拿到字符c,现在要关注上一步中得到的c 的区间0.5834 -0.6667。

新添了c 以后,三个字符的概率分布变成Pa = 1/5,Pb = 2/5,Pc = 2/5。

用这个概率分布划分区间0.5834 - 0.6667:+-- 0.6667 | Pc = 2/5 | +-- 0.6334 | Pb = 2/5 || +-- 0.6001 Pa = 1/5 | +-- 0.5834 输入下一个字符c,三个字符的概率分布为:Pa = 1/6,Pb = 2/6,Pc = 3/6。

信息论与编码实验报告

信息论与编码实验报告

实验一:计算离散信源的熵一、实验设备:1、计算机2、软件:Matlab二、实验目的:1、熟悉离散信源的特点;2、学习仿真离散信源的方法3、学习离散信源平均信息量的计算方法4、熟悉 Matlab 编程;三、实验内容:1、写出计算自信息量的Matlab 程序2、写出计算离散信源平均信息量的Matlab 程序。

3、将程序在计算机上仿真实现,验证程序的正确性并完成习题。

四、求解:1、习题:A 地天气预报构成的信源空间为:()⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡6/14/14/13/1x p X 大雨小雨多云晴 B 地信源空间为:17(),88Y p y ⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦ 小雨晴 求各种天气的自信息量和此两个信源的熵。

2、程序代码:p1=[1/3,1/4,1/4,1/6];p2=[7/8,1/8];H1=0.0;H2=0.0;I=[];J=[];for i=1:4H1=H1+p1(i)*log2(1/p1(i));I(i)=log2(1/p1(i));enddisp('自信息I分别为:');Idisp('信息熵H1为:');H1for j=1:2H2=H2+p2(j)*log2(1/p2(j));J(j)=log2(1/p2(j));enddisp('自信息J分别为');Jdisp('信息熵H2为:');H23、运行结果:自信息量I分别为:I = 1.5850 2.0000 2.0000 2.5850信源熵H1为:H1 = 1.9591自信息量J分别为:J =0.1926 3.0000信源熵H2为:H2 =0.54364、分析:答案是:I =1.5850 2.0000 2.0000 2.5850 J =0.1926 3.0000H1 =1.9591; H2 =0.5436实验2:信道容量一、实验设备:1、计算机2、软件:Matlab二、实验目的:1、熟悉离散信源的特点;2、学习仿真离散信源的方法3、学习离散信源平均信息量的计算方法4、熟悉 Matlab 编程;三、实验内容:1、写出计算自信息量的Matlab 程序2、写出计算离散信源平均信息量的Matlab 程序。

信息论与编码实验报告

信息论与编码实验报告

信息论与编码实验报告一、实验目的1.了解信息论与编码的基本概念和原理。

2.学习如何通过信息论与编码方法实现对数据的压缩和传输。

3.掌握信息论与编码实验的实验方法和实验技能。

4.提高实验设计、数据分析和报告撰写的能力。

二、实验内容1.通过对输入信源进行编码,实现对数据的压缩。

2. 比较不同编码方法的压缩效果,包括Shannon-Fano编码和霍夫曼编码。

3.通过传输信道对编码后的数据进行解码,还原原始信源。

4.分析并比较不同编码方法的传输效果,包括码率和传输质量。

三、实验原理1.信息论:熵是信息论中衡量信源不确定性的指标,熵越小表示信源的可预测性越高,在编码过程中可以压缩数据。

2. 编码方法:Shannon-Fano编码通过分治的方法将输入信源划分为不同的子集,分别进行编码;霍夫曼编码则通过构建最佳二叉树的方式,将较常出现的信源符号编码为较短的二进制码,较少出现的信源符号编码为较长的二进制码。

3.传输信道:信道可能存在误码和噪声,通过差错控制编码可以在一定程度上保障传输数据的正确性和完整性。

四、实验步骤1. 对给定的输入信源进行Shannon-Fano编码和霍夫曼编码。

2.计算编码后的码率,分析不同编码方法的压缩效果。

3.将编码后的数据传输到信道,模拟信道中的误码和噪声。

4.对传输后的数据进行解码,还原原始信源。

5.比较不同编码方法的传输质量,计算误码率和信噪比。

五、实验结果与分析1. 编码结果:通过对输入信源进行编码,得到了Shannon-Fano编码和霍夫曼编码的码表。

2.压缩效果:计算了不同编码方法的码率,比较了压缩效果。

3.传输结果:模拟信道传输后的数据,对数据进行解码,还原原始信源。

4.传输质量:计算了误码率和信噪比,分析了不同编码方法的传输质量。

六、实验总结通过本次实验,我深刻理解了信息论与编码的基本概念和原理,并掌握了信息论与编码实验的实验方法和实验技能。

在实验过程中,我遇到了一些困难,比如对编码方法的理解和实验数据的处理。

最新《信息论基础》实验报告-实验1

最新《信息论基础》实验报告-实验1

最新《信息论基础》实验报告-实验1实验目的:1. 理解信息论的基本概念,包括信息熵、互信息和编码理论。

2. 通过实验掌握香农信息熵的计算方法。

3. 学习并实践简单的数据压缩技术。

实验内容:1. 数据集准备:选择一段英文文本作为实验数据集,统计各字符出现频率。

2. 信息熵计算:根据字符频率计算整个数据集的香农信息熵。

3. 编码设计:设计一种基于频率的霍夫曼编码方案,为数据集中的每个字符分配一个唯一的二进制编码。

4. 压缩与解压缩:使用设计的霍夫曼编码对原始文本进行压缩,并验证解压缩后能否恢复原始文本。

5. 性能评估:比较压缩前后的数据大小,计算压缩率,并分析压缩效果。

实验步骤:1. 从文本文件中读取数据,统计每个字符的出现次数。

2. 利用统计数据计算字符的相对频率,并转换为概率分布。

3. 应用香农公式计算整个数据集的熵值。

4. 根据字符频率构建霍夫曼树,并为每个字符生成编码。

5. 将原始文本转换为编码序列,并记录压缩后的数据大小。

6. 实现解压缩算法,将编码序列还原为原始文本。

7. 分析压缩前后的数据大小差异,并计算压缩率。

实验结果:1. 原始文本大小:[原始文本大小]2. 压缩后大小:[压缩后大小]3. 压缩率:[压缩率计算结果]4. 霍夫曼编码表:[字符与编码的对应表]实验讨论:- 分析影响压缩效果的因素,如字符集大小、字符频率分布等。

- 讨论在实际应用中,如何优化编码方案以提高压缩效率。

- 探讨信息论在数据压缩之外的其他应用领域。

实验结论:通过本次实验,我们成功地应用了信息论的基本原理,通过霍夫曼编码技术对文本数据进行了有效压缩。

实验结果表明,基于字符频率的霍夫曼编码能够显著减少数据的存储空间,验证了信息论在数据压缩领域的有效性和实用性。

信息论与编码实验报告

信息论与编码实验报告

信息论与编码实验报告实验⼀关于硬币称重问题的探讨⼀、问题描述:假设有N 个硬币,这N 个硬币中或许存在⼀个特殊的硬币,这个硬币或轻或重,⽽且在外观上和其他的硬币没什么区别。

现在有⼀个标准天平,但是⽆刻度。

现在要找出这个硬币,并且知道它到底是⽐真的硬币重还是轻,或者所有硬币都是真的。

请问:1)⾄少要称多少次才能达到⽬的;2)如果N=12,是否能在3 次之内将特殊的硬币找到;如果可以,要怎么称?⼆、问题分析:对于这个命题,有⼏处需要注意的地⽅:1)特殊的硬币可能存在,但也可能不存在,即使存在,其或轻或重未知;2)在⽬的上,不光要找到这只硬币,还要确定它是重还是轻;3)天平没有刻度,不能记录每次的读数,只能判断是左边重还是右边重,亦或者是两边平衡;4)最多只能称3 次。

三、解决⽅案:1.关于可⾏性的分析在这⾥,我们把称量的过程看成⼀种信息的获取过程。

对于N 个硬币,他们可能的情况为2N+1 种,即重(N 种),轻(N 种)或者⽆假币(1 种)。

由于这2N+1 种情况是等概率的,这个事件的不确定度为:Y=Log(2N+1)对于称量的过程,其实也是信息的获取过程,⼀是不确定度逐步消除的过程。

每⼀次称量只有3 种情况:左边重,右边重,平衡。

这3 种情况也是等概率的,所以他所提供的信息量为:y=Log3在K 次测量中,要将事件的不确定度完全消除,所以K= Log(2N+1)/ Log3根据上式,当N=12 时,K= 2.92< 3 所以13 只硬币是可以在3 次称量中达到⽬的的。

通过此式,我们还可以计算得到:通过3 次测量⽽找出异常硬币,N 的最⼤值为13.2.⽅案的提出为了描述⽅便,我们给这12枚硬币分别编号(1)-(12)。

⾸先,任选8个⽐较,如选:⑴⑵⑶⑷⽐⑸⑹⑺⑻1.若⼀样重,则假币在⑼~⑿中,第⼆步:⑼⑽⽐⑾⑴(1)若⼀样重,则可能的假币为⑿。

则第三步:⑴⽐⑿a.若⼀样重,则没有假币;b.不⼀样重,则假币为⑿:如果(1)>(12),则假币轻,反之,假币重;(2)若⑼⑽重,则第三步:⑼⽐⑽a.若⼀样重,则假币为⑾(较轻)b.不⼀样重,则假币为⑼、⑽中较重者(3)若⑼⑽轻,则第三步:⑼⽐⑽a.若⼀样重,则假币为⑾(较重)b.不⼀样重,则假币为⑼、⑽中较轻者2.若⑴⑵⑶⑷重,则第⼆步:⑴⑵⑸⽐⑶⑷⑹(1)若⼀样重,则假币在⑺⑻中,第三步:⑺⽐⑻假币为⑺、⑻中较轻者(2)若⑴⑵⑸端较重,则假币在⑴⑵⑹中,第三步:⑴⽐⑵a.若⼀样重,则假币为⑹(较轻)b.不⼀样重,则假币为⑴⑵中较重者(3)若⑶⑷⑹端较重,则假币在⑶⑷⑸中,第三步:⑶⽐⑷a.若⼀样重,则假币为⑸(较轻)b.不⼀样重,则假币为⑶、⑷中较重者3.若⑴⑵⑶⑷轻,则与上⾯类似,第⼆步:⑴⑵⑸⽐⑶⑷⑹(1)若⼀样重,则假币在⑺⑻中,第三步:⑺⽐⑻假币为⑺、⑻中较重者(2)若⑴⑵⑸端较轻,则假币在⑴⑵⑹中,第三步:⑴⽐⑵a.若⼀样重,则假币为⑹(较重)b.不⼀样重,则假币为⑴⑵中较轻者(3)若⑶⑷⑹端较轻,则假币在⑶⑷⑸中,第三步:⑶⽐⑷a.若⼀样重,则假币为⑸(较重)b.不⼀样重,则假币为⑶、⑷中较轻者3.⽤C语⾔编程实现上述⽅案为:#includevoid main(){int i;float a[12];for(i=0;i<12;i++)scanf("%f",&a[i]);if(a[0]+a[1]+a[2]+a[3]==a[4]+a[5]+a[6]+a[7]){if(a[0]+a[1]+a[2]==a[8]+a[9]+a[10]){if(a[8]==a[11])printf("There is no special coin!\n");else if(a[8]>a[11])printf("There is a special coin:%f(12) and it's lighter than others.\n",a[ 11]); elseprintf("There is a special coin:%f(12) and it's heavier than others.\n",a[ 11]); }else if(a[0]+a[1]+a[2]>a[8]+a[9]+a[10]){if(a[8]==a[9])printf("There is a special coin:%f(11) and it's lighter than others.\n",a[ 10]); else if(a[8]>a[9])printf("There is a special coin:%f(10) and it's lighter than others.\n",a[ 9]); elseprintf("There is a special coin:%f(9) and it's lighter than others.\n",a[8 ]);}else{if(a[8]==a[9])printf("There is a special coin:%f(11) and it's heavier than others.\n",a[ 10]); else if(a[8]>a[9])printf("There is a special coin:%f(9) and it's heavier than others.\n",a[8 ]); elseprintf("There is a special coin:%f(10) and it's heavier than others.\n",a[ 9]); }}else if(a[0]+a[1]+a[2]+a[3]>a[4]+a[5]+a[6]+a[7]){if(a[0]+a[2]+a[5]==a[1]+a[4]+a[8]){if(a[6]==a[7])printf("There is a special coin:%f(4) and it's heavier than others.\n",a[3 ]); else if(a[6]>a[7])printf("There is a special coin:%f(8) and it's lighter than others.\n",a[7 ]); elseprintf("There is a special coin:%f(7) and it's lighter than others.\n",a[6 ]);}else if(a[0]+a[2]+a[5]>a[1]+a[4]+a[8]){if(a[0]==a[2])printf("There is a special coin:%f(5) and it's lighter than others.\n",a[4 ]); else if(a[0]>a[2])printf("There is a special coin:%f(1) and it's heavier than others.\n",a[0 ]);elseprintf("There is a special coin:%f(3) and it's heavier than others.\n",a[2 ]); }else{if(a[1]>a[8])printf("There is a special coin:%f(2) and it's heavier than others.\n",a[1 ]); if(a[5]printf("There is a special coin:%f(6) and it's lighter than others.\n",a[5 ]); }}else{if(a[0]+a[2]+a[5]==a[1]+a[4]+a[8]){if(a[6]==a[7])printf("There is a special coin:%f(4) and it's lighter than others.\n",a[3 ]); else if(a[6]>a[7])printf("There is a special coin:%f(7) and it's heavier than others.\n",a[6 ]); elseprintf("There is a special coin:%f(8) and it's heavier than others.\n",a[7]); }else if(a[0]+a[2]+a[5]{if(a[0]==a[2])printf("There is a special coin:%f(5) and it's heavier than others.\n",a[4 ]); else if(a[0]>a[2])printf("There is a special coin:%f(3) and it's lighter than others.\n",a[2 ]);printf("There is a special coin:%f(1) and it's lighter than others.\n",a[0 ]);}else{if(a[1]printf("There is a special coin:%f(2) and it's lighter than others.\n",a[1 ]);if(a[5]>a[8])printf("There is a special coin:%f(6) and it's heavier than others.\n",a[5 ]);}}}运⾏结果如图:即输⼊12个数表⽰这12枚硬币的重量,最后输出哪⼀枚为假币,并判断其轻重。

信息论实验报告实验1

信息论实验报告实验1

信息论实验报告一实验一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)根据以上三者之间的关系,验证结果的正确性。

信息论与编码报告

信息论与编码报告

信息论报告摘要:信息论是一门用概率论与数理统计方法来研究信息的度量、传递和交换规律的科学。

它主要是研究通讯和控制系统中普遍存在着信息传递的共同规律以及研究最佳解决信息的获限、度量、变换、存储和传递等问题的基础理论。

自香农在1948年发表奠定信息论基础的《通信的数学理论》一文以来,信息论学科迅速发展并延伸到许多领域中。

信息理论不仅在通信、计算机、控制等领域中有直接指导意义,还渗透到经济学、生物学、医学等广泛领域。

本文简要介绍信息论的基本原理和发展史,重点介绍信息论在数据压缩、密码学、信号处理及量子理论中的应用。

关键词:信息、信息论、密码学、数据压缩、量子理论、熵1.信息论原理1.1信息论中的信息信息是信息论中最重要最基本的概念。

早期,人们对信息的理解是很肤浅的。

最早把信息作为科学对象来加以研究的是通信领域,而这一领域的奠基之作当推哈特莱于1928年在《贝尔系统电话杂志》上发表的题为《信息传输》的论文。

他把信息理解为选择通信符号的方式,并用选择的自由度来计量这种信息的大小。

1948年,通信专家香农在《贝尔系统电话杂志》上发表了一篇名为《通信的数学理论》的论文,在文中他以概率论为工具,阐明了通信中的一系列基本理论问题,给出了计算信源信息量和信道容量的方法和一般公式,得到了一组表示信息传递重要关系的编码定理。

香农在定量测度信息时,把信息定义为随机不确定性的减少,亦即信息是用来减少随机不确定性的东西。

基于这一思想,布里渊直接指出,信息就是负熵[1]。

而控制论的奠基人维纳则把信息看做广义通信的内容,他指出:“正如熵是无组织(无序)程度的度量一样,消息集合所包含的信息就是组织(有序)程度的度量。

事实上完全可以将消息所包含的信息解释为负熵”[2]。

1.2信息论基础(1)香农在论文《A Mathematical Theory of Communication 》中给出了信息熵的定义:()i ii p p log ∑-=H (1-2-1)这一定义可以用来推算传递经二进制编码后的原信息所需的信道带宽。

信息论应用调研报告

信息论应用调研报告

信息论基础调研报告一.信息论的起源:信息论理论基础的建立,一般来说开始于1948年美国数学家香农在《贝尔系统电话杂志》发表题为“通信的数学理论”的长篇论文。

这篇论文以概率论为工具,深刻阐释了通信工程的一系列基本理论问题,给出了计算信源信息量和信道容量的方法和一般公式,得出了一组表征信息传递重要关系的编码定理,从而创立了信息论。

信息论自诞生到现在不过60多年,在人类科学史上是相当短暂的。

但它的发展对学术界以及人类社会的影响是相当广泛和深刻的。

信息作为一种资源,如何开发、利用、共享,是人们普遍关心的问题。

信息论是研究信息的传输、存储和处理的学科,亦称“信息论”为“通信的数学理论”。

它主要研究在通信系统设计中如何实现信息传输的有效性和可靠性。

因此,信息论与通信技术、统计数学信号处理等密切相关。

二.信息技术的发展:现代信息论其实是从上世纪二十年代奈奎斯特和哈特莱的研究开始的,他们最早开始研究了通信系统传输信息的能力,并且试图度量系统的信道容量。

香农于1940年在普林斯顿高级研究所期间开始思考信息论与有效通信系统的问题。

经过8年的努力,1948年,来自贝尔研究所的Claude Shannon(克劳德·香农)的《通信的数学理论》论文公诸于世,从此宣告了崭新的一门关于信息发面的学科──信息论的诞生。

1949年,香农又在该杂志上发表了另一着名论文《噪声下的通信》。

在这两篇论文中,香农阐明了通信的基本问题,给出了通信系统的模型,提出了信息量的数学表达式,并解决了信道容量、信源统计特性、信源编码、信道编码等一系列基本技术问题。

两篇论文成为了信息论的奠基性着作。

这两篇论文一起阐述了现代信息论的基础。

并且香农开始创造性的定义了“信息”。

信息论自从二十世纪四十年代中叶到二十一世纪初期,现已成为一门独立的理论科学,他给出一切传输、存储、处理信息系统的一般理论,并指出,实现有效、可靠地传输和存储信息的途径是走数字化的道路。

信息论实验一实验报告范文

信息论实验一实验报告范文

信息论实验一实验报告范文一、简要总结信源的熵、信道容量的物理意义,概念:信源熵的物理意义:指信源中的各个符号的平均不确定性;熵是信源符号的平均信息量,是信源符号的平均不确定度。

信道容量概念:在信道可以传输的基本前提下,对信源的一切可能的概率分布而言,信道能够传输的最大(接收)熵速率称为信道容量。

意义:求出了某个信道的信道容量,也就找到了信源的最佳概率分布。

从而指导人们改造信源,使之最大可能地利用信道的传输能力。

二、写出离散信源熵、离散信道容量计算的基本步骤,画出实现离散信源熵、离散信道容量计算的程序流程图。

离散信源熵的计算步骤:q1Hr某Elogrpailograip(ai)i1信道容量的计算步骤:CI某;Ybit/符号ma某P某实现离散信源熵的计算流程图:输入P(ai)H(某)=0,i=1H(某)=H(某)+P(a1)logr(1/a1)i“”实现离散信道容量计算的程序流程图:输入p(某i)p(0)(某i)p(yj/某i)aie某pp(yj/某i)lnp(某i)p(yj/某i)jiC1n1,nlnp(某i)aiiC2n1,nlnma某aiiC1n1,nC2n1,n是CC1n1,n结束p(某i)p(某i)aip(某i)aii否三、实现离散信源熵、离散信道容量计算的matlab源程序:离散信源的熵(借助习题2.16)和离散信道容量(借助习题3.6)分析习题2.16的matlab程序:Clearall;%清除所有变量P某=[0.70.3];P=0;%输入信源概率,P某=p(某)H某=-P某某log2(P 某’)%计算信源的熵H(某)Py某=[0.90.2;0.10.8];p某=[0.70.3;0.70.3];%Py某为条件概率P某y=Py某.某p某;fori=1:2 h某某(i,1)=-P某y(I,:)某log2(P某y(i,:)’);P=P+h某某(i,1);%计算H(某^2)endh2某=P/2%计算H2(某)程序运行结果:H某=0.8813H2某=0.7131习题3.6的matlab程序:clearall;%清除所有变量a=0;p=[2/31/3;1/32/3];%信道矩阵Pfori=1:2,a=a+p(1,i)某log2(p(1,i));endC=log2(2)+a%计算对称离散信道的信道容量Cfori=1:2,p1(i)=1/2;endp1%最佳输入概率分布程序运行结果C=0.0817p1=0.50000.50004、讨论信源的熵的大小与前后符号之间相关性的关系,讨论信道容量与信源先验概率及信道转移概率的关系。

信息论实验终结报告

信息论实验终结报告

信源熵终结版#include<stdio.h>#include<math.h>void main(){int i,j,n,m,k,z;//定义整型变量float px[30],hx=0.0,hy=0.0,hx_y=0.0,hy_x=0.0,hxy=0.0,Ix_y=0.0,Iy_x=0.0;//定义浮点型变量,包括数组float py_x[30][30],py[30]={0},pxy[30][30],px_y[30][30];printf("请输入X的个数n:\n");//输入信源个数scanf("%d",&n);printf("请分别输入p(x):\n");//输入信源各概率for(i=0;i<n;i++)scanf("%f",&px[i]);printf("请输入Y的个数m:\n");//输入信宿个数scanf("%d",&m);printf("请分别输入py_x:\n");//分别输入P(y/x)值for(k=0;k<m;k++) //以矩阵形式输入{printf(" y%d",k+1);}for(i=0;i<n;i++){printf("\nx%d ",i+1);for(j=0;j<m;j++){scanf("%f",&py_x[j][i]);}}for(i=0;i<n;i++)//计算联合概率for(j=0;j<m;j++)pxy[i][j]=px[i]*py_x[j][i];for(j=0;j<m;j++)//计算Y的概率for(i=0;i<n;i++)py[j]+=pxy[i][j];for(i=0;i<n;i++)//计算X的后验概率for(j=0;j<m;j++)px_y[i][j]=pxy[i][j]/py[j];printf("****1信源熵2条件熵3联合熵4交互熵****\n");printf("**********输入所需计算的熵值********\n");scanf("%d",&z);while(1){ if(z==1){ float hx=0,hy=0;for(i=0;i<n;i++)//求信源熵hx=hx-px[i]*(log(px[i])/log(2));for(j=0;j<m;j++)hy=hy-py[j]*(log(py[j])/log(2));printf("信源熵hx=%f",hx);//输出各个所求printf("\n信源熵hy=%f",hy);}else if(z==2){ float hx_y=0,hy_x=0;for(i=0;i<n;i++)//求条件熵for(j=0;j<m;j++)hy_x+=-(pxy[i][j]*log(py_x[j][i])/log(2));for(i=0;i<n;i++)for(j=0;j<m;j++)hx_y+=-(pxy[i][j]*log(px_y[i][j])/log(2));printf("\n条件熵hx_y=%f",hx_y);printf("\n条件熵hy_x=%f",hy_x);}else if(z==3){ float hxy=0;for(i=0;i<2;i++)//求联合熵for(j=0;j<2;j++)hxy+=-(pxy[i][j]*log(pxy[i][j])/log(2));printf("\n联合熵hxy=%f",hxy);}else if(z==4){ float Ix_y=0,Iy_x=0;float hx=0,hy=0;float hx_y=0,hy_x=0;for(i=0;i<n;i++)//求信源熵hx=hx-px[i]*(log(px[i])/log(2));for(j=0;j<m;j++)hy=hy-py[j]*(log(py[j])/log(2));for(i=0;i<n;i++)//求条件熵for(j=0;j<m;j++)hy_x+=-(pxy[i][j]*log(py_x[j][i])/log(2));for(i=0;i<n;i++)for(j=0;j<m;j++)hx_y+=-(pxy[i][j]*log(px_y[i][j])/log(2));Ix_y=hx-hx_y;Iy_x=hy-hy_x;//交互熵printf("\n交互熵Ix_y=%f",Ix_y);printf("\n交互熵Iy_x=%f\n",Iy_x);}else if(z<1||z>4){ printf("输入错误,请输入1到4之间的数\n");}printf("\n****1信源熵2条件熵3联合熵4交互熵****\n");printf("**********输入所需计算的熵值********\n");scanf("%d",&z);}}#include<stdio.h>#include<math.h>void main(){int n,i,j;float t;float a[10];//符号概率;float b[10];//累加概率;float c[10];//-log(a[i]);int d[10];//码字长度;int m[10][10];//存码字;printf("请输入消息符号个数:");scanf("%d",&n);printf("\n");printf("请输入各个消息符号所对应的概率:\n"); for(i=0;i<n;i++){scanf("%f",&a[i]);}printf("\n");/*排序*/for(j=0;j<n;j++)for(i=0;i<n-j;i++)if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("按概率从大到小排序后为:\n");for(i=0;i<n;i++)printf("%f ",a[i]);printf("\n");printf("\n");/*求累加概率*/for(i=0;i<n-1;i++){b[i+1]=a[i]+b[i];}printf("累加概率为:");for(i=0;i<n;i++)printf("%f ",b[i]);printf("\n");printf("\n");/*求概率的对数*/for(i=0;i<n;i++){c[i]=(float) (-1)*log((float) a[i])/log((float)2);}printf("I(a[i])为:");for(i=0;i<n;i++)printf("%f ",c[i]);printf("\n\n");/*求码字长度*/for(i=0;i<n;i++){if((int)c[i]==c[i]){d[i]=(int)c[i];}if((int)c[i]!=c[i])d[i]=(int)c[i]+1;}printf("码字长度分别为:");for(i=0;i<n;i++)printf("%d ",d[i]);printf("\n\n");/*求码字*/printf("码字为:\n");for(i=0;i<n;i++){for(j=0;j<d[i];j++){b[i]=b[i]*2;m[i][j]=(int)(b[i]);if(m[i][j]==1)b[i]=b[i]-1;printf("%d",m[i][j]);}printf(" ");}printf("\n");}。

  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 ==∑
接下来对上题应用代码验证结果:
由代码结果与计算结果相一致,所以该程序可行。

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

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

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

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

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

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

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

相关文档
最新文档