网站大量收购闲置独家精品文档,联系QQ:2885784924

费诺编码代码说明.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息论与编码上机作业 二进制Fano编码 姓名: 学号: 班级: 题目要求 已知:信源符号个数 q、信源符号 s0,...,sq?1、信源概率分布 p0,...,pq?1。 算法: (a) 将 q 个信源符号按其概率递减排序: p0 ≥ p1 ≥ ... ≥ pq?1 (b) 将依次排列的信源符号依概率分为两组,使两组的概率和之差最小。 并对各组分别赋予二进制码符号 “0” 和 “1”。 (c) 将每一组的信源符号进一步再分成两组,使划分后的两个组的概率 和之差最小。再次分别赋予各组二进制码符号 “0” 和 “1”。 (d) 如此重复,直至每组只剩下一个信源符号为止。 (e) 信源符号 si 所对应的从左至右的码符号序列即为码字 wi。 要求: (a) 输入:信源符号个数 q,信源概率分布 p0,...,pq?1。 (b) 输出:信源符号 si 与码字 wi 的对应关系表(编码表)。 输入信源符号个数程序运行流程 输入信源符号个数 是否是 是否是 是否是正整数 NYNNYYY是否是是否在0至1之间是否是概率和是否为1 降序排序费诺编码输出结果 N Y N N Y Y Y 是否是 是否在0至1之间 是否是 概率和是否为1 降序排序 费诺编码 输出结果 输入信源符号概率 费诺编码流程图 输入信源符号个数 输入信源符号个数num,和对应概率p 降序排列 降序排列 N是否是 N 是否是 信源个数大于 信源个数大于2? 通过求和累加确定分组后每组概率和尽可能相近 通过求和累加确定分组后每组概率和尽可能相近 NNYYY是否是分组点即该组倒数第二个?分组点为新分组的最后一个编号,其他不变分组点位新分组的第一个编号,其他依次第一组码字加0,第二组码字加1 N N Y Y Y 是否是 分组点即该组倒数第二个? 分组点为新分组的最后一个编号,其他不变 分组点位新分组的第一个编号,其他依次 第一组码字加0,第二组码字加1 以分组点为断点,重新编号分为两组是否 以分组点为断点,重新编号分为两组 是否是 分组点即第一个编号? 输 输出信源符号,概率和码字 运行结果 正确结果: 错误提示: 代码及注释 #includestdio.h?? #includestring.h?? #includestdlib.h?? #includemath.h?? ?? int?num1;??//费诺编码中使用的信源符号个数 char?code[50][50];//费诺编码??? int?flag1=0;//是否已经编码??? ?? void?main()?? {?? ????int?num;//信源符号个数??? ????float?p[50];//信源符号的概率??? ????float?sum=0.0;//概率之和??? ????float?temp;//排序所使用的中间变量??? ????int?i,j;?? ????int?flag=0;//是否已经输入完毕概率??? ????int?err1=0,err2=0;//错误类型??? ????void?err(int?e1,?int?e2);//错误函数??? ????void?fano(int?m,int?n,float?p[50]);//费诺编码??? ?? ????printf(\n---------------费诺编码----------------\n\n输入信源符号个数和概率可以得到费诺编码。\n);?? ????do?? ????{?? ????????printf(\n\n请输入信源符号个数(输入0退出):);?? ????????scanf(%d,num);?? ????????if(num==0)?exit(0);?? ????????while(num0)?? ????????{?? ????????????printf(请重新输入一个正整数!\n);?? ????????????printf(请输入信源符号个数:);?? ????????????scanf(%d,num);?? ????????????if(num==0)?exit(0);?? ????????}?? ????????while(flag==0)?? ????????{?? ????????????flag=1;?? ????????????printf(请输入信源概率:);?? ????????????for(i=1;inum+1;i++)//输入概率??? ????????????{?? ????????????????scanf(%f,p[i]);?? ????????????????if((p[i]0)||(p[i]1))?//检查错误:概率取值0至1?? ????????????????{??

文档评论(0)

anma + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档