Fano编码的C语言实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Fano编码的C语言实现

信息论课程设计 (费诺编码) 班级 学号 姓名 目录 1课题描述 2 2 信源编码的相关介绍 3 3 费诺编码 3 3.1 费诺编码算法 3 3.2 费诺编码特点 4 4 费诺编码的C程序实现 4 4.1 程序设计 4 4.2 运行结果 9 总 结 9 参考文献 9 1课题描述2 信源编码的相关介绍为了减少信源输出符号序列中的剩余度、提高符号的平均信息量,对信源输出的符号序列所施行的变换。具体说,就是针对信源输出符号序列的统计特性来寻找某种方法,把信源输出符号序列变换为最短的码字序列,使后者的各码元所载荷的平均信息量最大,同时又能保证无失真地恢复原来的符号序列。信源编码的作用之一是设法减少码元数目和降低码元速率,即通常所说的数据压缩:作用之二是将信源的模拟信号转化成数字信号,以实现模拟信号的数字化传输。最原始的信源编码就是莫尔斯电码,另外还有ASCII码和电报码都是信源编码。但现代通信应用中常见的信源有:Huffman编码、算术编码、编码通信系统模型[信源]-[信源编码]-[信道编码]-[信道传输+噪声]-[信道解码]-[信源解码]-[信宿]一般来说,减少信源输出符号序列中的剩余度、提高符号平均信息量的基本途径有两个:使序列中的各个符号尽可能地互相独立;使序列中各个符号的出现概率尽可能地相等。前者称为解除相关性,后者称为概率均匀化。3 费诺编码 费诺编码3.1 费诺编码算法 将信源符号按概率排列。在程序中由sort()函数处理,此函数是一个冒泡排序法。若想改进,可用其它的排序算法。 将3.2 费诺编码特点 由于赋码元时的任意性,因此费诺编码编出的码字不惟一。 费诺编码虽属于概率匹配范畴,但并未严格遵守匹配规则,即不全是按“概率大码长小、概率小码长大”来决定码长,有时会出现概率小码长反而小的情况。 4 费诺编码的C程序实现 4.1 程序设计 #includestdio.h #includemath.h #includestring.h #define Bmax 10 //最长码长度 #define Smax 20 //数组最大长度 struct Bit { char b[Bmax]; int last; }; typedef struct symbol { char c; float probability; struct Bit bit; }sbl; sbl s[Smax]; void sort(int n)//排序 { float t; char a; int i,j; for(i=1;in;i++) for(j=0;jn-i;j++) if(s[j].probabilitys[j+1].probability) {t=s[j].probability; a=s[j].c; s[j].probability=s[j+1].probability; s[j].c=s[j+1].c; s[j+1].probability=t; s[j+1].c=a; } } void code(int low,int mid,int high)//编码 { int i; for(i=low;ihigh;i++) { if(imid) { s[i].bit.b[s[i].bit.last]=0; s[i].bit.last++; } else { s[i].bit.b[s[i].bit.last]=1; s[i].bit.last++; } } } void group1(int low,int mid,int high)//分组 { float d,dmin; d=0; int i; if(high==low+1) return; for(i=low;imid;i++) d+=s[i].probability; dmin=d-2*s[low].probability; for(i=low+1;ihigh;i++) { d=fabs(dmin-2*s[i].probability); if(ddmin) dmin=d; else break; } mid=i; code(low,mid,high); group1(low,mid,mid); group1(mid,high,high); } void group(int n) { int i,pmid,plow,phigh; pmid=phigh=n; plow=0; for(i=0;in;i++) s[i].bit.last=0;

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档