信源剩余度的计算
桂林电子科技大学 数学与计算科学学院实验报告 实验室:06410 实验日期:年 月 日 院(系) 学号 姓名 成绩 课程 名称 信息与编码 实验项目 名 称 信源剩余度的计算 一 ,实验目的 熟练掌握信源熵的概念、信源剩余度的概念、熟练掌握C语言中文件操作与指针操作。 二,实验原理 信源熵的运算规则 三,实验内容 自己生成一个英文文件,可以在网上找,也可以自己生成。为了保证实验数据的可靠性,数据的量要比较大。为了保证二维信源统计的可靠性,建议文件的英文字符在十万以上。 1、 编写一维信源统计程序,得出一维统计频次,计算信源熵及剩余度。 2、 编写一维信源统计程序,得出二维统计频次,计算信源熵及剩余度。 四,实验过程原始记录(数据,图表,计算等) 代码: #include #include #include #define NULL 0 int charge(char c) {int n; if(c>=65 return n; } else return -1; } void main() { int count[26][26]={0}; char zifu1,zifu2; int i,n,m,j; int sum=0; float q, sum1=0; FILE *fp; If((fp=(“file”, “rb”))==NULL) { printf(“ can’t open file!\n”); exit(0); } while(!feof(fp)) { zifu1=fgetc(fp); n=charge(zifu1); if(n!= -1) { zifu2=fgetc(fp); m=charge(zifu2); if(m!= -1) { count[n][m]++; fseek(fp,-1,1); } } } fclose(fp); for(i=0;i<26;i++) for(j=0;j<26;j++) sum=sum+count[i][j]; printf(“the number of all the code is %d\n”, sum); q=(float)sum; for(i=0;i<26;i++) for(j=0;j<26;j++) { if(j%3==0) printf(“\n”); printf(“%c%c,%4d, %6.5f%% ”,i+97,j+97,count[i][j],count[i][j]*100/q); } printf(“\n”); for(i=0;i<26;i++) for(j=0;j<26;j++) if(count[i][j]) sum1=sum1+(float)((count[i][j]/q)*log10(1/(double)(count[i][j] /q))/log10((double)(2))); printf(“\n 信息熵为: H(x)=%f\n”, sum1); } 五,实验结果分析或总结 经过这次实验,学会了信源剩余度的计算。