ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:101.11KB ,
资源ID:30752558      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30752558.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(信息论与编码实习报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

信息论与编码实习报告.docx

1、信息论与编码实习报告信息论与编码实习报告 实验一 唯一可译码判决准则一、 实验内容编程实现唯一可译码的判决准则SardinasPatterson算法二、实验环境1. 计算机2. Windows 2000 或以上3. VC+ 6.0三、实验目的1. 进一步熟悉唯一可译码判决准则;2. 掌握VC开发环境的使用;3. 掌握C语言编程(尤其是字符串处理);四、实验要求1. 提前预习实验,认真阅读实验原理。2. 认真高效的完成实验,实验过程中服从实验室管理人员以及实验指导老师的管理。3. 认真填写实验报告。五、实验原理1. 唯一可译码判决准则的原理参考书1的153页。 其原理可简介如下: 将源码组C中所

2、有可能的尾随后缀组成一个集合F,当且仅当集合F中没有包含任一码字,便可判断此码C为唯一可译变长码。2. 算法流程输入码字集合X0for 所有Wi,WjX0if 码字Wi 是码字Wj 的前缀,即将相应的后缀作为一个尾随后缀放入新集合X1 end ifend forfor 所有WiX0for 所有Wj Xn1if Wi 是Wj 的前缀,即将相应的后缀作为一个尾随后缀放入新集合Xn中 else if Wj是Wi的前缀,即将相应的后缀作为一个尾随后缀放入新集合Xn中 end if end for end for 构造尾随后缀集合XXiif 有码字WiX0,WiX,则非唯一可译码6、实验设计 1、数据结

3、构 本实验所需设计的程序中,码字可用如下结构表示: char c10050 尾随后缀用如下结构表示: char f30050 2、关键算法 本程序的关键算法是用来求尾随后缀的SardinasPatterson算法。其算法流程图如下: Y N Y N Y N N Y void patterson(char c,char d) /检测尾随后缀 int i,j,k; for(i=0;i+) if(ci=0&di=0)/2字符串一样,跳出 break; if(ci=0) /d比c长,将d的尾随后缀放入f中 for(j=i;dj!=0;j+) fsumj-i=dj; fsumj-i=0; for(k=0

4、;ksum;k+) if(strcmp(fsum,fk)=0) /*查看当前生成的尾随后缀在f集合中是否存在*/ sum-;break; sum+; break; if(di=0) /c比d长,将c的尾随后缀放入f中 for(j=i;cj!=0;j+) fsumj-i=cj; fsumj-i=0; for(k=0;ksum;k+) if(strcmp(fsum,fk)=0) /*查看当前生成的尾随后缀在f集合中是否存在*/ sum-;break; sum+; break; if(ci!=di)/字符不一样了也退出 break; 3、函数调用关系图Main()函数调用void patterson

5、(char c,char d)函数。 8、用户手册及总结 用户手册: 1.按照提示先输入随后将输入字符串的总个数2.依次输入个字符串3.得出结果 总结: 本次编程实验中进一步加深了对尾随后缀集合算法的理解,运用C语言将其实现。在程序中设置了一个互相比较两个字符串是否为对方前缀的函数,以求得尾随后缀。 程序大体写完后,又在原程序的基础上增加了它的鲁棒性。附源代码:#include#includechar c10050;char f30050;int N,sum=0; /N为输入码字的个数,sum为尾随后缀集合中码字的个数int flag; /判断是否唯一可译标志位void patterson(c

6、har c,char d) /检测尾随后缀 int i,j,k; for(i=0;i+) if(ci=0&di=0)/2字符串一样,跳出 break; if(ci=0) /d比c长,将d的尾随后缀放入f中 for(j=i;dj!=0;j+) fsumj-i=dj; fsumj-i=0; for(k=0;ksum;k+) if(strcmp(fsum,fk)=0) /*查看当前生成的尾随后缀在f集合中是否存在*/ sum-;break; sum+; break; if(di=0) /c比d长,将c的尾随后缀放入f中 for(j=i;cj!=0;j+) fsumj-i=cj; fsumj-i=0;

