信息论大作业2.docx

上传人:b****1 文档编号:792998 上传时间:2022-10-13 格式:DOCX 页数:20 大小:612.17KB
下载 相关 举报
信息论大作业2.docx_第1页
第1页 / 共20页
信息论大作业2.docx_第2页
第2页 / 共20页
信息论大作业2.docx_第3页
第3页 / 共20页
信息论大作业2.docx_第4页
第4页 / 共20页
信息论大作业2.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

信息论大作业2.docx

《信息论大作业2.docx》由会员分享,可在线阅读,更多相关《信息论大作业2.docx(20页珍藏版)》请在冰豆网上搜索。

信息论大作业2.docx

信息论大作业2

信息论大作业

 

一、实验目的

1、通过实验进一步理解霍夫曼编码、算术编码和LZ编码原理和方法

2、熟悉matlab编程和GUI界面的设计

二、实验原理

1、赫夫曼(Huffman)编码是1952年提出的,是一种比较经典的信息无损熵编码,该编码依据变长最佳编码定理,应用Huffman算法而产生。

Huffman编码是一种基于统计的无损编码。

设信源X的信源空间为:

其中,

,现用二进制对信源X中的每一个符号

(i=1,2,…N)进行编码。

根据变长最佳编码定理,Huffman编码步骤如下:

(1)将信源符号xi按其出现的概率,由大到小顺序排列。

(2)将两个最小的概率的信源符号进行组合相加,并重复这一步骤,始终将较大的概率分支放在上部,直到只剩下一个信源符号且概率达到1.0为止;

(3)对每对组合的上边一个指定为1,下边一个指定为0(或相反:

对上边一个指定为0,下边一个指定为1);

(4)画出由每个信源符号到概率1.0处的路径,记下沿路径的1和0;

(5)对于每个信源符号都写出1、0序列,则从右到左就得到非等长的Huffman码。

Huffman编码的特点是:

(1)Huffman编码构造程序是明确的,但编出的码不是唯一的,其原因之一是两个概率分配码字“0”和“1”是任意选择的(大概率为“0”,小概率为“1”,或者反之)。

第二原因是在排序过程中两个概率相等,谁前谁后也是随机的。

这样编出的码字就不是唯一的。

(2)Huffman编码结果,码字不等长,平均码字最短,效率最高,但码字长短不一,实时硬件实现很复杂(特别是译码),而且在抗误码能力方面也比较差。

(3)Huffman编码的信源概率是2的负幂时,效率达100%,但是对等概率分布的信源,产生定长码,效率最低,因此编码效率与信源符号概率分布相关,故Huffman编码依赖于信源统计特性,编码前必须有信源这方面的先验知识,这往往限制了哈夫曼编码的应用。

(4)Huffman编码只能用近似的整数位来表示单个符号,而不是理想的小数,这也是Huffman编码无法达到最理想的压缩效果的原因。

举例说明:

一串信号源S={s1,s2,s3,s4,s5}对应概率为p={0.40,0.30,0.15,0.10,0.5},按照递减的格式排列概率后,根据第二步,会得到一个新的概率列表,依然按照递减排列,注意:

如果遇到相同概率,合并后的概率放在下面!

最后概率最大的编码为0,最小的编码为1。

所以,编码结果为:

s1=1

s2=00

s3=010

s4=0110

s5=0111

2、算术编码是一种无损数据压缩方法,也是一种熵编码的方法。

和其它熵编码方法不同的地方在于,其他的熵编码方法通常是把输入的消息分割为符号,对每个符号进行编码。

而算术编码是直接把整个输入的消息编码为一个数,一个满足(0.0 ≤ n < 1.0)的小数n。

所以用两个基本的参数:

符号的概率和它的编码间隔。

信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在0到1之间。

算术编码的算法思想如下:

 

(1)

对一组信源符号按照符号的概率从大到小排序,将[0,1)设为当前分析区间。

按信源符号的概率序列在当前分析区间划分比例间隔。

 

(2)检索“输入消息序列”,锁定当前消息符号(初次检索的话就是第一个消息符号)。

找到当前符号在当前分析区间的比例间隔,将此间隔作为新的当前分析区间。

并把当前分析区间的起点(即左端点)指示的数“补加”到编码输出数里。

当前消息符号指针后移。

 (3)仍然按照信源符号的概率序列在当前分析区间划分比例间隔。

然后重复第

二步。

直到“输入消息序列”检索完毕为止。

(4)最后的编码输出数就是编码好的数据。

3、LZ编码原理简介:

1965年苏联数学家Kolmogolov提出利用信源序列的结构特性来编码。

而两位以色列研究者J.Ziv和A.Lempel独辟蹊径,完全脱离Huffman及算术编码的设计思路,创造出了一系列比Huffman编码更有效,比算术编码更快捷的通用压缩算法。

将这些算法统称为LZ系列算法。

Ziv和Lempel于1977年提出了LZ77算法[Ziv&Lempel(1977)]。

1984年,二人又提出了改进算法,后被命名为LZ78[Ziv&Lempel(1978)]。

1984年,T.A.Welch提出了LZ78算法的一个变种,即LZW算法[Welch(1984)]。

1990年后,T.C.Bell等人又陆续提出了许多LZ系列算法的变体或改进版本[Bell等(1990)]。

LZ系列算法用一种巧妙的方式将字典技术应用于通用数据压缩领域,而且,可以从理论上证明LZ系列算法同样可以逼近信息熵的极限。

以LZ78算法为例:

设信源符号集A={a1,a2,…,aK}共K个符号,设输入信源符号序列为u=(u1,u2,…,uL)编码是将此序列分成不同的段。

分段的规范为:

