费诺编码课程设计讲解

费诺编码课程设计讲解
费诺编码课程设计讲解

吉林建筑大学

电气与电子信息工程学院信息理论与编码课程设计报告

设计题目:费诺编码

专业班级

学生姓名:

学号:

指导教师:

设计时间:2014.11.24-2014.12.5

第1章 概述

1.1设计的作用、目的

《信息论与编码》是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充。其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能,提高实践技能,培养独立分析问题、解决问题及实际应用的能力。

通过完成具体编码算法的程序设计和调试工作,提高编程能力,深刻理解信源编码、信道编译码的基本思想和目的,掌握编码的基本原理与编码过程,增强逻辑思维能力,培养和提高自学能力以及综合运用所学理论知识去分析解决实际问题的能力,逐步熟悉开展科学实践的程序和方法。

1.2设计任务及要求

1.理解无失真信源编码的理论基础,掌握无失真信源编码的基本方法;

2.根据费诺编码算法,考虑一个有多种可能符号(各种符号发生的概率不同)的信源,得到费诺编码; 3.掌握费诺编码的优缺点;

4.能够使用MATLAB 或其他语言进行编程,编写的函数要有通用性,要理解每个函数的具体意义和适用范围,对主要函数的功能和参数做详细说明。

1.3设计内容

费诺编码属于概率匹配编码,但不是最佳的编码方法。在编N 进制码时首先将信源消息符号按其出现的概率依次由小到大排列开来,并将排列好的信源符号按概率值分N 大组,使N 组的概率之和近似相同,并对各组赋予一个N 进制码元0、1……N-1。之后再针对每一大组内的信源符号做如上的处理,即再分为概率和相同的N 组,赋予N 进制码元。如此重复,直至每组只剩下一个信源符号为止。此时每个信源符号所对应的码字即为费诺码。

针对同一信源,费诺码要比香农码的平均码长小,消息传输速率大,编码效率高。

一个有8个符号的信源X ,各个符号出现的概率为:

进行费诺编码,并计算平均码长、编码效率、冗余度。

X P (X )

X1, X2, X3, X4, X5, X6, X7, X8

0.19, 0.18, 0.17, 0.16, 0.13, 0.10, 0.06, 0.01

第2章费诺编码

2.1设计原理

1.编码与信源编码

在学过信息论与编码以后,对这方面内容已有了基础的了解。为了进行更深入的了解,我查阅了很多资料,我认为通信的根本问题是如何将信源输出的信息在接收端的信宿精确地或近似地复制出来,而这最重要的一步就是信源的编码,一个好的开端才能为以后的传输及接受、解码提供有利得条件。而我也对各种信源编码方式产生了浓厚的兴趣。

1.1首先要了解什么是信源编码

为了减少信源输出符号序列中的剩余度、提高符号的平均信息量,对信源输出的符号序列所施行的变换。具体说,就是针对信源输出符号序列的统计特性来寻找某种方法,把信源输出符号序列变换为最短的码字序列,使后者的各码元所载荷的平均信息量最大,同时又能保证无失真地恢复原来的符号序列[8]。既然信源编码的基本目的是提高码字序列中码元的平均信息量,那么,一切旨在减少剩余度而对信源输出符号序列所施行的变换或处理,都可以在这种意义下归入信源编码的范畴,例如过滤、预测、域变换和数据压缩等。一般来说,减少信源输出符号序列中的剩余度、提高符号平均信息量的基本途径有两个:①使序列中的各个符号尽可能地互相独立;②使序列中各个符号的出现概率尽可能地相等。前者称为解除相关性,后者称为概率均匀化。在通信过程中,如何在不失真或允许一定失真条件下,用尽可能少的符号来传送信源信息,提高信息传输率;在信道受干扰的情况下,如何增加信号的抗干扰能力,同时又使得信息传输率最大。这就产生了多种信源编码方式[2]。

为了有效传播信息,最理想状态即为无失真传输。在无失真信源编码中又分为定长编码、变长编码机最佳变长编码。

1.1.1定长编码

在定长编码中,K是定值,编码的目的即为找到最小的K值。要实现无失真

的信源编码,不但要求信源符号与码字是一一对应的,而且还要求有码字组成的码符号序列的逆变换也是唯一的。由定长编码定理可知,当编码器容许的输出信息率,也就是当每个信源符号必须输出的码长是K=Kl/logm。

由定理表明,只要码字所能携带的信息量大于信源序列输出的信息量,则可以使传输几乎无失真,但是条件是L足够大。这就为传输带来了很大的麻烦,并且实现起来很困难,并且编码效率也不高。而要达到编码效率接近1的理想编码器虽有存在性,但在实际上时不可能的,因为L非常大,无法实现。由此而产生了变长编码。

1.1.2变长编码

在变长编码中,码长K是变化的,可根据信源各个符号的统计特性,对概率大的符号用短码,而对概率小的符号用长码。这样大量信源符号编成码后,平均每个信源符号所需的输出符号数就可以降低,从而提高编码效率。用变长编码来达到相当高的编码效率,一般所要求的符号长度L可以比定长编码小得多的多。很明显,定长码需要的信源序列长,这使得码表很大,且总存在译码差错。而变长码要求编码效率达到96%时,只需L=2.因此用变长码编码时,L不需要很大就可达到相当高的编码效率,而且可实现无失真编码。并且随着信源序列长度的增加,编码效率越来越接近于1,编码后的信息传输率R也越来越接近于无噪无损二元对称信道的信道容量C=1bit/二元码符号,达到信源与信道匹配,使信道得到充分利用。但变长编码方式也有优劣的区分,下面就讨论几种不同的变长编码方式[1]。

1、香农编码方法

香农第一定理指出了平均码长与信源之间的关系,同时也指出了可疑通过编码使平均码长达到极限值,这是一个很重要的极限定理。香农第一定理指出,选择每个码字的长度Ki满足下式:I(xi)

由此可见香农编码法冗余度稍大,实用性不强,但他是依据编码定理而来,因此具有重要的理论意义。

1.2费诺编码方法

费诺编码属于概率匹配编码,但不是最佳的编码方法。在编N进制码时首先将信源消息符号按其出现的概率依次由小到大排列开来,并将排列好的信源符号按概率值分N大组,使N组的概率之和近似相同,并对各组赋予一个N进制码元0、1……N-1。之后再针对每一大组内的信源符号做如上的处理,即再分为概率和相同的N组,赋予N进制码元。如此重复,直至每组只剩下一个信源符号为止。此时每个信源符号所对应的码字即为费诺码。

针对同一信源,费诺码要比香农码的平均码长小,消息传输速率大,编码效率高。

1.3哈夫曼编码方法

编码方法:也是先将信源符号按其出现的概率大小依次排列,并取概率最小的字母分别配以0和1两个码元(先0后1或者先1后0,以后赋值顺序固定),再将这两个概率想家作为一个新字母的概率,与未分配的二进制符号的字母重新排队。并不断重复这一过程,直到最后两个符号配以0和1为止。最后从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即为相应的码字。

哈夫曼编码方式得到的码并非唯一的。在对信源缩减时,两个概率最小的符号合并后的概率与其他信源符号的概率相同时,这两者在缩减信源中的排序将会导致不同码字,但不同的排序将影响码字的长度,一般将合并的概率放在上面,这样可获得较小的码方差。

哈夫曼码的平均码长最小,消息传输效率最大,编码效率最高。

鉴于以上编码的特点与我所掌握的知识下面我将着重介绍费诺编码。

2. 费诺编码的描述

费诺编码是一种信源编码.

