数据序列压缩的制作方法

文档序号:7941071阅读:251来源:国知局
专利名称:数据序列压缩的制作方法
数据序列压缩
背景技术
数据压缩广泛用于传输和存储数据的过程中以增加传输速度并减少数据的存储 需求。数据压缩是减少用于表示数据文件或数据流中的信息的信息位的数量的过程。常见 数据压缩过程的例子是LZ77,在LZ77中,通过指示数据序列中先前出现的数据序列的部分 来压缩数据序列,关于图1中描绘的编码方法100示出了该过程。如图1中所示,形成数据序列102的多个字符被描绘在它们相应的输入位置104 中。还描绘了与压缩数据序列102的次序对应的代码106。在编码方法100中,假定按照其 中示出的输入位置次序输入数据序列102。由此,首先输入第一输入位置的字符“A”,其次 输入第二输入位置的字符“B”,等等。因为没有先前输入或编码的字符,所以第一输入位置的字符“A”被按原样编码。按 原样编码的字符视为文字(literal) 108。当输入第二输入位置的字符“B”时,把它与先前 输入的字符进行比较。在图1示出的例子中,因为不存在在先的匹配字符,所以字符“B”也 被按原样编码,并且由此也是文字108。然而,当输入第三和第四位置的字符“A”和“B”并 把它们与先前输入的字符进行比较时,确定与第一和第二输入位置的字符的匹配部分110。 在这种情况下,对匹配偏移120和匹配长度122而非字符“A”和“B”进行编码。匹配偏移120识别匹配部分110 (重复字符)的位置,并且匹配长度122识别匹配 部分110的长度。在编码方法100中,第三和第四输入位置的字符“A B”的匹配偏移120 是“2”,它指定当前位置(待处理的下一符号的位置)和匹配部分110中的第一字符“A”的 输入位置104之差,并且因为匹配部分110包括两个字符“A”和“B”,所以匹配长度122是 “2”。另外,当输入第五位置的字符“C”时,因为不存在先前输入的匹配字符,所以按原 样对字符“C”进行编码。类似地,由于相同的原因按原样分别对第六和第七位置的字符“D” 和“E”进行编码。然而,当输入字符“A BCD E”时,确定它们与第三至第七输入位置104 的字符匹配。由此,对匹配部分110进行编码,其中,匹配偏移120是“5”,其把匹配部分110 识别为位于从当前位置回退5个位置,并且因为在匹配部分110中存在五个字符,所以匹配 长度122是“5”。编码方法100重复这个过程以对数据序列102中的剩余字符进行编码。当解码器解压缩包含匹配偏移和匹配长度的数据序列时,因为解码器已接收并解 码较早输入位置104的字符,所以解码器能够识别由匹配部分110引用的字符。实现LZ77过程的方式的变化已广泛实现。这些变化的例子包括LZ78、LZW、LZSS、 LZMA及其其它变型。压缩数据的另一方式是经由上下文建模,其中,对每个符号预期出现于每一上下 文中的频率建模的概率分布与每一上下文关联。作为示例,在零和一的二进制流中,上下文 是先前位的值。在这个例子中,存在两个上下文,一个上下文对应于为零的先前位,另一上 下文对应于为一的先前位。因此,例如,每当先前位是零时,就存在关于下一位的值为零或 为一的概率分布。在上下文建模的情况下,通常通过把较短代码(或码字)分配给更可能出现的数据符号和把较长代码分配给不太可能出现的数据符号来实现压缩。为了实现这种压缩,对 数据符号建模并把概率分配给数据符号值出现的可能性。作为例子,在英语文本序列中,如 果由紧接在先的符号组成的上下文是“q”,则与“z”相比,下一个字母更可能是“u”。如此, 通过与字母“z”相比把更短的代码分配给字母“11”可以增强压缩。算术编码是用于执行这 种码字分配的公知技术,其尤其与依赖上下文的概率分配兼容。更具体地讲,在算术编码 中,把分配给符号的概率序列顺序映射到可解码的二进制码字中,所述可解码的二进制码 字的长度接近于分配的概率的倒数的以2为底数的对数之和。虽然适合于多数数据压缩操作,但改进这些过程以进一步压缩数据将是有利的, 由此进一步降低压缩数据的带宽要求和存储容量。

发明内容
这里公开了一种压缩数据序列的方法。在该方法中,把数据序列解析成数据片段, 其中,数据片段中的至少一个数据片段包括匹配部分。另外,使用取决于对于解码器可用的 一个或多个编码的数据符号的至少一个上下文模型压缩匹配部分。还公开了一种编码器,包括编码单元,其被配置为使用取决于先前可解码的数据 符号的一个或多个上下文模型对数据片段的匹配偏移和匹配长度中的至少一项进行编码。这里还公开了一种其上嵌入有一个或多个计算机程序的计算机可读存储介质,其 中,所述一个或多个计算机程序实施用于压缩数据序列的方法。所述一个或多个计算机程 序包括用于下述操作的一组指令把数据序列解析成数据片段,其中,至少一个数据片段包 括具有匹配偏移和匹配长度的匹配部分;以及使用取决于对于解码器可用的一个或多个编 码的数据符号的至少一个上下文模型压缩匹配偏移和匹配长度中的至少一项。这里还公开了一种解压缩编码的数据序列的方法。在该方法中,接收编码的数据 片段,其中,编码的数据片段包括已使用取决于对于解码器可用的一个或多个编码的数据 符号的一个或多个上下文模型编码的该数据片段的修改匹配偏移和修改匹配长度中的至 少一项。另外,解压缩接收的编码的数据片段。


