香农编码--信息论大作业
香农编码--信息论大作业
信息论与编码课程大作业题目:香农编码学生姓名:******学号:&**********专业班级:*******************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编码的实验原理以及编码过程。
信息论与编码大作业
二
当前信息论发展日新月异,目前,世界正在谈论三种前沿科学,即生命科学、材料科学和信息科学。信息论是信息科学的理论基础,现在的人们虽然不通晓信息论,但是,在日常生活中的谈话、书信、报纸、书籍、电影、电话、电报、电视、电子计算机……都是信息传输和处理的方式。随着信息革命和信息科学的发展,信息技术(指通信、计算机和控制)的研究和使用,信息论研究范畴远远超出了通信及类似的学科,从一般认为“信息论即通信理论”的认识延伸到像生物学、生理学、人类学、物理学、化学、电子学、语言学、经济学和管理学等学科。人类社会正在走向一个以充分发挥人的创造力和创新精神,以智能、知识为核心的高度发展的信息社会。
左分支表示字符'0',右分支表示字符'1',则可以根结点到叶结点的路径上分支字符组成的串作为该叶结点的字符编码。因此可得到字符A、B、C、D的二进制前缀编码分别:0、10、110、111。假设每种字符在电文中出现的次数为Wi,编码长度为Li,电文中有n种字符,则电文编码总长为∑WiLi。若将此对应到二叉树上,Wi为叶结点的权,Li为根结点到叶结点的路径长度。那么,∑WiLi恰好为二叉树上带权路径长度。因此,设计电文总长最短的二进制前缀编码,就是以n种字符出现的频率作权,构造一棵霍夫曼树,此构造过程称为霍夫曼编码。
信息论与编码试卷及答案
一、(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)证明:(2分)同理(1分)则因为(1分)故即(1分)五、(18’)。
黑白气象传真图的消息只有黑色和白色两种,求:1)黑色出现的概率为0。
信息论霍夫曼、香农-费诺编码
信息论霍夫曼、香农-费诺编码LT二、实验原理:1、香农-费诺编码首先,将信源符号以概率递减的次序排列进来,将排列好的信源符号划分为两大组,使第组的概率和近于相同,并各赋于一个二元码符号”0”和”1”.然后,将每一大组的信源符号再分成两组,使同一组的两个小组的概率和近于相同,并又分别赋予一个二元码符号。
依次下去,直至每一个小组只剩下一个信源符号为止。
这样,信源符号所对应的码符号序列则为编得的码字。
译码原理,按照编码的二叉树从树根开始,按译码序列进行逐个的向其叶子结点走,直到找到相应的信源符号为止。
之后再把指示标记回调到树根,按照同样的方式进行下一序列的译码到序列结束。
如果整个译码序列能够完整的译出则返回成功,否则则返回译码失败。
2、霍夫曼编码霍夫曼编码属于码词长度可变的编码类,是霍夫曼在1952年提出的一种编码方法,即从下到上的编码方法。
同其他码词长度可变的编码一样,可区别的不同码词的生成是基于不同符号出现的不同概率。
生成霍夫曼编码算法基于一种称为“编码树”(coding tree)的技术。
算法步骤如下:(1)初始化,根据符号概率的大小按由大到小顺序对符号进行排序。
(2)把概率最小的两个符号组成一个新符号(节点),即新符号的概率等于这两个符号概率之和。
(3)重复第2步,直到形成一个符号为止(树),其概率最后等于1。
(4)从编码树的根开始回溯到原始的符号,并将每一下分枝赋值为1,上分枝赋值为0。
三、实验环境matlab7.1四、实验内容1、对于给定的信源的概率分布,用香农-费诺编码实现图像压缩2、对于给定的信源的概率分布,用霍夫曼编码实现图像压缩五、实验过程1.香农-费诺编码编码1function c=shannon(p)%p=[0.2 0.15 0.15 0.1 0.1 0.1 0.1 0.1] %shannon(p)[p,index]=sort(p)p=fliplr(p)n=length(p)pa=0for i=2:npa(i)= pa(i-1)+p(i-1) endk=ceil(-log2(p))c=cell(1,n)for i=1:nc{i}=”tmp=pa(i)for j=1:k(i)tmp=tmp*2if tmp>=1tmp=tmp-1 c{i(j)='1'elsec{i}(j) = '0' endendendc = fliplr(c)c(index)=c编码2clc;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:nB(i,1)=A(i);%生成B的第1列end%生成B第2列的元素a=sum(B(:,1))/2;for k=1:n-1ifabs(sum(B(1:k,1))-a)<=abs(sum(B(1:k+1, 1))-a)break;endendfor i=1:n%生成B第2列的元素if i<=kB(i,2)=0;elseB(i,2)=1;endend%生成第一次编码的结果END=B(:,2)';END=sym(END);%生成第3列及以后几列的各元素j=3;while (j~=0)p=1;while(p<=n)x=B(p,j-1);for q=p:nif x==-1break;elseif B(q,j-1)==xy=1;continue;elsey=0;break;endendif y==1q=q+1;endif 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-2abs(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'];endendendendendC=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;avlen=sum(L.*A)2. 霍夫曼编码function c=huffman(p)n=size(p,2)if n==1c=cell(1,1)c{1}=''returnend[p1,i1]=min(p)index=[(1:i1-1),(i1+1:n)] p=p(index)n=n-1[p2,i2]=min(p)index2=[(1:i2-1),(i2+1:n)] p=p(index2);i2=index(i2)index=index(index2)p(n)=p1+p2c=huffman(p)c{n+1}=strcat(c{n},'1')c{n}=strcat(c{n},'0') index=[index,i1,i2]c(index)=c。
香农编码_??????
香农编码
香农编码(Shannon coding)是一种基于信息论的无失真压缩算法。
它由克劳德·香农于1948年提出,是一种前缀
编码方法,用于将一串符号串压缩成更短的编码串。
香农编码的基本思想是根据符号的出现概率分配不同长度
的编码。
出现概率高的符号分配较短的编码,出现概率低
的符号分配较长的编码。
这样,编码串的平均长度就可以
降低,实现了数据的无失真压缩。
具体的步骤如下:
1. 计算每个符号的出现概率。
2. 按照概率从高到低对符号进行排序。
3. 给较高概率的符号分配较短的编码,较低概率的符号分
配较长的编码。
可以使用二叉树进行编码,每个符号对应
树上的一个叶子节点,编码为从根节点到叶子节点的路径。
4. 根据编码生成压缩后的编码串。
由于香农编码是一种无失真压缩算法,可以保证压缩后的数据能够完全恢复成原始数据。
然而,香农编码会导致编码长度不固定,需要附加一些额外的信息来标识编码的边界,这会增加一定的开销。
为了解决这个问题,后续发展出了其他压缩算法,如哈夫曼编码。
香农编码例题
香农编码例题香农编码是一种将符号转化为二进制代码的编码方式,它是由美国数学家克劳德·香农在1948年提出的。
这种编码方式最初被应用于通信领域,但现在已经广泛应用于数据压缩、图像处理和音频处理等领域。
香农编码的基本思想是根据符号出现的概率来确定其对应的二进制代码。
出现概率较高的符号使用较短的二进制代码表示,而出现概率较低的符号使用较长的二进制代码表示。
这样可以有效地减少使用的二进制位数,从而达到数据压缩的目的。
下面我们来看一个例题:假设有5个符号A、B、C、D、E,它们出现的概率分别为0.4、0.2、0.15、0.15和0.1,请使用香农编码将它们转化为二进制代码。
首先需要按照概率大小对这些符号进行排序,从大到小依次为A、B、C、D和E。
接下来需要计算每个符号对应的编码长度。
根据香农编码原理可知,每个符号对应的编码长度等于其出现概率取对数后向上取整得到的值。
因此,A的编码长度为ceil(log2(1/0.4))=ceil(1.3219)=2,B的编码长度为ceil(log2(1/0.2))=ceil(2.3219)=3,C和D的编码长度均为4,E的编码长度为5。
然后可以根据每个符号对应的编码长度来确定它们对应的二进制代码。
具体地,A对应的二进制代码为00,B对应的二进制代码为010,C和D均对应的二进制代码为0110,E对应的二进制代码为01110。
最后将这些二进制代码按照符号出现概率大小从小到大排列起来就可以得到它们对应的香农编码:E=01110、D=0110、C=0110、B=010、A=00。
通过这个例题我们可以看出,在使用香农编码进行数据压缩时,出现概率较高的符号所对应的二进制代码较短,而出现概率较低的符号所对应的二进制代码较长。
这样可以有效地减少使用的二进制位数,并且在解压缩时也能够快速地还原原始数据。
因此,在实际应用中香农编码是一种非常有效和常用的数据压缩方式。
信息论编码作业
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、任意给定一个信源模型,编程实现其二进制香农编码,输出编码结果。
信息论与编码课程大作业
信息论与编码课程大作业
10专升本通信的作业:
一、信源与信源编码
1、若信源包含N 个符号,在什么情况下熵最大?(10分)
最大的熵值是多少?(10分)
2、简述信源编码的两个作用。
(20分)
3、已知离散无记忆信源中各符号的概率空间为
X = 符号u1 u2 u3 u4
概率:1/2 1/4 1/8 1/8
(1)求信源的熵(10分);
(2)对其进行哈夫曼编码(要求码方差较小),写出过程(10分);
(3)求出平均码长和编码效率(10分)。
4、举出学过的无失真与限失真编码方法,各1种。
(10分)
并选择一种,阐述其在实际中的应用(不少于200字)。
(20分)
08普本通信的作业:
二、信道与信道编码
1、什么是对称信道?(10分)
其信道容量公式?(10分)
在信源如何分布时达到信道容量?(10分)
2、信道编码的基本原理是什么?(10分)
3、对一个(4,2)码,其生成矩阵为
(1)写出所有信息组和对应码字(10分);
(2)写出校验矩阵H ,并判断接收序列1110是否出错(10分);
(3)判断码的检错能力(10分)。
4、举出两种常用的纠错码,(10分)
并选择一种,阐述其在实际中的应用(不少于200字)。
(20分)
08成本通信任选其一
统一写到纸上,12月16号上交,若重复率过高,有类似错误,特别是第4小题,则不能通过,望大家要注意! 10010111G ⎡⎤=⎢⎥⎣⎦。
信息论编码作业
信息论编码一.信息论的认识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.信道与信道容量信道分类:根据用户数量可分为单用户信道和多用户信道根据信道输入端和输出端的关系可分为无反馈信道和反馈信道。
信息论实验四香农编码
信息论实验四香农编码实验四香农编码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,实验总结:通过该实验,掌握了香农编码。
信息论与编码考试题型
一.填空题1.写出7种信源编码方法霍夫曼码、费诺码、香农—费诺—埃利斯码、游程编码、MH编码、字典码、算术编码.2.信道分类可按一下6种方法区分信道的用户多少、信道输入端和输出端的关联、信道的参数与时间的关系、输入和输出信号的特点、信道的统计特性、输入和输出信号的形式.3.写出变长编码的三种形式香农编码、费诺编码、霍夫曼编码.4.离散平稳信源的分类为离散无记忆信源和离散有记忆信源两大类;由此再分为四类发出单个符号的无记忆离散信源;发出符号序列的无记忆离散信源;发出单个符号的有记忆离散信源;发出符号序列的有记忆离散信源。
二.简答题1.简述最大熵和熵功率的概念.最大熵:在离散信源情况下,信源各符号等概率分布时,熵值达到最大。
熵功率:若平均功率为P的非高斯分布的信源具有熵为h,称熵也为h的高斯信源的平均功率为熵功率__P(与一个连续信源具有相同熵的高斯信源的平均功率定义为熵功率。
)2.简述费诺编码的规则.首先,将信源符号以概率递减的次序排列起来,将排列好的信源符号划分为两大组,使每组的概率和近于相同,并各赋予一个二元码符号“0”和“1”。
然后,将每一大组的信源符号再分成两组,使同一组的两个小组的概率和近于相同,并又分别赋予一个二元码符号。
依次下去,直至每个小组只剩下一个信源符号为止。
最后,由前向后读取码符号序列。
这样,信源符号所对应的码符号序列则为编得的码字。
3.简述信息熵的概念.自信息的数学期望为信源的平均自信息量,即称为信息熵。
三.计算题1.进制通信系统使用符号0和1,由于存在失真,传输时会产生误码,用符号表示下列事件。
x0:一个0发出;x1:一个1发出y0:一个0收到;y1:一个1收到给定下列概率:p(x0)=1/2,p(y0/x0)=3/4,p(y0/x1)=1/2,(1)求信源的熵H(X);(2)已知发出一个0,求收到符号后得到的信息量H(Y/x0);(3)已知发出和收到的符号,求能得到的信息量H(X,Y)(4)已知收到的符号,求被告知发出的符号得到的信息量H(X/Y);解:(1)求信源的熵H(X);p(x1)=1- p(x0)=1-1/2=1/2H(X)= -p(x0)log p(x0)- p(x1)log p(x1)= 1/2log2+1/2log2=1 bit/symbol (2)已知发出一个0,求收到符号后得到的信息量H(Y/x0);p(y1/x0)=1- p(y0/x0)=1-3/4= 1/4H(Y/x0) = -p(y0/x0)log p(y0/x0)- p(y1/x0)log p(y1/x0)=1/4log4+3/4log4/3=1/2+3/4(2-log3)=0.82bit/symbol(3)已知发出和收到的符号,求能得到的信息量H(X,Y);p(y1/x1)=1- p(y0/x1)=1-1/2= 1/2H(Y/x1) = -p(y0/x1)log p(y0/x1)- p(y1/x1)log p(y1/x1)=1/2log2+1/2log2=1bit/symbolH(Y/X)=p(x0)H(Y/x)+p(x1) H(Y/x1)=1/2*0.82+1/2*1=0.91 bit/symbolH(X,Y)= H(XY)=H(X)+ H(Y/X)=1+0.91=1.91bit/symbol (4)已知收到的符号,求被告知发出的符号得到的信息量H(X/Y);p(y0)= p(x0)* p(y0/x0)+ p(x1)* p(y0/x1)=1/2*3/4+1/2*1/2=5/8p(y1)=1- p(y0)=1-5/8=3/8H(Y)= -p(y0)log p(y0)- p(y1)log p(y1)= 5/8log8/5+3/8log8/3=0.96bit/symbolH(X/Y)= H(XY)- H(Y)=1.91-0.96= 0.95bit/symbol2.、已知一线性分组码码集里的全部码字为:00000, 01101, 10111, 11010,(1)求出n 、k 的值以及码率 R ;(2)能否说此码是系统码?应如何编码才能说该码集是系统码集?(3)算出此码的最小距离及检错和纠错个数;(4)求出此系统码的生成矩阵 G 和系统一致校验矩阵 H ;)(5)当接收序列为00101时,如何判断是否为发码,若采用最小距离译码准则,求出这个收码 被译成的发码码字;(6)判断该码集是否完备码,说明理由(7)当差错图样为00100时,其对应的伴随式是什么?解:(1)由题可知每个码字有5个码元组成,所以n=5;由题可知码字个数M=4,又M=k 2,所以k=2。
信息论与编码理论(最全试题集+带答案+各种题型)
答:抗干扰能力强,中继时可再生,可消除噪声累计;差错可控制,可改善通信质量;便于加密和使用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.人们研究信息论的目的是为了高效、可靠、安全地交换和利用各种各样的信息。
信息论与编码试卷及答案2
信息论与编码试卷及答案2篇一:信息论与编码试卷及答案一、概念简答题(每题5分,共40分)1.什么是平均自信息量与平均互信息,比较一下这两个概念的异同?2.简述最大离散熵定理。
对于一个有m个符号的离散信源,其最大熵是多少?3.解释信息传输率、信道容量、最佳输入分布的概念,说明平均互信息与信源的概率分布、信道的传递概率间分别是什么关系?4.对于一个一般的通信系统,试给出其系统模型框图,并结合此图,解释数据处理定理。
5.写出香农公式,并说明其物理意义。
当信道带宽为5000Hz,信噪比为30dB时求信道容量。
6.解释无失真变长信源编码定理。
7.解释有噪信道编码定理。
8.什么是保真度准则?对二元信源时率失真函数的和?,其失真矩阵,求a>0二、综合题(每题10分,共60分)1.黑白气象传真图的消息只有黑色和白色两种,求:1)黑色出现的概率为,白色出现的概率为。
给出这个只有两个符号的信源X的数学模型。
假设图上黑白消息出现前后没有关联,求熵;2)假设黑白消息出现前后有关联,其依赖关系为:,,求其熵;,,2.二元对称信道如图。
;1)若,,求和;2)求该信道的信道容量和最佳输入分布。
3.信源空间为曼码,计算其平均码长和编码效率。
,试分别构造二元和三元霍夫4.设有一离散信道,其信道传递矩阵为,并设,试分别按最小错误概率准则与最大似然译码准则确定译码规则,并计算相应的平均错误概率。
5.已知一(8,5)线性分组码的生成矩阵为。
求:1)输入为全00011和10100时该码的码字;2)最小码距。
6.设某一信号的信息传输率为/s,在带宽为4kHz的高斯信道中传输,噪声功率谱NO=5×10-6mw/Hz。
试求:(1)无差错传输需要的最小输入功率是多少?(2)此时输入信号的最大连续熵是多少?写出对应的输入概率密度函数的形式。
一、概念简答题(每题5分,共40分)1.答:平均自信息为表示信源的平均不确定度,也表示平均每个信源消息所提供的信息量。
信息论大作业
信息理论与编码大作业报告课题:算术编码班级:通信1211姓名:学号:1220119127一、实验原理1.编码过程:算术编码方法是将被编码的一则消息或符号串(序列)表示成0和1之间的一个间隔(Interval),即对一串符号直接编码成[0,1]区间上的一个浮点小数。
符号序列越长,编码表示它的间隔越小,表示这一间隔所需的位数就越多。
信源中的符号序列仍然要根据某种模式生成概率的大小来减少间隔。
可能出现的符号概率要比不太可能出现的符号减少范围小,因此,只正加较少的比特位。
算术编码进行编码时,从实数区间[0,1)开始。
按照符号的频度将当前的区间分割成多个子区间。
根据当前输入的符号选择对应的子区间,然后从选择的子区间中继续进行下一轮的分割。
不断的进行这个过程,直到所有符号编码完毕。
对于最后选择的一个子区间,输出属于该区间的一个小数。
这个小数就是所有数据的编码。
现在来举个例子。
假设一份数据由“A”、“B”、“C”三个符号组成。
现在要编码数据“BCCB”,编码过程如下图所示。
观察上图可以发现算术编码的过程。
首先,算术编码是从区间[0,1)开始的。
这时三个符号的概率都是1/3,按照这个概率分割区间。
第一个输入的符号是“B”,所以我们选择子区间[0.3333,0.6667)作为下一个区间。
输入“B”后更新频度,根据新的概率对区间[0.3333,0.6667)进行分割。
这时输入的符号是“C”,我们可以选择子区间[0.5834,0.6667)。
继续更新频度、分割区间、选择子区间,直到符号全部编码完成。
我们最后得到的区间是[0.6390,0.6501)。
输出属于这个区间的一个小数,例如0.64。
那么经过算术编码的压缩,数据“BCCB”最后输出的编码就是0.64。
2.解码过程:算术编码进行解码时仅输入一个小数。
解码前首先需要对区间[0,1)按照初始时的符号频度进行分割。
然后观察输入的小数位于那个子区间。
输出对应的符号,选择对应的子区间,然后从选择的子区间中继续进行下一轮的分割。
答案~信息论与编码练习
答案~信息论与编码练习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、若已知信道输入分布为等概率分布,且有如下两个信道,其转移概率矩阵分别为:试求这两个信道的信道容量,并问这两个信道是否有噪声?3 、已知随即变量X 和Y 的联合分布如下所示:01100.980.020.020.98P ??=??111122221111222212111122221111222200000000000000000000000 000000000P 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-p
b2=1
PE = P(a1)P(b2|a1)+P(a2)P(b1|a2) = ωp + (1-ω)p = 0.01
信息论与编码基础
2、常用判决准则
香农三大定理 简介
a、MAP准则(Maximum a Posteriori) 对于所有的 C ′
P (C * | R) ≥ P (C ′ | R)
香农三大定理 简介
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进行无失真编码
−4
PE = p + C pp = 3 × 10 < p = 0.01
3 1 3 2
信息论与编码基础
例1 重复编码 (n,1)
3 1 3 2 −4
香农三大定理 简介
PE = p + C pp ≈ 3 × 10 < p = 0.01
R = logM/n bit/code
n=5 n=7 n=9
可靠性增强
N次扩展信源无失真编码器
信息论与编码基础
1、信源编码器 b、举例
1)ASCII信源编码器
香农三大定理 简介
{英文字母/符号/命令}
二进代码
ASCII编码器
码符号集{0,1}
信息论与编码基础
1、信源编码器 符号 点 划 b 、举例 b、举例
二进代码 +— +++— 2 )摩尔斯电码 2)摩尔斯信源编码器 电平 10 1110 字母间隔 ——— 000
信息论与编码课程大作业
《信息论与编码》课程大作业——正交多项式拟合的信息熵学院班级姓名学号阅读文献名称:Information entropy of orthogonal polynomials中文名称:正交多项式拟合的信息熵文章摘要:主要讲了Boltzmann–Shannon的经典正交多项式拟合的信息熵的定义式:以及从这个公式和雅克比行列式的推导出来的一个很明确的公式:文章的第一部分是介绍部分,主要介绍了熵的来历,熵的引入,熵的概念的解释:是一种种类性,同时带有组的概念,动态性不确定性等等的一种表征,是描述随机性、杂乱性和不确定性的一种标志。
同时文章的介绍部分引入了位置空间和动量空间的两个表达式,,并同时给出了它们与Boltzmann–Shannon 的关系即推导公式:以及由这些公式得到的一些结论和这些对这个学科的贡献和不足之处,在第一部分的最后介绍了一些基本的分析和推导要用到的公式和定理:1、第一类切比雪夫多项式:2、第二类切比雪夫多项式:3、盖根保多项式:4、厄密多项式:5、拉盖尔多项式:6、紧凑正交多项式拟合的间隔问题:其中:文章的第二部分是一些概念和符号的说明和介绍,其中包括:1、雅克比行列式简介:2、Zeta矩阵函数:以及泰勒分解后的表达式:3、权重的概念以及几何学的方程:权重定义:在推导过程中用到了微分方程:还有皮尔森方程:第三部分是正交信息熵的提出,同时也提出了一些辅助定理以及证明:1、2、其中:3、文章总结以及心得体会:这篇文章介绍的是一种信息熵的新的求解方法,就是基于正交拟合的方法,文章还介绍了要用到的一些矩阵以及在推导过程中的矩阵的变换和一些基本又经典的方程,比如泰勒级数的展开等等。
解决了以前求熵的复杂问题,提出了简明的计算公式,以及从基本的Boltzmann–Shannon熵的表达式推导出简明计算公式的方法和推导出来的理论依据和数学支持,最终达到了解决在摘要中提出的问题的目的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
香农编码--信息论大作业-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII
信息论与编码课程大作业
题目:香农编码
学生姓名: ******
学号: &**********
专业班级: *******************
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.运行结果及分析
(
本程序先定义了码字长度的最大值和信源概率的个数,然后有设定了概率的和的范围。
除此之外,程序采用多个函数求出每个概率的自信息量,采用结构化编程的思想将问题细分成多个模块,再利用数学方法求得累加概率对应的码字长度,在此基础上,利用循环函数求得对应的码字长度。
这样就得到了所需的结果。
再利用循环依次表达出来即可。
4.心得体会
通过这次大作业,我觉得自己对C该好好学习了,还有一些基本知识,导致编写程序出现困难。
编码的原理虽然知道,但是操作出现困难。
对信息论的认识也得到加强和巩固。