信源编码分为无失真信源编码和限失真信源编码。一般称无失真信源编码为第一机械定理;限失真信源编码定理称为第三极限定理。

由于信源符号之间存在分布不均匀和相关性,使得信源存在冗余度,信源编码的主要任务就是减少冗余,提高编码效率。具体说,就是针对信源输出符号序列的统计特性,寻找一定的方法把信源输出符号序列变换为最短码字序列的方法。信源编码的基本途径有两个:使编码中各个符号出现的概率尽可能地相等,即概率均匀化。

信源编码的基础是信息论中的两个编码定理:无失真编码定理和限失真编码定理。其中无失真编码定理是可逆编码的基础。可逆是指当信源符号转换成代码后,可从代码无失真地恢复信源符号。当已知信源符号的概率特性时,可计算它的符号熵,这表示每个信源符号所载有的信息量。编码定理不但证明了必定存在一种编码方法,可使代码的平均长度可任意接近但不低于符号熵,而且还阐明达到这目标的途径,就是使概率与码长匹配。无失真编码或可逆编码只适用于离散信源。对于连续信源,编成代码后就无法无失真地恢复原来的连续值,因为后者的取值可有无限多个。此时只能根据率失真编码定理在失真受限制的情况下进行限失真编码。信源编码定理出现后,编码方法就趋于合理化。

凡是能载荷一定的信息量,且码字的平均长度最短,可分离的变长码的码字集合称为最佳变长码。能获得最佳码的编码方法主要有:香农码(Shannon)、费诺(Fano)、哈夫曼(Huffman)编码等。

3. 费诺编码步骤

1.将信源消息符号按其出现的概率大小依次排列:P1>=P2>=…>=Pn。

2.依次排列的信源符号按概率值分为两大组,使两个组的概率之和近似相同,并对各组赋予一个二进制码元“0”和“1”。

3.使划分后的两个组的概率之和近似相同,并对各组赋予一个二进制符号“0”和“1”。

4.如此重复,直至每个组只剩下一个信源符号为止。

5.信源符号所对应的码字即为费诺码。

4. 费诺编码特点

费诺编码,它编码后的费诺码要比香农码的平均码长小,消息传输速率大,编码效率高,但它属于概率匹配编码它不是最佳的编码方法[1]。

费诺编码方法属于概率匹配编码,具有如下特点:

1、概率大,则分解次数小;概率小则分解次数多。这符合最佳码原则。

2、码字集合是唯一的。

3、分解完了,码字出来了,码长也有了,即先有码字后有码长。

因此,费诺编码方法又称为子集分解法。

2.2设计步骤

1.费诺编码过程框图

图1费诺码编码过程图

2.费诺编码过程表

表1费诺码编码过程表 3. 计算平均码长、编码效率、冗余度。

