数据压缩刘彬滨江学院电子工程系通信工程3班20102334911摘要:本文介绍了数据压缩在计算机科学和信息论中的应用,数据压缩或者源编码是按照特定的编码机制用比未经编码少的数据位元(或者其它信息相关的单位)表示信息的过程。
对于任何形式的通信来说,只有当信息的发送方和接受方都能够理解编码机制的时候压缩数据通信才能够工作。
关键词:数据压缩源编码数据通信Abstract:This paper introduces the data compression in the application of computer science and information theory, data compression or source coding is according to specific coding mechanism without coding than less data bits (or other information related to the unit) said the process of information. For any form of communication, it is only when the information of the sender and receiver can understand coding mechanism when compressed data communication can work.Keywords:data compression Source coding data communication 1、引言数据压缩能够实现是因为多数现实世界的数据都有统计冗余。
例如,字母“e”在英语中比字母“z”更加常用,字母“q”后面是“z”的可能性非常小。
无损压缩算法通常利用了统计冗余,这样就能更加简练地、但仍然是完整地表示发送方的数据。
如果允许一定程度的保真度损失,那么还可以实现进一步的压缩。
例如,人们看图画或者电视画面的时候可能并不会注意到一些细节并不完善。
同样,两个音频录音采样序列可能听起来一样,但实际上并不完全一样。
有损压缩算法在带来微小差别的情况下使用较少的位数表示图像、视频或者音频。
由于可以帮助减少如硬盘空间与连接带宽这样的昂贵资源的消耗,所以压缩非常重要,然而压缩需要消耗信息处理资源,这也可能是费用昂贵的。
所以数据压缩机制的设计需要在压缩能力、失真度、所需计算资源以及其它需要考虑的不同因素之间进行折衷。
一些机制是可逆的,这样就可以恢复原始的数据,这种机制称为无损数据压缩;另外一些机制为了实现更高的压缩率允许一定程度的数据损失,这种机制称为有损数据压缩。
然而,经常有一些文件不能被无损数据压缩算法压缩,实际上对于不含可以辨别样式的数据任何压缩算法都不能压缩。
试图压缩已经经过压缩的数据通常得到的结果实际上是扩展数据,试图压缩经过加密的数据通常也会得到这种结果。
实际上,有损数据压缩也会最终达到不能工作的地步。
我们来举一个极端的例子,压缩算法每次去掉文件最后一个字节,那么经过这个算法不断的压缩直至文件变空,压缩算法将不能继续工作。
2、基本原理事实上,多媒体信息存在许多数据冗余。
例如,一幅图像中的静止建筑背景、蓝天和绿地,其中许多像素是相同的如果逐点存储,就会浪费许多空间,这称为空间冗余。
又如,在电视和动画的相邻序列中,只有运动物体有少许变化,仅存储差异部分即可,这称为时间冗余。
此外还有结构冗余、视觉冗余等,这就为数据压缩提供了条件。
总之,压缩的理论基础是信息论。
从信息的角度来看,压缩就是去除掉信息中的冗余,即去除掉确定的或可推知的信息,而保留不确定的信息,也就是用一种更接近信息本质的描述来代替原有的冗余的描述,这个本质的东西就是信息量。
3、应用一种非常简单的压缩方法是行程长度编码,这种方法使用数据及数据长度这样简单的编码代替同样的连续数据,这是无损数据压缩的一个实例。
这种方法经常用于办公计算机以更好地利用磁盘空间、或者更好地利用计算机网络中的带宽。
对于电子表格、文本、可执行文件等这样的符号数据来说,无损是一个非常关键的要求,因为除了一些有限的情况,大多数情况下即使是一个数据位的变化都是无法接受的。
对于视频和音频数据,只要不损失数据的重要部分一定程度的质量下降是可以接受的。
通过利用人类感知系统的局限,能够大幅度得节约存储空间并且得到的结果质量与原始数据质量相比并没有明显的差别。
这些有损数据压缩方法通常需要在压缩速度、压缩数据大小以及质量损失这三者之间进行折衷。
有损图像压缩用于数码相机中,大幅度地提高了存储能力,同时图像质量几乎没有降低。
用于DVD 的有损MPEG-2编解码视频压缩也实现了类似的功能。
在有损音频压缩中,心理声学的方法用来去除信号中听不见或者很难听见的成分。
人类语音的压缩经常使用更加专业的技术,因此人们有时也将“语音压缩”或者“语音编码”作为一个独立的研究领域与“音频压缩”区分开来。
不同的音频和语音压缩标准都属于音频编解码范畴。
例如语音压缩用于因特网电话,而音频压缩被用于CD 翻录并且使用 MP3 播放器解码。
3.1 理论压缩的理论基础是信息论(它与算法信息论密切相关)以及率失真理论,这个领域的研究工作主要是由 Claude Shannon 奠定的,他在二十世纪四十年代末期及五十年代早期发表了这方面的基础性的论文。
Doyle 和 Carlson 在2000年写道数据压缩“有所有的工程领域最简单、最优美的设计理论之一”。
密码学与编码理论也是密切相关的学科,数据压缩的思想与统计推断也有很深的渊源。
许多无损数据压缩系统都可以看作是四步模型,有损数据压缩系统通常包含更多的步骤,例如它包括预测、频率变换以及量化。
信源编码中,有定长编码和变长编码。
在定长编码中,K 是定值。
我们的目的是寻找最小K 值。
编码器输入X=(X1 X2…Xl …XL), Xl ∈{a1,…an},输入的消息总共有nL 种可能的组合。
输出的码字Y=(Y1 Y2 …Yk … YK ) , Yk ∈{b1,…bm} 输出的码字总共有mK 种可能的组合。
若对信源进行定长编码,必须满足: nL ≤mK 。
实际英文电报符号信源,在考虑了符号出现的概率以及符号之间的依赖性后,平均每个英文电报符号所提供的信息量约等于1.4比特,大大小于5比特。
编码后5个二元符号只携带约1.4比特信息量。
所以说,定长编码的信息传输效率极低。
所以选用变长编码。
对于平均符号熵为HL(X)的离散平稳无记忆信源,必存在一种无失真编码方法,使平均信息率满足不等式 )X ()(ε+<≤LL H K X H 其中ε为任意小正数。
用变长编码来达到相当高的编码效率,一般所要求的符号长度L 可以比定长编码小得多。
编码效率的下界:Lm X H X H K X H L L L l o g )()()(+>=η3.2 类型数据压缩可分成两种类型,一种叫做无损压缩,另一种叫做有损压缩。
无损压缩是指使用压缩后的数据进行重构(或者叫做还原,解压缩),重构后的数据与原来的数据完全相同;无损压缩用于要求重构的信号与原始信号完全一致的场合。
一个很常见的例子是磁盘文件的压缩。
根据目前的技术水平,无损压缩算法一般可以把普通文件的数据压缩到原来的1/2~1/4。
一些常用的无损压缩算法有霍夫曼(Huffman)算法和LZW(Lenpel-Ziv & Welch)压缩算法。
有损压缩是指使用压缩后的数据进行重构,重构后的数据与原来的数据有所不同,但不影响人对原始资料表达的信息造成误解。
有损压缩适用于重构信号不一定非要和原始信号完全相同的场合。
例如,图像和声音的压缩就可以采用有损压缩,因为其中包含的数据往往多于我们的视觉系统和听觉系统所能接收的信息,丢掉一些数据而不至于对声音或者图像所表达的意思产生误解,但可大大提高压缩比。
3.3 流行算法Lempel-Ziv (LZ )压缩方法是最流行的无损存储算法之一。
DEFLA TE 是 LZ 的一个变体,它针对解压速度与压缩率进行了优化,虽然它的压缩速度可能非常缓慢,PKZIP 、gzip 以及 PNG 都在使用 DEFLA TE 。
LZW (Lempel-Ziv-Welch )是 Unisys 的专利,直到2003年6月专利到期限,这种方法用于 GIF 图像。
另外值得一提的是 LZR (LZ-Renau) 方法,它是 Zip 方法的基础。
LZ 方法使用基于表格的压缩模型,其中表格中的条目用重复的数据串替换。
对于大多数的 LZ 方法来说,这个表格是从最初的输入数据动态生成的。
这个表格经常采用霍夫曼编码维护(例如,SHRI 、LZX )。
目前一个性能良好基于 LZ 的编码机制是 LZX ,它用于微软公司的 CAB 格式。
4、算法编码4.1 算法编码简介最好的压缩工具将概率模型预测结果用于算术编码。
算术编码由 Jorma Rissanen 发明,并且由 Witten 、Neal 以及 Cleary 将它转变成一个实用的方法。
这种方法能够实现比众人皆知的哈夫曼算法更好的压缩,并且它本身非常适合于自适应数据压缩,自适应数据压缩的预测与上下文密切相关。
算术编码已经用于二值图像压缩标准 JBIG 、文档压缩标准 DejaVu 。
文本 输入 系统 Dasher 是一个逆算术编码器。
算术编码是近十多年来发展迅速的一种无失真信源编码,它与最佳的哈夫曼码相比,理论性能稍加逊色,而实际压缩率和编码效率却往往还优于哈夫曼码,且实现简单,故很受工程上的重视。
算术编码不同于哈夫曼码,它是非分组(非块)码。
它从全序列出发,考虑符号之间的关系来进行编码。
算术编码利用了累积概率的概念。
算术码主要的编码方法是计算输入信源符号序列所对应的区间。
4.2 算术编码的主要概念把信源输出序列的概率和实数段[0,1]中的一个数C 联系起来。
设信源字母表为{a1, a2},其概率p(a1)=0.6, p(a2)=0.4将[0,1]分成与概率比例相应的区间,[0,0.6] [0.6,l]设信源输出序列S=S1S2S3…Sn 。
当信源输出的第一个符号S1 = a1时,数C 的值处在[0,0.6],当信源输出的第一个符号S1 = a2时,数C 的值处在[0.6,l],一般多元信源序列的累积概率递推公式为:r r P S p S P a S P )()(),(+=,)()(),(),(r r r a p S p a S p a S A ==序列的概率公式为:rr p S p a S p )(),(=实际应用中,采用累积概率P(S)表示码字C(S),符号概率p(S)表示状态区间A(S),则有:C(S,r) = C(S)+A(S)PrA(S,r) = A(S) pr实际编码时,只需两个存储器,起始时可令:A(Φ) =1, C(Φ) = 0每输入一个信源符号,存储器C 和A 就按照上式更新一次,直至信源符号输入完毕,就可将存储器C 的内容作为该序列的码字输出。