数字数据无损压缩的方法和设备的制作方法

文档序号:7534014阅读:252来源:国知局
专利名称:数字数据无损压缩的方法和设备的制作方法
背景技术
本发明总体上涉及数字数据压缩,尤其涉及用于进行数字数据无损压缩和解压缩的方法和设备。
在许多重要的工业和商业应用中,使用用数字数据形式表示的信息。众所周知,数字数据与模拟数据不同,它是用一系列组成“字节”和“字”的1和0(称为二进制数字或“位”)表示的。例如,可以将文本和图像表示成数字数据组进行存储或传输。
有些类型的信息形成数字数据的交错量。例如,诸如脑瘤X射线等精细图像很容易需要几百万字节的数字数据。为了降低数据的存储和传输成本,已研究出“压缩”数字数据的方法,将原始信息转换成一组新的具有较小位数的数字数据。然后对压缩数据进行“解压缩”逆处理,以便恢复原始信息。
两种主要类型的数字数据压缩是“有损”压缩和“无损”压缩。有损数据压缩允许解压缩数据与原始数据不同,只要解压缩数据满足一些逼真标准。例如,当把图像转换成数字数据,然后对其压缩时,即使存储差异,也足以从解压缩数据中获得人眼看来与原始图像相同的图像。因此,有损压缩方法只能用于某些类型的数据,诸如视频和音频等。有损压缩的优点是,可以比无损压缩获得更高程度的压缩。压缩程度一般表示成一个比率。例如,如果原始数据的大小为压缩数据的二倍,则称该压缩方法具有2∶1压缩率。
与有损数据压缩相反,无损数据压缩在对数据进行压缩,然后解压缩时,提供了与原始数据完全相同的数据。无损压缩的优点是,可以用于要求完全恢复原始数据的各类信息。
无损数据压缩在20世纪50年代早期通过当时在贝尔实验室工作的DavidHuffman的工作,而广为人知。Huffman的方法事实上已成为无损压缩领域所有工作的基础。但是,尽管发展了40年,但目前关于无损数据压缩的方法和设备仍只能获得大约2∶1的平均压缩率。
许多已知的对文本数据进行无损压缩的现有技术依赖于预先已知(边工作时确定)字母符号在原始数据中出现的大概频率。例如,对于英文文本,目前的无损压缩方法通常依赖于这样的认识,即字母E和N出现的次数通常比字母Q和Z出现的次数多。于是,利用该信息开发一种代码结构,该代码结构将较短的代码分配给出现次数多的符号,而将较长的代码分配给出现次数较少的字母。尽管已知的方法在许多场合很有用,但希望提供这样的无损数字数据压缩方法和设备,这类方法和设备可以获得比现有技术高的压缩率,并且不要求预先知道有关源数据内容的信息。
本发明的目的是提供下述无损数字数据压缩/解压缩方法和设备,在这些方法和设备中,可以一个字节一个字节地恢复所有经编码的数据,原始信息不损失。本发明提供了可以获得很大压缩率的无损压缩方法和设备。