符号码元平均码长:/85.2)(K 8

1i ==∑=i i K a p

码元传输速率:/bit 916.085.261.2)(R ===K

X H

0.916=η编码效率:

4. 冗余度

在数据传输中,由于衰减或干扰会使数据代码发生突变,此时就要提高数据代码的抗干扰能力.这必须在原二进制代码长度的基础上增加几位二进制代码的长度,使相应数据具有一定的冗余度,也称做富裕度.

简单地说,所谓冗余度,就是从安全角度考虑多余的一个量,这个量就是为了保障仪器、设备或某项工作在非正常情况下也能正常运转。目前大多现代产品和工程设计中都应用了冗余度这个思想和理论。在许多医疗单位中药品存量不足,卫生材料存量不够,一遇突发事件,就会造成缺货,造成涨价风波,影响社会安定。在我们的医院中,由于各项费用都与经济效益挂钩,医疗设备等卫生装备冗余度很不够,基本上只能按平时的正常运转设置,甚至有的都没达到。一遇突发事件,这点装备就显得严重不足。

冗余度,通俗的讲就是数据的重复度。在一个数据集合中重复的数据称为数据冗余

第3章费诺编码的MATLAB实现

3.1 MATLAB简介

Matlab是MathWorks公司于1982年推出的一套高性能的数值计算和可视化软件。它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便、界面良好的用户环境。它还包括了Toolbox(工具箱)的各类问题的求解工具,可用来求解特定学科的问题。其特点是:[16,17,18]

(1) 可扩展性:Matlab最重要的特点是易于扩展,它允许用户自行建立指定功能的M文件。对于一个从事特定领域的工程师来说,不仅可利用Matlab所提供的函数及基本工具箱函数,还可方便地构造出专用的函数。从而大大扩展了其应用范围。当前支持Matlab的商用Toolbox(工具箱)有数百种之多。而由个人开发的Toolbox则不可计数。

(2) 易学易用性:Matlab不需要用户有高深的数学知识和程序设计能力,不需要用户深刻了解算法及编程技巧。

(3) 高效性:Matlab语句功能十分强大,一条语句可完成十分复杂的任务。如fft语句可完成对指定数据的快速傅里叶变换,这相当于上百条C语言语句的功能。它大大加快了工程技术人员从事软件开发的效率。据MathWorks公司声称,Matlab软件中所包含的Matlab源代码相当于70万行C代码。

3.2 MATLAB广泛应用

由于Matlab具有如此之多的特点,在欧美高等院校,Matlab已成为应用于线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具:在研究单位、工业部门,Matlab也被广泛用于研究和解决各种工程问题。当前在全世界有超过40万工程师和科学家使用它来分析和解决问题[14]。

Matlab作为科学计算软件,主要适用于矩阵运算和信息处理领域的分析设计,它使用方便、输入简捷,运算高效、内容丰富,并且有大量的函数库

可提供使用,与Basic ,C 和Fortran 相比,用Matlab 编写程序,其问题的提出和解决只需要以数学方式表达和描述,不需要大量繁琐的编程过程。利用Matlab 软件并通过计算机仿真光学空间滤波实验过程的新方法,其特点是:既可以随意改变所设计滤波器的参量,又可以对输入图像进行振幅、相位或复合滤波,并且可实现傅里叶变换频谱中相位信息的提取、存储和利用,因而能够完成一般光学实验中往往难以实现的某些操作.并分别给出了网格滤波、低通、高通及相位滤波等仿真实验结果。这种仿真实验给光学滤波器的设计和图象处理带来很大方便,同时也为相关器件的设计提供了一条新的途径。

3.3 MATLAB 软件系统构成

MATLAB 软件主要包括主包、Simulink 和工具箱三大部分组成。下图为MATLAB 界面:

3.4 MATLAB 语言

MATLAB 可以认为是一种解释性语言,可以直接在MATLAB 命令窗口键入命令,也可以在编辑器内编写应用程序,这样MATLAB 软件对命令或程序中各条语句进行翻译,然后在MATLAB 环境下对它进行处理,最后返回运算结果。

MATLAB 语言的基本语句结构为: 变量名列表=表达式

其中等号左边的变量名列表为MATLAB 语句的返回值,等号右边是表达式的定义,它可以是MATLAB 允许的矩阵运算,也可以使函数调用。

等号右边的表达式可以由分号结束,也可以由逗号或回车结束,但他们的含义是不同的,如果用分号结束,则左边的变量结果将不在屏幕上显示出来,否则将把结果全部显示出来。

MATLAB语言和C语言有所不同,在调用函数式MATLAB允许一次返回多个结果,这时等号左边是用[]括起来的变量列表。

3.4 MATLAB编程

费诺编码也是一种常见的信源编码方法。信源符号以概率递减的次序排列进来,将排列好的信源符号划分为两大组,使第组的概率和近于相同,并各赋于一个二元码符号”0”和”1”.然后,将每一大组的信源符号再分成两组,使同一组的两个小组的概率和近于相同,并又分别赋予一个二元码符号.依次下去,直至每一个小组只剩下一个信源符号为止.这样,信源符号所对应的码符号序列则为编得的码字。

根据其原理所得到的MATLAB程序如下:

clc;

clear;

A=[0.19,0.18,0.17,0.16,0.13,0.10,0.06,0.01];

A=fliplr(sort(A));%降序排列

[m,n]=size(A);

for i=1:n

B(i,1)=A(i);%生成B的第1列

end

%生成B第2列的元素

a=sum(B(:,1))/2;

for k=1:n-1

if abs(sum(B(1:k,1))-a)<=abs(sum(B(1:k+1,1))-a)

break;

end

end

for i=1:n%生成B第2列的元素

if i<=k

B(i,2)=0;

else

B(i,2)=1;

end

end

%生成第一次编码的结果

END=B(:,2)';

END=sym(END);

%生成第3列及以后几列的各元素

j=3;

while (j~=0)

p=1;

while(p<=n)

x=B(p,j-1);

for q=p:n

if x==-1

break;

else

if B(q,j-1)==x

y=1;

continue;

else

y=0;

break;

end

end

end

if y==1

q=q+1;

end

if q==p|q-p==1

B(p,j)=-1;

else

if q-p==2

B(p,j)=0;

END(p)=[char(END(p)),'0'];

B(q-1,j)=1;

END(q-1)=[char(END(q-1)),'1']; else

a=sum(B(p:q-1,1))/2;

for k=p:q-2

if

abs(sum(B(p:k,1))-a)<=abs(sum(B(p:k+1,1))-a);

break;

end

end

for i=p:q-1

if i<=k

B(i,j)=0;

END(i)=[char(END(i)),'0'];

else

B(i,j)=1;

END(i)=[char(END(i)),'1'];

end

end

end

end

p=q;

end

C=B(:,j);

D=find(C==-1);

[e,f]=size(D);

if e==n

j=0;

else

j=j+1;

end

end

B

A

END

for i=1:n

[u,v]=size(char(END(i)));

L(i)=v;

end

avlen=sum(L.*A)

encodef=2.61/ avlen

3.5运行结果及分析

图3 运行结果图

第4章总结

本学期的课程设计结束了,通过本次设计的经历我认识到了许多专业知识上的不足之处,对于老师课堂上的理论知识进一步的进行了巩固,在以后的学习中还应该继续努力。

仿真时,我学习巩固了仿真软件MATLAB,学习到了仿真软件的一些作用。和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。MATLAB 的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用其他的仿真软件等语言完成相同的事情简捷得多,并且应用它也吸收了像Maple等软件的优点,使它成为一个强大的数学软件。可以说MATLAB就是我们设计的好帮手。

通过这次课程设计,我们又掌握了许多新知识,学习巩固了MATLAB软件.同时也巩固了专业知识,为以后学习打下了好的基础,每次的课程设计我们都应该认真完成它。它对我们以后的学习和工作都有着很大的帮助,我们学习了以后工作可能用得到的东西,学习了新的东西。

参考文献

[1]·曹雪虹,张宗橙·信息论与编码·清华大学出版社·2009.2·

[2]·樊昌信,曹丽娜·通信原理·国防工业出版社·2006.9.·

[3]·严蔚敏,吴伟民·数据结构·清华大学出版社·2007.·

[4]·谭浩强·C程序设计·清华大学出版社·2005.·

[5]·徐利民,舒君,谢优忠·基于MATLAB的信号与系统实验教程·清华大学出版社·2010.2·

[6]·周炯磐·信息论基础·人民邮电出版社·1983.·

[7]·周炯磐,丁晓明·信源编码原理·人民邮电出版社·1999.·

[8]·周荫清信·息理论基础·北京航空航天大学出版社·1993.·

[9]·吴伯修,祝宗泰,钱霖君·信息论与编码·东南大学出版社·1991.·

[10]·阙喜戎·信息安全原理及应用·清华大学出版社·2003.·

信息论与编码课程设计..

吉林建筑大学 电气与电子信息工程学院信息理论与编码课程设计报告 设计题目:哈夫曼编码的分析与实现专业班级:电子信息工程101 学生姓名: 学号: 指导教师:吕卅王超 设计时间:2013.11.18-2013.11.29

一、设计的作用、目的 《信息论与编码》是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充。其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能,提高实践技能,培养独立分析问题、解决问题及实际应用的能力。 通过完成具体编码算法的程序设计和调试工作,提高编程能力,深刻理解信源编码、信道编译码的基本思想和目的,掌握编码的基本原理与编码过程,增强逻辑思维能力,培养和提高自学能力以及综合运用所学理论知识去分析解决实际问题的能力,逐步熟悉开展科学实践的程序和方法 二、设计任务及要求 通过课程设计各环节的实践,应使学生达到如下要求: 1. 理解无失真信源编码的理论基础,掌握无失真信源编码的基本方法; 2. 掌握哈夫曼编码/费诺编码方法的基本步骤及优缺点; 3. 深刻理解信道编码的基本思想与目的,理解线性分组码的基本原理与编码过程; 4. 能够使用MATLAB 或其他语言进行编程,编写的函数要有通用性。 三、设计内容 一个有8个符号的信源X ,各个符号出现的概率为: 编码方法:先将信源符号按其出现的概率大小依次排列,并取概率最小的字母分别配以0和1两个码元(先0后1或者先1后0,以后赋值固定),再将这两个概率相加作为一个新字母的概率,与未分配的二进制符号的字母重新排队。并不断重复这一过程,直到最后两个符号配以0和1为止。最后从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即为对应的码字。 哈夫曼编码方式得到的码并非唯一的。在对信源缩减时,两个概率最小的符号合并后的概率与其他信源符号的概率相同时,这两者在缩减中的排序将会导致不同码字,但不同的排序将会影响码字的长度,一般讲合并的概率放在上面, 12345678,,,,, ()0.40.180.10.10.070.060.050.04X x x x x x x x x P X ????=????????

信息论与编码实验程序与结果图(matlab)

信源熵实验程序: clc; close all; clear; linwidd=1 fontt=20 p0=0; pd=1; N=20 p=linspace(p0,pd,N); I=-log2(p); plot(p,I,'k'); title('I=-log2(p)函数图'); xlabel('p');ylabel('I'); clc; close all; clear; linwidd=1 fontt=20 p0=0; pd=1; N=20 p=linspace(p0,pd,N); H=-p.*log2(p)-(1-p).*log2(1-p); plot(p,H,'k'); title('H=-p.*log2(p)-(1-p).*log2(1-p)函数图'); xlabel('p');ylabel('H'); 信道容量实验程序: clc; close all; clear; linwidd=1 fontt=20 p0=0; pd=1; N=20 p=linspace(p0,pd,N); r=4 c=log2(r)+(1-p).*log2(1-p)+p.*log2(p/(r-1)); plot(p,c,'k'); title('强对称信道容量数值模拟图');

有噪信道编码--费诺不等式程序:结果图clc;close all;clear; r=3;p0=0.00001;pd=0.99999;N=2000; p=linspace(p0,pd,N); q=1-p; H=-p.*log2(p)-q.*log2(q); hold on HH=H+p.*log2(r-1) title('费诺不等式示意图');box on xlabel('PE'); ylabel('H(X/Y)'); plot(p,HH,'k:') hold on hold on fill([p,1],[HH,0],[0.6,0.6,0.6]) stem((r-1)/r,1.59,'--.r') text(0.66,1.6,'最大值') 香农编码程序: clc;clear all;close all; p=[0.2 0.19 0.18 0.17 0.15 0.1 0.01]; if sum(p)<1||sum(p)>1 error('输入概率不符合概率分布') end [p index]=sort(p,'descend'); n=length(p); pa=zeros(n,1); for ii=2:n pa(ii)=pa(ii-1)+p(ii-1); end k=ceil(-log2(p));%码字长度计算 c=cell(1,n);%生成元胞数组,用来存不同长度的码字 for ii=1:n c{ii}=''; tmp=pa(ii); for jj=1:k(ii) tmp=tmp*2; if tmp>=1 tmp=tmp-1; %c{ii}{jj}='1'; c{ii}=[char(c{ii}),'1']; else %c{ii}{jj}='0'; c{ii}=[char(c{ii}),'0']; end end end c(index)=c;%换回原来的顺序 codelength=zeros(1,n);%码长初始化 for ii=1:n fprintf(['第',num2str(ii),'个消息对应为']); disp(c{ii});%显示码字 codelength(ii)=length(c{ii});% end n_average=sum(codelength.*p) %平均码长 fprintf('平均码长为');disp(n_average); H=-sum(p.*log2(p)); fprintf('信源熵');disp(H); x=H/(n_average.*log2(2)) fprintf('编码效率');disp(x); figure h=stem(1:n,codelength);% axis([0 n+1 0 n+1]); set(h,'MarkerFaceColor','blue','linewidth',2) 实验结果 第1 个消息对应为000 第2个消息对应为001 第3个消息对应为011 第4个消息对应为100 第5个消息对应为101 第6个消息对应为1110 第7个消息对应为1111110 n_average = 3.1400 平均码长为 3.1400 信源熵 2.6087 x =0.8308 编码效率 0.8308

信息论与编码课程设计报告

目录 一:实验原理----------------------------1 二:程序源代码--------------------------1 三:实验分析-----------------------------6 四:实验结论---------------------------7

赫夫曼编码 一:实验原理 哈夫曼编码的具体步骤归纳如下: ① 概率统计(如对一幅图像,或m幅同种类型图像作灰度信号统计),得到n个不同概率的信息符号。 ② 将n个信源信息符号的n个概率,按概率大小排序。 ③ 将n个概率中,最后两个小概率相加,这时概率个数减为n-1个。 ④ 将n-1个概率,按大小重新排序。 ⑤ 重复③,将新排序后的最后两个小概率再相加,相加和与其余概率再排序。 ⑥ 如此反复重复n-2次,得到只剩两个概率序列。 ⑦ 以二进制码元赋值,构成哈夫曼码字。编码结束。 哈夫曼码字长度和信息符号出现概率大小次序正好相反,即大 概信息符号分配码字长度短,小概率信息符号分配码字长度长。 C、哈夫曼编码的特点 (1)哈夫曼编码的构造顺序明确,但码不是唯一的(因以大赋1还是小的赋1而异;

(2)哈夫曼编码的字长参差不齐,硬件实现不方便; (3)只有在概率分布很不均匀时,哈夫曼编码才有显著的效果,而在信源分布均匀时,一般不使用哈夫曼编码。 二:程序源代码: #define MAXVALUE 10000 #define MAXLEAF 30 #define MAXNODE 59 #define MAXBIT 10 #define LENTH 30 #include "" #include typedef struct{ float gailv; int flag; int parent; int lchild; int rchild; char ch; int t; }HNodeType; typedef struct{ int bit[MAXBIT]; int start; }HCodeType; typedef struct{ float gailv; char letter; }mytype; /*it's the type of data save in file*/ typedef struct filehuff{ int count; mytype mydata[MAXLEAF]; filehuff(){count=0; }; }; filehuff filedata; char code[MAXVALUE]; HNodeType HuffNode[MAXNODE]; void savetofile() { FILE *fp;

费诺编码的matlab实现

多媒体技术实验报告 学院:城南学院 姓名:学号: 指导老师:尹波 时间:2015年11月25日 1.实验目的

- 1)掌握费诺编码的思想和具体方法。 2)用MA TLAB语言实现费诺编码。 2.实验原理及编码思想: 费诺编码属于概率匹配编码,但不是最佳的编码方法。在编N进制码时首先将信源消息符号按其出现的概率依次由大到小排列开来,并将排列好的信源符号按概率值分N大组,使N组的概率之和近似相同,并对各组赋予一个N进制码元0、1……N-1。之后再针对每一大组内的信源符号做如上的处理,即再分为概率和相同的N组,赋予N进制码元。如此重复,直至每组只剩下一个信源符号为止。此时每个信源符号所对应的码字即为费诺码。 具体过程如下: [1] 将信源消息符号按其出现的概率大小依次排列:P1>=P2>=…>=Pn。 [2] 依次排列的信源符号按概率值分为两大组,使两个组的概率之和近似相同,并对各组赋予一个二进制码元“0”和“1”。 [3] 使划分后的两个组的概率之和近似相同,并对各组赋予一个二进制符号“0”和“1”。 [4] 如此重复,直至每个组只剩下一个信源符号为止。 [5] 信源符号所对应的码字即为费诺码。 例:有一幅40个像素组成的灰度图像,灰度共有5级,分别用符号A,B,C,D和E 表示。40个像素中出现灰度A的像素数有15个,出现灰度B的像素数有7个,出现灰度C 的像素数有7个,其余情况见表。

