- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
河南理工大学信息论及编码课设
信息论与编码 课程设计 * * 小组成员: 课程设计内容基本情况介绍: 任务一:统计信源熵 要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。 * * * * 任务二:费诺编码 要求:任意输入消息概率,利用上述编码方法进行编码,并计算信源熵和编码效率。 * * 离散信源熵 离散信源熵的计算方法: H(x)= * * 统计信源熵基于vc6.0平台的分析: 主体部分:完成对文本中字符个数的统计。 思路分析:设计出一个程序段。使其能够对阿斯卡马表中所有的字符可以进行统计,并且分别输出。 注:由于英文文段中只是出现小写a~z,大写A~Z,空格(space),逗号句号,叹号等字符。所以只需使用阿斯卡马表中第三十二个(space)到第122(z)个,总共91个字符。这将在程序中有所显示。 * * /*计数程序*/ int strcount(char str[],int count[]) { int i; for (i=0;str[i]!=\0;i++) {count[str[i]- ]++;}return i; } * * /*主程序*/ int main() { int i,/*k=0,*/count[91]={0};float s=0;float z;/*int h=1,t=N; float temp;*/ int j; int h=1; float temp; FILE *fp,*fp1; char str[100]; if((fp=fopen(3.txt,r))==NULL) printf(no file found!); fgets(str,100,fp); z=strcount(str,count);printf(字符总数z=:%f\n,z); * * fp1 = fopen(1.txt, w); for(i=0;i91;i++) if(count[i]!=0) { printf(字符%c出现的次数为:%d\n, +i,count[i]); s=s+(-3.322*(count[i]/z)*log10(count[i]/z)); printf(字符%c出现的概率为%f\n, +i,count[i]/z);fprintf(fp1, %f\n, count[i]/z);k++; } printf(共有%d种字符\n,k);/*此处对下一个费诺编码程序不可缺少*/ printf(文本信源熵s为:%f\n,s); * * 费诺编码基于vc6.0平台的分析: 分析:由于费诺编码涉及到各个字符变量及其出现的概率、费诺编码的结果。所以,可以采用结构体变量进行编程处理。 * * 思路:首先,将信源符号以概率递减的次序排列进来,将排列好的信源符号划分为两大组,使第组的概率和近于相同,并各赋于一个二元码符号”0”和”1”.然后,将每一大组的信源符号再分成两组,使同一组的两个小组的概率和近于相同,并又分别赋予一个二元码符号。依次下去,直至每一个小组只剩下一个信源符号为止。这样,信源符号所对应的码符号序列则为编得的码字即为所要求的编码。 * * #includestdio.h /*费诺编码源程序*/ #includemath.h #includestdlib.h #define N 27 struct event { int n; double x; int code[N]; int low; }; FILE *fp1,*fp2; struct event A[N+1]; * * void inputcode(struct event *a,int b)/*输入概率*/ { a-code[a-low]=b; (a-low)++; } void outcode(struct event a)/*输出编码*/ { int i; for(i=0;ia.low;i++) fprintf(fp2,%d,a.code[i]); } * * double getsum(int h,int t,struct event a[])/*求和比较并分组*/ { int i=h; double sum=0.0; for(i=h;i=t;i++) { sum=sum+a[i].x; } return sum; } * * int getbreakpoint(struct event a[],int h,int t)/*all right*/ {
文档评论(0)