媒体信号编码第4讲.pptVIP

  • 4
  • 0
  • 约1.43万字
  • 约 80页
  • 2017-06-02 发布于湖北
  • 举报
4.5 字 典 码 4.5.1 LZ码的基本概念   字典编码起源于20世纪70年代末。1977年和1978年, 以色列两位博士J.Ziv和 A.Lempel 陆续提出了两种不同但又有联系的关于文字数据压缩的论文,该文中的码习惯上简称为LZ码。1984年,T.A.Welch博士对LZ78算法加以改进,提出了所谓的LZW算法。至今,在处理文字数据压缩的问题时,LZW算法一直是被广泛使用。   设想我们要用计算机来储存以下一段9个字符的文字数据,即ABBBABAAB。如果每个字符都用8比特的ASCII码来储存,则需要72比特的内存。然而,如果该计算机拥有一个如表4-19中所示的字典1,借助该字典的信息,则仅需10比特的内存,亦即AB、BB、AB、A及AB等文字数据分别会先被编码成10、11、10、00及10等十个比特,然后再存入内存,其省下的储存空间高达86%。之后,如果一次以两个比特的方式来读取数据,然后通过同样的字典进行译码,则内存所储存的数据1011100010很快地就会被解读出原来的文字数据为ABBBABAAB。 表4-19 计 算 机 字 典   通过上面的例子可以看到,与Huffman码正好形成鲜明对比的是:LZ码及后来的改进算法都是将变长的输入符号串映射成定长(或长度可预测)的码字。LZ码按照几乎相等的出现概率编排输入符号串,从而使频繁出现的符号的串将比不常出现符号的串包含更多的符号。例如在一张将英文字母和符号串编码成12位码字的压缩字符串表中(如表4-20所示),不常用的字母如Z,独占一个12位码字;而常用的符号如空格(表4-20中用“空”表示)和零,则以不同长度的长串表示(实用中字符串长度可大于30)。如果输入一个长串,就会被替换成一个12位码字,此时压缩比自然很高。实际上,表4-20也就是LZ码使用的字典,所以LZ码也是基于字典的压缩编码算法。 表4-20 一种LZ编码的字典 4.5.2 LZW算法   由T.A.Welch在1984年提出的LZW算法,是LZ系列码中应用最广、变形最多的LZ码。LZ码系列算法的共同点是:分解输入流,使其成为长度各异的“短语”,并把它们存入“短语字典”,并给每个“短语”赋予一个码字(通常就是短语的字典索引)。只要短语的码字长度小于短语的长度,就达到了压缩的目的。LZW编码算法独特的地方是先建立初始字典,再将输入流分解为短语词条,这个短语若不在初始字典内,就将其存入字典,这些新词条和初始字典共同构成编码器的字典。初始字典由信源符号集构成,每个符号是一个词条。比如在英文文本的压缩中,可以将扩展的ASCII码作为初始字典,使其成为字典的前256项,这样的初始字典足以应付普通的英文文本压缩。   LZW算法将输入字符串映射成定长(通常为12位)的码字。LZW码表(字典)具有所谓的“前缀性”——表中任何一个字符串的前缀字符串也在表中。这也就是说,如果由某个字符串S和某个单字符c所组成的字符串Sc在表中,则S也在表中,其中c叫前缀串S的扩展字符。   对码表作出这样的说明后,编码前可以将其初始化以包含所有的单字符。在压缩过程中,码表里面存放着编码器在压缩过程中已经遇到的字符串,它动态反映消息的统计特性。LZW使用的是“贪婪”分析算法,即依次检查各个字符,直到碰到码表中没有的字符串或者扫描完全部字符。除初始化码表外,其他码表项也是通过这种方法加入进码表中的。LZW编码算法流程如图4-9所示。 图4-9 LZW编码算法流程   【例4-12】 试对一个最简单的2字符串“ABBBABAAB”作LZW编码。   【解】 根据图4-9给出的LZW编码算法流程,可以得到如下的编码步骤:   步骤0:将A及B字符存入字典里,也就是A及B字符之后分别会被编码成索引值1及2;并读入第一字符A,前缀串S=A。   步骤1:读入下一个字符c=B,串Sc=AB不在码表中,输出串S=A在字典里的索引值1;并将新的字符串AB存入字典里,其索引值等于3;最后置S=B。   步骤2:读入下一个字符c=B,串Sc=BB不在码表中,输出串S=B在字典里的索引值2;并将新的字符串BB存入字典里,其索引值等于4;最后置S=B。   步骤3:读入下一个字符c=B,串Sc=BB已经在码表中,置S=BB。   步骤4:读入下一个字符c=A,串Sc=BBA不在码表中,输出串S=BB在字典里的索引值4;并将新的字符串BBA存入字典里,其索引值等于5;最后置S=A。   步骤5:读入下一个字符c=B,串Sc=AB已经在码表中,置S=AB。   步骤6:读入下一个字符c=A,串Sc=ABA不在码表中,输出串S=AB在字典里的索引值3;并将新的字符串ABA存入字典里,其索引值等于6;最后置S=A。   步骤7:读入下一个字符c=A,串Sc

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档