- 费诺编码方法属于概率匹配编码,具有如下特点: 1、概率大,则分解次数小;概率小则分解次数多。这符合最佳码原则。 2、码字集合是唯一的。 3、分解完了,码字出来了,码长也有了,即先有码字后有码长。 因此,费诺编码方法又称为子集分解法。 3. 程序设计思路

费诺编码课程设计报告书

建筑大学 电气与电子信息工程学院 信息理论与编码课程设计报告 设计题目:费诺编码 专业班级 学生: 学号: 指导教师: 设计时间: 2014.11.24-2014.12.5

第1章概述 1.1设计的作用、目的 《信息论与编码》是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充。其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能,提高实践技能,培养独立分析问题、解决问题及实际应用的能力。 通过完成具体编码算法的程序设计和调试工作,提高编程能力,深刻理解信源编码、信道编译码的基本思想和目的,掌握编码的基本原理与编码过程,增强逻辑思维能力,培养和提高自学能力以及综合运用所学理论知识去分析解决实际问题的能力,逐步熟悉开展科学实践的程序和方法。 1.2设计任务及要求 1.理解无失真信源编码的理论基础,掌握无失真信源编码的基本方法; 2.根据费诺编码算法,考虑一个有多种可能符号(各种符号发生的概率不同)的信源,得到费诺编码; 3.掌握费诺编码的优缺点; 4.能够使用MATLAB或其他语言进行编程,编写的函数要有通用性,要理解每个函数的具体意义和适用围,对主要函数的功能和参数做详细说明。 1.3设计容 费诺编码属于概率匹配编码,但不是最佳的编码方法。在编N进制码时首先将信源消息符号按其出现的概率依次由小到大排列开来,并将排列好的信源符号按概率值分N大组,使N组的概率之和近似相同,并对各组赋予一个N进制码元0、1……N-1。之后再针对每一大组的信源符号做如上的处理,即再分为概率和相同的N组,赋予N进制码元。如此重复,直至每组只剩下一个信源符号为止。此时每个信源符号所对应的码字即为费诺码。 针对同一信源,费诺码要比香农码的平均码长小,消息传输速率大,编码效率高。 一个有8个符号的信源X,各个符号出现的概率为: X P(X ) X1, X2, X3, X4, X5, X6, X7, X8 0.19, 0.18, 0.17, 0.16, 0.13, 0.10, 0.06, 0.01

