香农编码--信息论大作业
答案~信息论与编码练习
1、有一个二元对称信道,其信道矩阵如下图所示。
设该信道以1500个二元符号/秒的速度传输输入符号。
现有一消息序列共有14000个二元符号,并设在这消息中P(0)=P(1)=1/2。
问从信息传输的角度来考虑,10秒钟内能否将这消息序列无失真地传送完?解答:消息是一个二元序列,且为等概率分布,即P(0)=P(1)=1/2,故信源的熵为H(X)=1(bit/symbol)。
则该消息序列含有的信息量=14000(bit/symbol)。
下面计算该二元对称信道能传输的最大的信息传输速率: 信道传递矩阵为:信道容量(最大信息传输率)为:C=1-H(P)=1-H(0.98)≈0.8586bit/symbol得最大信息传输速率为:Rt ≈1500符号/秒× 0.8586比特/符号 ≈1287.9比特/秒 ≈1.288×103比特/秒此信道10秒钟内能无失真传输得最大信息量=10× Rt ≈ 1.288×104比特 可见,此信道10秒内能无失真传输得最大信息量小于这消息序列所含有的信息量,故从信息传输的角度来考虑,不可能在10秒钟内将这消息无失真的传送完。
2、若已知信道输入分布为等概率分布,且有如下两个信道,其转移概率矩阵分别为:试求这两个信道的信道容量,并问这两个信道是否有噪声?1100.980.020.020.98P ⎡⎤=⎢⎥⎣⎦111122221111222212111122221111222200000000000000000000000000000000P P ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦11222211122222log 4(00)1/()log 42/log 8(000000)2/(),H bit symbol H X bit symbol C C H bit symbol H X C =-===>=-==1解答:(1)由信道1的信道矩阵可知为对称信道故C 有熵损失,有噪声。
信息论与编码试题与答案
1、平均自信息为表示信源的平均不确定度,也表示平均每个信源消息所提供的信息量。
平均互信息表示从Y获得的关于每个X的平均信息量,也表示发X前后Y的平均不确定性减少的量,还表示通信前后整个系统不确定性减少的量。
2、最大离散熵定理为:离散无记忆信源,等概率分布时熵最大。
3、最大熵值为。
4、通信系统模型如下:5、香农公式为为保证足够大的信道容量,可采用(1)用频带换信噪比;(2)用信噪比换频带。
6、只要,当N足够长时,一定存在一种无失真编码。
7、当R<C时,只要码长足够长,一定能找到一种编码方法和译码规则,使译码错误概率无穷小。
8、在认识论层次上研究信息的时候,必须同时考虑到形式、含义和效用三个方面的因素。
9、1948年,美国数学家香农发表了题为“通信的数学理论”的长篇论文,从而创立了信息论。
按照信息的性质,可以把信息分成语法信息、语义信息和语用信息。
按照信息的地位,可以把信息分成客观信息和主观信息。
人们研究信息论的目的是为了高效、可靠、安全地交换和利用各种各样的信息。
信息的可度量性是建立信息论的基础。
统计度量是信息度量最常用的方法。
熵是香农信息论最基本最重要的概念。
事物的不确定度是用时间统计发生概率的对数来描述的。
10、单符号离散信源一般用随机变量描述,而多符号离散信源一般用随机矢量描述。
11、一个随机事件发生某一结果后所带来的信息量称为自信息量,定义为其发生概率对数的负值。
12、自信息量的单位一般有 比特、奈特和哈特 。
13、必然事件的自信息是 0 。
14、不可能事件的自信息量是 ∞ 。
15、两个相互独立的随机变量的联合自信息量等于 两个自信息量之和 。
16、数据处理定理:当消息经过多级处理后,随着处理器数目的增多,输入消息与输出消息之间的平均互信息量 趋于变小 。
17、离散平稳无记忆信源X 的N 次扩展信源的熵等于离散信源X 的熵的 N 倍 。
18、离散平稳有记忆信源的极限熵,=∞H )/(lim 121-∞→N N N X X X X H 。
香农编码--信息论大作业
信息论与编码课程大作业题目:香农编码学生姓名:******学号:&**********专业班级:*******************2013 年 5 月10 日香农编码1.香农编码的原理/步骤香农第一定理指出了平均码长与信源之间的关系,同时也指出了可以通过编码使平均码长达到极限值,这是一个很重要的极限定理。
如何构造这种码?香农第一定理指出,选择每个码字的长度K i将满足式I(x i)≤K i<I p(x i)+1就可以得到这种码。
这种编码方法就是香农编码。
香农编码步骤如下:(1)将信源消息符按从大到小的顺序排列。
(2)计算p[i]累加概率;(3)确定满足自身要求的整数码长;(4)将累加概率变为二进制数;(5)取P[i]二进制数的小数点后Ki位即为该消息符号的二进制码字。
2. 用C语言实现#include <stdio.h>#include <math.h>#include <stdlib.h>#define max_CL 10 /*maxsize of length of code*/#define max_PN 6 /*输入序列的个数*/typedef float datatype;typedef struct SHNODE {datatype pb; /*第i个消息符号出现的概率*/datatype p_sum; /*第i个消息符号累加概率*/int kl; /*第i个消息符号对应的码长*/int code[max_CL]; /*第i个消息符号的码字*/struct SHNODE *next;}shnolist;datatype sym_arry[max_PN]; /*序列的概率*/void pb_scan(); /*得到序列概率*/void pb_sort(); /*序列概率排序*/void valuelist(shnolist *L); /*计算累加概率,码长,码字*/void codedisp(shnolist *L);void pb_scan(){int i;datatype sum=0;printf("input %d possible!\n",max_PN);for(i=0;i<max_PN;i++){ printf(">>");scanf("%f",&sym_arry[i]);sum=sum+sym_arry[i];}/*判断序列的概率之和是否等于1,在实现这块模块时,scanf()对float数的缺陷,故只要满足0.99<sum<1.0001出现的误差是允许的*/if(sum>1.0001||sum<0.99){ printf("sum=%f,sum must (<0.999<sum<1.0001)",sum);pb_scan();}}/*选择法排序*/void pb_sort(){int i,j,pos;datatype max;for(i=0;i<max_PN-1;i++){max=sym_arry[i];pos=i;for(j=i+1;j<max_PN;j++)if(sym_arry[j]>max){max=sym_arry[j];pos=j;}sym_arry[pos]=sym_arry[i];sym_arry[i]=max;}}void codedisp(shnolist *L){int i,j;shnolist *p;datatype hx=0,KL=0; /*hx存放序列的熵的结果,KL存放序列编码后的平均码字的结果*/p=L->next;printf("num\tgailv\tsum\t-lb(p(ai))\tlenth\tcode\n");printf("\n");for(i=0;i<max_PN;i++){printf("a%d\t%1.3f\t%1.3f\t%f\t%d\t",i,p->pb,p->p_sum,-3.332*log10(p->pb),p ->kl);j=0;for(j=0;j<p->kl;j++)printf("%d",p->code[j]);printf("\n");hx=hx-p->pb*3.332*log10(p->pb); /*计算消息序列的熵*/KL=KL+p->kl*p->pb; /*计算平均码字*/p=p->next;}printf("H(x)=%f\tKL=%f\nR=%fbit/code",hx,KL,hx/KL); /*计算编码效率*/ }shnolist *setnull(){ shnolist *head;head=(shnolist *)malloc(sizeof(shnolist));head->next=NULL;return(head);}shnolist *my_creat(datatype a[],int n){shnolist *head,*p,*r;int i;head=setnull();r=head;for(i=0;i<n;i++){ p=(shnolist *)malloc(sizeof(shnolist));p->pb=a[i];p->next=NULL;r->next=p;r=p;}return(head);}void valuelist(shnolist *L){shnolist *head,*p;int j=0;int i;datatype temp,s;head=L;p=head->next;temp=0;while(j<max_PN){p->p_sum=temp;temp=temp+p->pb;p->kl=-3.322*log10(p->pb)+1;/*编码,*/{s=p->p_sum;for(i=0;i<p->kl;i++)p->code[i]=0;for(i=0;i<p->kl;i++){p->code[i]=2*s;if(2*s>=1)s=2*s-1;else if(2*s==0)break;else s=2*s;}}j++;p=p->next;}}int main(void){shnolist *head;pb_scan();pb_sort();head=my_creat(sym_arry,max_PN); valuelist(head);codedisp(head);}3.运行结果及分析(本程序先定义了码字长度的最大值和信源概率的个数,然后有设定了概率的和的范围。
信息论与编码实验报告-Shannon编码
实验报告课程名称:信息论与编码姓名:系:专业:年级:学号:指导教师:职称:年月日实验三 Shannon 编码一、实验目的1、熟悉离散信源的特点;2、学习仿真离散信源的方法3、学习离散信源平均信息量的计算方法4、熟悉 Matlab 编程二、实验原理给定某个信源符号的概率分布,通过以下的步骤进行香农编码 1、信源符号按概率从大到小排列;12.......n p p p ≥≥≥2、确定满足下列不等式的整数码长i K 为()()1i i i lb p K lb p -≤<-+3、为了编成唯一可译码,计算第i 个消息的累加概率:4、将累加概率i P 变换成二进制数;5、取i P 二进制数的小数点后i K 位即为该消息符号的二进制码字。
三、实验内容1、写出计算自信息量的Matlab 程序2、写出计算离散信源平均信息量的Matlab 程序。
3、将程序在计算机上仿真实现,验证程序的正确性并完成习题。
四、实验环境Microsoft Windows 7 Matlab 6.5五、编码程序计算如下信源进行香农编码,并计算编码效率:⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡01.01.015.017.018.019.02.06543210a a a a a a a P X MATLAB 程序:(1) a=[0.2 0.18 0.19 0.15 0.17 0.1 0.01]; k=length(a);y=0; for i=1:k-111()i i k k P p a -==∑for n=i+1:kif (a(i)<a(n))t=a(i);a(i)=a(n);a(n)=t;endendends=zeros(k,1);b=zeros(k,1);for m=1:ks(m)=y;y=y+a(m);b(m)=ceil(-log2(a(m)));z=zeros(b(m),1);x=s(m);p=b2d10(x);for r=1:b(m)z(r)=p(r);enddisp('Êä³ö½á¹ûΪ£º')disp('³öʸÅÂÊ'),disp(a(m))disp('ÇóºÍ½á¹û'),disp(s(m))disp('±àÂëλÊý'),disp(b(m))disp('×îÖÕ±àÂë'),disp(z')end(2) function y=b2d10(x)for i=1:8temp=x.*2;if(temp<1)y(i)=0;x=temp;elsex=temp-1;y(i)=1;endend(3) p=[0.2 0.19 0.18 0.17 0.15 0.1 0.01]; sum=0;sum1=0;for i=1:7a(i)=-log2(p(i));K(i)=ceil(a(i));R(i)=p(i)*K(i);sum=sum+R(i);c(i)=a(i)*p(i);sum1=sum1+c(i);endK1=sum;H=sum1;Y=H/K1;disp('ƽ¾ùÐÅÏ¢Á¿'),disp(H)disp('ƽ¾ùÂ볤'),disp(K1)disp('±àÂëЧÂÊ'),disp(Y)六、实验结果输出结果为:出事概率0.2000,求和结果0,编码位数3,最终编码000出事概率0.1900,求和结果0.2000,编码位数3,最终编码001出事概率0.1800,求和结果0.3900,编码位数3,最终编码011出事概率0.1700,求和结果0.5700,编码位数3,最终编码100出事概率0.1500,求和结果0.7400,编码位数3,最终编码101出事概率0.1000,求和结果0.8900,编码位数4,最终编码1110出事概率0.0100,求和结果0.9900,编码位数7,最终编码1111110编码效率:平均信息量2.6087平均码长3.1400编码效率0.8308七、实验总结通过本次的实验,掌握了Shannon编码的实验原理以及编码过程。
信息论与编码试卷及答案
一、(11’)填空题(1)1948年,美国数学家香农发表了题为“通信的数学理论”的长篇论文,从而创立了信息论.(2)必然事件的自信息是0 。
(3)离散平稳无记忆信源X的N次扩展信源的熵等于离散信源X的熵的N倍。
(4)对于离散无记忆信源,当信源熵有最大值时,满足条件为__信源符号等概分布_。
(5)若一离散无记忆信源的信源熵H(X)等于2。
5,对信源进行等长的无失真二进制编码,则编码长度至少为 3 。
(6)对于香农编码、费诺编码和霍夫曼编码,编码方法惟一的是香农编码。
(7)已知某线性分组码的最小汉明距离为3,那么这组码最多能检测出_2_______个码元错误,最多能纠正___1__个码元错误。
(8)设有一离散无记忆平稳信道,其信道容量为C,只要待传送的信息传输率R__小于___C(大于、小于或者等于),则存在一种编码,当输入序列长度n足够大,使译码错误概率任意小。
(9)平均错误概率不仅与信道本身的统计特性有关,还与___译码规则____________和___编码方法___有关三、(5')居住在某地区的女孩中有25%是大学生,在女大学生中有75%是身高1。
6米以上的,而女孩中身高1。
6米以上的占总数的一半。
假如我们得知“身高1。
6米以上的某女孩是大学生”的消息,问获得多少信息量?解:设A表示“大学生"这一事件,B表示“身高1.60以上”这一事件,则P(A)=0。
25 p(B)=0。
5 p(B|A)=0.75 (2分)故 p(A|B)=p(AB)/p(B)=p(A)p(B|A)/p(B)=0.75*0。
25/0.5=0.375 (2分)I(A|B)=—log0.375=1。
42bit (1分)四、(5')证明:平均互信息量同信息熵之间满足I(X;Y)=H(X)+H(Y)—H(XY)证明:()()()()()()()()()()Y X H X H y x p y x p x p y x p x p y x p y x p Y X I X X Y j i j i Y i j i XYi j i j i -=⎥⎦⎤⎢⎣⎡---==∑∑∑∑∑∑log log log; (2分)同理()()()X Y H Y H Y X I -=; (1分) 则()()()Y X I Y H X Y H ;-= 因为()()()X Y H X H XY H += (1分) 故()()()()Y X I Y H X H XY H ;-+=即()()()()XY H Y H X H Y X I -+=; (1分)五、(18’)。
信息论与编码大作业
二
当前信息论发展日新月异,目前,世界正在谈论三种前沿科学,即生命科学、材料科学和信息科学。信息论是信息科学的理论基础,现在的人们虽然不通晓信息论,但是,在日常生活中的谈话、书信、报纸、书籍、电影、电话、电报、电视、电子计算机……都是信息传输和处理的方式。随着信息革命和信息科学的发展,信息技术(指通信、计算机和控制)的研究和使用,信息论研究范畴远远超出了通信及类似的学科,从一般认为“信息论即通信理论”的认识延伸到像生物学、生理学、人类学、物理学、化学、电子学、语言学、经济学和管理学等学科。人类社会正在走向一个以充分发挥人的创造力和创新精神,以智能、知识为核心的高度发展的信息社会。
左分支表示字符'0',右分支表示字符'1',则可以根结点到叶结点的路径上分支字符组成的串作为该叶结点的字符编码。因此可得到字符A、B、C、D的二进制前缀编码分别:0、10、110、111。假设每种字符在电文中出现的次数为Wi,编码长度为Li,电文中有n种字符,则电文编码总长为∑WiLi。若将此对应到二叉树上,Wi为叶结点的权,Li为根结点到叶结点的路径长度。那么,∑WiLi恰好为二叉树上带权路径长度。因此,设计电文总长最短的二进制前缀编码,就是以n种字符出现的频率作权,构造一棵霍夫曼树,此构造过程称为霍夫曼编码。
信息论部分习题及解答
2-1 同时掷两个正常的骰子,也就是各面呈现的概率都是1/6,求: (1)“3和5同时出现” 这事件的自信息量。
(2)“两个1同时出现” 这事件的自信息量。
(3)两个点数的各种组合(无序对)的熵或平均信息量。
(4)两个点数之和(即2,3,…,12构成的子集)的熵。
(5)两个点数中至少有一个是1的自信息。
解:(1)设X 为‘3和5同时出现’这一事件,则P (X )=1/18,因此 17.418log)(log)(22==-=x p X I (比特)(2)设‘两个1同时出现’这一事件为X ,则P (X )=1/36,因此 17.536log)(log)(22==-=x p X I (比特)(3 ) “两个相同点数出现”这一事件的概率为1/36,其他事件的概率为1/18,则 337.418log181536log366)(22=+=X H (比特/组合)(4)222222111111()[log 36log 18()log 12()log 936181836181811136111()log ]2()log 6 3.44(/)1818365181818H X =++++++++⨯+++=比特两个点数之和(5)两个点数至少有一个为1的概率为P (X )= 11/36 71.13611log)(2=-=X I (比特)2-6设有一离散无记忆信源,其概率空间为⎪⎪⎭⎫⎝⎛=====⎪⎪⎭⎫⎝⎛8/134/124/118/304321x x x x PX该信源发出的信息符号序列为(202 120 130 213 001 203 210 110 321 010 021 032 011 223 210),求:(1) 此信息的自信息量是多少?(2) 在此信息中平均每个符号携带的信息量是多少? 解:(1)由无记忆性,可得序列)(比特/18.87)3(6)2(12)1(13)0(14=+++=I I I I(2)符号)(比特/91.145/==I H 2-9在一个袋中放有5个黑球、10个白球,以摸一个球为一次实验,摸出的球不再放进去。
《信息论与编码》第三章部分习题参考答案
第三章习题参考答案第三章习题参考答案3-1解:(1)判断唯一可译码的方法:①先用克劳夫特不等式判定是否满足该不等式;②若满足再利用码树,看码字是否都位于叶子结点上。
如果在叶节点上则一定是唯一可译码,如果不在叶节点上则只能用唯一可译码的定义来判断是不是。
可译码的定义来判断是不是。
其中C1,C2,C3,C6都是唯一可译码。
都是唯一可译码。
对于码C2和C4都满足craft 不等式。
但是不满足码树的条件。
但是不满足码树的条件。
就只能就只能举例来判断。
举例来判断。
对C5:61319225218ki i ---==+´=>å,不满足该不等式。
所以C5不是唯一可译码。
译码。
(2)判断即时码方法:定义:即时码接收端收到一个完整的码字后,就能立即译码。
特点:码集任何一个码不能是其他码的前缀,即时码必定是唯一可译码, 唯一可译码不一定是即时码。
唯一可译码不一定是即时码。
其中C1,C3,C6都是即时码。
都是即时码。
对C2:“0”是“01”的前缀,……,所以C2不是即时码。
不是即时码。
(1) 由平均码长61()i i i K p x k ==å得1236 3 1111712(3456) 241681111712(3456) 2416811152334 24162K bitK bit K bitK bit==´+´+´+++==´+´+´+++==´+´+´´=62111223366()()log () 2 /()266.7%3()294.1%178()294.1%178()280.0%52i i i H U p u p u H U K H U K H U K H U K h h h h ==-=============å比特符号3-7解:(1)信源消息的概率分布呈等比级数,按香农编码方法,其码长集合为自然数数列1, 2, 3, ···, i, ·, i, ····;对应的编码分别为:0, 10, 110, ···, 111…110 ( i 110 ( i –– 1个1), ·1), ····。
信息论实验报告香农编码
目录实验目的: (2)实验要求: (2)程序算法: (2)程序运行结果: (4)程序操作步骤: (5)试验中遇到的困难及解决方法: (5)实验心得及体会: (5)实验目的:1.进一步熟悉使用C++编程语言及软件。
2.进一步认识shannon编码过程,并能在学习中灵活运用。
实验要求:要求:(a) 允许使用的编程语言:C、C++、Basic、Pascal、Fortran、Java、Perl、Tk/Tcl(b) 输入:信源符号个数q、信源符号s0,...,sq−1,信源概率分布p0,...,pq−1。
(c) 输出:信源符号与码字的对应关系表(编码表)。
(d) 源程序格式整齐清晰,注释简单明了。
程序算法:(a) 将q 个信源符号按其概率的递减次序排列:p(s0) > p(s1) > ... > p(sq−1)(b) 计算出各个信源符号的累加概率:(c) 按下式计算第i 个消息的二元代码组的码长li:(d) 将累加概率F(si)(十进制小数)变换成二进制小数。
根据码长li 取小数点后li 个二进制符号作为第i 个消息的码字。
程序代码:#include <iostream>#include <math.h>using namespace std;void InsertSort(double r[],char m[] ,int n)//直接插入排序算法按照概率从大到小排列符号和相应概率{for(int i=1;i<n;i++){r[n]=r[i]; //设置哨兵m[n]=m[i]; //设置哨兵for(int j=i-1;(r[n]>r[j])&&(j>=0);j--)//寻找插入位置{r[j+1]=r[j];//记录后移m[j+1]=m[j];//记录后移}r[j+1]=r[n];m[j+1]=m[n];}}void Leijia(double p[], int s)//将当前概率及之前概率相加{for(int r=1;r<s;r++)p[r]=p[r-1]+p[r];}void main(){int geshu,erjinzhi[100][100];int z=0,g=0;double gailv[100],L[100];char fuhao[100];cout<<"请输入需要编码的字符个数(小于100)"<<endl; cin>>geshu;cout<<"请按照先后顺序输入符号"<<endl;for(int i=0;i<geshu;i++)cin>>fuhao[i];cout<<"请输入各相应符号的概率"<<endl;for(int j=0;j<geshu;j++)cin>>gailv[j];InsertSort( gailv,fuhao, geshu);for(z=0;z<geshu;z++){L[z]=-log(gailv[z])/log(2);L[z]=ceil(L[z]);//向上取整求所需要的位数}Leijia( gailv, geshu);for( z=0;z<geshu;z++)//求相应的二进制编码{gailv[z]=gailv[z]-floor(gailv[z]);for( g=0;g<L[z];g++){if((gailv[z]*2)>=1){erjinzhi[z][g]=1;gailv[z]=(gailv[z]*2)-1;}else{erjinzhi[z][g]=0;gailv[z]=gailv[z]*2;}}}cout<<"各信源符号及相应码字分别为"<<endl; for(z=0;z<geshu;z++){cout<<fuhao[z]<<'\t';for( g=0;g<L[z];g++)cout<< erjinzhi[z][g];cout<<endl;}}程序运行结果:程序操作步骤:1.按照提示输入所要编码的符号个数并回车2.按顺序输入要求个数的符号并回车3.按顺序输入各符号相应的概率并回车4.即可得到各符号相应的shannon编码试验中遇到的困难及解决方法:本次试验相对而言比较简单,但由于长时间没有联系C++语言有些生疏。
香农编码计算简单例题
香农编码计算简单例题香农编码是一种无损数据压缩算法,它通过为出现频率较高的符号分配较短的编码,而为出现频率较低的符号分配较长的编码,从而实现对数据进行压缩。
下面我将给出一个简单的例题来说明香农编码的计算过程。
假设我们有一个消息,由以下5个符号组成,A、B、C、D、E。
它们的出现频率分别是,A(0.4)、B(0.3)、C(0.2)、D(0.08)、E(0.02)。
首先,我们需要按照出现频率从高到低对符号进行排序:1. A(0.4)。
2. B(0.3)。
3. C(0.2)。
4. D(0.08)。
5. E(0.02)。
然后,我们为每个符号分配一个二进制编码。
编码的长度取决于符号的出现频率,频率越高,编码越短。
接下来,我们按照以下步骤计算香农编码:1. 将频率最高的符号A分配一个初始编码0。
2. 计算下一个符号B的编码。
由于A的编码长度为1,我们将B的编码设置为A的编码加上1,即编码为10。
3. 接着计算符号C的编码。
C的频率为0.2,小于A和B的频率之和(0.4+0.3=0.7),所以C的编码长度应为2。
C的编码为B的编码加上1,即编码为11。
4. 然后计算符号D的编码。
D的频率为0.08,小于A、B和C的频率之和(0.4+0.3+0.2=0.9),所以D的编码长度应为3。
D的编码为C的编码加上1,即编码为111。
5. 最后计算符号E的编码。
E的频率为0.02,小于A、B、C和D的频率之和(0.4+0.3+0.2+0.08=0.98),所以E的编码长度应为3。
E的编码为D的编码加上1,即编码为1111。
最终,我们得到了每个符号的香农编码:A: 0。
B: 10。
C: 11。
D: 111。
E: 1111。
这样,我们就完成了对给定消息的香农编码计算。
需要注意的是,香农编码是一种理想情况下的编码方案,它假设消息中的符号是独立且符合特定的概率分布。
在实际应用中,可能会存在一些特殊情况需要进行调整。
此外,为了保证解码的正确性,编码和解码的过程需要进行同步。
信息论编码作业
2.1 同时掷出两个正常的骰子,也就是各面呈现的概率都为1/6,求: (1) “3和5同时出现”这事件的自信息; (2) “两个1同时出现”这事件的自信息; (3) 两个点数中至少有一个是1的自信息量。
2.2 居住某地区的女孩子有25%是大学生,在女大学生中有75%是身高160厘米以上的,而女孩子中身高160厘米以上的占总数的一半。
假如我们得知“身高160厘米以上的某女孩是大学生”的消息,问获得多少信息量?2.3 掷两颗骰子,当其向上的面的小圆点之和是3时,该消息包含的信息量是多少?当小圆点之和是7时,该消息所包含的信息量又是多少?2.4 从大量统计资料知道,男性中红绿色盲的发病率为7%,女性发病率为0.5%,如果你问一位男士:“你是否是色盲?”他的回答可能是“是”,可能是“否”,问这两个回答中各含多少信息量,平均每个回答中含有多少信息量?如果问一位女士,则答案中含有的平均自信息量是多少?2.5黑白气象传真图的消息只有黑色和白色两种,即信源X ={黑,白}。
设黑色出现的概率为P(黑) = 0.3,白色出现的概率为P(白) = 0.7。
假设图上黑白消息出现前后没有关联,求熵H(X);2.6 有两个随机变量X 和Y ,其和为Z = X + Y (一般加法),若X 和Y 相互独立,求证:H(X) ≤ H(Z), H(Y) ≤ H(Z)。
2.7 消息源以概率123451/2,1/4,1/8,1/16,1/16,P P P P P =====发送5种消息符号12345,,,,m m m m m 。
(1) 若每个消息符号出现是独立的,求每个消息符号的信息量。
(2) 求该符号集的平均信息量。
2.8 设离散无记忆信源⎭⎬⎫⎩⎨⎧=====⎥⎦⎤⎢⎣⎡8/14/1324/18/310)(4321x x x x X P X ,其发出的信息为(202120130213001203210110321010021032011223210),求 (1) 此消息的自信息量是多少?(2) 此消息中平均每符号携带的信息量是多少?2.9 汉字电报中每位十进制数字代码的出现概率如题9表所示,求该离散信源的熵。
信息论编码作业
2.1 同时掷出两个正常的骰子,也就是各面呈现的概率都为1/6,求: (1) “3和5同时出现”这事件的自信息; (2) “两个1同时出现”这事件的自信息; (3) 两个点数中至少有一个是1的自信息量。
2.2 居住某地区的女孩子有25%是大学生,在女大学生中有75%是身高160厘米以上的,而女孩子中身高160厘米以上的占总数的一半。
假如我们得知“身高160厘米以上的某女孩是大学生”的消息,问获得多少信息量?2.3 掷两颗骰子,当其向上的面的小圆点之和是3时,该消息包含的信息量是多少?当小圆点之和是7时,该消息所包含的信息量又是多少?2.4 从大量统计资料知道,男性中红绿色盲的发病率为7%,女性发病率为0.5%,如果你问一位男士:“你是否是色盲?”他的回答可能是“是”,可能是“否”,问这两个回答中各含多少信息量,平均每个回答中含有多少信息量?如果问一位女士,则答案中含有的平均自信息量是多少?2.5黑白气象传真图的消息只有黑色和白色两种,即信源X ={黑,白}。
设黑色出现的概率为P(黑) = 0.3,白色出现的概率为P(白) = 0.7。
假设图上黑白消息出现前后没有关联,求熵H(X);2.6 有两个随机变量X 和Y ,其和为Z = X + Y (一般加法),若X 和Y 相互独立,求证:H(X) ≤ H(Z), H(Y) ≤ H(Z)。
2.7 消息源以概率123451/2,1/4,1/8,1/16,1/16,P P P P P =====发送5种消息符号12345,,,,m m m m m 。
(1) 若每个消息符号出现是独立的,求每个消息符号的信息量。
(2) 求该符号集的平均信息量。
2.8 设离散无记忆信源⎭⎬⎫⎩⎨⎧=====⎥⎦⎤⎢⎣⎡8/14/1324/18/310)(4321x x x x X P X ,其发出的信息为(202120130213001203210110321010021032011223210),求 (1) 此消息的自信息量是多少?(2) 此消息中平均每符号携带的信息量是多少?2.9 汉字电报中每位十进制数字代码的出现概率如题9表所示,求该离散信源的熵。
信息论课程实验报告—Shannon编码
: 六、实验器材(设备、元器件) 实验器材(设备、元器件)
PC 机一台,装有 VC++6.0 或其它 C 语言集成开发环境。
七、实验步骤及操作: 实验步骤及操作:
1)排序; 2)计算码长; 3)递归调用香农算法得到相应的码字。
八、实验数据及结果分析: 实验数据及结果分析:
s 2 s3 s4 s5 s6 s 7 s8 S s1 题目:已知信源: = ,给出其一个 P 0.20, 0.18, 0.17, 0.15, 0.15, 0.05, 0.05, 0.05 香农码,并求其平均码长和编码效率。
else k[i]=temp+1; } } void code(int *k,double *pa,string *str,int n) { for(int i=0;i<n;i++) { double s=pa[i]; for(int j=0;j<k[i];j++) { s=2*s; if(s>=1) { str[i]+="1"; s=s-1; } else str[i]+="0"; } } } void main() { int n; cout<<"信源符号个数 n= "; cin>>n; double *p=new double[n]; cout<<"信源符号的概率依次为(以回车表示概率的结束): "; for(int i=0;i<n;i++) { cin>>p[i]; } bubble(p,n); double *pa=new double[n]; leijia(p,pa,n); int *k=new int[n]; length(p,k,n); string *str=new string[n]; code(k,pa,str,n); cout<<setw(10)<<"pa(i)"<<setw(10)<<"Pa(a,j)"<<setw(10)<<"Ki"<<setw(10)<<"码字"<<endl; for(i=0;i<n;i++) { cout<<setw(10)<<p[i]<<setw(10)<<pa[i]<<setw(10)<<k[i]<<setw(10)<<str[i]<<endl; } }
信息论编码实验四香农编码(可打印修改)
事也掌握香农编码的一般算法和香农编码算法中的二进制编码算法。 一开始做实验的时候,如果任意给定一个信源模型,要求编程实现其二进制香农编码,
输出编码结果对我而言有很大的难度,但是通过这次的实验,这些操作对我而言驾轻就熟 不在话下了。这次实验让我学到了很多,很有意义。
Hale Waihona Puke D(:,1)=y';%把 y 赋给零矩阵的第一列 for i=2:n
D(1,2)=0;%令第一行第二列的元素为 0 D(i,2)=D(i-1,1)+D(i-1,2);%第二列其余的元素用此式求得,即为累加概率 end for i=1:n D(i,3)=-log2(D(i,1));%求第三列的元素 D(i,4)=ceil(D(i,3));%求第四列的元素,对 D(i,3)向无穷方向取最小正整数 end D A=D(:,2)';%取出 D 中第二列元素 B=D(:,4)';%取出 D 中第四列元素 for j=1:n C=deczbin(A(j),B(j))%生成码字 function [C]=deczbin(A,B)%对累加概率求二进制的函数 C=zeros(1,B);%生成零矩阵用于存储生成的二进制数,对二进制的每一位进行操作 temp=A;%temp 赋初值 for i=1:B%累加概率转化为二进制,循环求二进制的每一位,A 控制生成二进制的位数 temp=temp*2; if temp>=1 temp=temp-1; C(1,i)=1; else C(1,i)=0; end end
实验四 香农编码
一、实验目的
1、理解香农编码的概念。 2、掌握香农编码的一般算法 3、掌握香农编码算法中的二进制编码算法。 4、任意给定一个信源模型,编程实现其二进制香农编码,输出编码结果。
信息论与编码课后作业
第三章3.8 证明长为N的D元不等长码至多有D(D N-1)/(D-1)个码字。
证:已知长为N的不等长码D元可得此不等长为D进制,最大长为N所以例:N=2,D=2 {0,1}推出 {0,1,00,01,10,11}……可知码字数量n=D+D2+……D N即为等比数列求和:n=a1(1−q n)1−q =D(1−Dn)1−D=D(Dn−1)D−13.12 信源符号消息X={x1,x2,…x M},信源熵H(X),若对该信源能找到一个平均码长为⎺n=H(X)/log3的三元即时码,证明对每个x i∈X,其概率满足p(x i)=3−n i,式中n i为整数。
证:由题意已知:信源熵H(x)和平均码长,三元即时码设每个信源符号信息x1,x2,x3…x M ,对应的概率q1,q2,q3,q MH(x)=-q1logq1-q2logq2-q3logq3…-q M logq M平均码长:⎺n=q1+2*q2+2*q3+3*q4+…又因为⎺n=H(x)/log3⎺nlog3=( q1+2*q2+2*q3+3*q4+…)log3=-log(1/3)*( q1+2*q2+2*q3+3*q4+…)H(x)=-log(q1q1*q2q2*q3q3*q4q4…)因为H(x)= nlog3 所以-log(q1q1*q2q2*q3q3*q4q4…)=-log13q1+2∗q2+2∗q3+3∗q4+⋯得到:q1=1/3,q2=(1/3)2 ,q3=(1/3)2, q4=(1/3)3…q M=(1/3)ni概率满足P(x i)=3−ni (ni∈Z)3.16 某一信源有M 个消息,并且每个消息等概分布,对该信源进行二元霍夫曼编码,问当M=2i 和M=2i +1(i 为正整数)时,每个码字的长度n i 等于多少?平均码长⎺n 又为多少?答:当M=2i 时,得到等长码,码长为i ; 当M=2i+1时,平均码长为 :⎺n=2i −12i +1*i+22i +1*(i+1)=i+22i +13.17 信源分布[xq(x)]=[x 1x 2x 3x 41/31/31/41/12],(1) 对该信源进行二元霍夫曼编码;(2)证明存在两个不同的最佳码长集合,即证明码长集合{1,2,3,4}和{2,2,2,2}都是最佳的。
信息论编码作业
信息论编码一.信息论的认识1.消息是信息的载荷者。
信息是抽象的,消息是具体的。
要研究信息,还得从研究消息入手。
2.由于信源发送什么消息预先是不可知的,只能用概率空间来描述信源3.单符号信源:输出是单个符号(代码)的消息⏹ 离散信源 ⏹ 连续信源4.平稳随机序列信源:信源输出的消息由一系列符号序列所组成,可用N 维随机矢量 X =(X1,X2,…,XN)描述,且随机矢量X 的各维概率分布都与时间起点无关----平稳!⏹ 离散平稳信源 ⏹ 连续平稳信源⏹ 无记忆(独立)离散平稳信源 ⏹ 有记忆信源⏹ m 阶马尔可夫信源5.随机波形信源● 信息是信息论中最基本、最重要的概念,既抽象又复杂● 信息在日常生活中被认为是“消息”、“知识”、“情报”等● “信息”不同于消息(在现代信息论形成之前,信息一直被看作是通信中消息的同义词,没有严格的数学含义),消息是表现形式,信息是实质; ● “信息”不同于情报,情报的含义比“信息”窄的多,一般只限于特殊的领域,是一类特殊的信息;● 信息不同于信号,信号是承载消息的物理量;● 信息不同于知识,知识是人们根据某种目的,从自然界收集得来的数据中整理、概括、提取得到的有价值的信息,是一种高层次的信息。
6.互信息量 I(xi ; yj):收到消息yj 后获得关于xi 的信息量)()|(log )|(1log )(1log )/()();(i j i j i i j i x p y x p y x p x p y x I x I y x I =-=-=即:互信息量表示先验的不确定性减去尚存的不确定性,这就是收信者获得的信息量对于无干扰信道,I(xi ; yj) = I(xi);二.我们学到了1.离散信源熵和互信息定义具有概率为p(xi)的符号xi的自信息量为I(xi)=-logp(xi)信源输出的整体特征用平均自信息量,表示本身的特征用信源熵。
2.信道与信道容量信道分类:根据用户数量可分为单用户信道和多用户信道根据信道输入端和输出端的关系可分为无反馈信道和反馈信道。
信息论与编码基础--香浓三大定理
香农三大定理 简介
H(S) = H(3/4,1/4) = 0.811(bit/sign)
N=1
L1 = 1 (code/sign) H (S ) R1 = = 0.811 (bit/code) L1 H (S ) η1 = = 0.811 L1 ⋅ log 2
信息论与编码基础
例:二元DMS进行无失真编码
香农三大定理 简介
单词间隔 —————— 000000
{A,B,…,Z}
二进符号
信源编码器I
码符号集{点/划/字母间隔/单词间隔}
信源编码器II
码符号集{0,1}
信息论与编码基础
1、信源编码器 b、举例
3)中文电报信源编码器 “中”
“0022”
香农三大定理 简介
“01101 01101 11001 11001”
H ( S ) 1 LN H ( S ) + > ≥ log r N N log r
信息论与编码基础
香农三大定理 简介
2、香农第一定理(可变长无失真信源编码定理)
且当 N → ∞ 时有: lim
N →∞
LN H ( S ) = = H r (S) N log r
表述二:若R′>H(S),就存在惟一可译变长编码;若R′<H(S),
s1 S P( s) = 3 4 s2 1 4
香农三大定理 简介
H(S) = H(3/4,1/4) = 0.811(bit/sign)
{0,10,110,111}
N=2 L2 = 1.688 (code/2-sign) H (S ) R2 = = 0.961 (bit/code) L2 / 2 H (S ) η2 = = 0.961 L2 / 2 ⋅ log 2
信息论实验四香农编码
信息论实验四香农编码实验四香农编码1、实验目的:掌握香农编码的方法2、实验内容:对信源进行二进制香农编码。
并计算其平均码长,信源熵,和编码效率。
三、实验步骤(1)将信源符号按概率从大到小的顺序排列。
(2)用Pa(i)表示第i个码字的累加概率(3)确定满足下列不等式的整数K(i),并令K(i)为第i个码字的长度(4)将Pa(i)用二进制表示,并取小数点后K(i)位最为a(i)的编码四、实验数据及结果分析(1)将信源符号按概率从大到小的顺序排列。
0.25 0.2 0.15 0.1 0.05);(2)用Pa(i)表示第i个码字的累加概率。
0 0.2500 0.5000 0.7000 0.8500 0.9500)(3)确定满足下列不等式的整数K(i)。
2 3 3 4 5)(4)将Pa(i)用二进制表示,并取小数点后K(i)位最为a(i)的编码0001100101110111110(5)计算其平均码长,信源熵,和编码效率平均码长 L=2.7信源熵 H=2.4232编码效率 xiaolv=0.89749五、代码附录N=input('N='); %输入信源符号的个数s=0;L=0;H=0;Pa=zeros(1,6);for i=1:NP(i)=input('P=');%输入信源符号概率分布 s=s+P(i); endif s~=1error('不符合概率分布');endP=sort(P,'descend');Pa(1)=0;for i=2:NPa(i)=Pa(i-1)+P(i-1);enddisp(Pa);for i=1:Na=-log2(P(i));if mod(a,1)==0 %计算第i个码字的长度 K(i)=a; elseK(i)=fix(a+1);endL=L+P(i)*K(i); %计算平均码长H=H-P(i)*log2(P(i));%计算信源熵Endxiaolv=H/L; %计算编码效率for i=1:Nfor j=1:K(i)W(i,j)=fix(Pa(i)*2);Pa(i)=Pa(i)*2-fix(Pa(i)*2);fprintf('%d',W(i,j));endfprintf('\n');end6,实验总结:通过该实验,掌握了香农编码。
信息论与编码理论(最全试题集+带答案+各种题型)
答:抗干扰能力强,中继时可再生,可消除噪声累计;差错可控制,可改善通信质量;便于加密和使用DSP处理技术;可综合传输各种信息,传送模拟系统时,只要在发送端增加莫属转换器,在接收端增加数模转换器即可。
7.简述信息的性质。
答:存在普遍性;有序性;相对性;可度量性;可扩充性;可存储、传输与携带性;可压缩性;可替代性;可扩散性;可共享性;时效性;
A.形式、含义和安全性
B.形式、载体和安全性
C.形式、含义和效用
D.内容、载体和可靠性
20.(D)是香农信息论最基本最重要的概念
A.信源B.信息C.消息D.熵
三.简答(
1.通信系统模型如下:
2.信息和消息的概念有何区别?
答:消息有两个特点:一是能被通信双方所理解,二是能够互相传递。相对于消息而言,信息是指包含在消息中的对通信者有意义的那部分内容,所以消息是信息的载体,消息中可能包含信息。
31.简单通信系统的模型包含的四部分分别为信源、有扰信道、信宿、干扰源。
32. 的后验概率与先念概率的比值的对数为 对 的互信息量。
33.在信息论中,互信息量等于自信息量减去条件自信息量。
34.当X和Y相互独立时,互信息为0。
35.信源各个离散消息的自信息量的数学期望为信源的平均信息量,也称信息熵。
第一章
一、填空(
1.1948年,美国数学家香农发表了题为“通信的数学理论”的长篇论文,从而创立了信息论。
2.按照信息的性质,可以把信息分成语法信息、语义信息和语用信息。
3.按照信息的地位,可以把信息分成客观信息和主观信息。
4.人们研究信息论的目的是为了高效、可靠、安全地交换和利用各种各样的信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息论与编码课程大作业
题目:香农编码
学生姓名: ******
学号: &**********
专业班级: *******************
2013 年 5 月 10 日
香农编码
1.香农编码的原理/步骤
香农第一定理指出了平均码长与信源之间的关系,同时也指出了可以通过编码使平均码长达到极限值,这是一个很重要的极限定理。
如何构造这种码香农第一定理指出,
选择每个码字的长度K
i 将满足式 I(x
i
)≤K
i
<Ip(x
i
)+1就可以得到这种码。
这种编码方
法就是香农编码。
香农编码步骤如下:
(1)将信源消息符按从大到小的顺序排列。
(2)计算p[i]累加概率;
(3)确定满足自身要求的整数码长;
(4)将累加概率变为二进制数;
(5)取P[i]二进制数的小数点后Ki位即为该消息符号的二进制码字。
2. 用C语言实现
#include <>
#include <>
#include <>
#define max_CL 10 /*maxsize of length of code*/
#define max_PN 6 /*输入序列的个数*/
typedef float datatype;
typedef struct SHNODE {
datatype pb; /*第i个消息符号出现的概率*/
datatype p_sum; /*第i个消息符号累加概率*/
int kl; /*第i个消息符号对应的码长*/
int code[max_CL]; /*第i个消息符号的码字*/
struct SHNODE *next;
}shnolist;
datatype sym_arry[max_PN]; /*序列的概率*/
void pb_scan(); /*得到序列概率*/
void pb_sort(); /*序列概率排序*/
void valuelist(shnolist *L); /*计算累加概率,码长,码字*/ void codedisp(shnolist *L);
void pb_scan()
{
int i;
datatype sum=0;
printf("input %d possible!\n",max_PN);
for(i=0;i<max_PN;i++)
{ printf(">>");
scanf("%f",&sym_arry[i]);
sum=sum+sym_arry[i];
}
/*判断序列的概率之和是否等于1,在实现这块模块时,scanf()对float数的缺陷,故只要满足<sum<出现的误差是允许的*/
if(sum>||sum<
{ printf("sum=%f,sum must (<<sum<",sum);
pb_scan();
}
}
/*选择法排序*/
void pb_sort()
{
int i,j,pos;
datatype max;
for(i=0;i<max_PN-1;i++)
{
max=sym_arry[i];
pos=i;
for(j=i+1;j<max_PN;j++)
if(sym_arry[j]>max)
{
max=sym_arry[j];
pos=j;
}
sym_arry[pos]=sym_arry[i];
sym_arry[i]=max;
}
}
void codedisp(shnolist *L)
{
int i,j;
shnolist *p;
datatype hx=0,KL=0; /*hx存放序列的熵的结果,KL存放序列编码后的平均码字的结果*/
p=L->next;
printf("num\tgailv\tsum\t-lb(p(ai))\tlenth\tcode\n");
printf("\n");
for(i=0;i<max_PN;i++)
{
printf("a%d\t%\t%\t%f\t%d\t",i,p->pb,p->p_sum,*log10(p->pb),p->kl);
j=0;
for(j=0;j<p->kl;j++)
printf("%d",p->code[j]);
printf("\n");
hx=hx-p->pb**log10(p->pb); /*计算消息序列的熵*/
KL=KL+p->kl*p->pb; /*计算平均码字*/
p=p->next;
}
printf("H(x)=%f\tKL=%f\nR=%fbit/code",hx,KL,hx/KL); /*计算编码效率*/
}
shnolist *setnull()
{ shnolist *head;
head=(shnolist *)malloc(sizeof(shnolist)); head->next=NULL;
return(head);
}
shnolist *my_creat(datatype a[],int n)
{
shnolist *head,*p,*r;
int i;
head=setnull();
r=head;
for(i=0;i<n;i++)
{ p=(shnolist *)malloc(sizeof(shnolist)); p->pb=a[i];
p->next=NULL;
r->next=p;
r=p;
}
return(head);
}
void valuelist(shnolist *L)
{
shnolist *head,*p;
int j=0;
int i;
datatype temp,s;
head=L;
p=head->next;
temp=0;
while(j<max_PN)
{
p->p_sum=temp;
temp=temp+p->pb;
p->kl=*log10(p->pb)+1;
/*编码,*/
{
s=p->p_sum;
for(i=0;i<p->kl;i++)
p->code[i]=0;
for(i=0;i<p->kl;i++)
{
p->code[i]=2*s;
if(2*s>=1)
s=2*s-1;
else if(2*s==0)
break;
else s=2*s;
}
}
j++;
p=p->next;
}
}
int main(void)
{
shnolist *head;
pb_scan();
pb_sort();
head=my_creat(sym_arry,max_PN); valuelist(head);
codedisp(head);
}
3.运行结果及分析
(
本程序先定义了码字长度的最大值和信源概率的个数,然后有设定了概率的和的范围。
除此之外,程序采用多个函数求出每个概率的自信息量,采用结构化编程的思想将问题细分成多个模块,再利用数学方法求得累加概率对应的码字长度,在此基础上,
利用循环函数求得对应的码字长度。
这样就得到了所需的结果。
再利用循环依次表达出来即可。
4.心得体会
通过这次大作业,我觉得自己对C该好好学习了,还有一些基本知识,导致编写程序出现困难。
编码的原理虽然知道,但是操作出现困难。
对信息论的认识也得到加强和巩固。