尽可能取最少个相连的信源符号,并保证各段都不相同。

开始时,先取一个符号作为第一段,然后继续分段。

若出现与前面相同的符号时,就再取紧跟后面的一个符号一起组成一个段,使之与前面的段不同。

这些分段构成字典。

当字典达到一定大小后,再分段时就应查看有否与字典中的短语相同,若有重复就添加符号,以便与字典中短语不同,直至信源序列结束。

编码的码字由段号加一个符号组成。

设u构成的字典中的短语共有M(u)个。

若编码为二元码,段号所需码长n=「logM(u)「(注:

代表上取整符号),每个符号需要的码长为「logK「。

单符号的码字段号为0,非单字符的码字段号为除最后一个符号外字典中相同短语的段号。

LZ编码的编码方法非常简捷,译码也很简单,可以一边译码一边建立字典,只要传输字典的大小,无需传输字典本身。

当编码的信源序列增长时,编码效率会提高,平均码长会逼近信源熵。

 

三、实验结果

(1)对该图片求霍夫曼编码

由第一次实验,该图片的熵为11号的熵

>>Hx(A)

ans=

7.0427

计算得编码效率熵除以码长0.9367

(2)对该图片求算术编码

编码效率0.9999

(3)对该图片求lz编码

编码效率0.9845

四、结果分析

由以上各编码的编码效率分析,不难看出,对于霍夫曼编码,算术编码,lz编码,对该图片的编码效率最高的是霍夫曼编码,霍夫曼编码效率相比较之下较低,lz编码在运行的时候耗时较长,个人认为不太实用。

哈夫曼编码所形成的码字不是唯一的,但编码效率是唯一的在对最小的两个概率符号赋值时,可以规定为大的为“1”、小的为“0”,反之也可以。

如果两个符号的出现概率相等时,排列时无论哪个在前都是可以的,所以哈夫曼所构造的码字不是唯一的,对于同一个信息源,无论上述的前后顺序如何排列,它的平均码长是不会改变的,所以编码效率是唯一的。

(2)只有当信息源各符号出现的概率很不平均的时候,哈夫曼编码的效果才明显。

(3)哈夫曼编码必须精确地统计出原始文件中每个符号的出现频率,如果没有这些精确的统计,将达不到预期的压缩效果。

霍夫曼编码通常要经过两遍操作,第一遍进行统计,第二遍产生编码,所以编码速度相对慢。

另外实现的电路复杂,各种长度的编码的译码过程也是比较复杂的,因此解压缩的过程也比较慢。

(4)哈夫曼编码只能用整数来表示单个符号而不能用小数,这很大程度上限制了压缩效果。

(5)哈夫曼所有位都是合在一起的,如果改动其中一位就可以使其数据变得面目全非

算术编码与霍夫曼编码的比较:

从实验的结果中可以发现,霍夫曼编码和算术编码都有着非常高的编码效率.算术编码比霍夫曼编码的编码效率略高一些。

但是,在网上搜集的资料,有如下介绍:

在算术编码和哈夫曼编码之间有很大的相似性--实际上,哈夫曼编码只是算术编码的一个特例--但是由于算术编码将整个消息翻译成一个表示为基数b,而不是将消息中的每个符号翻译成一系列的以b为基数的数字,它通常比哈夫曼编码更能达到最优熵编码。

Lz编码:

由于程序的限制,本次实验只对一张很小的图片经行了LZ编码,由结果可以看出,相较于前两种的编码,LZ编码的效率非常低。

但是本实验效率低下的原因并不能说明此编码是比较差的,因为20×20的图像所产生的序列非常短,随着序列长长度的不断增加,LZ编码的效率也会不断提高。

总体来说,霍夫曼编码最适合实际应用。

五、实验感悟

通过本次试验,我们掌握了三种编码的原理和方法,更重要的是掌握了MATLAB图形界面GUI的使用方法。

刚开始做实验时感觉GUI很难,毕竟从前谁也没有接触过这方面的知识,但经过查阅资料以及在做实验的过程中的不断摸索,终于终做出了完整的GUI,比较完满的完成了这次实验。

六、程序代码

1、霍夫曼

functionvarargout=huffman(varargin)

%HUFFMANM-fileforhuffman.fig

%HUFFMAN,byitself,createsanewHUFFMANorraisestheexisting

%singleton*.

%

%H=HUFFMANreturnsthehandletoanewHUFFMANorthehandleto

%theexistingsingleton*.

%

%HUFFMAN('CALLBACK',hObject,eventData,handles,...)callsthelocal

%functionnamedCALLBACKinHUFFMAN.Mwiththegiveninputarguments.

%

%HUFFMAN('Property','Value',...)createsanewHUFFMANorraisesthe

%existingsingleton*.Startingfromtheleft,propertyvaluepairsare

%appliedtotheGUIbeforehuffman_OpeningFunctiongetscalled.An

%unrecognizedpropertynameorinvalidvaluemakespropertyapplication

%stop.Allinputsarepassedtohuffman_OpeningFcnviavarargin.

%

%*SeeGUIOptionsonGUIDE'sToolsmenu.Choose"GUIallowsonlyone

%instancetorun(singleton)".

%

%Seealso:

GUIDE,GUIDATA,GUIHANDLES

%Copyright2002-2003TheMathWorks,Inc.

%Edittheabovetexttomodifytheresponsetohelphuffman

%LastModifiedbyGUIDEv2.507-Oct-201120:

57:

31

%Begininitializationcode-DONOTEDIT

gui_Singleton=1;

gui_State=struct('gui_Name',mfilename,...

'gui_Singleton',gui_Singleton,...

'gui_OpeningFcn',@huffman_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1