1、 1 一一 设计目的设计目的 信息论与编码是我们电子信息工程的一门重要的专业课,通过对本次课程设 计,学习将学到的理论知识用于实践,同时也学习了用软件编写程序,进一步对 本课程知识的巩固和理解。学习分析问题,解决问题的方法和途径,提高对本专 业的学习兴趣。 二二 设计任务与要求设计任务与要求 (1)统计信源熵 要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率, 并计算信源熵。 (2)哈夫曼编码 要求:任意输入消息概率,利用哈夫曼编码方法进行编码,并计算信源熵和 编码效率。 三三 理论简介理论简介 3.1 通信系统的模型通信系统的模型 通信系统的模型 2 通信系统的性能指标主要是
2、有效性、可靠性、安全性和经济性,通信系统优 化就是使这些指标达到最佳,除了经济性,这些指标正是信息论的研究对象,可 以通过各种编码处理来使通信系统的性能最优化。 根据信息论的各种编码定理和 上述通信系统的指标, 编码问题可以分为 3 类: 信源编码、 信道编码和加密编码。 3.1.1 信源编码信源编码 由于信源符号之间存在分布不均匀和相关性,使得信源存在冗余度,信源编 码的主要任务就是减少冗余度,提高编码效率。信源编码的基础是信息论中的两 个编码定理:无失真编码定理和限失真编码定理。前者适用于离散信源或数字信 号;后者主要用于连续信源或模拟信号。本次课程设计就是利用的无失真信源编 码。 3.1
3、.2 信道编码信道编码 信源编码器的作用:把信源发出的消息变换成由二进制码元(或多进制码元) 组成的代码组,这种代码组就是基带信号。同时通过信源编码可以压缩信源的冗 余度,以提高通信系统传输消息的效率。信源译码器的作用:把信道译码器输出 的代码组变换成信宿所需要的消息形式,它的作用相当于信源编码器的逆过程。 3.1.3 加密编码加密编码 加密编码是研究如何隐蔽消息中的信息内容,以便在传输过程中不被窃听,提 高通信系统的安全性。 3.2 信源熵信源熵 3.2.1 信源的描述和分类信源的描述和分类 int i = 0,j=0,n=0,L=0; int len, num27 = 0; double
4、result=0,p27= 0; FILE *f; char tempN; /*以下是打开一个指定文件的过程*/ if(!(f = fopen(“C:test2.txt“,“rb“) printf(“文件打开失败!n“); return 0; while(!feof(f) /feof输入输出函数,检查文件是否结束,如结束, 则返回非零值,否则返回 0 .函数原型为:int feof(FILE *fp) len = fread(temp,1,486,f); /fread 返回读取的字符个数 temp 为内存区 域首地址 1 为每次读入字节数 486 读入次数 f指针 13 fclose(f);
5、/关闭文件 templen = 0; /方便统计字符总数 memcpy(s, temp, sizeof(temp); /从 temp 中拷贝 sizeof个字节到目标 s 中 /*统计 26 个字母及空格出现次数*/ for(i=0; i=a printf(“文档中各个字母出现的次数:n“); for(j=0; j clear; P=input(请输入信源概率向量 P=); 15 N=length(P); for component=1:1:N if(P(component)0.0001) error(信源概率之和必须为 1); end %建立各概率符号的位置索引矩阵 Index,利于编码后从
6、树根进行回溯,从 而得出对应的编码 Q=P Index=zeros(N-1,N); %初始化 Index for i=1:N-1 Q,L=sort(Q); Index(i,:)=L(1:N-i+1),zeros(1,i-1); G(i,:)=Q; Q=Q(1)+Q(2),Q(3:N),1; %将 Q 中概率最小的两个元素合并,元素不足的地方补 1 end %根据以上建立的 Index矩阵,进行回溯,获取信源编码 for i=1:N-1 Char(i,:)=blanks(N*N); %初始化一个由空格符组成的字符矩阵 N*N,用于存放编码 end %从码树的树根向树叶回溯,即从 G 矩阵的最后一行按与 Index 中的索引 位置的对应关系向其第一行进行编码 Char(N-1,N)=0; %G 中的 N-1 行即最后一行第一个元素赋为 0,存到 Char 中 N-1 行的 N 列位置 Char(N-1,2*N)=1; 16 %G