信息论实验用matlab实现哈夫曼码编译码

信息论与编码基础课程 实验报告 实验名称:Huffman码编译码实验 姓名:学号: 组别:专业: 指导教师:班队: 完成时间:成绩:

Huffman码编译码实验 一.实验目的和要求 熟悉matlab软件编程环境及工具箱,掌握Huffman码编译码方法的基本步骤,利用matlab实现Huffman码的编译码。 二.试验内容和原理 内容:利用matlab编程实现文本的二进制Huffman码的编译码。 任务:构造Huffman树。 原理:在各字符出现概率不均匀的情况下,根据这些概率构造一棵用于编码的Huffman树。它用最短的二进制位表示出现概率最高的字符,而用较长的为表示出现概率低的字符,从而使平均码长缩短,并且保持编码的唯一可译性。三.操作方法和实验步骤 对一随机英文文本文件进行Huffman编译码仿真,给出各个字母的概率,码字,平均信息量,平均码长,编码效率以及编码序列输出。 (一)编码序列获取 使用fopen函数读取.txt文本文件中的数据存储为字符串,使用length获取其长度,使用unique获取字符个数。 (二)获取编码概率矩阵 使用strfind函数获取字符个数并计算各个符号的概率,根据哈夫曼编码原理依次获得各步骤中得到的概率,赋值给概率矩阵,使用find查 找合并概率在的下标并存储到该列的最后一位,如有两个以上优先存储较 大的那个下标。 (三)获取编码矩阵 依据哈夫曼编码原理,根据获取的概率矩阵倒序编码。最后一列直接编码0和1,取出最后一行中记录合并概率下标的数,由于该合并概率在 上一列中肯定在最后两行,故优先编码,在字符串尾部加0和1;剩余编

huffman编码的matlab实现

Huffman编码的matlab实现 一、信源编码介绍 为了减少信源输出符号序列中的剩余度、提高符号的平均信息量,对所施行的变换。具体说,就是针对信源输出符号序列的统计特性来寻找某种方法,把信源输出符号序列变换为最短的码字序列,使后者的各码元所载荷的平均信息量最大,同时又能保证无失真地恢复原来的符号序列。 既然信源编码的基本目的是提高码字序列中码元的平均信息量,那么,一切旨在减少剩余度而对信源输出符号序列所施行的变换或处理,都可以在这种意义下归入信源编码的范畴,例如过滤、预测、域变换和数据压缩等。当然,这些都是广义的信源编码。 一般来说,减少信源输出符号序列中的剩余度、提高符号平均信息量的基本途径有两个:①使序列中的各个符号尽可能地互相独立;②使序列中各个符号的出现概率尽可能地相等。前者称为解除相关性,后者称为概率均匀化。 信源编码的一般问题可以表述如下: 信源编码 若某信源的输出为长度等于M的符号序列集合式中符号A为信源符号表,它包含着K个不同的符号,A={ɑk|k=1,…,K},这个信源至多可以输出K M个不同的符号序列。记‖U‖=KM。所谓对这个信源的输出 信源编码 进行编码,就是用一个新的符号表B的符号序列集合V来表示信源输出的符号序列集合U。若V的各个序列的长度等于 N,即式中新的符号表B共含L个符号,B={b l|l=1,…,L}。它总共可以编出L N个不同的码字。类似地,记‖V‖=LN。为了使信源的每个输出符号序列都能分配到一个独特的码字与之对应,至少应满足关系‖V‖=L N≥‖U‖=KM或者N/M≥log K/log L 下面的几个编码定理,提供了解决这个矛盾的方法。它们既能改善信息载荷效率,又能保证码字唯一可译。 离散无记忆信源的定长编码定理 对于任意给定的ε>0,只要满足条件N/M≥(H(U)+ε)/log L 那么,当M足够大时,上述编码几乎没有失真;反之,若这个条件不满足,就不可能实现无失真的编码。式中H(U)是信源输出序列的符号熵。 信源编码 通常,信源的符号熵H(U)

信息论与编码课程设计报告书

信息论与编码课程设计报告设计题目:判断唯一可译码、香农编码 专业班级电信12-03 学号7 学生琳 指导教师成凌飞 教师评分 2015年3月21日

目录 一、设计任务与要求 (2) 二、设计思路 (2) 三、设计流程图 (3) 四、程序运行及结果 (4) 五、心得体会 (6) 参考文献 (7) 附录:源程序 (8)

一、设计任务与要求 通过本次课程设计的练习,使学生进一步巩固信源熵、信源编码的基本原理,掌握具体的编码方法,熟悉编程软件的使用,培养学生自主设计、编程调试的开发能力,同时提高学生的实践创新能力。 1、判断唯一可译码 利用尾随后缀法判断任意输入的码是否为唯一可译码,即设计一个程序实现判断输入码组是否为唯一可译码这一功能。 2、香农编码 熟悉运用香农编码,并能通过C语言进行编程,对任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。 二、设计思路 1、判断唯一可译码 在我们学习使用了克劳夫特不等式之后,知道唯一可译码必须满足克劳夫特不等式。但是克劳夫特不等式仅仅是存在性的判定定理,即该定理不能作为判断一种码是否为唯一可译码的依据。也就是说当码字长度和码符号数满足克劳夫特不等式时,则必可以构造出唯一可译码,否则不能构造出唯一可译码。因此我们必须找到一种能够判断一种码是否为唯一可译码的方法,尾随后缀法。 尾随后缀法算法描述: 设C为码字集合,按以下步骤构造此码的尾随后缀集合F: (1) 考查C中所有的码字,若Wi是Wj的前缀,则将相应的后缀作为一个尾随后缀放入集合F0中; (2) 考查C和Fi两个集合,若Wj∈C是Wi∈Fi的前缀或Wi∈Fi 是Wj

费诺编码

1 课题描述 本文通过采用递归的思想进行费诺编码,求得了每个字符的二进制码字。并且对编码后的平均码长,以及编码的传输效率进行了求解。符合费诺编码的要求,得到了预期的编码结果。 2 信源编码的相关介绍 信源编码分为无失真信源编码和限失真信源编码。一般称无失真信源编码为第一机械定理;限失真信源编码定理称为第三极限定理。 由于信源符号之间存在分布不均匀和相关性,使得信源存在冗余度,信源编码的主要任务就是减少冗余,提高编码效率。具体说,就是针对信源输出符号序列的统计特性,寻找一定的方法把信源输出符号序列变换为最短码字序列的方法。信源编码的基本途径有两个:使编码中各个符号出现的概率尽可能地相等,即概率均匀化。 信源编码的基础是信息论中的两个编码定理:无失真编码定理和限失真编码定理。其中无失真编码定理是可逆编码的基础。可逆是指当信源符号转换成代码后,可从代码无失真地恢复信源符号。当已知信源符号的概率特性时,可计算它的符号熵,这表示每个信源符号所载有的信息量。编码定理不但证明了必定存在一种编码方法,可使代码的平均长度可任意接近但不低于符号熵,而且还阐明达到这目标的途径,就是使概率与码长匹配。无失真编码或可逆编码只适用于离散信源。对于连续信源,编成代码后就无法无失真地恢复原来的连续值,因为后者的取值可有无限多个。此时只能根据率失真编码定理在失真受限制的情况下进行限失真编码。信源编码定理出现后,编码方法就趋于合理化。 凡是能载荷一定的信息量,且码字的平均长度最短,可分离的变长码的码字集合称为最佳变长码。能获得最佳码的编码方法主要有:香农码(Shannon)、费诺(Fano)、哈夫曼(Huffman)编码等。 3.费诺编码 3.1费诺编码算法 (1)将信源消息符号按其出现的概率大小依次排列:n p p p ≥≥≥ 21。 (2)将依次排列的信源符号按概率值分为两大组,使两个组的概率之和近似相同,并对各组赋予一个二进制码元“0”和“1”。 (3)将每一大组的信源符号再分为两组,使划分后的两个组的概率之和近似相同,并对各组赋予一个二进制符号“0”和“1”。

