“划时代”的信源编码——LZ编码 钱淇萱 秦宇田 承蕴馨 张怡 乔印亮


前言

LZ编码不同于霍夫曼编码,它是一种由变长到定长编码,是基于字典的通用编码方案,算法与信源统计特性无关。


一、LZ编码的由来

1965年苏联数学家Kolmogolov提出利用信源序列的结构特性来编码。而两位以色列研究者J.Ziv和A.Lempel独辟蹊径,完全脱离Huffman及算术编码的设计思路,创造出了一系列比Huffman编码更有效,比算术编码更快捷的通用压缩算法。将这些算法统称为LZ系列算法。
在这里插入图片描述

二、LZ编码的具体方法

1.概述

LZ编码算法利用了数据中的重复模式,并通过构建一个字典来实现数据的压缩。算法会扫描输入数据,找到重复的片段,并用较短的代码来表示这些重复片段,从而减少数据的存储空间。在解码时,可以使用这些代码来重建原始数据。

LZ编码一般步骤:

  • 第一步:将信源输出序列分成各不相同的码段,尽可能取最短码段且各段不相同。
  • 第二步:将第一步分好的各码段作为字典内容,码段的序号作为字典索引。
  • 第三步:编码,新的码段是前面出现过的码段与新的信源输出的拼接。码字就是前面码段的二进制字典索引加上新的信源输出比特。

2.应用实例

例如设信源符号集A={a1, a2, a3, a4},输入信号序列U={a1 a3 a2 a3 a2 a4 a3 a2 a1 a4 a3 a2 a1}共13位

编码字典
在这里插入图片描述

符号编码表
在这里插入图片描述

三、与其他常用信源编码的区别和联系

在这里我们着重介绍算术编码

算术二进制编解码的Matlab实现

算术编码实际的编译码过程比较复杂,但在性能上具有许多优点,特别是所需要的参数很少,不像哈夫曼编码那样需要一个很大的码表。从理论上说,只要已知信源符号集及其符号概率,算数编码的平均码长可以接近符号熵。

(1)编码:arithenco

code = arithenco(seq,counts)

code:算术编码序列

seq:信源产生的待编码序列

counts:信源产生序列的不同符合出现次数

clc;
clear;
length = 100;
seq = randsrc(1,length,[1,2;0.10,0.90]);%信源
counts = [0.10*length,0.90*length];%信源序列不同符合的出现次数
code = arithenco(seq,counts);%算术二进制编码

seq:

2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

code:

0 0 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 0 1

(2).解码

arthdeco

dseq = arthdeco(code,counts,length)

验证解码结果:

clc;
clear;
length = 100;
seq = randsrc(1,length,[1,2;0.10,0.90]);%信源
counts = [0.10*length,0.90*length];%信源序列不同符合的出现次数
code = arithenco(seq,counts);%算术二进制编码
dseq = arithdeco(code,counts,length);%解码
isequal(seq,dseq)%比较两个序列是否一样

ans=1

4、LZ编码的改进与发展

Ziv和Lempel于1977年提出了LZ77算法[Ziv & Lempel (1977)]。1978年,二人又提出了改进算法,后被命名为LZ78[Ziv & Lempel (1978)]。1984年,T.A.Welch提出了LZ78算法的一个变种,即LZW算法[ Welch (1984)]。1990年后,T.C.Bell等人又陆续提出了许多LZ系列算法的变体或改进版本[ Bell 等(1990)]。
LZ系列算法用一种巧妙的方式将字典技术应用于通用数据压缩领域,而且,可以从理论上证明LZ系列算法同样可以逼近信息熵的极限。

总结

经过此次试验真的是收获了很多,首先是对各种编码的熟悉,从Huffman编码、Shannon Fano码、算数编码到LZ编码家族,了解了Zip,winrar等压缩软件的压缩原理,以及压缩算法从兴起到应用。另一方面,从信息论角度细致的学习了各种编码的编码原理和译码方式,这些收获相信在今后的学习中都会有用的。这次实验不仅锻炼了编程能力,而且学习到很多编码领域的新知识。

小组成员
P02114092 钱淇萱
P02114088 秦宇田
P02114090 承蕴馨
P02114091 张怡
P02114095 乔印亮

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值