基于xilinx FPGA实现LZW压缩算法

1 LZW算法简介
数据压缩分为有损压缩和无损压缩。有损压缩是对压缩后的数据进行重构 (解压缩 ) ,重构后的数据与原来的数据有所不同,换来了大的压缩比。无损压缩指对压缩后的数据进行重构 ,重构后的数据与原来的数据完全相同。这里只介绍LZW无损压缩和解压缩算法。
LZW压缩算法是一种通用的无损压缩方法,该压缩算法是根据其发明人Lempel、Zif、Welch名字的首字母命名的。LZW压缩算法可以软件实现也可以硬件实现;软件压缩一般应用在对时间要求不高的场合,而对运行速度有特殊要求的情况下,对数据进行实时压缩一般都要用硬件实现。笔者主要研究基于FPGA实现LZW算法(包括压缩和解压缩),即用硬件电路来实现LZW算法。
2 LZW压缩原理
LZW算法采用了一种先进的串表(String Table)。将每个第一次出现的字符串放在串表中,并用一个代码(Code Word)来表示。压缩文件只存贮数字。而不存贮串从而可以使文件的压缩效率得到较大的提高。不管是在压缩还是解压缩的过程中,都能正确地建立相同串表,压缩或解压缩完成后,这个串表将被丢弃。
串表好比一部字典,把输入字串(单词)转换成字典中的所有的页码和页中的序号。解码就是据页码和页中的序号找到字串(单词)。使用同一部字典是正确还原的基础。(LZW算法基本原理不做介绍,可以参考网络资源)。
3 LZW压缩实现难点
FPGA实现LZW算法要解决以下5个问题:
1)字典容量选择
在实现LZW压缩与解压缩算法的时候,需要构建一个字典,用来存放压缩过程中形成的字符串表。LZW算法的字典是自适应生成的,在实际应用中,若无限制地增大字典的容量,虽然可能获得更好的压缩率,但进行字符串匹配时查找的时间会变长,并且随着编码的码字位数增加,有时可能会导致压缩效率降低,影响压缩速率,因此字典的容量要受一定的限制。
2)压缩速度
利用RAM来构造字典,由于RAM查找是根据地址的累加进行串行查找的,这种查找方法将会影响数据的输出速度,最终造成输入数据的溢出。例如,对于一个深度为512的字典,需要的查找时间为l~512个不等周期(若第N个地址查到,则需要N个时钟周期)。
3)压缩率
第一,设置字典的不同大小可以影响压缩率。当所设置的字典比

猜你喜欢

转载自blog.csdn.net/m0_46498597/article/details/105181646
今日推荐