线性分组码编码的分析与实现

吉林建筑大学 电气与计算机学院 信息理论与编码课程设计报告 设计题目:线性分组码编码的分析与实现专业班级:电子信息工程121 学生姓名: 学号: 指导教师: 设计时间:2016.1.11-2016.1.22

第1章概述 1.1设计的作用、目的 《信息论与编码》是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充。其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能,提高实践技能,培养独立分析问题、解决问题及实际应用的能力。 通过完成具体编码算法的程序设计和调试工作,提高编程能力,深刻理解信源编码、信道编译码的基本思想和目的,掌握编码的基本原理与编码过程,增强逻辑思维能力,培养和提高自学能力以及综合运用所学理论知识去分析解决实际问题的能力,逐步熟悉开展科学实践的程序和方法。 1.2设计任务及要求 线性分组码具有编译码简单,封闭性好等特点,采用差错控制编码技术是提高数字通信可靠性的有效方法,是目前较为流行的差错控制编码技术。 通过设计一组(7,3)线性分组码,来完成对任意序列的编码,根据生成矩阵形成监督矩阵,得到伴随式下,并根据其进行译码,同时验证工作的正确性,最基本的是要具备对输入的信息码进行编码,让它具有抗干扰的能力。 1. 理解无失真信源编码的理论基础,掌握无失真信源编码的基本方法; 2. 掌握哈夫曼编码/费诺编码方法的基本步骤及优缺点; 3. 深刻理解信道编码思想与目的,理解线性分组码的基本原理与编码过程。 4. 能够使用MATLAB或其他语言进行编程,编写的函数要有通用性。1.3设计内容 已知一个(7,3)线性分组码的校验元与信息元有如下限定关系。设码字为 (c6 ,c5 , c4 , c3 , c2 , c1 , c0)。 ? ? ? ? ? ? ? ⊕ = ⊕ = ⊕ ⊕ = ⊕ = 2 1 6 1 5 2 1 4 2 3 c c c c c c c c c c c c c 求出标准校验矩阵、Q矩阵、标准生成矩阵,完成对任意信息序列(23个 许用码字)的编码。 当接收码字分别为(0000000),(0000001),(0000010),(0000100),(0001000), (0010000),(0100000),(1000000),(0100100)时,写出其伴随式S,以表格形式写出伴随式与错误图样E的对应关系,纠错并正确译码,当有两位错码时,假定为c5位和c2位发生错误。

信息论与编码课程设计报告,统计信源熵与香农编码

信息论与编码课程设计报告设计题目:统计信源熵与香农编码 专业班级电信 12-06 学号 学生姓名 指导教师 教师评分 2015年 3 月 30日

目录 一、设计任务与要求 (2) 二、设计思路 (2) 三、设计流程图 (3) 四、程序运行及结果 (4) 五、心得体会 (6) 参考文献 (7) 附录:源程序 (8)

一、设计任务与要求 1.统计信源熵 要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。 2.香农编码 要求:任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。 二、设计思路 本次课程设计中主要运用C 语言编程以实现任务要求,分析所需要的统计量以及相关变量,依据具体公式和计算步骤编写语句,组成完整C 程序。 1、信源熵 定义:信源各个离散消息的自信息量的数学期望为信源的平均信息量,一般称为信源的信息熵,也叫信源熵或香农熵,有时称为无条件熵或熵函数,简称熵,记为H ()。 计算公式: ) (log )(-)x (i i i x p x p H ∑= 2、香农编码过程: (1)将信源消息符号按其出现的概率大小依次排列为 n p p ≥???≥≥21p (2)确定满足下列不等式的整数码长i K 为 1)()(+-<≤-i i i p lb K p lb (3)为了编成唯一可译码,计算第i 个消息的累加概率 ∑-==11) (i k k i a p P (4)将累计概率 i P 变换成二进制数。 (5)取i P 二进制数的小数点后i K 位即为该消息符号的二进制码字。

三、设计流程图 1、统计信源熵 开始 读取给定文件 判断文件是否打开否 并且不为空 是 统计文本字符,直关闭文件 至文本字符读完。 统计同一字符(不分 大小写)出现的次数 计算字符概率 计算信源熵 输出 结束

线性分组码编码分析与实现

吉林建筑大学 电气与电子信息工程学院 信息理论与编码课程设计报告 设计题目:线性分组码编码的分析与实现专业班级:电子信息工程 111 学生姓名: 学号: 指导教师: 设计时间:

第1章 概述 设计的作用、目的 1、通过完成具体编码算法的程序设计和调试工作,提高编程能力,深刻理解信源编码、信道编译码的基本思想。 2、加深对理论知识的理解,提高实践技能,培养独立分析问题及解决问题的能力。 3、掌握编码的基本原理与编码过程,增强逻辑思维能力。 4、使用MATLABH 或其他语言进行编程及实现。 设计任务及要求 设计一个(7,3)线性分组码的编译码程序,完成对任意序列的编码,根据生成矩阵形成监督矩阵,得到伴随式下,并根据其进行译码,同时验证工作的正确性,最基本的是要具备对输入的信息码进行编码,让它具有抗干扰的能力。 1. 理解无失真信源编码的理论基础,掌握无失真信源编码的基本方法; 2. 掌握哈夫曼编码/费诺编码方法的基本步骤及优缺点; 3. 深刻理解信道编码的基本思想与目的,理解线性分组码的基本原理与编 码过程 4. 能够使用MATLAB 或其他语言进行编程,编写的函数要有通用性。 设计内容 已知一个(7,3)线性分组码的校验元与信息元有如下限定关系。设码字为(c 1,c 2, c 3, c 4, c 5, c 6,c 7) 4315213 216 3 27c c c c c c c c c c c c c =⊕??=⊕⊕??=⊕??=⊕? 求出标准校验矩阵、Q 矩阵、标准生成矩阵,完成对任意信息序列(23个许用码字)的编码。 当接收码字分别为(0000000), (0000001), (0000010), (0000100), (0001000), (0010000), (0100000), (1000000), (0100100)时,写出其伴随式S ,以表格形式写出伴随式与错误图样E 的对应关系,纠错并正确译码,当有两位错码时,假定为c 5位和c 2位发生错误。

信息论课程设计

电子科技大学电子工程学院信息论课程设计报告课程名称:信息编码与加密

课程设计报告 学生姓名:农瀚学号:2014020908021 指导教师:李万春 一、课程设计名称:编程实现霍夫曼、费诺、香农编码 二、课设原理: 1)霍夫曼编码:霍夫曼编码的平均码长最短,是最佳编码。编码步骤如下: (1)将信源符号按概率大小排序; (2)对概率最小的两个符号求其概率之和,同时给两幅 号分别赋予码元0和1; (3)将概率之和当做一个新符号的概率。与剩下的概率一起,形成一个缩减信源,再重复上述步骤,直到概率和为1为止;(4)按上述步骤实际上构成了一个码树,从根到端点经过的树枝即为码字。 2)费诺编码: 编码步骤如下: (1)将信源概率从大到小排序; (2)将信源符号分成两组,使两组信源符号的概率之和近似相等,并给两组信源符号分别赋0和1; (3)再把各个小组的信源符号细分为两组并赋码元,方法与第一次分组相同; (4)如此一直下去,直到每一个小组只含一个信源符号为止;(5)由此可构造成一个码树,所有终端节点上的码字组成费诺码。