7、 for(k=0;k100) printf(输入码字个数过大,请输入小于100的数n); printf(请输入码字的个数(小于100):); scanf(%d,&N); flag=0; printf(请分别输入码字(每个码字长度小于50个字符):n); for(i=0;iN;i+) scanf(%s,&ci); for(i=0;iN-1;i+)/判断如果码本身是否重复 for(j=i+1;jN;j+) if(strcmp(ci,cj)=0) flag=1;break; if(flag=1)/如果码本身有重复,就可以断定它不是唯一可译码 printf(这不是唯一可译码。n); else for(

8、i=0;iN-1;i+) /*此处是根据原始编码生成的尾随后缀集合s1放入f中*/ for(j=i+1;jN;j+) patterson(ci,cj); for(i=0;i+) /根据原始码与si生成si+1也放入fi int s=0; for(j=0;jN;j+) /*判断si+1中的字符串是否与si中一样 ,重复的则不再添加*/ if(i=sum) s=1;break; else patterson(fi,cj); if(s=1)break; for(i=0;isum;i+) /*判断p里的字符串是否与s 中重复,重复则不是唯一的*/ for(j=0;jN;j+) if(strcmp(fi

9、,cj)=0) flag=1; break; if(flag=1) printf(这不是唯一可译码。n); else printf(这是唯一可译码。n); printf(尾随后缀集合为:); for(i=0;i=sum;i+) printf(n%s,fi);实验二 Shannon编码一、 实验内容编程实现Shannon编码算法二、实验环境1. 计算机2. Windows 2000 或以上3. VC+ 6.0三、实验目的1. 进一步熟悉Shannon编码算法;2. 掌握C语言编程(尤其是数值的进制转换,数值与字符串之间的转换等)四、实验要求1. 提前预习实验,认真阅读实验原理。2. 认真高效的完

10、成实验,实验过程中服从实验室管理人员以及实验指导老师的管理。3. 认真填写实验报告。五、实验原理1. Shannon编码的原理参考书1的162页。2. 算法流程输入信源符号个数q,信源概率分布P降序排列pifor i=1 q 计算编码长度 ; 计算累加概率; 将累加概率F(si) (十进制小数)变成二进制数取小数点后li 位数作为第i个消息的码字。 end for六、参考书1. 信息论基础理论及应用傅祖芸,电子工业出版社七、实验设计 1、数据结构 本实验所需设计的程序中,码字可用如下结构表示: typedef struct symbol char s50; double pa,pb,h; /分

11、别为符号概率,累加概率,自信息量 int l; /码字长度 char m100; /码字symbol; 2、关键算法 本程序的关键算法是通过累加概率及码长求码字,其算法流程图如下: Y N N Yfor(i=0;iN;i+) /求码字 p=sbi.pb; for(j=0;j=1) sbi.mj=1; p=p-1; else sbi.mj=0; sbi.msbi.l=0; 3、函数调用关系图 仅有main()函数。概率排序、求累加概率、自信息量、码字长度、码字的函数均包含在main()函数内。9、用户手册及总结 用户手册: 1.按照提示先输入信源的总个数2.依次输入各信源的名称3.再按上序输入信

12、源的概率4.得出结果 总结: 本次编程中没有用到特别复杂的算法。按照香农编码的编码方法依次实现各模块即可。在编程中要注意的是数字的类型,利用log函数时求得的值是double型。附源代码:#include#include#includetypedef struct symbol char s50; double pa,pb,h; /分别为符号概率,累加概率,自信息量 int l; /码字长度 char m100; /码字symbol;int N;void main() int i,j; symbol sb100; printf(请输入符号的个数:); scanf(%d,&N); printf(

13、请依次输入消息符号:n); for(i=0;iN;i+) scanf(%s,sbi.s); printf(请依次输入各消息符号的概率:n); for(i=0;iN;i+) scanf(%lf,&sbi.pa); int x; symbol z; for(i=0;iN-1;i+) /按照符号概率由大到小排序 x=i; for(j=i+1;jN;j+) if(sbx.pasbj.pa) x=j; z=sbi;sbi=sbx;sbx=z; sb0.pb=0; for(i=1;iN;i+) /求累加概率 sbi.pb=sbi-1.pb+sbi-1.pa; double y; for(i=0;iN;i+

14、) /求自信息量,及码字长度 sbi.h=-log(sbi.pa)/log(2); y=sbi.h; if(sbi.h-(int)y=0) sbi.l=(int)y; else sbi.l=(int)(y+1); double p; for(i=0;iN;i+) /求码字 p=sbi.pb; for(j=0;j=1) sbi.mj=1; p=p-1; else sbi.mj=0; sbi.msbi.l=0; printf(消息符号 符号概率 累加概率 信息量 码字长度 码字n); for(i=0;iN;i+) /输出 printf(%-8s %1.4lf %1.4lf %1.4lf %3d %sn,sbi.s,sbi.pa,sbi.pb,sbi.h,sbi.l,sbi.m);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1