




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
哈尔滨理工大学荣成学院信息论与编码实验报告费诺编码班级: 电信12-1班 姓名: 李 赛 学号: 1230160109 日期: 2015.6.17 费诺编码C语言代码:#include #include #include static char p2020; void Fano(int m,int n,float y20);main() int i,j,flag,count,b20; /count:信源符号个数,b: 码长 float a20,temp,sum=0.0,l=0.0,H=0.0,y,R; / a:输入概率分布 l:平均码长 H:信源熵 y:编码效率 R:信源信息率flag=0; /flag:输入概率的判断标志位。为0时表示输入概率有误/*输入信源符号个数并判断是否是正数 */ printf(Please input the amount of probabilitiesn); scanf(%d,&count); while(count=0) printf(Please input the positive number! Try again!n); printf(Please input the amount of probabilitiesn); scanf(%d,&count); /*输入信源输入概率并判断 */ while(flag=0) flag=1; printf(Please input all probabilities!n); for(i=1;i=count;i+) scanf(%f,&ai); if(ai1) /判断单个概率是否小于0或大于1 printf(Please input the number between 0 and 1n);flag=0; else sum=sum+ai; if(sum1.0000001|sum0.9999999) /判断概率和是否大于1或小于0 printf( the sum of all the numbers is %lf not 1!n,sum);flag=0;sum=0.0; /*冒泡排序,由大到小 */ for(i=1;icount;i+) for(j=i+1;jcount+1;j+) if(aiaj)temp=ai;ai=aj;aj=temp; Fano(1,count,a); /调用费诺编码 for (i=1;i=count;i+)/求码长bi=strlen(pi);/* 输出编码 */ printf(nThe fano code is:n); printf(ProbabilityttFano codettcode lengthn); for(i=1;i=count;i+) printf(%.3fttt,ai); printf(%sttt%dn,pi,bi); /* 计算平均码长 */for(i=1;i=count;i+)l+=ai*bi;printf(The average length of code is:);printf(%5.2fbit/symboln,l);/* 计算信源熵 */for(i=1;i=count;i+)H+=-ai*(log(ai)/log(2);printf(The source entropy is:);printf(%5.2fbit/symboln,H);/*计算信源信息率 */R=l*(log(2)/log(2);printf(The rate of transport is:);printf(%5.2fn,R);/* 计算编码效率(百分制表示) */y=H/R;printf(The coding efficiency is:);printf(%5.2f%n,y*100); /* 费诺编码子函数 */void Fano(int m,int n,float y20) / m:各个组的初始点 n:各个组的结束点 y:经过从大到小排序后,各个组的元素 int i,k; /k:当前点位置 float sum=0.0,s=0.0,s1; /sum:组内元素之和 s:初始点到k的组内元素的和 s1:从初始点到k-1的组内元素的和 if(m=n) return;/组内元素只有一个,不用再分 for(i=m;i=n;i+) /组内元素求和 sum=sum+yi; k=m; while(s=sum-s) /判断组内元素依次累加,是否达到组和的一半 s1=s; s=s+yk+; if(sum-2*s1)=(2*s-sum)/判断两组和是否是最接近 k-; for(i=m;ik;i+) /分组后在上方的一组概率编码为0 strcat(pi,0); for(i=k;i=n;i+) /分组后在下方的一组概率编码为1 strcat(pi,1); Fano(m,k-1,y); / 对分组后的上方的概率再一次分组 Fano(k,n,y); /对分组后的下方的概率再一次分组 程序流程图:主函数开始输入信源符号个数count及对应概率ai的概率P检测符号个数概率分布是否有错误冒泡排序(由大到小)调用费诺编码子函数通过strlen()函数求码长根据公式计算平均码长,信源熵,信源信息率,编码效率输出终止子函数:通过strcat()函数给第一组码字为0,第二组码字为1分组点即第一个编号?分组点为该组倒数第二个?通过累加求和确定分组后每组概率累加尽可能相近或相等组内元素个数是否为1 F T分组点为新分组的第一个编号,其他依次.输出 T T F F分组点为新分组的第一个编号,其他依次.以分组点为断点, 重新编号分为两组算法分析:1.子函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 掘金考试题库及答案解析
- 森林防火知识培训资料课件
- 梧州靠谱的法律知识培训课件
- 2025年市场营销岗位面试宝典与模拟题答案
- 桥梁知识义教课件
- 2025小儿外科、小儿骨科护士护理理论考试试题及答案
- 2025年市场调研员招聘面试预测题及数据分析技巧
- 2025注册验船师资格考试(C级船舶检验专业案例分析)经典试题及答案二
- 2026届上海中学、复旦附中等八校高三化学第一学期期末质量检测试题含解析
- 2025年软件开发工程师中级面试题库及答案解析
- 人工智能改变企业劳动力需求
- (新版)广电全媒体运营师资格认证考试复习题库(含答案)
- 2024年中考物理压轴题专项训练:电磁继电器核心综合练(原卷版)
- 矿山事故应急报告制度
- 2024-2025学年山东省淄博市桓台县四年级上学期数学期中考试试题
- 《公路建设项目文件管理规程》
- 《实践论》(原文)毛泽东
- 佳能-600EX-相机说明书
- ISO27001信息安全管理体系培训资料
- DB34T 3678-2020 内河航道疏浚工程施工技术规程
- 《绝对值》教学课件
评论
0/150
提交评论