3)香农编码: 编码方法如下: ⑴将信源消息符号按其出现的概率大小依次排列 p(u1)≥p(u2)≥…≥p(un) ⑵确定码长Ki (整数) : Ki= []——取整 ⑶为了编成唯一可译码,计算第i个消息的累加概率 ⑷将累加概率Pi变换成二进制数。 ⑸取pi二进制数的小数点后Ki位即为该消息符号的二进制数。 三、课设目的:通过编程实现三种方式的编码,掌握三种编 码方式的步骤。 四、课设内容: 三种编码方式的编程思路: 1、霍夫曼编码:(1)对给定的n个权值{W1,W2,W3,...,Wi,...,Wn}构成n棵二叉树的初始集合F= {T1,T2,T3,...,Ti,...,Tn},其中每棵二叉树Ti中只有一个权值为Wi的根结点,它的左右子树均为空。(为方便在计算机上实现算法,一般还要求以Ti的权值Wi的升序排列。)(2)在F中选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二叉树的根结点的权值为其左右子树的根结点的权值之

信息论与编码课程大作业二进制哈夫曼编码

信息论与编码课程大作业 题目:二进制哈夫曼编码 学生姓名: 学号:2010020200 专业班级: 2010级电子信息班 2013年5月18日

二进制哈夫曼编码 1、二进制哈夫曼编码的原理及步骤 1、1信源编码的计算 设有N 个码元组成的离散、无记忆符号集,其中每个符号由一个二进制码字表示,信源符号个数n 、信源的概率分布P={p(s i )},i=1,…..,n 。且各符号xi 的以li 个码元编码,在变长字编码时每个符号的平均码长为∑==n i li xi p L 1)( ; 信源熵为:)(log )()(1 xi p xi p X H n i ∑=-= ; 唯一可译码的充要条件:11 ≤∑=-n i Ki m ; 其中m 为码符号个数,n 为信源符号个数,Ki 为各码字长度。 构造哈夫曼数示例如下图所示。 1、2 二元霍夫曼编码规则 (1)将信源符号依出现概率递减顺序排序。 (2)给两个概率最小的信源符号各分配一个码位“0”和“1”,将两个信源符号合并成一个新符号,并用这两个最小的概率之和作为新符号的概率,结 0.60 0.15 0.09 0.30 1.00 0.60 0.03 0.30 0.15 0.40 0.05 0.04 0.03

果得到一个只包含(n-1)个信源符号的新信源。称为信源的第一次缩减信源,用s1 表示。 (3)将缩减信源 s1 的符号仍按概率从大到小顺序排列,重复步骤(2),得到只含(n-2)个符号的缩减信源s2。 (4)重复上述步骤,直至缩减信源只剩两个符号为止,此时所剩两个符号 的概率之和必为 1,然后从最后一级缩减信源开始,依编码路径向前返回,就得到各信源符号所对应的码字。 1、3 二元哈夫曼编码流程图如下图所示。 是 是 开始 等待数据输入 判断输入的概 率是否小于零 判断概率和是 否大于1 生成一个n - 1行n 列的数组 按照哈弗曼的编码规则进行编 码 计算码长 计算编码效率 计算信源熵 显示结果 结束

信息论与编码--费诺编码与哈弗曼编码比较

信源编码的比较 ——哈弗曼编码与费诺编码 姓名: 班级: 学号:

一、实验目的: 1、实现常用的信源编码方案,以加深对编码理论的理解,促进对本课程所学知识的理解和把握。 2、课程实验主要为设计性实验,要求掌握Matlab使用方法。 3、通过信源编译码,理解信源编码的主要目的,掌握信源编码的方法和手段,掌握费诺编码和霍夫曼编码方法 二、实验设备: 装有matlab的计算机 三、实验原理: 信源编码主要可分为无失真信源编码和限失真信源编码。无失真信源编码主要适用于离散信源或数字信号,如文本、表格及工程图纸等信源,它们要求进行无失真地数据压缩,要求完全能够无失真地可逆恢复。 香农码、费诺码、哈夫曼码都考虑了信源的统计特性,使经常出现的信源符号对应较短的码字,使信源的平均码长缩短,从而实现了对信源的压缩。 费诺码比较适合于对分组概率相等或接近的信源编码。 哈夫曼码对信源的统计特性没有特殊要求,编码效率比较高,对编码设备的要求也比较简单,因此综合性能优于香农码和费诺码。(1)费诺码属于概率匹配编码,编码过程如下: 1、将信源发出的N个消息符号按其概率的递减次序依次排列。

2、将依次排列的信源符号依概率分成两组,使两个组的概率和近于相同,并对各组赋予一个二进制代码符号“0”和“1”(编m进制码就分成m组)。 3、将每一个大组的信源符号进一步再分成两组,使划分后的两个组的概率和近于相同,并又分别赋予两组一个二进制符号“0”和“1” 4、如此重复,直至每组值只剩下一个信源符号为止 5、信源符号所对应的码符号序列即为费诺码 (2)霍夫曼编码过程: 1、将信源发出的N个消息符号按其概率的递减次序依次排列。 2、取概率最小的两个符号分别配以0和1两个码元,并将这两个符号的概率相加作为一个新概率,与未分配码元的符号重新按概率排队 3、对重排后的两个概率最小符号重复步骤2 4、不断重复上述过程,直到最后两个符号配以0和1为止 5、重最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字。 四、实验内容: 1、哈弗曼编码 对如下信源进行哈弗曼编码,并计算编码效率。 X s1 s2 s3 s4 s5 s6 s7 P 0.09 0.18 0.23 0.17 0.1 0.07 0.16 (1)计算信源的信息熵,并对信源概率进行排序

信息编码课程设计模板2016

课程设计报告 课程名称信息编码 课题名称 专业班级信息与计算科学班 学号 姓名 指导教师李安平李荣军 2016年7月8日

湖南工程学院课程设计任务书 课程名称信息编码 课题 专业班级信息与计算科学 学生姓名 学号 指导老师李安平李荣军 审批 任务书下达日期2016 年7月3日 任务完成日期2016 年7月8日

《信息论与编码》课程设计 一、设计目的 通过课程设计使学生更进一步掌握信息论与编码课程的有关知识,提高编程的能力,并将所学的内容加以综合。通过查阅资料,了解所学知识的应用情况。 同时也使学生通过动手进行程序设计从而提高解决实际问题的能力。 二、课程设计要求 1、认真查阅资料 2、遵守课程设计时间安排 3、按时上机,认真调试程序 4、认真书写报告 三、报告书写格式 1、课程设计封面 2、课程设计任务书 3、正文 4、参考文献 5、课程设计成绩报告单 四、设计题目 1、熵的计算。符号信源熵的求解给定信源各个符号发生概率,条件概率,编程求解各个符号的自信息量和信源的熵,条件熵,联合熵,互信息、平均互信息。 2、图像信源熵。读入一幅图像,编程实现求解图像信源的熵。 3、香农编码的分析与实现。给定信源各个符号及其发生概率,编程求解其香 农编码的码字,平均码长,及编码效率。 4、费诺编码的分析与实现。给定信源各个符号及其发生概率,编程求解其费 诺编码的码字,平均码长,及编码效率。 5、用香农-费诺-埃利斯编码的分析与实现。给定信源各个符号及其发生概率, 编程求解其香农-费诺-埃利斯编码码字,平均码长,及编码效率。 6、哈夫曼编码的分析与实现。给定信源各个符号及其发生概率,编程求解其 哈夫曼编码码字,平均码长,及编码效率。

费诺编码

西华数学与计算机学院上机实践报告 课程名称:信息与编码理论年级:2007级上机实践成绩: 指导教师:李月卉姓名:何龙 上机实践日期:2010.5.20上机实践名称:费诺编码学号: 312007********* 上机实践编号:2上机实践时间:14:30-15:50一、目的 通过上机实践,实现常用的信源编码方案,以加深对编码理论的理解,促进对本课程所学知识的理解和把握。 二、内容与设计思想 1)充分掌握信源编码方案之一的费诺编码算法设计; 2)以教材例题为算例,将该算法用代码实现; 3)以至少2组算例验证程序; 4)理解,总结费诺编码算法。 三、使用环境 实验室PC 标准配置,winXP,matlab/C/C++/Frotran 等 四、核心代码及调试过程 核心代码: void fano(float p[],int a[N][N],int n,int m,int k) { float g=0.0,h=0.0,d,b,c; int i,j,flase; if(ng) { d=h-p[i];b=h-g;c=g-d; if(c>b) { for(j=n;j<=i;j++) a[j][k]=0;

fano(p,a,n,i,k+1); for(j=i+1;j<=m;j++) a[j][k]=1; fano(p,a,i+1,m,k+1); } else { for(j=n;j<=i-1;j++) a[j][k]=0; fano(p,a,n,i-1,k+1); for(j=i;j<=m;j++) a[j][k]=1; fano(p,a,i,m,k+1); } break; } } } } 调试过程: (1)当输入信源符号个数为:3 输入各信源符号概率分别为:0.2 0.3 0.5时 (2)当输入信源符号个数为:3 输入各信源符号概率分别为:0.3 0.3 0.3时 (3)当输入信源符号个数为:4 输入各信源符号概率分别为:0.1 0.2 0.3 0.4 时