发明内容
本发明的优点和目的在以下说明中得到部分叙述,并且部分将从说明中显现出来,或者通过实施本发明而学习到。利用后附权利要求书中特别指出的元件及其组合,可以实现和获得本发明的优点和目的。
为了获得这些优点,并且依照本发明的目的,如这里所实施和概述的,本发明提供了无损数字数据压缩的方法和设备。具体地说,在第一方面,本发明是一种数字数据压缩方法。该方法包括以下步骤接收要压缩的数字数据;将数字数据分成组,每组具有由1和0组成的预定序列;根据预定过程处理一序列,通过删除位获得具有可变长度的压缩序列值;并且将压缩序列值存储在临时存储区中。该方法还包括以下步骤产生一删除代码,该代码表示被删除位的数目;根据预定标准产生一分隔代码;按预定关系将删除代码和分隔代码与压缩序列值一起存储在临时存储区中;以及对每个序列执行先前的步骤,获得中间数据组。该方法还包括以下步骤将中间数据组分成序列;以及根据预定标准,通过多次迭代重复执行先前的步骤。最后的步骤是提供最后一次迭代的中间数据组,将其作为接收数字数据的压缩形式。
在另一方面,本发明包括了用于无损数字数据压缩的设备,该设备包括输入端,用于接收要压缩的数字数据;输出端,用于提供被压缩的数字数据;以及第一、第二和第三压缩电路。每个压缩电路包括输入电路,用于接收输入数据;处理电路,它根据预定标准将接收到的输入数据分成序列;二进制搜索处理器,它用二进制搜索过程对序列进行处理,通过删除低位位,获得与序列对应的压缩序列值;代码发生器,它根据压缩序列值和删除代码的特性,产生表示被删除位数目的删除代码和分隔代码;以及输出电路,用于提供压缩序列值、删除代码和分隔代码,将其作为输出数据。第一压缩电路的输入电路与输入端相连,第一压缩电路的输出电路与第二压缩电路的输入电路相连,第二压缩电路的输出电路与第三压缩电路的输入电路相连,而第三压缩电路的输出电路与输出端相连。
附图概述说明书中包含的附图构成说明书的一部分,它们说明了本发明的实施例,并且与说明书一起用于说明本发明的原理。


