实验二互信息计算.docx

上传人:1398****507 文档编号:44288176 上传时间:2022-09-21 格式:DOCX 页数:5 大小:12.35KB
返回 下载 相关 举报
实验二互信息计算.docx_第1页
第1页 / 共5页
实验二互信息计算.docx_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《实验二互信息计算.docx》由会员分享,可在线阅读,更多相关《实验二互信息计算.docx(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验二互信息计算 试验二 互信息的计算 信科 1.试验目的 进一步熟识互信息的计算 娴熟驾驭编程语言字符处理程序的设计和调试技术 2.试验要求 已知:信源符号为英文字母(不区分大小写)和空格。 输入:一篇英文的信源文档。输出:列出每两个字母之间的互信息并计算平均互信息。 基本思想 读入英文字符,分两次读入 第一次读入计算字符信息熵,其次次读入计算信道疑义度。 计算平均互信息时,把读入的每个英文字符转化为对应的ASCII码,存入数组中。定义一个矩阵,用于存放前后两个字母出现的次数。对数组做循环,pi指向前一个字符,pi+1指向后个字符,每向后移动一位,把矩阵的元素加1,直至把数组循环完。复制一个

2、矩阵,分别求出联合概率和条件概率,把两个矩阵对应的元素相乘,把矩阵元素累加,即得信道疑义度。用熵减去信道疑义度,即得平均互信息。 英文字符 Each of us has such a bank.Its name is “TIME“.Every morning,TIME creditsyou with 86400 seconds.Every night it writes over no balances. It allows no overdraft.Each day it opens a new account for you.Each night it burns the remains

3、of the day.If you fail to use the days deposits,tge loss is yours.There is no going back.There is no drawing against the “tomorrow“.You must live in the present on todays deposits.Invest it so as to get from it the utmost in health,happiness and success!The clock is running.Make the most of today. #

4、include “stdio.h“ #include “stdlib.h“ #include <math.h> void main() FILE *fp; fp=fopen(“file.txt“,“r“); int d,i=0,j=0; int p1000;/用于存放字母 int b,c,add=0; float num26=0,space=0; float t; double shang; float f26=0; float M2727=0,N2727=0; if(fp=NULL) printf(“不能打开文件n“); exit(0); ; while(d=fgetc(fp)!

5、=EOF)/把字符的ASC码存入数组中 pi+=d; for(i=0;pi>0;i+)/把小写字母转化成大写字母 if(pi>=97) pi=pi-32; printf(“字符的ASC码为:n“); for(int a=0;pa>0;a+) printf(“%d “,pa); printf(“n“); /把p填入矩阵M中 for(i=0;pi>0;i+)/填满矩阵M第一行 if(pi=32) int g=pi+1; if(g=32) M00=M00+1; else g=g-64; M0g+; for(i=0;pi>0;i+)/填满矩阵的其他行 if(pi!=32)

6、 int h,k; h=pi-64; k=pi+1; if(k>0) if(k=32) k=0; else k=k-64; Mhk=Mhk+1; /求出连续两个字母出现的总数 float total=0; for(i=0;i<27;i+) for(j=0;j<27;j+) total=total+Mij; /矩阵复制 for(i=0;i<27;i+) for(j=0;j<27;j+) Nij=Mij; /求条件 float s27=0; for(j=0;j<27;j+) for(i=0;i<27;i+) sj=sj+Mij; /求p(xy)并存储在M2

7、727中 for(i=0;i<27;i+) for(j=0;j<27;j+) Mij=Mij/total; /求p(x/y)并存储在N2727中 for(j=0;j<27;j+) for(i=0;i<27;i+) Nij=Nij/sj; /* for(i=0;i<4;i+)/矩阵输出 for(j=0;j<4;j+) printf(“%f “,Nij); printf(“n“); ;*/ /求信道疑义度 for(i=0;i<27;i+) for(j=0;j<27;j+) if(Nij!=0) Mij=Mij*log(1/Nij); /信道疑义度 f

8、loat Hxy=0; for(i=0;i<27;i+) for(j=0;j<27;j+) Hxy=Hxy+Mij; printf(“信道疑义度为:n“); printf(“%f“,Hxy); printf(“n“); printf(“n“); /计算熵 fp=fopen(“file.txt“,“r“); if(fp=NULL) printf(“不能打开文件n“); exit(0); ; while(c=fgetc(fp)!=EOF) if(c>=ac<=z) numc-97+; else if(c>=Ac<=Z) numc-A+; if(c=32) spa

9、ce+; ; t=0;shang=0; for(i=0;i<=25;i+) t=t+numi; t+=space; printf(“各字母的概率为:n“); for(i=0;i<=25;i+) fi=numi/t; if(fi!=0) printf(“%c,%f “,97+i,fi); float ps; printf(“space, %fn“,ps=space/t); for(i=0;i<=25;i+) if(fi!=0)shang=shang-fi*log(fi); if(ps!=0) shang-=ps*log(ps); printf(“n信息熵=%f“,shang); fclose(fp); printf(“n“); float I; I=shang-Hxy; printf(“n“); printf(“平均互信息I(X;Y)为:n“); printf(“%fn“,I); printf(“n“);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