信息论与编码课程设计哈夫曼编码的分析与实现

信息论与编码课程设计哈夫曼编码的分析与实现

吉林建筑大学 电气与电子信息工程学院 信息理论与编码课程设计报告 设计题目:哈夫曼编码的分析与实现 专业班级:电子信息工程 101 学生姓名: 学号: 指导教师:吕卅王超 设计时间: .11.18- .11.29 一、设计的作用、目的

《信息论与编码》是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充。其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能,提高实践技能,培养独立分析问题、解决问题及实际应用的能力。 经过完成具体编码算法的程序设计和调试工作,提高编程能力,深刻理解信源编码、信道编译码的基本思想和目的,掌握编码的基本原理与编码过程,增强逻辑思维能力,培养和提高自学能力以及综合运用所学理论知识去分析解决实际问题的能力,逐步熟悉开展科学实践的程序和方法 二、设计任务及要求 经过课程设计各环节的实践,应使学生达到如下要求: 1. 理解无失真信源编码的理论基础,掌握无失真信源编码的基本方法; 2. 掌握哈夫曼编码/费诺编码方法的基本步骤及优缺点; 3. 深刻理解信道编码的基本思想与目的,理解线性分组码的基本原理与编码过程; 4. 能够使用MATLAB 或其它语言进行编程,编写的函数要有通用性。 三、设计内容 一个有8个符号的信源X ,各个符号出现的概率为: 12345678,,,,, ()0.40.180.10.10.070.060.050.04X x x x x x x x x P X ????=????????

编码方法:先将信源符号按其出现的概率大小依次排列,并取概率最小的字母分别配以0和1两个码元(先0后1或者先1后0,以后赋值固定),再将这两个概率相加作为一个新字母的概率,与未分配的二进制符号的字母重新排队。并不断重复这一过程,直到最后两个符号配以0和1为止。最后从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即为对应的码字。 哈夫曼编码方式得到的码并非唯一的。在对信源缩减时,两个概率最小的符号合并后的概率与其它信源符号的概率相同时,这两者在缩减中的排序将会导致不同码字,但不同的排序将会影响码字的长度,一般讲合并的概率放在上面,这样可获得较小的码方差。 四、设计原理 4.1哈夫曼编码步骤 (1)将信源消息符号按照其出现的概率大小依次排列为 ≥Λ 1 ≥ 2 pn p p≥ (2)取两个概率最小的字母分别配以0和1两个码元,并将这两个概率相加作为一个新的概率,与未分配的二进制符号的字母重新排队。 (3)对重新排列后的两个最小符号重复步骤(2)的过程。 (4)不断重复上述过程,知道最后两个符号配以0和1为止。

信息论与编码课程设计(精.选)

信息论与编码课程设计报告 设计题目:统计信源熵、香农编码与费诺编码 专业班级:XXXXXXXXXXXX 姓名:XXXXXXXXXXXX 学号:XXXXXXXXXXXX 指导老师:XXXXXXXXXXXX 成绩: 时间:2015年3月31日

目录 一、设计任务与要求 (2) 二、设计思路 (2) 三、设计流程图 (5) 四、程序及结果 (7) 五、心得体会 (11) 六、参考文献 (12) 附录 (13)

一、 设计任务与要求 1. 统计信源熵 要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。 2. 香农编码 要求:任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。 3. 费诺编码 要求:任意输入消息概率,利用费诺编码方法进行编码,并计算信源熵和编码效率。 二、 设计思路 1、统计信源熵: 统计信源熵就是对一篇英文文章中的i 种字符(包括标点符号及空格,英文字母不区分大小写)统计其出现的次数count i (),然后计算其出现的概率()p i ,最后由信源熵计算公式: 1()()log ()n i i n H x p x p x ==-∑ 算出信源熵()H x 。所以整体步骤就是先统计出文章中总的字符数,然后统计每种字符的数目,直到算出所有种类的字符的个数,进而算出每种字符的概率,再由信源熵计算公式计算出信源熵。在这里我选择用Matlab 来计算信源熵,因为Matlab 中系统自带了许多文件操作和字符串操作函数,其计算功能强大,所以计算

信源熵很是简单。 2、香农编码 信源编码模型: 信源编码就是从信源符号到码符号的一种映射f ,它把信源输出的符号i a 变换成码元序列i x 。 1,2,...,,i i N f a i q x =→: 1:{,...,}q S s a a ∈ 信源 1 2 {,...,}li i i i i X x x x = 码元 1{,...,} 1,2,...,i q S a a i N ∈= 1,2,...,N i q = 1:{,...,} r X x x x ∈ 码符号 N 次扩展信源无失真编码器 凡是能载荷一定的信息量,且码字的平均长度最短,可分离的变长码的码字集合都可以称为最佳码。为此必须将概率大的信息符号编以短的码字,概率小的符号编以长的码字,使得平均码字长度最短。能获得最佳码的编码方法主要有:香农(Shannon )、费诺(Fano )、哈夫曼(Huffman )编码等。 香农第一定理: 离散无记忆信源为 1 21 2......()()()...... q q s s s S p s p s p s P ????=???????? 熵()H S ,其N 次扩展为

相关文档
最新文档