图1是一逻辑流程图,示出了对数字数据进行无损压缩的方法。
图2是一逻辑流程图,示出了对经压缩的原始数字数据进行解压缩的方法。
图3是一逻辑流程图,示出了对图2方法中的分隔代码进行识别的方法。
图4是一逻辑流程图,示出了构成本发明另一实施例的对数字数据进行无损压缩的方法。
图5是一逻辑流程图,示出了对图4方法产生的数据进行解压缩的方法。
图6是VLSI定制集成电路,用图3所示的方法对数字数据进行无损压缩;以及图7是一方框图,示出了用于形成图5中VLSI电路之组成电路的公共压缩电路。
较佳实施例的描述本发明使用迭代技术,利用搜索过程在一次执行时获得一标称压缩率,然后在一系列执行或迭代后获得大得多的压缩。在本较佳实施例中,使用二进制搜索过程。例如利用该过程,可以在一次简单的迭代中将所有8位整数压缩为7位或更少。特别是,将所有奇整数压缩成7位,将所有偶整数压缩成6位或更少。对所有8位整数合起来获得的平均压缩为每个整数2位,在一次迭代后对原始的8位整数产生平均为6位的压缩代码长度。这对应于每个整数25%的总压缩。使用术语“总的”是因为额外开销将用掉一些压缩,致使每次迭代对每个整数的净压缩明显变小。但是,本发明使用连续迭代,最终获得非常大的压缩率。
现在就8位整数,概述众所周知的二进制搜索技术。首先,对所有8位整数选择数值中点。由于8位所能包含的最大整数是225,所以中点是128,或27。接下来,判断目前正在编码的输入整数值是大于还是小于中点128。如果输入值小于中点,则输出0。如果输入值大于中点,则输出1位。如果输入值等于中点,则过程终止,不输出、下一步是选择2的下一个较低次幂,在本例中,为26,或64。如果输入值大于先前的中点,则将该值与先前的中点相加,如果输入值小于先前的中点,则用先前的中点减去该值。此步骤产生192或64。然后将输入值与这个新的中点比较。再一次,如果输入值小于该中点,则输出0,如果大于中点,则输出1位。如果输入值等于中点,则过程终止。在用这种方式继续下去时,保留正在产生的输出位的数目。上述过程继续,直至正确定位了正在编码的当前值。该过程产生一个输出位流,称为二进制搜索代码,长度如上所述(即,如果输入值是奇数,为7位,如果输入值为偶数,为6位或更少)。因此,连续输入值的压缩输出由一系列二进制搜索代码组成,其包含各种长度的位序列。
为了对二进制搜索的压缩输出解压缩,解压缩方法必须能够确定它将解码的、构成二进制搜索代码的下一个位序列的长度。因此,本发明的较佳实施例提供了与二进制搜索代码相关的附加代码,称为“删除代码”和“分隔代码”。正是这些附加代码构成了上述额外开销。
在一较佳实施例中,本发明将输入数据分成“序列”。序列的定义是从一个或多个1开始,到一个或多个0结束(即,在下一个1位之前)的位串。
例如,假设以下位串是接收到的输入101101001100这个串按顺序产生如下四个“序列”序列1=10序列2=110
序列3=100序列4=1100。
对于随机数字,序列的平均长度为4位。用该方式定义的序列的最重要特点是,它们都以零结尾。其价值将在以下描述的序列压缩过程中体现出来,该过程能够产生一净压缩,足以使本发明较佳实施例成为一可行过程,呈现其迭代特性。也就是说,每次迭代或循环的压缩量相对较小,通过许多循环的累积,可以产生极大的压缩率,这是本发明的特征。
在本发明的较佳实施例中,用二进制搜索技术处理每个序列,产生经压缩的序列值,即由输入序列组成代码,但将某些位删除,具体地说,删除从低位(即,最右)的零位向上并包括第一个低位的1位。本较佳实施例在每个经压缩的序列值前面放一个删除代码,它表示用二进制技术从原始序列中删除的位数。下面,表I示出了删除代码。
表I删除位数 被删除的实际位删除代码2 10 03 100104 1000 1105 10000 1110等等。
注意,在所有情况中,删除代码比被删除的位数小1位。这说明通过包括删除代码,压缩序列实现了一位压缩。
压缩序列值根据其特性分4种(称为“类”)。表II例示了这四类压缩序列,以下对每一类进行讨论。
表II源位序列 压缩序列*类代码110 (0)1H100 (10)R1100(10)1 B10 (0) N
*删除代码示于括号中,以便与压缩序列中的其它位相区别。类代码H将两个低位位“10”删除,并用删除代码“0”代替(参见上节)。注意,删除两个低位位留下1位,在压缩序列中跟在删除代码的后面。由于这一位留下来挂着,所以称为“挂位”。这里描述了称为H类的压缩序列,即具有挂位的压缩序列。类代码R删除源序列“100”中三个低位位,并用删除代码“10”代替。该压缩序列没有挂位。但是,它在删除代码中有一高位1位。该特征可表征此类(即,删除代码1位),并说明类代码“R”。类代码B删除源位序列“100”中的三个低位位,并用删除代码“10”代替。这时,存在一个挂位和一个删除代码1位。由于它具有挂位和删除代码1位两者,所以类代码为“B”类代码N删除“10”,产生删除代码“0”,并且没有挂位。由于该压缩序列既没有挂位也没有删除代码1位,所以其类代码为“N”。
上述例子描述了所有可能发生的压缩序列类型。显然,H类可以有不止一个挂位,R类可以有不止一个删除1位。B类可以有多个挂位和多个删除代码1位。但类型名称不变。
如果将前一节中的四个压缩序列串在一起,形成一个压缩位流,那么它们将如下所示,这里同样将删除代码放在括号内(0)1(10)(10)1(0)当对该压缩流解压缩时,当然没有括号帮助。因为根据本发明压缩的数据中的第一信息必须是删除代码,所以从左向右移,显然第一个零位构成删除代码零。但是,下一个1位可以是挂位,或者是删除代码1位。在许多情况下,相邻的压缩序列在它们的边界处“掺混(bleed)”在一起。为了解决该问题,本发明的较佳实施例使用一个最终类型的附加代码,称为“分隔”代码。
根据以下规则应用分隔代码-当存在挂位(即,有一个或多个1位紧跟在删除代码后面)时,在最后一个悬挂的1位后面插入分隔代码零位。
-当不存在挂位而删除代码有一个或多个高位1位时,在下一个删除代码开始之前插入一个分隔代码零位。
以下是经修改的压缩代码流,分隔代码带下划线(0)10(10)0(10)10(0)对压缩序列附加的分隔位牺牲了对序列的压缩,但不会引起序列的扩张。因为75%的序列需要分隔位,净压缩达到25%来自不需要分隔码。
现在举例描述此技术。考虑下述32位随机的源输入位流10100101100110100011100011101010(=32位)表III源序列 压缩序列(带删除代码)类代码1 10 (0) N2 100 (10) R3 10 (0) N4 1100 (10)1 B5 110 (0)1 H6 1000 (110) R7 111000 (110)11 B8 1110 (0)11 H9 10 (0) N1010 (0) N用上述方式处理此输入位流,如上述表III中左列所示,输入首先被分隔成序列。然后,用二进制搜索技术对序列压缩,以获得表III中列所示的压缩序列值,其中删除代码位于括号中。然后,在表III的右列示出了每个序列的类代码。
然后根据上述两个规则,对表3中列的压缩序列值进行分析,产生分隔代码。应用这些规则并添加分隔代码,产生以下压缩序列位流(0)0(10)(0)0(10)10(0)10(110)0(110)110(0)110(0)(0)(=29位,压缩9.375%)同样,删除代码表示在括号中。分隔代码带下划线。可以看出,应用上述技术可以由32位的原始输入位流产生29位的压缩位流。这表示对于此特列,压缩了9.35%。
因此,25%压缩(用删除代码)×25%对所有序列每个循环6.25%的净压缩。
在使用“节律流水式”结构的VLSI上执行本发明的一个实施例,在该设计中,将相同的电路串联在构成节律流水式处理器的顺序链中。输入数据进入流水线的第一电路。当第一电路(对应于第一“循环”)产生压缩输出数据时,顺序链中的第二电路将其接收。该过程沿整个链路继续下去,直至序列中的最后一个电路提供构成压缩数据的输出位。
此作用是使大量的处理时间重叠。也就是说,当新数据正在进入第一电路时,先前已进入的数据同时被链路下游的其它电路处理。系统所表现的延迟称为“等待”时间,它是数据开始进入流水线顶部(即,输入电路)与流水线底部(即,序列中的最后一个电路)开始产生输出之间的时间。以目前半导体设备的速度,即便是很长的流水线,总的等待时间也非常短。本发明甚至可以跟得上实时要求最高的、具有很高位速率的应用。
流水线的长度,即链路中顺序电路的个数,决定了总流水线将产生的压缩量。因此,可以生成包含不同程度压缩的不同芯片,为特殊应用提供硬件支持。
现在参照图1,逻辑流程图示出了构成本发明第一实施例的方法。在第一步骤10中,接收要压缩的数字数据,并将其存储在输入缓冲器中。在步骤12,将数据分隔成许多序列。
接下来,在步骤14,依照一预定过程处理被存储的数据,以获得长度可变的压缩数据值。在本较佳实施例中,如上所述,使用二进制搜索过程。在步骤16,将压缩数据值存储在临时存储区中,并在步骤18,产生一删除代码,它表示在压缩步骤中从序列中删除的位数。然后,在步骤20,将删除代码按一预定关系与压缩字值一起存储在临时存储区中。
在步骤22,判断是否需要分隔代码。如果需要,在步骤24,根据一组预定的规则产生一分隔代码,并在步骤26,将分隔代码添加到压缩序列值中。在本较佳实施例中根据上述规则产生分隔代码。
在步骤28,判断是否已经处理了输入缓冲器中的所有数据。如果结论肯定,那么存储在临时存储区中数据构成一组中间数据,方法行至步骤30。如果还没有处理完所有输入数据字,那么方法返回步骤14,并对存储在输入缓冲器中的每个输入数据字节执行步骤12-22。在步骤30,根据预定标准,判断是否已达到了所需的数据压缩程度。在本较佳实施例中,预定标准指定了时限。还可以使用其它标准,例如迭代的预定数目,预定的期望压缩率,或其它等价的标准。
如果还没有获得所需的数据压缩,方法行至步骤32,将中间数据组存储在输入缓冲器中。方法返回步骤12,并将输入缓冲器的数据分离成序列。然后,方法执行步骤14至28,直到处理完输入缓冲器中的所有数据,然后行至步骤30,在那里再次判断是否已达到所需的数据压缩程度。如果达到了所需的压缩程度,那么在步骤34对存储在临时存储区内的中间数据组添加迭代计数,该计数表示已执行的压缩循环次数。在步骤36,提供该数据,作为编码器的输出,并为步骤10中接收到的数字数据指定压缩形式。
现在参照图2,逻辑流程图示出了构成本发明第一实施例另一方面的用于对压缩后的原始数字数据进行解压缩的方法。如图2所示,方法从步骤50开始,接收由图1所示方法产生的经压缩的原始数字数据。接收数据包括各种长度的压缩数据代码,其中包括删除代码,并由分隔值分隔,还包括迭代计数。在步骤52,利用分隔值从接收数据中获得下一个数据代码。下面会更详细地描述分隔代码的识别方法。然后,在步骤54,处理下一个压缩序列值,以获得解压缩的值。在本较佳实施例中,该过程基于二进制搜索技术,它用删除代码和1位来获得解压缩的序列。在步骤56,临时存储解压缩序列。在步骤58,判断是否已处理了所有输入数据。如果没有,则返回并重复步骤52至56。如果已处理了所有数据,那么方法行至步骤60,使计数器增值。
接下来,在步骤62,由临时存储的解压缩值获得一数据代码,用下述方式从临时存储的数据中识别出分隔代码。
然后,在步骤64,处理数据代码,得到解压缩序列。在步骤66,临时存储解压缩序列,并在步骤68判断计数器的值是否等于迭代计数。如果不相等,那么返回并重复步骤60、62、64和66。如果计数器的值等于迭代计数,那么解压缩结束。然后,提供临时存储的压缩值,作为输出。此输出数据是原始数字数据。
现在参照图3,逻辑流程图示出了在对压缩输入数据解压缩时用于识别分隔代码的方法。
方法从步骤70开始。如步骤71所示,识别位流中的下一个删除代码。这包括识别位流中的最高位0位。所有高位位一直到且包括该0位构成了删除代码。接下来,在步骤72,判断删除代码后的下一位是0还是1。如果是1,则此位和所有后续的1位构成与前一个删除代码相关的挂位。于是如步骤74所示,明确地将后面一个0位识别为分隔代码。然后,返回步骤70。
另一方面,如果在步骤72判断出下一位是0位,那么该0位可以是分隔代码,也可以是删除代码。在步骤76,通过判断下一位(在步骤70识别出的删除代码后的第二位)是1还是0来弄清楚。如果该位是1,那么在步骤78明确地将前一位(在步骤70识别出的删除代码后面的第一位)识别为分隔代码,并且程序循环返回步骤70。
另一方面,如果步骤76判断出在步骤71识别出的删除代码后面的第二位是0,那么步骤80将步骤72得出的0位识别了删除代码。用这种方法,可以明确地识别在压缩位流中的分隔位,从而有助于图1的方法。
图4是一逻辑流程图,更详细地示出了构成本发明第二实施例一个方面的数据压缩方法,它可以用为应用程序在可编程的数字计算机上执行。工作中,程序要填充多个循环缓冲器,每个缓冲器对应于一个附加的压缩程度。用户确定所需的压缩程度,从而确定程序执行的循环次数。在工作期间,第一时间段包括读入输入数据并填充程序的所有缓冲器。从概念上可以将此看作“填充流水线”。在此期间,程序接受输入数据,但不产生输出。
所有缓冲器充满后,程序继续接收输入数据,并且还产生压缩数据输出。此第二时段一直继续到用完所有输入数据。
当所有输入数据用完并且没有附加输入数据要压缩时,程序继续产生压缩数据输出,因为它要排空在第一时段充满的缓冲器。从概念上可以将此第三时段看作“排空流水线”。现在对该实施例作更详细的描述。
在步骤100,程序开始执行。在步骤102,进行初始化,在此期间,程序与用户交流,确定对当前运行的要求。包括诸如要压缩文件的名称,将存储压缩数据的输出文件的名称、以及要执行的最大循环次数(即,希望达到的压缩程度)等信息。然后。程序继续,打开用户为输入和输出指定的文件,并将所需的输入数据存储在零循环输入缓冲器中。循环次数初始设为零。
在步骤104,当存储在零循环输入缓冲器中时,程序查看是否存在要压缩的附加输入字节。如果存在,那么程序行至步骤106,取得该输入,并在步骤108将其构成序列。在步骤110,如果没有足够的输入形成序列,那么程序返回步骤104。
在步骤112,通过删除低位0位和第一低位1位并增加删除代码来压缩序列。在步骤114,如果必要,增加分隔代码。
在步骤116,将经压缩的序列代码、其删除代码和分隔代码存储在输入缓冲器中,供下一循环使用。“循环次数”计数器用于跟踪当前正在执行的压缩循环的次数。在步骤118,对该计数器增1。
在步骤120,程序判断当前循环输入缓冲器是否具有剩余的输入。如果有,那么在步骤122,程序试图形成一个完整的序列。如果序列完整(步骤124),那么在步骤126用删除代码形成一个新的压缩序列代码,并在步骤128加入一个分隔代码。在步骤130,将新压缩的序列代码存储在下一个循环输入缓冲器中。
在步骤132,判断是否已经达到了预定的最大循环次数。如果已经达到,那么已经将提供给程序的第一数据压缩到此特定程序的最大程度,对该序列的压缩结束。将循环次数计数器复位到零,且程序返回步骤104,从零循环输入缓冲器中获取新的输入数据。程序继续循环上述步骤,直至输入文件中没有数据。然后,程序行至步骤140。
这时,程序用相应的方法“排空流水线”,即处理各循环输入缓冲器中的所有数据,直至没有位可用来形成序列。然后,程序执行步骤144,用未压缩形式将剩余的位存储在最大循环缓冲器的最后。然后,将最大循环缓冲器中的内容写入指定的输出文件中。程序还将最大循环次数写在输出文件的前面,并在步骤146结束。
现在参照图5,逻辑流程图示出了包含本发明一较佳实施例另一方面的、对压缩数字数据解压缩的方法。用个人计算机上运行的一个程序来实施本方法。在步骤200,程序开始执行。在初始化步骤期间,程序与用户交流,确定对当前运行的要求。包括诸如被压缩数据文件的名称和被解压缩输出文件的名称(即,被恢复的源文件)等信息。另一种方式是,在压缩文件内包含被压缩文件的名称。然后,程序继续下去,打开用户为压缩输入和和解码输出而指定的文件。在打开压缩输入文件后,程序从该文件的前面抽取出要在编码运行期间达到的最大循环次数。然后,在步骤202,使用该数值对循环计数器初始化。这时,我们处于迭代的底部(即,最低)循环。在步骤204,程序查看是否存在要解码的压缩输入附加字节。如果存在,那么程序行至步骤206,获取该压缩输入,并处理它。如果不存在,那么程序行至步骤236,对早已输入的剩余数据进行解压缩(在下文中描述),并结束当前运行。
在步骤206,程序检索下一个删除代码。
在步骤208,如图2A所述,识别下一个删除代码和分隔代码。然后,在步骤210,用删除代码和任何挂位获得解压缩序列。
在步骤214,将解码序列写入下一个较低循环的输入缓冲器中。
在步骤216,程序对循环次数减1,并且开始新的循环处理。在步骤218,处理新循环的第一步骤是判断当前循环输入缓冲器中是否存在一个完整的序列等待处理。如果有,那么程序检索该信息,并行至步骤220进行处理。如果没有足够的位,那么程序行至步骤232。程序通过位检索一直到下一个删除代码的开始,来确定它具有完整的序列。这可以包括被抛弃的分隔代码。
在步骤220,与步骤208一样,程序识别当前循环中的删除代码和分隔代码。在步骤222,程序用同样的方式判断是否有完整的压缩序列等在当前循环输入缓冲器中。如果有,那么程序行至步骤224。否则,程序行至步骤223。
在步骤224,程序用与步骤210相同的方法获得下一个压缩序列输入位,并对其解码。然后,用与步骤214相同的方法,将经解码的序列写到下一个较低的循环输入缓冲器中。
在步骤230,程序判断当前循环是否为0循环。如果是,则结束了对数据的解压缩,并且位于该循环输出缓冲器中的数据与原始源数据相同。现在,将该数据写到指定的输出文件中,并且程序行至步骤232。如果程序不处于0循环,则程序行至步骤216,开始下一循环处理。
在步骤232,系统将循环次数复位到最大循环,其中最大循环在位于当前压缩输入文件开始的标题信息中有规定。这使得程序返回流水线的底部,如前所述继续处理。并且程序在步骤234返回。步骤204判断被解码的当前文件是否有附加的压缩输入。
如果输入文件中没有更多的数据,那么程序执行“排空流水线”,并结束对现在包含在各种输入缓冲器中的数据的解压缩。当所有输入缓冲器都是空的时,程序行至步骤238。在步骤238执行各种“整理”任务,准备结束,并且在步骤240,解码程序结束。包含在指定输出文件中的数字数据是对输入解码器中的原始数据的精确复制。
图4和图5描述的程序可以在具有80486处理器的IBM兼容个人计算机上执行,程序在MS-DOS操作系统下运行。当然,更高级的处理器可以获得更快的压缩和解压缩时间。
现在参照图6,一较佳实施例示出了本发明的另一方面,该实施例在VLSI定制集成电路(“IC”)300上执行。电路300用第一、第二和第三压缩电路实现联系图3程序描述的编码功能。特别是,第一压缩电路302实现在步骤106、108、110、112、114和116中描述的0循环的功能。但是,IC300的电路302不象步骤116所述的那样将输出写入“下一个循环输入缓冲器”中,而是将输出提供给第二电路304的输入端。第二压缩电路304实现步骤122、124、126、128和130中所示的功能。但是,电路304不象步骤130所述的那样将压缩输出写入下一个循环输入缓冲器中,而是将压缩输出作为输入提供给IC300所含顺序中的下一个电路。
IC 300的不同实施可以包括不同数量的电路302-306。对于总压缩率的每个10次幂,大致需要75个电路。例如,IC 300中的75个电路将产生大约10∶1的压缩率,150个电路将产生大约100∶1的压缩率,225个电路将产生大约1000∶1的压缩率,等等。
第三压缩电路306实现步骤122、124、126、128和130的功能。但是,电路306不象步骤130所述的那样把数据写入下一循环的输入缓冲器中,而是提供一个由位流组成的输出信号,表示提供给电路302的输入的压缩形式。另外,当电路306判定没有足够的附加数据位可以形成序列时,该电路提供剩余的位,将其作为未压缩的“下脚料(footer)”,终止输入数据流。
图7是一方框图,示出了形成电路302、304和306的公共压缩电路350。在较佳实施例中,这些电路302、304、306是相同的,有利于在VLSI芯片上实现大量的这种电路。
电路350包括输入电路352,用于接收来自输入端308(对于电路302)或前一个紧接的上游压缩电路(对于电路304和306)的数据。输入电路352与二进制搜索处理器354耦合,而处理器根据图3所示的方法进行数字数据压缩。用存储电路356来实现处理354的临时存储。处理器354产生分隔值,并且提供给输出电路358,而输出电路358又将这些信号提供给输出端310(对于电路306)或下一个紧接的下游压缩电路的输入电路(对于电路302和304)。
在本发明的另一方面,包含多种相同解码电路的VLSI集成电路用类似于上述图6所示的关于编码器硬件形式的方法,实现图5程序的功能。
本领域的技术人员应该理解,不脱离本发明的范围或精神可以对本发明的方法和较佳实施例的结构进行各种变化和改变。通过参考说明书以及实施这里所揭示的发明,本发明的其它实施例对本领域的技术人员来说是显而易见的。说明和例子只能视为举例,本发明的真实范围和精神由以下权利要求书确定。
权利要求
1.一种数字数据压缩方法,其特征在于,包括以下步骤(a)接收要压缩的数字数据;(b)将数字数据分成组,每组具有由1和0组成的预定序列;(c)根据预定过程处理一序列,通过删除位获得具有可变长度的压缩序列值;(d)将压缩序列值存储在临时存储区中;(e)产生一删除代码,该代码表示被删除位的数目;(f)根据预定标准产生一分隔代码;(g)按预定关系将删除代码和分隔代码与压缩序列值一起存储在临时存储区中;(h)对每个组执行步骤c至g,以获得中间数据组;(i)将中间数据组分成序列;(j)根据预定标准,通过多次迭代重复进行步骤c至i;(k)提供最后一次迭代的中间数据组,将其作为接收数字数据的压缩形式。
2.如权利要求1所述的方法,其特征在于,处理序列的步骤包括用二进制搜索过程获得二进制搜索代码。
3.如权利要求1所述的方法,其特征在于,产生分隔代码的步骤包括根据压缩序列值和删除代码的特性产生分隔代码。
4.如权利要求1所述的方法,其特征在于,产生删除代码的步骤包括产生比被删除位数小一位的代码。
5.如权利要求1所述的方法,其特征在于,产生删除代码的步骤包括产生这样的代码,该代码具有一个低位0位和多个高位1位,比从序列中删除的位数小2位,从而形成压缩序列值。
6.一种对经压缩的原始数字数据进行解压缩的方法,其特征在于,包括以下步骤(a)接收输入数据,所述输入数据是经压缩的原始数字数据,包括由分隔代码分隔的各种长度的压缩数据代码和删除代码,还包括一个迭代计数;(b)用分隔值从输入数据获得数据代码;(c)处理数据代码,以便获得解压缩值;(d)临时存储所述解压缩值;(e)重复步骤(b)、(c)和(d),直至处理完所有的输入数据;(f)对计数器增值;(g)按分隔值从临时存储的解压缩值中获得数据代码;(h)处理所述数据代码,以便获得解压缩值;(i)临时存储所述解压缩值;(j)重复步骤(f)、(g)、(h)和(i),直至计数器等于迭代计数;以及(k)输出被存储的解压缩值,用于代表原始数字数据。
7.用于压缩数字数据的设备,其特征在于,包括输入端,用于接收要压缩的数字数据;输出端,用于提供被压缩的数字数据;和第一、第二和第三压缩电路,每个压缩电路包括输入电路,用于接收输入数据;处理电路,它根据预定标准将接收到的输入数据分成序列;二进制搜索处理器,它用二进制搜索过程对序列进行处理,通过删除低位位,获得与序列对应的压缩序列值;代码发生器,它根据压缩序列值和删除代码的特性,产生表示被删除位数目的删除代码和分隔代码;以及输出电路,用于提供压缩序列值、删除代码和分隔代码,将其作为输出数据;第一压缩电路的输入电路与输入端相连,第一压缩电路的输出电路与第二压缩电路的输入电路相连,第二压缩电路的输出电路与第三压缩电路的输入电路相连,而第三压缩电路的输出电路与输出端相连。
8.如权利要求7所述的设备,其特征在于,还包括多个第二压缩电路,它们串联连接在第一和第二压缩电路之间。
全文摘要
数字数据无损压缩和解压缩的方法和设备。用二进制搜索过程处理输入数据,以便在一次迭代中获得标称压缩。对第一迭代输出进行反复迭代,为所有类型的数字数据提供很大的压缩。本方法可以在个人计算机上用软件实施,或者利用大量串联的相同压缩电路在VLSI硬件上实施,从而大量串联的压缩电路形成节律流水式结构。
文档编号H03M7/30GK1257621SQ98805358
公开日2000年6月21日 申请日期1998年4月10日 优先权日1997年4月18日
发明者R·E·兰利 申请人:首要研究有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1