实用文档
课程名称:姓 名:系:专 业:年 级:学 号:指导教师:职 称:
.
实验报告
信息论与编码
年 月 日
实用文档
目 录
实验一 信源熵值的计算 ........................................................................ 1 实验二 Huffman信源编码 ..................................................................... 5 实验三 Shannon编码 ............................................................................ 9 实验四 信道容量的迭代算法 .............................................................. 12 实验五 率失真函数 ............................................................................. 14 实验六 差错控制方法 .......................................................................... 19 实验七 汉明编码 ................................................................................. 22
.
实用文档
实验一 信源熵值的计算
一、 实验目的
1 进一步熟悉信源熵值的计算 2熟悉 Matlab 编程
二、实验原理
熵(平均自信息)的计算公式
q1H(x)??pilog2???pilog2pi
pii?1i?1qMATLAB实现:HX?sum(?x.*log2(x));或者h?h?x(i)*log2(x(i)) 流程:第一步:打开一个名为“nan311”的TXT文档,读入一篇英文文章存入一个数组temp,为了程序准确性将所读内容转存到另一个数组S,计算该数组中每个字母与空格的出现次数(遇到小写字母都将其转化为大写字母进行计数),每出现一次该字符的计数器+1;
第二步:计算信源总大小计算出每个字母和空格出现的概率;
最后,通过统计数据和信息熵公式计算出所求信源熵值(本程序中单位为奈特nat)。
程序流程图:
.
实用文档
三、实验内容
1、写出计算自信息量的Matlab 程序
2、已知:信源符号为英文字母(不区分大小写)和空格。 输入:一篇英文的信源文档。
输出:给出该信源文档的中各个字母与空格的概率分布,以及该信源的熵。
四、实验环境
Microsoft Windows 7 Matlab 6.5
五、编码程序
#include\#include
char s[N]; int i,n=0;
float num[27]={0};
double result=0,p[27]={0}; FILE *f;
char *temp=new char[485];
f=fopen(\
while (!feof(f)) {
fread(temp,1, 486, f);} fclose(f);
s[0]=*temp;
for(i=0;i s[i]=temp[i]; } for(i=0;i if(s[i]==' ') num[26]++; else if(s[i]>='a'&&s[i]<='z') num[s[i]-97]++; else if(s[i]>='A'&&s[i]<='Z') . 实用文档 num[s[i]-65]++; } printf(\文档中各个字母出现的频率:\\n\ for(i=0;i<26;i++) { p[i]=num[i]/strlen(s); printf(\ n++; if(n==3) { printf(\ n=0; } } p[26]=num[26]/strlen(s); printf(\空格:%f\\t\printf(\ for(i=0;i<27;i++) { if (p[i]!=0) result=result+p[i]*log(p[i]); } result=-result; printf(\信息熵为:%f\printf(\return 0; } 六、求解结果 其中nan311.txt中的文档如下: There is no hate without fear. Hate is crystallized fear, fear’s dividend, fear objectivized. We hate what we fear and so where hate is, fear is lurking. Thus we hate .