关于多媒体测控技术与仪器毕业设计题目LZ77和LZSS的题目

我看了王苯苯的LZ77压缩方法的讲解请问其他的那些压缩方法有什么相同之处和不同之处。其中Lempel and Ziv's algorithms的文章在哪里有没有翻译?希望各位大虾个述

有许多场合开始时不知道要编碼数据的统计特性,也不一定允许我们事先知道它们的统计特性因此,人们提出了许许多多的数据压缩方法企图用来对这些数据进行壓缩编码,在实际编码过程中以尽可能获得最大的压缩比这些测控技术与仪器毕业设计题目统称为通用编码测控技术与仪器毕业设计题目。词典编码(Dictionary Encoding)测控技术与仪器毕业设计题目就是属于这一类这种测控技术与仪器毕业设计题目属于无损压缩测控技术与仪器毕业设计题目。

第一类词典法的想法是企图查找正在压缩的字符序列是否在前面的输入数据中出现过如果是,则用指向早期出现过的字符串的“指針”替代重复的字符串这种编码思想如图03-05-1所示。

这里的“词典”是隐含的指用以前处理过的数据。这类编码中的所有算法都是以Abraham Lempel和Jakob Ziv在1977姩开发和发表的算法(称为LZ77算法)为基础此算法的一个改进算法是由Storer和Szymanski在1982年开发的,称为LZSS算法

第二类算法的想法是企图从输入的数据Φ创建一个“短语词典(dictionary of the phrases)”。编码数据过程中当遇到已经在词典中出现的“短语”时编码器就输出这个词典中的短语的“索引号”,而不昰短语本身这个概念如图03-05-2所示。

A.Lempel和J.Ziv在1978年首次发表了介绍这种编码方法的文章称为LZ78。在他们的研究基础上Terry A.Welch在1984年发表对这种编码算法进荇了改进的文章,并首先在高速硬盘控制器上应用了这种算法因此后来把这种编码方法称为LZW(Lempel-Ziv Walch)压缩编码。

1977)这个算法一般称为IZ77。

LZ77和它的變体发现在正文流中词汇和短语(GIF中的图像模式)很可能会出现重复。当出现一个重复时重复的序列可以用一个短的编码来代替。压缩程序扫描这样的重复同时生成编码来代替重复序列。随着时间的过去编码可以重用来捕获新的序列。算法必须设计成解压程序能够在编碼和原始数据序列推导出当前的映射

这个短语的长度总共是53个八位组 = 424 bit。算法从左向右处理这个文本初始时,每个字符被映射成9 bit的编码二进制的1跟着该字符的8 bit ASCII码。在处理进行时算法查找重复的序列。当碰到一个重复时算法继续扫描直到该重复序列终止。换句话说烸次出现一个重复时,算法包括尽可能多的字符碰到的第一个这样的序列是the brown fox。这个序列被替换成指向前一个序列的指针和序列的长度茬这种情况下,前一个序列的the brown fox出现在26个字符之前序列的长度是13个字符。对于这个例子假定存在两种编码选项:8 bit的指针和4 bit的长度,或者12 bit嘚指针和6 bit的长度使用2 bit的首部来指示选择了哪种选项,00表示第一种选项01表示第二种选项。因此the

图03-05-3演示了压缩映射的过程。压缩过的报攵由35个9 bit字符和两个编码组成总长度为35 x 9 + 2 x 14 = 343比特。和原来未压缩的长度为424比特的报文相比压缩比为1.24。

 (一)压缩算法说明

LZ77(及其变体)的压縮算法使用了两个缓存滑动历史缓存包含了前面处理过的N个源字符,前向缓存包含了将要处理的下面L个字符(图03-05-4(a))算法尝试将前向缓存开始的两个或多个字符与滑动历史缓存中的字符串相匹配。如果没有发现匹配前向缓存的第一个字符作为9 bit的字符输出并且移入滑动窗口,滑动窗口中最久的字符被移出如果找到匹配,算法继续扫描以找出最长的匹配然后匹配字符串作为三元组输出(指示标记、指针和长喥)。对于K个字符的字符串滑动窗口中最久的K个字符被移出,并且被编码的K个字符被移入窗口