通过下面参照附图进行的描述,本发明的特征对于本领域技术人员而言将会变得 清楚,其中图1示出传统数据序列压缩过程的方框图;图2A示出根据本发明实施例的配置用于执行这里描述的各种功能的编码器的方 框图;图2B示出根据本发明实施例的配置用于执行这里描述的各种功能的解码器的方 框图;图3A描绘根据本发明实施例的压缩和解压缩数据序列的方法的流程图;图3B描绘根据本发明实施例的图3A中描绘的压缩方法中所包含的步骤的更详细 流程图;图4描绘根据本发明实施例的使用上下文建模来压缩匹配偏移和匹配长度的最 低有效位的方法的流程5
图5A描绘根据本发明实施例的更详细地描绘使用图4中的上下文建模对匹配偏 移的LSB进行编码的步骤的方法的流程图;图5B描绘根据本发明实施例的更详细地描绘使用图4中的上下文建模对匹配长 度的LSB进行编码的步骤的方法的流程图;图6描绘根据本发明实施例的解压缩数据片段的方法的流程图,其中已通过使用 上下文建模来压缩匹配偏移和匹配长度的最低有效位而对所述数据片段进行了编码;图7示出根据本发明实施例的计算机系统,图2中描绘的编码器可以作为硬件、固 件或软件存储在该计算机系统上。
具体实施例方式为了简单和说明的目的,通过主要参照本发明的示例性实施例描述本发明。在下 面的描述中,阐述了许多具体细节以便提供对本发明的全面理解。然而,本领域普通技术人 员应该清楚,本发明可以被实施而不受限于这些具体细节。在其它情况中,没有详细描述公 知方法和结构以免不必要地模糊本发明。这里公开了一种通过使用至少一个上下文模型压缩数据序列的系统和方法。更 具体地讲,这里公开的系统和方法被配置用于使用所述至少一个上下文模型来压缩匹配部 分。更具体地讲,这里公开的系统和方法被配置用于压缩匹配部分的匹配偏移的最低有效 位(LSB)和匹配长度的最低有效位。此外,这里公开了一种解压缩通过使用所述至少一个 上下文模型压缩的数据序列的系统和方法。在一个方面,相对于传统压缩算法(诸如,LZ77、LZMA等)而言,一般的匹配部分 的压缩和解压缩以及具体地,匹配偏移的LSB和匹配长度的LSB的压缩和解压缩设计为产 生相对较小的压缩位流大小。增加的压缩也旨在转化为减少的系统存储要求,这旨在导致 在存储和处理数据序列所需的硬件方面节省成本。此外,这里公开了用于压缩数据序列的所公开系统和方法的实例化的例子。关于 处理器可执行代码实现该例子。如本文以下更详细描述的,可执行代码可以被标为包括用 于压缩可执行代码的文字、匹配偏移和匹配长度的上下文模型。更具体地讲,可以通过使用 上下文模型压缩匹配偏移和匹配长度的LSB以例如减少可执行代码的存储要求。因此,在 一个方面,这里公开的方法可以实现为对现有压缩过程(诸如,LZMA算法)的增强。首先参照图2A,示出了根据例子的配置用于执行这里描述的各种功能的编码器 200的方框图。应该理解,下面对图2A所描绘的编码器200的描述仅为可配置这里描述的 编码器200的多种不同方式中的一种方式。另外,应该理解,在不脱离编码器200的范围的 情况下编码器200可包括附加的部件并且可以移除和/或修改这里描述的部件中的一些部 件。一般而言,编码器200被配置用于把输入数据202的流转换成编码数据204的流。 编码器200可以从存储装置接收输入数据流202,所述存储装置诸如计算机系统的随机存 取存储器(RAM)、计算机系统的只读存储器(ROM)、软盘、紧致盘、数字视频盘、磁盘或其它 数据存储介质。另外,或者可替换地,编码器200可以通过网络(诸如,内联网、因特网等) 接收数据流。在任一方面,编码器200可以包括任何合理适当的设计为实现这里描述的各 种功能的硬件部件或软件程序。
编码器200还可以把编码数据204传送给上述存储装置和网络中的任一项或者传 送给其它存储装置和网络。另外,编码数据204可以由解码器250解码,解码器250被配置 用于以多种方式中的任一方式根据编码数据204重构数据流202,如下文更详细地讨论的。编码器200被描绘为包括解析单元210、文字编码单元222、最高有效位(MSB)编 码单元224和最低有效位(LSB)编码单元226。解析单元210被配置用于接收输入数据202 的流并确定当前数据片段是否与任何先前的数据片段匹配。因此,例如,如上面参照图1中 描绘的编码方法100描述的,解析单元210用于分割输入数据202的数据流。该数据流可 包括已知待压缩的任何合理适当类型的数据流,诸如文本、音频、视频、可执行代码等。因此,例如,解析单元210被配置用于识别最近接收的数据符号是否为文字212, 所述文字212是既不与先前数据匹配也不是足够长的匹配部分的一部分的数据片段。对于 匹配部分110,解析单元210还被配置用于产生匹配偏移的序列,所述匹配偏移描述其中可 以找到先前匹配数据的与当前数据序列相距的数据符号的数量。另外,解析单元210被配 置用于产生对应的匹配长度的序列,所述匹配长度指示匹配部分中所包含的数据符号的数 量。虽然解析单元210已被描绘为形成编码器200的一部分,但应该理解,在不脱离这 里描述的编码器200的范围的情况下,解析单元210可包括与编码器200分开的单元。编码器200被配置用于根据解析的数据片段是文字212还是匹配部分110以各种 方式对这些数据片段进行编码。更具体地讲,例如,编码器200被配置用于调用或实施文字 编码单元222以对识别为文字212的数据片段进行编码。文字编码单元222可以任何合理 适当的方式操作以对文字212进行编码,所述方式诸如在LZ77、LZMA等中描述的那些方式。当数据片段是匹配部分110时,编码器200被配置用于调用或实施MSB编码单元 224和LSB编码单元226。MSB编码单元224可被实施从而以任何合理适当的方式对匹配偏 移MSB 214a和匹配长度MSB214b进行编码,所述方式诸如在LZ77、LZMA等中描述的那些方 式。然而,LSB编码单元226可被实施以使用上下文建模技术对匹配偏移LSB 216a和匹配 长度LSB 216b进行编码,如以下更详细描述的。更具体地讲,编码器200可通过使用上下文建模来压缩输入数据202的序列或流 的数据片段,其中,数据流中的每一符号与可从先前编码的符号确定的上下文关联。换句话 说,通过使用上下文建模,当前数据片段的压缩可依赖于对解码器可用的一个或多个先前 编码的数据片段。如此,例如,上下文可以如紧接在先的符号的值一样简单,或者上下文可 以是该符号之前的先前已压缩的数据片段的后缀的更一般的函数等。如上所讨论,与每一上下文关联的是对每个符号(在这种情况下,为匹配偏移和 匹配长度LSB)预期出现于每一上下文中的频率建模的概率分布。另外,通常通过把较短代 码(或码字)分配给更可能出现的匹配偏移和匹配长度以及把较长代码分配给不太可能出 现的匹配偏移和匹配长度来实现压缩。为了实现这种压缩,对匹配偏移和匹配长度建模并 把概率分配给匹配偏移和匹配长度出现的可能性。现在参照图2B,示出了根据例子的配置用于执行这里描述的各种功能的解码器 250的方框图。应该理解,下面对图2B中所描绘的解码器250的描述仅为可配置这里描述 的解码器250的多种不同方式中的一种方式。另外,应该理解,在不脱离解码器250的范围 的情况下解码器250可包括附加的部件并且可以移除和/或修改这里描述的部件中的一些部件。一般而言,解码器250被配置用于解压缩已经由编码器200编码的数据204。解码器250可以直接从编码器200接收编码数据204或者解码器250可以从数据存储单元接收 编码数据204。在任一方面,解码器250可以包括任何合理适当的设计为实现这里描述的各 种功能的硬件部件或软件程序。解码器250被描绘为包括识别单元260、文字解码单元272、最高有效位(MSB)解 码单元274和最低有效位(LSB)解码单元276。识别单元260被配置用于接收编码数据204 并确定形成编码数据204的数据片段是编码文字262、编码匹配偏移/长度MSB 264a/264b 还是编码匹配偏移/长度LSB 266a/266b。更具体地讲,例如,编码器200可以在压缩操作期间使用二进制标记把将要压缩 的数据标记为文字(标记=0)或匹配部分(标记=1)。编码器200还可以把标记与数据 一起进行压缩。解码器250接收包括编码的标记信息的编码数据204,并且识别单元260解 压缩编码的标记信息。识别单元260然后可以使用解压缩的标记信息识别与特定标记关联 的数据片段是文字还是匹配部分。当编码的数据片段包括编码文字262时,解码器250被配置用于调用或实施文字 解码单元272以根据编码文字212的方式对编码文字262解码。当编码的数据片段包括 编码的匹配部分时,解码器250被配置用于调用或实施MSB解码单元274以对编码的匹配 偏移/长度MSB264a/264b解码,并且调用或实施LSB解码单元276以对编码的匹配偏移/ 长度LSB 266a/266b解码。MSB解码单元274可以以任何合理适当的方式对匹配偏移MSB 264a和匹配长度MSB 264b解码。然而,LSB解码单元276可以如下文更详细描述那样对匹 配偏移LSB 266a和匹配长度LSB 266b解码。更具体地讲,例如,解码器250可以解压缩由 编码器200通过使用上下文建模编码的数据片段。根据前面的讨论,编码器200可以实施一种或多种下述方法以在压缩识别为匹配 部分110的数据片段的匹配偏移LSB 216a和匹配长度LSB216b中使用上下文建模。参照 下面的流程图描述编码器200可用于对输入数据202的流编码的多种方式。另外,还参照 下面的流程图描述解码器250可用于对编码的数据204的流解码的多种方式。具体参照图 2A中描绘的编码器200和图2B中描绘的解码器250对下面的流程图进行描述。然而,应该 理解,下面流程图中描述的方法可以由这样的编码器执行在不脱离这里描述的方法的范 围的情况下,该编码器的部件不同于图2A和图2B中描绘的部件或者该编码器的部件包括 图2A和图2B中描绘的部件的变型。另外,应该理解,下面对方法的描述仅是可以实施这些方法的各种不同方式中的 少量方式。此外,应该理解,在不脱离下面方法的相应范围的情况下下面方法中的一些方法 或全部方法可以包括另外的步骤并且可以去除和/或修改在此描述的步骤中的一些步骤。首先参照图3A,示出了根据例子的压缩和解压缩数据序列的方法300的流程图。 一般而言,方法300中包含的步骤302和304可以由编码器200实施以压缩输入数据202 的序列或流,并且步骤306可以由解码器250实施以解压缩编码数据204的序列或流。如图3A中所示,在步骤302,编码器200可以把输入数据序列202解析成数据片 段。例如,数据片段可包括形成输入数据202的字符或符号的一个或多个区段或序列。在 步骤304,编码器200可以使用至少一个上下文模型压缩确定为包括匹配部分110的数据片段。另外,在步骤306,解码器250可以对压缩的数据片段进行解码。参照图3B中描述的方法320更详细地描述步骤302和304,其中,图3B也是根据 例子的压缩数据序列的方法320的流程图。参照图6中描述的方法600更详细地描述步骤 306,其中,图6也是根据例子的解压缩编码的数据序列的方法600的流程图。
首先参照图3B,方法320可以开始于在步骤322接收待压缩的输入数据202的流。 一旦开始,如步骤324所示,解析单元210可以把输入数据202解析成多个数据片段并且可 以选择当前数据片段。在步骤326,可以将当前数据片段与先前编码的数据进行比较以确定当前数据片 段是否包括与先前编码的数据的一部分匹配的部分110。例如,解析单元210可以确定当前 数据片段是文字212还是匹配部分110。如果确定当前数据片段是正被比较的第一数据片 段或者当前数据片段不与先前数据片段匹配,则当前数据片段可以视为文字212并且可以 被编码。更具体地讲,在步骤328,文字编码单元222可以使用编码文字的任何合理适当的 算法对当前数据片段编码,所述算法诸如在LZ77、LZMA等中描述的那些算法。在步骤330,可以确定是否要对任何附加的输入数据202进行编码。例如,在步骤 330,解析单元210可以确定输入数据202是否包括附加的待编码的数据。如果确定已对所 有的输入数据202编码,则方法300可以结束,如步骤332所示。在步骤332之后,编码数 据204可以输出到数据存储装置、传送到接收装置等。另外,或者可替换地,编码数据204 可以被传送给解码器250。然而,如果至少一个数据符号仍待编码,则如步骤324所示,解析单元210可以再 次解析输入数据202并且可以选择另一数据片段,诸如形成输入数据202的数据片段序列 中的下一数据片段。另外,在步骤326,解析单元210可以比较当前数据片段和先前编码的 数据以确定是否存在匹配部分。如果发现当前数据片段是与先前编码的数据匹配的部分 110,则解析单元210可以确定匹配部分110的匹配偏移和匹配长度,如步骤334所示。根据例子,在步骤334,解析单元210可以把匹配偏移限制为大于零并且把匹配长 度限制为大于预定最小匹配长度。在这个例子中,编码器200不考虑具有比所述预定最小 长度短的匹配长度的匹配部分110。另外,编码器200把那些匹配部分110中包含的符号作 为文字进行处理。如此,可以计算通过从实际匹配偏移减去1确定的修改匹配偏移和通过 减去所述预定最小匹配长度确定的修改匹配长度。另外,在步骤336,编码器200可以对修 改匹配偏移和修改匹配长度进行编码。解码器通过对编码的修改值解码并把减去的值加回 来可以重构匹配偏移和匹配长度的实际值。根据另一例子,解析单元210也可以把修改匹配偏移限制为具有与在匹配部分的 全部长度被包括在该修改匹配偏移中的情况下可能的长度相比相对较短的长度。因此,除 了以上讨论的最小长度之外,或者可替换地,解析单元210可以被配置为把修改匹配偏移 限制为具有最大长度。在任一方面,如步骤336所示,编码器200可以使用至少一个上下文模型对修改匹 配偏移和修改匹配长度进行编码。如上所述,所述至少一个上下文模型可包括取决于对于 已解码所有先前编码的数据的解码器250已知的一个或多个编码的数据符号的模型。以下 参照下面的流程图更详细地描述编码器200可以对匹配部分110的修改匹配偏移和修改匹 配长度编码的各种方式。
在已对修改匹配偏移和修改匹配长度编码之后,在步骤330可以确定是否待编码 任何附加的输入数据。再次,如果确定形成输入数据202的所有数据片段已被编码,则方法 300可以结束,如步骤332所示。另外,在步骤332之后,编码数据204可以输出到数据存储 装置、传送到接收装置等。另外,或者可替换地,在步骤332之后,编码数据204可以被传送 给解码器250。然而,对于仍待编码的任何输入数据202,可以重复步骤324-336。 现在,参照图4,示出了根据例子的使用上下文建模压缩修改匹配偏移216a和修 改匹配长度216b的最低有效位(LSB)的方法400的流程图。方法400可视为提供了对于 方法320中的步骤336的更详细的描述。在步骤402,可以确定在步骤334确定的修改匹配偏移和修改匹配长度的MSB 214a/214b和LSB 216a/216b。另外,MSB编码单元224可以通过任何合理适当的方式(诸 如,在LZ77、LZMA等中描述的那些方式中的任一方式)在步骤404对修改匹配偏移MSB 214a和修改匹配长度MSB 214b编码。编码的修改匹配偏移MSB 214a和修改匹配长度 MSB214b也可以在步骤404被传送给解码器250。分别在步骤406和408,在修改匹配偏移LSB 216a和修改匹配长度LSB 216b的编 码期间可以使用上下文建模。更具体地讲,例如,在步骤406,在对修改匹配偏移LSB 216a 编码时考虑开始匹配部分110的当前符号的上下文和匹配部分110所在的不确定性窗口中 的上下文。从修改匹配偏移的较高有效位(more significant bits)可以导出不确定性窗 口的位置以及因此导出不确定性窗口中的上下文。换句话说,在最低有效位的数量设置为 二⑵的例子中,在解码器250已知MSB (除了 2个LSB以外的所有位)之后,解码器250基 于所述较高有效位的值知道匹配部分110的开始位置位于四个位置(所述不确定性窗口) 之一。然而,应该理解,最低有效位的数量可以设置为任何合理适当的数量。根据最低有效位设置为二(2)的例子,并且为了使解码器250准确地预测匹配部 分110的开始位置,编码器200可以使用不确定性窗口中的四个上下文的值和将要开始 重复部分110 (或匹配部分)的待压缩的下一符号的上下文的值来预测修改匹配偏移LSB 216a。例如,该预测可以基于这样的概念很可能地,如果不确定性窗口中的符号的那些上 下文之一与(将要开始所述重复部分的)待编码的下一符号的上下文相同,则匹配部分110 将会开始于那个符号。另外,根据开始匹配部分110的符号的上下文的值以及不确定性窗口中的符号的 上下文,LSB 216a将会具有不同的分布。此外,在步骤406,根据一个例子,通过使用由根据 上下文(per context)的可能性/概率估计驱动的算术编码,可以把较短的代码长度分配 给那些位的更可能的值。如以上所讨论,存在两个级别或层级的上下文。一个级别是每个符号的上下文,诸 如先前符号的值、关于先前符号的函数等。另一级别是用于根据第一级别的上下文的值压 缩LSB 216a的一种元上下文。在步骤406和408,建立第二级别的上下文以用于压缩修改 匹配偏移和修改匹配长度的LSB 216a、216b。与其它压缩算法(诸如,LZMA)相比,例如, 步骤406和408对于LSB 216a、LSB 216b并不采用依赖数据符号的上下文,而是使用独立 于先前数据符号和独立于先前编码的数据符号的函数确定的上下文对LSB 216a、LSB 216b 建模。
作为具体的非限制性的例子,匹配偏移的LSB可以设置为二(2),并且匹配偏移 可以针对具体情况等于数字“156”。在这个例子中,因为如以上所讨论的,匹配偏移至少 为“1”,所以匹配偏移将会作为数字“155”被编码。数字“155”的二进制(base 2)表示是 “10011011”。在这个例子中,修改匹配偏移的LSB 2 16a是“11”,并且修改匹配偏移的MSB 214a 是“100110”。如这里所讨论,通过与MSB 214a/214b分开地压缩LSB 216a//216b,与一起压 缩匹配偏移和匹配长度的所有位相比,可以获得更大程度的压缩。然而,分开压缩LSB 216a/216b导致了匹配部分开始和结束位置的不确定性窗口,因为该信息包含在LSB 216a/216b 中。不确定性窗口的尺寸通过可以预设的最低有效位的数量来确定。因此,对于匹配 偏移,在解码器必须对LSB 216a解码之前,MSB 214a的位对于解码器是已知的,这是因为 它们已被编码并由解码器250接收并且唯一不知道的是LSB 216a的位。作为示例,如果已 知MSB具有值11011并且LSB的数量设置为3,则已知匹配部分落在等于8的不确定性窗口 内,其中,8是2的3次幂。因此,在这个例子中,如果3个位都是零,则数字将会是216 ( 二 进制的11011000),其中,216对应于3个位是零的情况。下一个更大的数字将会是217,如 此一直到与所有位都是一(1)的情况对应的223。因此,这个例子中的不确定性窗口在216 和223之间,包括216和223。使用不确定性窗口中所包含的符号的符号上下文连同当前符号的符号上下文一 起压缩修改匹配偏移的LSB 216a。更具体地讲,例如,解码器250使用不确定性窗口中所包 含的符号尝试预测修改匹配偏移的LSB 216a的值。通过使用类似的过程压缩修改匹配长度的LSB 216b。在这个过程中,替代观察匹 配部分的开始,考虑匹配部分的结束,这是因为寻找匹配部分的总长度。另外,假定在解码 器必须对匹配长度解码之前匹配偏移对于解码器是已知的,并且由此,匹配部分的开始的 位置是已知的。另外,假定匹配长度的LSB 216b的数量设置为3,则除了该长度的3个最低 有效位以外的所有位被指定,在给定了 MSB的值的情况下,这表示匹配部分将会如上所述 结束于具有八个位置之一的不确定性窗口中。再次,不确定性窗口中所包含的符号用于压 缩LSB 216b。更具体地讲,基于不确定性窗口中所包含的符号预测匹配部分可能结束的位 置。在下面的部分中,更详细地描述如何使用上下文建模压缩LSB216a、LSB 216b的 更加数学化的方法。为了本描述的目的,假定在步骤406和408分别将要对修改匹配偏移的最低有效k 个位和修改匹配长度的最低有效1个位编码。另外,还假定与表示数据中的第i符号的每 个符号Ui)关联的是仅可以根据第i符号之前的符号确定的有限值的符号上下文(Ci)。例如,根据待编码的输入数据202的特性可以以多种方式确定符号上下文(Ci)。 例如,在相对简单的例子中,符号上下文(Ci)可以是先前的紧接在先的符号的值。在另一 例子中,符号上下文(Ci)可以是某一其它先前的在先符号的值。在另一例子中,符号上下 文(Ci)可以包括Markovian上下文t个在先符号的某一函数。在又另一例子中,例如,在 输入数据202包括可执行代码的情况下,可以使符号上下文(Ci)的值适合于可执行代码自 身和配置用于实施可执行代码的处理器的类型,如下文更详细描述的那样。因为在建立上下文模型时可以采用输入数据202的各方面,所以可以使符号上下文(Ci)的值适合于某些 情况。基于以上的假定,参照图5A中所描绘的方法500的流程图更详细地描述步骤406。 如图5A中所示,在步骤502,确定匹配不确定性窗口。更具体地讲,给定除了输入数据202 的序列中开始于位置i的匹配部分110的修改匹配偏移的最低有效k个位216a以外的所 有位,匹配部分110的开始可以缩窄为发生在2k个连续符号索引的匹配不确定性窗口内。 因为除了修改匹配偏移的最低有效k个位以外的所有位已在步骤404被发送给解码器,所 以匹配部分的开始可以缩窄至匹配不确定性窗口。 在任一方面,让矢量ν表示与这个匹配不确定性窗口中的符号对应的2k个符号上 下文IcJ的序列。因为此时存在对于解码器而言未知的k个位并且这k个位可具有2k组 值之一,所以匹配部分110的开始视为在为2k个符号的某一不确定性窗口内。符号上下文(Ci)可以用于更高级别的上下文,该更高级别的上下文为了本公开的 目的而称为匹配上下文。匹配部分110在其中开始的不确定性窗口可以用于确定所述匹配 上下文。另外,在步骤504,例如,匹配上下文也可以形成为作为重复部分的开始的正被压缩 的下一符号的符号上下文(Ci)的函数。如此,已知存在包括下一符号的匹配部分110。下 一符号的值对于解码器250而言是未知的;然而,它的符号上下文(Ci)是已知的,这是因为 可以从先前的符号计算该符号上下文(Ci)。另外,因为匹配部分110处于先前编码的数据 中,所以不确定性窗口中的每个符号的符号上下文(Ci)此时对于解码器而言是已知的。通 过使用所有先前引用的符号,可以确定符号上下文(Ci)和符号自身的值。如此,通过对于匹配不确定性窗口中的符号上下文和作为匹配部分的一部分的新 符号的符号上下文(Ci)应用某一函数,可以形成匹配上下文。作为示例,可以作为¥和Ci 的函数,例如,f(V,Ci)获得用于压缩修改匹配偏移的最低有效k个位的匹配上下文。可能 的函数的例子为下面给出的长度2k的二进制矢量方程(1):f(v,Ci) = [d(v(l),Ci),d(v(2),Ci),…,d(ν (2k),Ci) ] ·在方程(1)中,如果χ = y,则d(x,y) = 1,且如果χ乒y,则d(x,y) = 0,并且 v(j)表示匹配偏移不确定性窗口中的第j符号上下文(Ci)。方程(1)的动机是开始重复 部分的符号(Xi)的符号上下文(Ci)常常应该与不确定性窗口内的匹配部分的开始点的符 号上下文(Ci) 一致。LSB编码单元226然后可以使用例如算术编码和针对上述上下文函数f(v,Ci)的 每个值关于k个位的单独(separate)概率分布估计在步骤506对修改匹配偏移的k个最 低有效位编码。现在参照图5B,示出了更详细地描述步骤408的方法550的流程图。如图5B中所 示,在步骤552可以识别匹配部分的结束。更具体地讲,给定在步骤404已被编码并发送给 解码器250的匹配偏移和除了修改匹配长度的1个最低有效位以外的所有位,定义匹配长 度的匹配部分110的结束可以缩窄为发生于21个符号的不确定性窗口内。换句话说,在步 骤404,修改匹配长度MSB 214b已被编码并发送给解码器250,由此剩下修改匹配长度LSB 216b。另外,可以假定匹配偏移充分远离当前数据片段,从而整个匹配部分110容纳在先 前编码的数据中。更具体地讲,假定21个符号的不确定性窗口完全落在索引i之前。如此, 不确定性窗口内的所有21个符号的符号上下文(Ci)可用于压缩这1个最低有效位。让w表示符号上下文的这个序列。在步骤554,然后作为w的函数(例如,函数g(w))导出用于压缩修改匹配长度的最低有效1个位的上下文。根据例子,例如,基于匹配部分110更可能终结于与其它符号相 比具有某些符号上下文的符号,函数g⑷可包括识别函数[W⑴,W(I),-,w(21)]o作为 示例,在处理器指令中,匹配部分110更可能结束于指令边界而非指令的中间。类似于修改匹配偏移,LSB编码单元226随后可以使用例如算术编码和针对g(w) 的每个值关于1个位的单独概率分布估计在步骤556对修改匹配长度的最低有效1个位编 码。方法550可以扩展为也处理不确定性窗口结束于索引i之后的情况。在这种情况 下,对于解码器250而言已知的序列扩展为超出i,就好像修改匹配长度被尽可能大地给予 除了1个最低有效位以外的所有位。以上的序列w随后将会对应于这个人为扩展的序列的 后面21个符号,并且所述1个最低有效位的建模和压缩将会如上所述进行。现在参照图6,示出了根据例子的对编码数据序列进行解压缩的方法600。如图6 中所示,在步骤602,解码器250接收由编码器200编码的数据。如以上参照图2B所述,编 码数据204包括编码的标记信息,所述编码的标记信息识别数据片段包括文字还是匹配部 分。在这个方面,在步骤604,解码器250调用或实施识别单元260以解压缩编码的标记信 息并根据解压缩的标记信息识别编码的数据片段是编码文字262还是编码匹配部分。如果在步骤606识别单元260确定编码的数据片段不包括匹配部分,则解码器250 被配置用于调用或实施文字解码单元272以在步骤608通过用于对文字解码的任何合理适 当的算法(诸如,在LZ77、LZMA等中描述的那些算法)对编码文字262解码。解码器250 也可以在步骤610确定是否存在待解码的附加的数据片段,并且可以在解码器250确定不 存在待解码的附加的数据的情况下在步骤612结束方法600。另外,解码的文字可以作为解 压缩数据204输出。然而,如果在步骤606识别单元260确定编码的数据片段包括匹配部分,则在步骤 614解码器250可以调用或实施MSB解码单元274以对编码的修改匹配偏移MSB 264a和 编码的修改匹配长度MSB 264b解码。如上所述,已使用至少一个上下文模型对修改匹配偏 移MSB 264a和修改匹配长度264b编码。如此,在步骤614,MSB解码单元274被配置用于 基于解码器250先前已解码的一个或多个数据符号对修改匹配偏移MSB 264a和修改匹配 长度MSB 264b解码。在步骤616,解码器250可以调用或实施LSB解码单元276以对编码的修改匹配 偏移LSB 266a和编码的修改匹配长度LSB 266b解码。再次,如上所述,修改匹配偏移LSB 266a和编码的修改匹配长度LSB 266b已通过使用上下文建模被压缩。如此,LSB解码单元 276被配置用于基于与修改匹配偏移LSB 266a和编码的修改匹配长度LSB 266b对应的上 下文确定修改匹配偏移LSB 266a和编码的修改匹配长度LSB 266b的值。LSB解码单元276被配置为使用解码的修改匹配偏移MSB 264a确定修改匹配偏 移LSB 266a的值。更具体地讲,例如,解码器250根据解码的修改匹配偏移MSB 264a导出 匹配部分110在其中开始的不确定性窗口中的上下文的位置。换句话说,在LSB的数量设 置为二(2)的例子中,在解码器已对修改匹配偏移MSB (除2个LSB以外的所有位)解码之 后,解码器250基于所述较高有效位的值知道匹配部分110的开始位置位于四个位置(所述不确定性窗口)之一。另外,匹配偏移LSB解码单元276使用不确定性窗口中的四个上下文的值和开始 重复部分110的待解压缩的下一符号的上下文的值形成修改匹配偏移LSB 216a的上下文, 并由此,在某种意义上,尝试预测这些LSB。例如,这种预测可以基于这样的概念很可能 地,如果不确定性窗口中的符号的那些上下文之一与(将要开始重复部分的)待编码的下 一符号的上下文相同,则匹配部分110将会开始于那个符号。
在步骤616,解码器250可以调用或实施LSB解码单元276以对编码的修改匹配 长度LSB 266b解码。更具体地讲,例如,解码器250被配置用于基于解码的修改匹配长度 MSB 264b和完全解码的修改匹配偏移对编码的修改匹配长度LSB 266b解码。根据例子,方法300、320、400、500、550、600中所列出的步骤可以在压缩和解压缩 可执行代码时被实施。嵌入式处理器通常用于计算装置中以实施计算装置中的各种功能。 在嵌入式处理器上运行的软件或固件通常存储在计算装置上的非易失性闪存中,并且在启 动过程期间被载入到处理器中。通过如下面所讨论地压缩载入到处理器中的可执行代码, 可以减少可执行代码所需的存储器的量,由此减小闪存的尺寸和成本。当压缩可执行代码时,因为可以获得对于可执行代码如何工作的更好理解,所以 当制作在压缩可执行代码的修改匹配偏移LSB 216a和修改匹配长度LSB 216b时应用的上 下文模型时,可以采用关于如何设计可执行代码的现有知识。另外,上下文可以视为在观察 符号时基于符号的值演化的一种类型的有限状态机的输出。参照处理器(诸如,可从Illinois的Schaumburg的Motorola公司得到的 ColdFire 处理器)的指令集描述这种可执行代码的例子。因此,先前一般讨论的数据 在这个例子中对应于待压缩的可执行代码,并且符号Xi对应于可执行代码的连续字节。 ColdFire 指令集具有可变长度指令,即两个字节、四个字节和六个字节。另外,指令可以 是1个字长、2个字长或3个字长,其中,每个字具有两个字节,并且每个字节(或符号Xi) 的符号上下文Ci可以选择为0、1、2或3之一并如下确定0 包含在指令的第一字中;1 包含在2字指令的第二字中;2 包含在3字指令的第二字中;以及3 包含在3字指令的第三字中。上下文可以具有以上列出的四个值之一并且可以解释为字节具有的指令中的相 位。例如,上下文确定字节在指令中的位置。因此,例如,上下文值“0”表示字节在指令的 第一字中。在这种情况下,指令中所包含的字的数量对于解码器250而言仍是未知的。然 而,例如,ColdFire 处理器的指令集的编码具有这样的性质可以从第一指令字(即,指令 的前两个字节)的值推断出指令的长度。假定可执行代码中的第一字节的位置是1,对于任 何整数j,符号x”+1和Χ。.+2具有相同的上下文。也就是说,具有奇数位置索引的符号和紧接 在后的符号将会被分配相同的上下文。这种性质连同上文讨论的上下文的本质意味着当前符号对(X2i+1,X2i+2)的符号上 下文(c2i+1)可以根据先前编码的符号(X2i-PX2i)的上下文和/或值而确定。这使得当前符 号(x2i+1)的符号上下文(c2i+1)能够用作压缩包括当前符号(x2i+1)的匹配偏移和匹配长度 的上下文模型的一部分。假定T(x,y)是在给定字节χ和y的情况下返回其第一字由字节(x, y)组成的ColdFire 指令的长度的表格。然后,根据有限状态更新规则u (c2i_1; x2i_1; x2i)确定对X2i+1,x2i+2的符号上下文C2i+1 如果C2H = 1 或 3,则u(c2H,X2H,x2i) = 0如果C2h = 0 并且 T (Χ2Η,x2i) = 2,则 u(C2H,Χ2Η,x2i) =1如果c2h = 0 并且 T (χ2η,x2i) = 3,贝IJ IKc2H,X2i^1, x2i) = 2如果c2h = 2,贝IJU(C2h,Χ2η,x2i) = 3其中,C2i^1能够解释为状态的运行值。根据实施方法300、320和400以压缩ColdFire 可执行代码的第一例子,由此根据以上概述的过程压缩修改匹配偏移LSB 216a和修改匹配长度LSB 216b,其中在该过程 中上面的ColdFire 特定符号上下文确定符号上下文Ci。在一个例子中,修改匹配偏移LSB 216a和修改匹配长度LSB 216b的数量k和1都设置为2。另外,用于根据符号上下文确定 第二级别的上下文的函数f将会是以上讨论的方程(1)中的函数。另外,用于形成长度相 关上下文的函数g将会是识别函数,也如以上所讨论。根据另一例子,增大所得到的上下文,其中在修改匹配偏移的情况下,使用标记指 示待编码的下一符号的位置索引的值是奇数还是偶数,并且在修改匹配长度的情况下,使 用标记指示匹配长度不确定性窗口中的第一符号的位置索引的值是奇数还是偶数。这种增 大把以上第一例子中的前述上下文中的每个上下文分成两个,并基于附加的偶数/奇数位 置索引标记的值进行选择。根据另一例子,待压缩的数据可以包括英语文本。在这个例子中,先前出现的符号 Xi-!的值或者其某一函数可以用于如上所述导出第二级别的修改匹配偏移和修改匹配长度 上下文。在这个例子中,例如,先前出现的符号或其函数可以指示该先前符号是辅音、元音 还是非字母(诸如,空白、标点符号等)。通过实施方法300、320和400,把可执行代码的标记(labeling)并入到在诸如 LZMA的压缩过程中用于压缩文字、匹配偏移和匹配长度的上下文模型中。因此,在一个方 面,方法300、320和400可以实现为对现有压缩算法(诸如,LZMA算法)的增强。方法300、320、400和600中阐述的操作可以作为应用程序、程序或子程序包含在 任何希望的计算机可访问介质中。另外,方法300、320、400和600可以由计算机程序来实 现,所以计算机程序可以以各种活动和不活动的形式存在。例如,它能够作为由程序指令组 成的软件程序而存在,所述指令的格式为源代码、目标代码、可执行代码或其它格式。以上 的任一项能够以压缩或未压缩的形式实现于包括存储装置和信号的计算机可读介质上。示例性计算机可读存储装置包括常规计算机系统RAM、ROM、EPROM、EEPROM和磁盘 或磁带或者光盘或光学记录带。不管是否使用载波进行了调制,示例性计算机可读信号是 主控或运行计算机程序的计算机系统能够被配置成访问的信号,包括通过因特网或其它网 络下载的信号。上述内容的具体例子包括在CD ROM上分发程序或经因特网下载分发程序。 在某种意义上,作为抽象实体的因特网本身是计算机可读介质。一般的计算机网络也是如 此。因此,应该理解,任何能够执行上述功能的电子装置可以执行以上列举的那些功能。图7示出根据例子的计算机系统700,在该计算机系统700上,这里公开的编码器 200和解码器250中的至少一个可以存储为硬件、固件或软件。在这个方面,计算机系统700 可以用作执行以上关于编码器200和解码器250中的任一个或二者描述的一个或多个功能的平台。
计算机系统700包括处理器702,处理器702可以用于执行方法300、320、400、 500,550和600中描述的一些步骤或所有步骤。来自处理器702的命令和数据经通信总线 704进行传送。计算机系统700还包括主存储器706 (诸如,随机存取存储器(RAM))和辅助 存储器708,其中,在主存储器706中,可以在运行时间期间执行编码器200和解码器250中 任一个或二者的程序代码。辅助存储器708例如包括可以存储用于压缩数据序列的程序代 码的拷贝的一个或多个硬盘驱动器710和/或可移除存储驱动器712,其代表软盘驱动器、 磁带驱动器、紧致盘驱动器等。可移除存储驱动器710按照公知的方式对可移除存储单元714进行读和/或写。 用户输入和输出装置可包括键盘716、鼠标718和显示器720。显示适配器722可以与通信 总线604和显示器620对接,并且可以从处理器702接收显示数据并把显示数据转换成用 于显示器720的显示命令。另外,处理器702可以通过网络适配器724经网络(例如,因特 网、LAN等)进行通信。对于本领域普通技术人员很清楚的是,在计算机系统700中可以增加或替换其它 已知的电子部件。另外,计算机系统700可以包括用于数据中心、传统“白盒”服务器或计 算装置等中的机架中的系统板或片。此外,图7中的一个或多个部件可以是可选的(例如, 用户输入装置、辅助存储器等)。已在这里描述了和示出了本发明的优选实施例及其一些变型。这里使用的术语、 描述和附图仅作为说明而被阐述并且不意味着限制。本领域技术人员将意识到,在旨在由 随附的权利要求书及其等同物限定的本发明的范围内很多变型是可能的,在所述权利要求 书中,除非另有说明,否则所有术语都具有它们最广泛的合理的意义。
权利要求
一种压缩数据序列的方法(300,320),所述方法包括把所述数据序列解析(302)成数据片段,其中,至少一个所述数据片段包括匹配部分;以及使用取决于对于解码器(250)可用的一个或多个编码的数据符号的至少一个上下文模型压缩(304)所述匹配部分。
2.如权利要求1所述的方法(300,320),还包括 确定(334)匹配部分的匹配偏移和匹配长度;以及其中,压缩(304)匹配部分的步骤还包括使用所述至少一个上下文模型压缩(336)匹 配偏移和匹配长度中的至少一个。
3.如权利要求2所述的方法(300,320,400),还包括通过分别从匹配偏移和匹配长度减去最小值来确定(334)修改匹配偏移和修改匹配 长度;确定(402)修改匹配偏移和修改匹配长度中的至少一个的最高有效位和最低有效位;以及其中,压缩(304)匹配偏移和匹配长度中的至少一个的步骤还包括使用所述至少一个 上下文模型压缩(406,408)修改匹配偏移和修改匹配长度中的至少一个的最低有效位。
4.如权利要求3所述的方法(300,320,400,500,550),其中,所述匹配部分包括开始重 复部分的当前符号和匹配部分的开始所在的不确定性窗口,并且其中,该方法还包括使用从修改匹配偏移的最高有效位导出的不确定性窗口中的至少一个符号导出(554) 至少一个上下文。
5.如权利要求4所述的方法(300,320,400,500,550),还包括通过对位于不确定性窗口中的至少一个符号的所述至少一个上下文和作为匹配部分 的一部分的新符号的符号上下文应用函数,形成(504)匹配上下文;以及其中,压缩(304)的步骤还包括使用针对位于不确定性窗口中的符号的所述至少一个 上下文的函数的每个值关于最低有效位的单独概率分布估计来压缩(506)修改匹配偏移 的最低有效位。
6.一种编码器(200),包括编码单元(222,224,226),其被配置为使用取决于先前可解码的数据符号的一个或多 个上下文模型对数据片段的修改匹配偏移和修改匹配长度中的至少一个进行编码。
7.如权利要求6所述的编码器(200),其中,修改匹配偏移包括最高有效位和最低有效 位,并且其中,编码单元(226)还被配置用于使用所述一个或多个上下文模型编码修改匹 配偏移最低有效位和修改匹配长度最低有效位中的至少一个。
8.如权利要求6和7中任一项所述的编码器(200),其中,所述匹配部分包括开始重 复部分的当前符号和匹配部分的开始所在的不确定性窗口,并且其中,编码单元(222,224, 226)还被配置用于使用从修改匹配偏移的最高有效位导出的不确定性窗口中的至少一个 符号导出至少一个上下文。
9.如权利要求6-8中任一项所述的编码器(200),还包括解析单元(210),其被配置用于把数据流解析成数据片段,所述解析单元被配置用于比 较数据符号和先前接收的数据符号以识别匹配部分并确定识别的匹配部分的匹配偏移和匹配长度。
10. 一种其上嵌入有一个或多个计算机程序的计算机可读存储介质,所述一个或多个 计算机程序实施用于压缩数据序列的方法(300,320),所述一个或多个计算机程序包括用 于下述操作的一组指令把数据序列解析(302)成数据片段,其中,至少一个数据片段包括具有匹配偏移和匹 配长度的匹配部分;以及使用取决于对于解码器(250)可用的一个或多个编码的数据符号的至少一个上下文 模型压缩(304)匹配偏移和匹配长度中的至少一个。
全文摘要
在一种压缩数据序列的方法中,把数据序列解析(302)成数据片段,其中,至少一个数据片段包括匹配部分。另外,使用取决于对于解码器(250)可用的一个或多个编码的数据符号的至少一个上下文模型压缩(304)匹配部分。一种编码器(200)包括编码单元(222,224,226),其被配置为使用取决于先前可解码的数据符号的一个或多个上下文模型对数据片段的匹配偏移和匹配长度中的至少一项进行编码。一种具有计算机程序的计算机可读存储介质,所述计算机程序用于实施压缩数据序列的方法(300,320)。
文档编号H04N7/50GK101843102SQ200880113936
公开日2010年9月22日 申请日期2008年10月30日 优先权日2007年10月30日
发明者E·奥尔登特利奇, M·魏因伯格 申请人:惠普开发有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1