欢迎来到天天文库
浏览记录
ID:58564748
大小:150.00 KB
页数:7页
时间:2020-10-20
《香农编码--信息论大作业.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、信息论与编码课程大作业题目:香农编码学生姓名:******学号:&**********专业班级:*******************2013年5月10日香农编码1.香农编码的原理/步骤香农第一定理指出了平均码长与信源之间的关系,同时也指出了可以通过编码使平均码长达到极限值,这是一个很重要的极限定理。如何构造这种码?香农第一定理指出,选择每个码字的长度Ki将满足式I(xi)≤Ki<Ip(xi)+1就可以得到这种码。这种编码方法就是香农编码。香农编码步骤如下:(1)将信源消息符按从大到小的顺序排列。(
2、2)计算p[i]累加概率;(3)确定满足自身要求的整数码长;(4)将累加概率变为二进制数;(5)取P[i]二进制数的小数点后Ki位即为该消息符号的二进制码字。2.用C语言实现#include#include#include#definemax_CL10/*maxsizeoflengthofcode*/#definemax_PN6/*输入序列的个数*/typedeffloatdatatype;typedefstructSHNODE{datatype
3、pb;/*第i个消息符号出现的概率*/datatypep_sum;/*第i个消息符号累加概率*/intkl;/*第i个消息符号对应的码长*/intcode[max_CL];/*第i个消息符号的码字*/structSHNODE*next;}shnolist;datatypesym_arry[max_PN];/*序列的概率*/voidpb_scan();/*得到序列概率*/voidpb_sort();/*序列概率排序*/voidvaluelist(shnolist*L);/*计算累加概率,码长,码字*/
4、voidcodedisp(shnolist*L);voidpb_scan(){inti;datatypesum=0;printf("input%dpossible!",max_PN);for(i=0;i>");scanf("%f",&sym_arry[i]);sum=sum+sym_arry[i];}/*判断序列的概率之和是否等于1,在实现这块模块时,scanf()对float数的缺陷,故只要满足0.995、(sum>1.00016、7、sum<0.99){printf("sum=%f,summust(<0.999max){max=sym_arry[j];pos=j;}sym_arry[po8、s]=sym_arry[i];sym_arry[i]=max;}}voidcodedisp(shnolist*L){inti,j;shnolist*p;datatypehx=0,KL=0;/*hx存放序列的熵的结果,KL存放序列编码后的平均码字的结果*/p=L->next;printf("numtgailvtsumt-lb(p(ai))tlenthtcode");printf("");for(i=0;i9、%ft%dt",i,p->pb,p->p_sum,-3.332*log10(p->pb),p->kl);j=0;for(j=0;jkl;j++)printf("%d",p->code[j]);printf("");hx=hx-p->pb*3.332*log10(p->pb);/*计算消息序列的熵*/KL=KL+p->kl*p->pb;/*计算平均码字*/p=p->next;}printf("H(x)=%ftKL=%fR=%fbit/code",hx,KL,hx/KL);/*计算10、编码效率*/}shnolist*setnull(){shnolist*head;head=(shnolist*)malloc(sizeof(shnolist));head->next=NULL;return(head);}shnolist*my_creat(datatypea[],intn){shnolist*head,*p,*r;inti;head=setnull();r=head;for(i=0;i
5、(sum>1.0001
6、
7、sum<0.99){printf("sum=%f,summust(<0.999max){max=sym_arry[j];pos=j;}sym_arry[po
8、s]=sym_arry[i];sym_arry[i]=max;}}voidcodedisp(shnolist*L){inti,j;shnolist*p;datatypehx=0,KL=0;/*hx存放序列的熵的结果,KL存放序列编码后的平均码字的结果*/p=L->next;printf("numtgailvtsumt-lb(p(ai))tlenthtcode");printf("");for(i=0;i9、%ft%dt",i,p->pb,p->p_sum,-3.332*log10(p->pb),p->kl);j=0;for(j=0;jkl;j++)printf("%d",p->code[j]);printf("");hx=hx-p->pb*3.332*log10(p->pb);/*计算消息序列的熵*/KL=KL+p->kl*p->pb;/*计算平均码字*/p=p->next;}printf("H(x)=%ftKL=%fR=%fbit/code",hx,KL,hx/KL);/*计算10、编码效率*/}shnolist*setnull(){shnolist*head;head=(shnolist*)malloc(sizeof(shnolist));head->next=NULL;return(head);}shnolist*my_creat(datatypea[],intn){shnolist*head,*p,*r;inti;head=setnull();r=head;for(i=0;i
9、%ft%dt",i,p->pb,p->p_sum,-3.332*log10(p->pb),p->kl);j=0;for(j=0;jkl;j++)printf("%d",p->code[j]);printf("");hx=hx-p->pb*3.332*log10(p->pb);/*计算消息序列的熵*/KL=KL+p->kl*p->pb;/*计算平均码字*/p=p->next;}printf("H(x)=%ftKL=%fR=%fbit/code",hx,KL,hx/KL);/*计算
10、编码效率*/}shnolist*setnull(){shnolist*head;head=(shnolist*)malloc(sizeof(shnolist));head->next=NULL;return(head);}shnolist*my_creat(datatypea[],intn){shnolist*head,*p,*r;inti;head=setnull();r=head;for(i=0;i
此文档下载收益归作者所有