LZW算法优化及在雷达数据压缩中的应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

总第231期2009年第1期

计算机与数字工程

Computer&D ig ital Eng ineer ing

V o l.37No.1

32

LZW算法优化及在雷达数据压缩中的应用*

王志刚 常传文 茅文深

(中国电子科技集团公司28研究所 南京 210007)

摘 要 LZ W算法是一种性能优异的字典压缩算法,具有通用性强、字典在编解码过程中动态形成等优点,在无损压缩领域应用广泛。介绍了其算法原理,给出了程序实现的编码步骤,并选取一个实例进行详细分析。设计了一种哈希表对程序进行优化,显著降低检索字典时间,分别选取图片、雷达数据、文本文件进行编码速度对比,获得了较好的效果。最后,使用不同的数据分段选取若干典型的真实雷达数据进行试验,并与游程编码进行了对比,得出若干结论。

关键词 LZ W;哈希表;优化;游程编码

中图分类号 T P301.6

L Z W Algorithm Optimizing and the A pplicatio n

in Radar Data Compression

Wang Z hig ang Ch ang Chuanwen M a o W enshen

(T he28th R esear ch Institute of CET C,N anjing 210007)

A bstract L Z W(L em pe l Z iv We lch)algo r ithm is an outstanding dict io nary co mpr ession alg or ithm,which has ma ny excelle nce s such as str ong univer sal ability and can fo rm the dictionar y dy namic ally in coding and e nco ding,and is w idely used in lo ssle ss compr essio n field.T his a rticle intro duces the elem ents of L Z W,sho ws its pr og ra m steps o f co ding,and an a ly ses an exa mple in detail.A Hash T able is desig ned to optimize the pr og ram,which c an decr ease the se arching dictiona r y time o bser vably.I mag es,radar data,and text f iles a re cho sen to be coded r espectively.T he speeds are com pa red and pr ef era ble r esults ar e obtained.At last,w e cho o se seve ra l classica l re al r adar data to do ex periments by using dif fer ent da t a subsect io n,co mpare the re sults w ith R L E(R un L eng th Enco ding),and o bta in sev er al usef ul conclusio ns.

Key words L Z W,H ash T able,o ptimize,R L E

Class Nu mber T P301.6

1 引言

如果按照压缩前后信息量划分,数据压缩算法可分为有损压缩和无损压缩,常见的无损压缩算法有游程RLE(Run Leng th Encoding)、霍夫曼、LZW(Lempel Ziv Welch)算法、算术编码等,LZW 算法是一种字典压缩算法,字典是在编解码过程中动态形成的,其突出的优点是通用性强,适合各种不同类型的待压缩信源,该算法被广泛应用于如今的数据压缩领域,如流行的压缩软件WINRAR和GIF图像。

本文旨在研究LZW算法,并从数据结构的设计上对程序进行优化,使之满足实时应用的要求,最后利用雷达数据进行分析,讨论不同数据类型下的压缩效果,取得了较好的实验效果。

2 LZW算法介绍

LZW算法是在1984年由TA Welch对LZ编码中的LZ78算法修改而成的一种实用的算法。其不同于费诺编码、霍夫曼编码和算术编码,在使用时不需要对信源进行概率统计;也不同于游程编码,它既可以对重复字符编码,也可以对不同但重复出现的字符

*收稿日期:2008年10月6日,修回日期:2008年11月15日作者简介:王志刚,男,高级工程师,研究方向:信号与信息处理研究。

第37卷(2009)第1期计算机与数字工程33

串进行编码。相对于以上这些编码,LZW算法相对复杂,但编码速度快,压缩效果更好。

LZW压缩算法的基本思想是建立一个串表,将输入字符串映射成定长的码字输出,通常码长设置为12bit,也可设置为15bit或者18bit。串表具有 前缀性:假设任何一个字符串P和某一个字符S组成一个字符串PS,若PS在串表中,则S为P的扩展,P为S的前缀。字符串表是动态生成的,编码前先将其初始化,使其包含所有的单字符串。在压缩过程中,串表中不断产生压缩信息的新字符串,存储新字符串时也保存新字符串PS的前缀P相对应的码字。在解压缩过程中,解码器可根据编码字恢复出同样的字符串表,解出编码数据流[2~5]。

3 LZW算法实现

3.1 编码步骤

本文算法根据上述描述的算法原理,可以得出LZW的编码步骤如下:

step1:初始化串表为编码流集合的各单个字符

step2:前缀P置为空

step3:读取字符为当前字符S

step4:判断PS是否在串表中:

如果在串表中:更新P=P+S

如果不在串表中:

a)将P对应的串表索引写入输出码流

b)将P+S写入串表,增加一个表项

c)更新P=S

d)判断串表是否到达最大长度,如果达到最大长度转step1

step5:判断是否还有数据要压缩,如果有转step2,否则转step6

step6:将P对应的串表索引写入输出码流

编码结束!

3.2 算法实例

来看一个具体的例子,假设一个字母表a,b, c,d,有一个输入的字符流abacaba。按照上述编码步骤,首先初始化串表:0=a,1=b,2=c,3=d,前缀P为空;读取第一个字符a,PS=a,可以在串表中找到,修改P=a;读取第二个字符S=b,PS= ab,在串表中找不到,那么添加PS到串表:4=ab,同时输出P(也就是a)的索引0到编码流,修改P =b;读下一个字符S=a,PS=ba,在串表中不能找到:添加串表5=ba,输出P的索引1到编码流,修改P=a;读下一个字符S=c,PS=ac,在串表中不能找到:添加串表6=ac,输出P的索引0到编码流,修改P=c;读下一个字符S=a,PS=ca,在串表中不能找到:添加串表7=ca,输出P的索引2到编码流,修改P=a;读下一个字符S=b,PS=ab,串表的4=ab,修改P=ab;读取最后一个字符S= a,PS=aba,在串表中不能找到:添加串表8=aba,输出P的索引4到编码流,修改P=a;好了,现在没有数据了,输出P的值a的索引0到编码流,这样最后的输出结果就是:010240。表1给出了上述各个步骤变量的属性图。表中灰底的项为在串表中找到了相关表项后的操作。

表1 L ZW

编码实例

3.3 编码算法优化

在码长设置为12bit时,串表个数为212= 4096。算法每编码一个字节,都需要搜索所有的串表,并进行比较。经过实际编程测试后发现,LZW 算法中的大部分时间消耗在串表搜索中,这大大限制了其应用,特别是在要求实时编码的场合,必须对其进行优化。优化的方法可以采取树的数据结构,但是仍然需要搜索,而且算法复杂度稳定性不好,如果希望不经过任何比较,一次存取便能得到所查记录,那就必须在记录的存储位置和它的关键字之间建立一个确定的对应关系,使每个关键字和唯一的存储位置相对应。因而在查找时,只要根据这个对应关系就能找到给定值的像。

构建一个哈希表,从编程的角度来看即为一个二维数组,在编码字符集取值为0~255,采用12bit LZW编码时,该二维数组为T[4096][256],元素T[i][j]中i表示前缀在串表中的索引,j表示当前字符,T[i][j]的取值为前缀和当前字符组合在串表中的索引,如果串表中无此项,取值为-1。这样设计的好处有:

1)前缀不再需要建立一个数组,只需要使用前缀在串表中的索引即可;

2)无需查找即可立即得出前缀和当前字符

相关文档
最新文档