资源描述:
《信息编码实验指导书》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《信息编码理论》实验指导书孙可编桂林电子科技大学数学与计算科学学院2016年9月23日实验一信源剩余度计算一、实验目的1、掌握信息熵的计算方法2、掌握文件操作方法以及文件指针操作方法。二、实验课时:2个课时三、实验准备1、熟悉信源熵计算方法;2、熟悉信源剩余压计算方法;3、熟悉文件操作命令。4、熟悉文件指针操作命令。四、实验内容用C语言完成二维信源剩余度的计算程序。(必做)根据信源熵的性质,英语的信源熵的最大值为(比特/符号),但事实上,由于在英语中的字母并非等概出现(表1),实际的离散信源熵大概为(比特/符号),有些字母之间还有较强的依赖关系,为了进一步逼近实际情
2、况,可对英语信源进行2维、三维等形式的统计,求得实际的熵,其中(比特/符号),(比特/符号)。容易推知,有依赖关系的字母数越多,输出的序列越接近于实际情况,当依赖关系延伸到无穷远时,信源输出的就是真正的英语。此时可求出马尔可夫信源的极限熵(比特/符号)。对于以上信源冗余度的知识,可以设置如下程序训练。1.将一大段英文文章作为要统计的样本文件2.对样本文件进行一维概率统计,并计算出信源熵及冗余度3.对样本文件进行二维概率统计,并计算出信源熵及冗余度在进行统计时,首先要在程序中打开文件,然后对文件中的字符读入程序中,进行统计。在二维统计时,尤其要求对文件的指针操作要熟悉
3、。如读入“newspaper”时,应该依次读入“neewwssppaappeer”,而如果使用fgetc()等命令读文件时,读入的是“newspape”为了依次读入“neewwssppaappeer”,就要求在每次调入fgetc()等命令后,再将文件指针往后退一步,即要求学生能熟练使用fseek()命令进行指针定位操作。五、实验主要步骤二维信源熵程序如下:#include#include#include#defineNULL0intcharge(charc){intn;if(c>=65&&c<=90)c=c+32
4、;if(c>+97&&c<=122){n=c-97;returnn;}elsereturn-1;}voidmain(){intcount[26][26]={0};charzifu1,zifu2;inti,n,m,j;intsum=0;floatq,sum1=0;FILE*fp;If((fp=fopen(“file”,“rb”))==NULL){printf(“can’topenfile!”);exit(0);}while(!feof(fp)){zifu1=fgetc(fp);n=charge(zifu1);if(n!=-1){zifu2=fgetc(fp);m=
5、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(“thenumberofallthecodeis%d”,sum);q=(float)sum;for(i=0;i<26;i++)for(j=0;j<26;j++){if(j%3==0)printf(“”);printf(“%c%c,%4d,%6.5f%%”,i+97,j+97,count[i][j],coun
6、t[i][j]*100/q);}printf(“”);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(“信息熵为:H(x)=%f”,sum1);}六、实验实验报告的撰写要求1.写出实验课程名称、课号,任课老师;2.写出姓名、学号、日期;3.写出实验目的、实验内容;4.调试信源的二维剩余度5.写出心得体会实验二香农编码一、
7、实验目的1、掌握香农编码算法。2、了解位运算方法。3、培养编程与上机调试能力。二、实验课时:2个课时三、实验准备Shannon码编码步骤为:1.将信源的所有符号按概率从大到小排列:2.对第个信源符号取整数码长,为取整运算3.计算累加概率4.将变换成二进制数,并按步骤2中计算的长度取的二进制系数,组合起来即为的香农码字.四、实验内容程序如下: #include#include#includedoubleP[6]={0.25,0.1,0.2,0.25,0.15,0.05},Pax[6],machang[6];