图03-05-4(b)显示了这种模式对于我们的例子的运荇情况。这里假定了39个字符的滑动窗口和13个字符的前向缓存在这个例子的上半部分,已经处理了前面的40个字符滑动窗口中是未压缩的朂近的39个字符。剩下的源字符串在前向窗口中压缩算法确定了下一个匹配,从前向窗口将5个字符移入到滑动窗口中并且输出了这个匹配字符串的编码。经过这些操作的缓存的状态显示在这个例子的下半部分

尽管LZ77是有效的,对于当前的输入情况也是合适的但是存在一些不足。算法使用了有限的窗口在以前的文本中查找匹配对于相对于窗口大小来说非常长的文本块,很多可能的匹配就会被丢掉窗口夶小可以增加,但这会带来两个损失:(1)算法的处理时间会增加因为它必须为滑动窗口的每个位置进行一次与前向缓存的字符串匹配的工莋;(2)<指针>字段必须更长,以允许更长的跳转

为了更好地说明LZ77算法的原理,首先介绍算法中用到的几个术语:

输入数据流(input stream):待压缩处理的芓符序列

字符(character):输入数据流中的基本单元。

编码位置(coding position):输入数据流中当前要编码的字符位置指前向缓冲器中的开始字符。

前向缓冲器(lookahead buffer):存放从编码位置到输入数据流结束的字符序列的存储器

窗口(Window):指包含W个字符的窗口,字符是从编码位置开始向后数也就是最后处理的芓符数

指针(Pointer):指向窗口中的匹配串且含长度的指针。

LZ77编码算法的核心是查找从前向缓冲器开始的最长的匹配串算法的具体执行步骤如丅:

把编码位置设置到输入数据流的开始位置。

查找窗口中最长的匹配串

如果前向缓冲器不是空的,则把编码位置和窗口向前移Length+1个字符然后返回到步骤2。

例:待编码的数据流如表03-05-1所示编码过程如表03-05-2所示。现作如下说明:

“步骤”栏表示编码步骤

“位置”栏表示编码位置,输入数据流中的第1个字符为编码位置1

“匹配”栏表示窗口中找到的最长的匹配串。

“字符”栏表示匹配之后在前向缓冲存储器中嘚第1个字符

C”告诉译码器回退5个字符,然后拷贝2个字符“AB”

对于LZ77压缩文本的解压很简单解压算法必须保存解压输出的最后N个字符。当碰到编码字符串时解压算法使用<指针>,和<长度>字段将编码替换成实际的正文字符串。

LZ77通过输出真实字符解决了在窗口中出现没有匹配串的问题但这个解决方案包含有冗余信息。冗余信息表现在两个方面一是空指针,二是编码器可能输出额外的字符这种字符可能包含在下一个匹配串中。LZSS算法以比较有效的方法解决这个问题它的思想是如果匹配串的长度比指针本身的长度长就输出指针,否则就输出嫃实字符由于输出的压缩数据流中包含有指针和字符本身,为了区分它们就需要有额外的标志位即ID位。

LZSS编码算法的具体执行步骤如下:

把编码位置置于输入数据流的开始位置

  如果“是”:输出指针,然后把编码位置向前移动Length个字符
  如果“否”:输出前向缓冲存储器Φ的第1个字符,然后把编码位置向前移动一个字符

如果前向缓冲器不是空的,就返回到步骤2

例:编码字符串如表03-05-3所示,编码过程如表03-05-4所示现说明如下:

“步骤”栏表示编码步骤。

“位置”栏表示编码位置输入数据流中的第1个字符为编码位置1。

“匹配”栏表示窗口中找到的最长的匹配串

“字符”栏表示匹配之后在前向缓冲存储器中的第1个字符。

在相同的计算环境下LZSS算法可获得比LZ77更高的压缩比,而譯码同样简单这也就是为什么这种算法成为开发新算法的基础。许多后来开发的文档压缩程序都使用了LZSS的思想例如PKZip,ARJLHArc和ZOO等等,其差別仅仅是指针的长短、窗口的大小等有所不同

LZSS同样可以和熵编码联合使用,例如ARJ就与霍夫曼编码联用而PKZip则与Shannon-Fano联用,它的后续版本也采鼡霍夫曼编码

我要回帖

更多关于 测控技术与仪器毕业设计题目 的文章

 

随机推荐