CN103248367B - 码流数据的编码、解码方法和装置 - Google Patents
码流数据的编码、解码方法和装置 Download PDFInfo
- Publication number
- CN103248367B CN103248367B CN201210024575.8A CN201210024575A CN103248367B CN 103248367 B CN103248367 B CN 103248367B CN 201210024575 A CN201210024575 A CN 201210024575A CN 103248367 B CN103248367 B CN 103248367B
- Authority
- CN
- China
- Prior art keywords
- flag bit
- word
- character
- bit stream
- coding
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
一种码流数据的编码方法及解码方法,码流数据的编码装置及解码装置,所述码流数据的编码方法包括:获取码流数据的语法元素,确定所获取的语法元素的目标编码进制及编码位数;基于所确定的目标编码进制生成所述获取的语法元素的进制字符串;基于所生成的进制字符串的字符的概率分布确定与所述生成的进制字符串相匹配的进制子区间;在所确定的进制子区间的上下界的最高字节相等时,提取该进制子区间的上下界中相同的字节,以作为编码后的码流数据。本发明的技术方案提高了码流数据解压缩的速度,增加了数据的吞吐量,且提高了系统的性能。
Description
技术领域
本发明涉及编解码技术领域,尤其是一种码流数据的编码方法及解码方法,码流数据的编码装置及解码装置。
背景技术
在现有嵌入式计算机应用中,固件的数据以及代码是经过压缩以后存储在闪存中。闪存大小是有限的,而随着嵌入式计算机需要支持的应用越来越多,固件代码也越来越大,相应的,所需的存储量也越来越大。正因为如此,高压缩比的数据压缩算法对于固件的存储来说十分重要。在现有众多压缩算法中,LZMA(Lempel-Ziv-Markovchain-Algorithm)算法以其高压缩率而被广泛地应用于各种嵌入式设备的固件压缩中。LZMA算法主要由两部分构成:字典编码和区间编码。在进行解压缩时,需要先对压缩文件进行区间解码,输出相应的语法元素,而后通过语法元素重构出原来的内容。
LZMA算法具有很高的压缩比,通常情况下可以将数据量减少为原来的二分之一,这在很大程度上减少了所需要的闪存存储量。从而节省了整个芯片的成本和面积。但是,LZMA的高压缩比是以其较低的实时性作为代价的。在编码过程中,首先要进行字典编码的查找,而后进行区间编码,这两部分都是十分复杂并且耗时的过程。而相应的,在解码的过程中,由于不需要进行字典查找的过程,故主要的复杂度在区间解码。在嵌入式应用中,一般固件都事先在产品出厂之前离线压缩好并烧入闪存中,而在真正的嵌入式应用中只需要将固件解压缩到内存中运行即可。将LZMA算法应用于固件压缩的瓶颈在于其解码速度,也就是说区间解码的速度。具体的编解码技术可以参考公开号为US2009/0112897A1的美国专利申请。
因此,如何提高解压缩的速度,增加数据的吞吐量,提高系统的性能成为目前亟待解决的问题之一。
发明内容
本发明解决的问题是现有技术中解压缩的速度低,数据的吞吐量小,系统的性能低的问题。
为解决上述问题,本发明的技术方案提供了一种码流数据的编码方法,包括:
获取码流数据的语法元素,确定所获取的语法元素的目标编码进制;
基于所确定的目标编码进制生成所述获取的语法元素的进制字符串;
基于所生成的进制字符串的字符的概率分布确定与所述生成的进制字符串相匹配的进制子区间;
在所确定的进制子区间的上下界的最高字节相等时,提取该进制子区间的上下界中相同的字节,以作为编码后的码流数据。
为解决上述问题,本发明的技术方案还提供了一种码流数据的解码方法,包括:
确定编码后的码流数据中需要解码的语法元素,确定所获取的语法元素的目标解码进制和解码位数;
基于所确定的目标解码进制下字符的概率分布及所获取的语法元素确定与所获取的语法元素相匹配的进制子区间,获取与该进制子区间对应的所述目标解码进制下的字符。
为解决上述问题,本发明的技术方案还提供了一种码流数据的编码装置,包括:
语法元素判决器,用以获取码流数据的语法元素,确定所获取的语法元素的目标编码进制;
字符生成器,用以基于所确定的目标编码进制生成所述获取的语法元素的进制字符串;
区间计算器,用以基于所生成的进制字符串的字符的概率分布确定与所述生成的进制字符串相匹配的进制子区间;在所确定的进制子区间的上下界的最高字节相等时,提取该进制子区间的上下界中相同的字节,以作为编码后的码流数据。
为解决上述问题,本发明的技术方案还提供了一种码流数据的解码装置,包括:
语法元素判决器,用以获取编码后的码流数据的语法元素,确定所获取的语法元素的目标解码进制和解码位数;
区间计算器,用以基于所确定的目标解码进制下字符的概率分布及所获取的语法元素确定与所获取的语法元素相匹配的进制子区间,获取与该进制子区间对应的所述目标解码进制下的字符。
与现有技术相比,本发明具有以下优点:
分情况确定语法元素的目标编码进制,对于不同的语法元素分别确定目标编码进制,选择适合当前语法元素的目标编码进制,以提高LZMA算法进行解压缩的速度,使得解压缩时的数据吞吐量更高。
所述语法元素是通过LZMA算法得到的,分情况确定语法元素的目标编码进制,确定至少两种目标编码进制,例如二进制和四进制,二进制和八进制,多个语法元素可以同步进行编码或解码,从而实现嵌入式系统的实时性,提高整个系统的性能并且可以保持原来的压缩比不变。
附图说明
图1是本发明实施例提供的码流数据的编码方法的流程图;
图2是本发明实施例提供的码流数据的解码方法的流程图;
图3是本发明实施例提供的码流数据的编码装置的结构图;
图4是本发明实施例提供的码流数据的解码装置的结构图;
图5是LZMA的语法结构的示意图;
图6是长度length的解码流程的示意图;
图7是distance语法元素的解码流程图;
图8是图7所示的distance划分的集合的示意图;
图9是现有技术中LZMA码流数据的编码装置的示意图;
图10是现有技术中LZMA码流数据的解码装置的示意图;
图11是本发明实施例中LZMA码流数据的编码装置的示意图;
图12是本发明实施例中LZMA码流数据的解码装置的示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。
在以下描述中阐述了具体细节以便于充分理解本发明。但是本发明能够以多种不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广。因此本发明不受下面公开的具体实施方式的限制。
图1是本发明实施例提供的码流数据的编码方法的流程图,下面结合图1详细说明。
所述码流数据的编码方法包括:
步骤S1,获取码流数据的语法元素,确定所获取的语法元素的目标编码进制及编码位数;
步骤S2,基于所确定的目标编码进制生成所述获取的语法元素的进制字符串;
步骤S3,基于所生成的进制字符串的字符的概率分布确定与所述生成的进制字符串相匹配的进制子区间;
步骤S4,在所确定的进制子区间的上下界的最高字节相等时,提取该进制子区间的上下界中相同的字节,以作为编码后的码流数据。
所述步骤S1中,所述码流数据包括至少两种语法元素,所述确定所获取的语法元素的目标编码进制包括:对于不同的语法元素分别确定目标编码进制,确定至少两种目标编码进制。
所述语法元素是通过LZMA算法得到的。所述语法元素包括文字和标志位,或者所述语法元素包括文字和标志位、长度和距离。所述标志位的目标编码进制为二进制,所述标志位的编码位数为一位,所述文字的目标编码进制为四进制或八进制,所述文字的编码位数为两位或三位,或者所述文字、长度和距离的目标编码进制为四进制或八进制,所述文字、长度和距离的编码位数为两位或三位。
所述步骤S2中,所述语法元素为以初始编码进制编码的字符串,所述语法元素的目标编码进制不同于所述初始编码进制。
语法元素初始的字符串通常可以是二进制字符串,或者ASCII码。若所述语法元素中包括文字和标志位,所述标志位的目标编码进制为二进制,所述文字的目标编码进制为四进制,所述基于所确定的目标编码进制生成所述获取的语法元素的进制字符串包括:
输出所述文字的二进制字符串;
按照所述文字的二进制字符串的顺序,每编码位数个字符确定所述文字的进制字符串的一个字符并输出得到所述文字的进制字符串。
所述步骤S3中,所述语法元素包括文字和标志位,或者所述语法元素包括文字和标志位、长度和距离时,所述文字的目标编码进制下字符的概率分布基于所述标志位的目标编码进制下字符的概率分布确定。所述初始区间的长度可以根据实际情况确定,优选的长度小于或等于232。
所述基于所生成的进制字符串的字符的概率分布确定与所述生成的进制字符串相匹配的进制子区间包括:
基于所述标志位的目标编码进制将所述标志位对应的初始区间分割为所述标志位的进制子区间,所述标志位的进制子区间与所述标志位的目标编码进制下字符的概率分布相对应;将所述标志位的进制字符串分成标志位进制子串,基于所述标志位的目标编码进制下字符的概率分布计算所述标志位进制子串的概率分布;基于所述标志位进制子串的概率分布确定与所述标志位的进制字符串相匹配的标志位的进制子区间;
基于所述文字的目标编码进制将所述文字对应的初始区间分割为所述文字的进制子区间,所述文字的进制子区间与所述文字的目标编码进制下字符的概率分布相对应;将所述文字的进制字符串分成文字进制子串,基于所述文字的目标编码进制下字符的概率分布计算所述文字进制子串的概率分布;基于所述文字进制子串的概率分布确定与所述文字的进制字符串相匹配的文字的进制子区间。
确定的与所述标志位的进制字符串相匹配的标志位的进制子区间可以作为所述文字的初始区间。所述文字的初始区间也可以采用其他的,长度小于或等于232的区间作为其初始区间。
所述步骤S4中,提取该进制子区间的上下界中相同的字节后,在末尾以任意字符补充至8个长度。
所述码流数据的编码方法还包括:
在所确定的进制子区间的上下界的最高字节不相等时,开始所述语法元素的新的进制字符串的编码。在具体实施过程中,所确定的进制子区间的上下界的最高字节相等,提取该进制子区间的上下界中相同的字节后,也会开始所述语法元素的新的进制字符串的编码。
图2是本发明实施例提供的码流数据的解码方法的流程图,下面结合图2详细说明。
所述码流数据的解码方法包括:
步骤S11,确定编码后的码流数据中需要解码的语法元素,确定所获取的语法元素的目标解码进制和解码位数;
步骤S22,基于所确定的目标解码进制下字符的概率分布及所获取的语法元素确定与所获取的语法元素相匹配的进制子区间,获取与该进制子区间对应的所述目标解码进制下的字符。
所述步骤S11中,所述码流数据包括至少两种语法元素,所述确定所获取的语法元素的目标解码进制包括:对于不同的语法元素分别确定目标解码进制,确定至少两种目标解码进制。
所述编码后的码流数据为通过LZMA算法编码后得到的码流数据,所述语法元素以字符串的形式输出。所述语法元素包括文字和标志位,或者所述语法元素包括文字、标志位、长度和距离。
所述标志位的目标解码进制为二进制,所述文字、长度和距离的目标解码进制为四进制或八进制,所述标志位的目标解码进制为二进制时,所述标志位的解码位数为一位,所述文字、长度和距离的目标解码进制为四进制时,所述文字、长度和距离的解码位数为两位;所述文字、长度和距离的目标解码进制为八进制时,所述文字、长度和距离的解码位数为三位,
所述标志位、文字、长度和距离为二进制字符串。
步骤S22,所述文字的目标解码进制下字符的概率分布基于所述标志位的目标解码进制下字符的概率分布确定。
所述基于所确定的目标解码进制下字符的概率分布及所获取的语法元素确定与所获取的语法元素相匹配的进制子区间,获取与该进制子区间对应的所述目标解码进制下的字符包括:
基于所述标志位的目标解码进制将所述标志位对应的初始区间分割为所述标志位的进制子区间,所述标志位的进制子区间与所述标志位的目标解码进制下字符的概率分布相对应;
基于所述标志位的解码位数获取所述标志位中的标志位字符串,基于所述标志位的解码进制确定所述标志位字符串的概率分布,确定与所述标志位字符串的概率分布相匹配的标志位的进制子区间;获取所述标志位的进制子区间对应的所述标志位的目标解码进制下的标志位字符;
基于所述文字的目标解码进制将所述文字对应的初始区间分割为所述文字的进制子区间,所述文字的进制子区间与所述文字的目标解码进制下字符的概率分布相对应;基于所述文字的解码位数获取所述文字中的文字字符串,基于所述文字的目标解码进制确定所述文字字符串的概率分布,确定与所述文字字符串的概率分布相匹配的文字的进制子区间;获取所述文字的进制子区间对应的所述文字的目标解码进制下的文字字符。
图3是本发明实施例提供的码流数据的编码装置的结构图,下面结合图3详细说明。
所述码流数据的编码装置包括:
语法元素判决器100,用以获取码流数据的语法元素,确定所获取的语法元素的目标编码进制;
字符生成器200,用以基于所确定的目标编码进制生成所述获取的语法元素的进制字符串;字符生成器200与语法元素判决器100相连;
区间计算器300,用以基于所生成的进制字符串的字符的概率分布确定与所述生成的进制字符串相匹配的进制子区间;在所确定的进制子区间的上下界的最高字节相等时,提取该进制子区间的上下界中相同的字节,以作为编码后的码流数据,区间计算器300与字符生成器200相连。
所述码流数据包括至少两种语法元素,所述语法元素判决器100对于不同的语法元素分别确定目标编码进制,确定至少两种目标编码进制。所述语法元素为以初始编码进制编码的字符串,所述语法元素的目标编码进制不同于所述初始编码进制。
所述语法元素是通过LZMA算法得到的。所述语法元素包括文字和标志位。所述语法元素判决器100确定所述标志位的目标编码进制为二进制,所述标志位的编码位数为一位,所述文字的目标编码进制为四进制或八进制,所述文字的编码位数为两位或三位。所述标志位的进制字符串为二进制字符串,所述文字的进制字符串为四进制字符串或八进制字符串。
所述字符生成器200可以包括:
输出单元(图中未显示),用以输出所述文字的二进制字符串;
确定单元(图中未显示),用以按照所述文字的二进制字符串的顺序,每编码位数个字符确定所述文字的四进制字符串的一个字符并输出得到所述文字的四进制字符串。
所述文字的目标编码进制下字符的概率分布基于所述标志位的目标编码进制下字符的概率分布确定。
所述区间计算器300可以包括:
第一分割单元(图中未显示),用以基于所述标志位的目标编码进制将所述标志位对应的初始区间分割为所述标志位的进制子区间,所述标志位的进制子区间与所述标志位的目标编码进制下字符的概率分布相对应;
第一拆分单元(图中未显示),用以将所述标志位的进制字符串分成标志位进制子串,基于所述标志位的目标编码进制下字符的概率分布计算所述标志位进制子串的概率分布;
第一匹配单元(图中未显示),用以基于所述标志位进制子串的概率分布确定与所述标志位的进制字符串相匹配的标志位的进制子区间;
第二分割单元(图中未显示),基于所述文字的目标编码进制将所述文字对应的初始区间分割为所述文字的进制子区间,所述文字的进制子区间与所述文字的目标编码进制下字符的概率分布相对应;
第二拆分单元(图中未显示),将所述文字的进制字符串分成文字进制子串,基于所述文字的目标编码进制下字符的概率分布计算所述文字进制子串的概率分布;
第二匹配单元(图中未显示),基于所述文字进制子串的概率分布确定与所述文字的进制字符串相匹配的文字的进制子区间。
所述语法元素还可以包括长度和距离。所述语法元素判决器100确定长度和距离的目标编码进制为四进制或八进制,所述长度和距离的编码位数为两位或三位。
所述区间计算器300确定所述所确定的进制子区间的上下界的最高字节不相等时,所述编码装置开始所述语法元素的新的进制字符串的编码。在具体实施过程中,区间计算器300确定所述所确定的进制子区间的上下界的最高字节相等,提取该进制子区间的上下界中相同的字节后,所述编码装置也会开始所述语法元素的新的进制字符串的编码。
图4是本发明实施例提供的码流数据的解码装置的结构图,下面结合图4详细说明。
所述码流数据的解码装置包括:
语法元素判决单元400,用以获取编码后的码流数据的语法元素,确定所获取的语法元素的目标解码进制和解码位数;
区间计算单元500,用以基于所确定的目标解码进制下字符的概率分布及所获取的语法元素确定与所获取的语法元素相匹配的进制子区间,获取与该进制子区间对应的所述目标解码进制下的字符,区间计算单元500与语法元素判决单元400相连。
码流数据的解码装置语法元素判决单元和区间计算单元与编码装置中的语法元素判决器和区间计算器可以共用。
所述码流数据包括至少两种语法元素,所述语法元素判决单元400对于不同的语法元素分别确定目标解码进制,确定至少两种目标解码进制。
所述编码后的码流数据为通过LZMA算法编码后得到的码流数据,所述语法元素以字符串的形式输出。所述语法元素包括文字和标志位。所述标志位和文字为二进制字符串。所述语法元素判决单元400确定所述标志位的目标解码进制为二进制,所述标志位的解码位数为一位;所述文字的目标解码进制为四进制或八进制,所述文字的解码位数为两位或三位。
所述文字的目标解码进制下字符的概率分布基于所述标志位的目标解码进制下字符的概率分布确定。
所述区间计算单元500可以包括:
第三分割单元(图中未显示),用以基于所述标志位的目标解码进制将所述标志位对应的初始区间分割为所述标志位的进制子区间,所述标志位的进制子区间与所述标志位的目标解码进制下字符的概率分布相对应;
第一确定单元(图中未显示),用以基于所述标志位的解码位数获取所述标志位中的标志位字符串,基于所述标志位的解码进制确定所述标志位字符串的概率分布,确定与所述标志位字符串的概率分布相匹配的标志位的进制子区间;获取所述标志位的进制子区间对应的所述标志位的目标解码进制下的标志位字符;
第四分割单元(图中未显示),用以基于所述文字的目标解码进制将所述文字对应的初始区间分割为所述文字的进制子区间,所述文字的进制子区间与所述文字的目标解码进制下字符的概率分布相对应;
第二确定单元(图中未显示),用以基于所述文字的解码位数获取所述文字中的文字字符串,基于所述文字的目标解码进制确定所述文字字符串的概率分布,确定与所述文字字符串的概率分布相匹配的文字的进制子区间;获取所述文字的进制子区间对应的所述文字的目标解码进制下的文字字符。
所述语法元素还可以包括长度和距离。所述长度和距离为二进制字符串。所述语法元素判决单元400确定长度和距离的目标解码进制为四进制或八进制,所述长度和距离的解码位数为两位或三位。
码流数据的编码装置和解码装置有多种组合和变形,上述仅是给出码流数据的编码装置和解码装置的一种实施方式。在具体实施过程中,可以根据实际需要对码流数据的编码装置和解码装置做适应性调整。
下面结合现有技术逐步说明本发明的技术方案。
首先对技术方案中出现的名词进行解释:
闪存:一种非易失性存储器,即断电数据也不会丢失。
固件:担任着一个系统最基础最底层工作的软件。
LZMA:Lempel-Ziv-Markovchain-Algorithm的缩写,一种无损数据压缩算法。
编码:压缩数据的过程。
解码:解压缩数据的过程。
码流:数据压缩后的二进制字符串。
语法元素:码流中具有特定意义的数据单元。
吞吐量:单位时间内成功解压缩数据的数量(单位可以是比特、字节等)。
1比特:一个二进制字符,为“0”或“1”。
上下文:用来生成区间编(解)码时二进制字符概率分布的条件。
目前LZMA在进行区间解码的时候,难以同时输出两个二进制字符的原因主要有以下两点:
一、LZMA在解码当前二进制字符的时候,需要用到上一个二进制字符已经解码后的区间划分。也就是说,若上一个二进制字符解码完以后,区间没有更新的话,是无法决定当前二进制字符是0还是1的。
二、LZMA在解码当前二进制字符的时候所需要的概率分布对前一个二进制字符的解码结果有依赖性,所以上一个二进制字符没有解码完成的话,解码当前二进制字符的时候就无法进行区间划分。
正是上述两个原因造成了LZMA算法中区间解码的吞吐量低,因而对整个嵌入式系统的实时性造成了很大的影响。
LZMA算法具有很高的压缩比,通常情况下可以将数据量减少为原来的二分之一,这在很大程度上减少了所需要的闪存存储量。从而节省了整个芯片的成本和面积。但是,LZMA的高压缩比是以其较低的实时性作为代价的。在编码过程中,首先要进行字典编码的查找,而后进行区间编码,这两部分都是十分复杂并且耗时的过程。而相应的,在解码的过程中,由于不需要进行字典查找的过程,故主要的复杂度在区间解码。在嵌入式应用中,一般固件都事先在产品出厂之前离线压缩好并烧入闪存中,而在真正的嵌入式应用中只需要将固件解压缩到内存中运行即可。
LZMA算法是由字典编码和区间编码两部分构成。字典编码的功能在于它能找出文件中重复的字节串,得到重复出现的字节串在文件的什么位置(可以称这个值为距离distance),以及字节串重复的长度(可以称之为长度length)。相应地只需要对distance和length进行编码即可,而不需对字节串一个一个字节依次编码。当运用字典编码方法时,若文件中重复的字节串越多,压缩比也就越大。
举个例子来说,固件中的字节串经过ASCII码译码后是(这里用ASCII译码来表示是为了使得例子更加清晰):
Blahblahblahblahblah!
由于出现的前六个字节“B”、“l”、“a”、“h”、“”和“b”都是从来没有出现过的字节,因而需要对这六个字节直接进行区间编码。但是,后续的字符串“lahb”,其与从第二个字节开始的之后五个字节相同:
B(lahb)(lahb)
所以,可以将要进行区间编码的信息化简为:
Blahb[distance=5,length=5](后续的字节)
然后可以重复的还不止这些,可以发现:
B(lahblahblahblah)blah!——字符串1
Blahb(lahblahblahblah)!——字符串2
实际上,字符串1括号中的18个字节与字符串2括号中的18个字节是完全一样的。也就是说,编码好11个字节以后,可以继续重复接着前六个字节的后面字节(注意这里重复的字节是通过从第二个字节开始后的五个字节重复得到的。)
下面仔细说明,当编码完前11个字节后:
Blahblahb
下一个字节是“l”,发现其与第七个字节是相同的,而第七个字节是刚刚通过字典编码得到的,已经在字典中了。所以,可以通过将length加一来表示前12个字节,既:
Blahb[distance=5,length=6](后续的字节)
这样继续下去,可以发现最终只需要编码:
Blahb[distance=5,length=18]!
可以看出,中间18个字节在字典编码后可以通过distance值和length值来表示,这样大大降低了原有数据中的冗余性。在LZMA算法中,字节串重复的长度最长为273个字节。
当进行完字典编码后,就需要对字典编码的结果进行区间编码。传统的霍夫曼编码对于每个字符赋予特定长度的码字,对于出现概率大的字符给予短的码字,对于出现概率小的字符给予长的码字,从而使得统计意义上的平均码长最短,达到数据压缩的目的。然而霍夫曼编码在现实运用中存在缺点。它必须对每个字符赋予整数比特长的码字。由信息论的知识可知,对于不同概率的字符来说,应该赋予不同码长的码字,然而在很多情况下霍夫曼码对于不同概率的两个字符也会给予同样长度的码字,这是因为每个码字长度必须是整数,而不可能是小数。这在一定程度上造成了码字的浪费。区间编码则与霍夫曼编码不同。从本质上来说,区间编码是将所有的字符联合起来赋予了一个码字,因而不存在霍夫曼编码的问题。一个基本的区间编码的流程是这样的,对于一个固定大小的整数区间以及一个信源符号的概率分布,依照符号的概率将整数区间划分成若干个子区间,每个子区间的大小与概率大小成正比。当出现相应的字符的时候,就将整数区间更新为字符所对应的子区间。
一个简单的例子如下,需要编码0110这样一个二进制串,其初始区间长度为[0,10000),字符0、1出现的概率分别为0.6和0.4。那么区间编码的过程如下:
先将区间划分为[0,6000)和[6000,10000),两个区间分别对应字符0和字符1,由于第一个二进制字符是0,所以更新后的区间为[0,6000)。
将区间划分为[0,3600)和[3600,6000),第二个二进制字符是1,区间更新为[3600,6000)。
将区间划分为[3600,5040)和[5040,6000),第三个二进制字符是1,区间更新为[5040,6000)。
最后将区间划分为[5040,5616)和[5616,6000),第四个二进制字符是0,区间更新为[5040,5616)。
那么此时区间[5040,5616)中的任何一个值都可以用来表示0110这样一个二进制串。需要注意的是,在一定的时候区间划分可能会产生小数,这个时候就需要对原有的区间进行归一化,并且输出最高的几位。例如上面这个例子中可以将最高位5输出,因为该区间的最高位必定是5了,更新区间为[400,6160),并使用这个新的区间继续区间编码。
相应的区间解码过程是这样的,输出值为5045。那么区间解码的过程如下:
先将区间划分为[0,6000)和[6000,10000),两个区间分别对应字符0和字符1,由于5045在第一个区间内,所以输出字符“0”,并将区间更新为[0,6000)。
将区间划分为[0,3600)和[3600,6000),由于5045在第二个区间内,所以输出字符“1”,并将区间更新为[3600,6000)。
将区间划分为[3600,5040)和[5040,6000),由于5045在第二个区间内,所以输出字符“1”,并区间更新为[5040,6000)。
最后将区间划分为[5040,5616)和[5616,6000),由于5045在第一个区间内,所以输出字符“0”,并将区间更新为[5040,5616)。
至此,二进制串“0110”解码完毕。从上面的描述中可以看出,由于输出一个二进制字符需要进行一次乘法和一次减法,而乘法运算的过程在硬件实现的过程中是需要多于一个时钟周期才能完成的。另外,由于区间解码每个二进制字符的时候,前后的区间是有依赖性的,即前一个的字符解码完后必须在区间更新以后才能解码下一个字符,因而区间解码的输出必须是一个一个二进制字符这样来输出,每个二进制的输出都需要等待一次乘法和一次加法这样的时间。也就是说,一次加法和一次乘法运算所需要的时间为t,要解码n个二进制字符的话需要t*n的时间。这对于嵌入式系统的实时性是难以接受的,而这个问题正是由于区间解码的并行性的限制所造成的。
在LZMA算法中,是先将字典编码的结果进行二进制化,然后对转化后的二进制字符串,也就是“01”串进行编码的。由于字典编码的不同的语法元素二进制化以后字符“0”和字符“1”出现的概率不尽相同,所以在对不同语法元素的二进制字符进行编码时,使用的概率很可能不尽相同,并且概率还会随着“0”“1”的出现而更新。也就是说,LZMA会使用一种概率自适应的二进制区间编码。这种概率自适应更新的特性也对LZMA的高压缩比做出了贡献。下面详细说明。
在进行字典编码后,LZMA算法会得到一系列的语法元素的串。主要语法元素包括四个:标志位、文字(literalbyte)、距离distance、长度length。其中literalbyte表示在字典中找不到匹配的字节。按照前面那个字典编码的例子,所得到的语法元素串为:6个literalbyte,1个长度length信息以及一个距离distance信息,最后再接一个literalbyte。相应地,一个literalbyte需要二进制化成为8个比特来进行区间编码,length和distance信息则采用变长的二进制化方法,依据length和distance的大小来二进制化成不同的比特数目。标志位是用来表示整个编码过程的流程的。它会在字典编码以后插入到语法元素串中。
下面介绍一下LZMA的解码流程。
图5是LZMA的语法结构的示意图,下面结合图5详细说明。
首先,在解码过程中需要判断当前需要解码的字节在编码端是通过字典查找来编码的还是通过直接进行文字编码的。所以需要一些标志位1来判断整个解码流程的走向。
此外,由于distance的取值可以取到非常大(大约1GB=1024x1024x1024,表明字典编码时可以从之前1GB的位置开始查找),需要尽量减少distance编码的次数,提高distance复用的频率。从图5可以看出,为了减少distance这一语法元素的编码次数,LZMA会保留下来前四次用过的distance用来预测当前的distance,如图5中所示只有在步骤S100的情况下,才会进行distance的解码。
图6是长度length的解码流程的示意图。在LZMA中,长度的取值范围为2~273。在编码时,length依据值的不同大小二进制化成不同长度的二进制字符,例如2~9二进制化为1+3比特(先输出一个0标志位表示为范围,然后输出3个比特对应值,如2对应000,8对应110等),10~17二进制化为1+1+3比特(前两个比特分别对应1和0两个标志位),18~273二进制化为1+1+8个比特;需要注意的是length二进制化出来的单独的标志位2与图5中的标志位1意义是相同的,都是用来表示整个解码过程的流程分支走向。
图7是distance语法元素的解码流程图。比起length的解码过程来,distance的解码过程更加复杂,因为distance可以取的值更多。区间解码6比特,设定6比特对应的十进制数值为temp,解码出的temp值如果小于4的话,那么distance的值就直接置为temp+1,也就是说,如果temp=0,那么distance就等于1;如果temp=1,那么distance等于2,依次类推。
在解码过程中,首先将distance从1到10243这些数分成64个集合。具体分割情况如图8所示。
注意这里其实第60到63个集合是用不到的,但是为了凑成6比特,所以设置了63个集合。因而在解码时,需要先用区间解码解得6比特,然后确定distance所在的集合,然后再区间解码相应的比特数目,重构出distance值。
在进行区间解码后,会得到诸如前面所述的“Blahb[distance=5,length=18]!”的语法元素串,然后根据这些语法元素,再利用前面所说的字典重建来进行字节串的恢复。需要说明的是,在解码过程中由于distance和length是通过区间解码得到的,而不需要像在编码的过程时那样在前面来查找一样的字节串,因而在解码过程中字典重建这个过程省去了查找这个最为复杂的过程。正因为如此,解码过程远远快于编码过程。而LZMA的解码过程吞吐量的瓶颈就在于区间解码过程。
区间解码的局限性还不止前面提到的区间依赖的问题。原因在于LZMA为了提高压缩效率,采用了前面所说的概率自适应的二进制区间编码。为了更加清楚地阐述概率自适应的二进制区间编码的概念。这里采用LZMA区间编码一个文字来说明。
编码一个文字需要用区间编码八个连续的二进制字符,可以把这八个二进制字符看成八个信源A0,A1,A2,...,A7,由于在一个字节中出现0~255每个值的概率是不一样的,那么反映在每个二进制字符A0A1A2...A7上就是每个二进制信源的取“0”和取“1”的概率是不一样的。虽然每个二进制信源的概率分布不同,但是在数据统计上来说,却有一定的关系,这种关系被条件概率来描述。P{A1=0|A0=1}表示的是在A0=1时A1=0的概率。如果两个信源完全独立,那么有P{A1=0|A0=1}=P{A1=0}。而大多数情况下一个字节中的二进制信源并不是完全独立的。而概率自适应的区间编码正是利用了这个特性来进行更加高效的压缩。
这里设P{A0=0}=0.5,P{A0=1}=0.5,P{A1=0|A0=0}=0.4,P{A1=1|A0=0}=0.6,P{A1=0|A0=1}=0.8,P{A1=1|A0=1}=0.2。其初始区间长度为[0,10000)。若要编码的二进制字符串为“00”,那么过程如下:
先将区间划分为[0,5000)和[5000,10000),两个区间分别对应字符0和字符1,由于第一个二进制字符是0,所以更新后的区间为[0,5000)。
将区间划分为[0,2000)和[2000,5000),第二个二进制字符是0,区间更新为[0,2000)。
若要编码的二进制字符串为“10”,那么过程如下:
先将区间划分为[0,5000)和[5000,10000),两个区间分别对应字符0和字符1,由于第一个二进制字符是0,所以更新后的区间为[5000,10000)。
由于此时第一个字符是“1”而不是“0”,所以第二个字符用到的概率分布与上一个例子不一样。应将区间划分为[5000,9000)和[9000,10000),第二个二进制字符是0,区间更新为[5000,9000)。
可以看出,当第一个编码的二进制字符还不知道的时候,是没有办法确定下来第二个字符的概率分布的。这里可以称那些用来生成区间编码时二进制字符概率分布的条件为上下文。在编码的时候,由于要编码的文字已经知道,因而在编码时八个二进制信源符号是可知的。但是在解码时却必须一个一个二进制字符解,因为当第一个二进制字符出来以前,没有办法确定第二个二进制字符的概率分布。正是因为这个原因,概率自适应二进制区间解码的并行性受到了进一步限制,因而其吞吐量上不去。
本发明的技术方案采用进制自适应的方法来提高区间编解码的吞吐量。通过前面的背景描述,可以知道如果提高区间编解码的进制便可以提高区间编解码的吞吐量。相应地,当将二进制改为四进制时,那么吞吐量会变为原来的两倍,如果改成八进制的话,那么吞吐量会变成原来的三倍,依此类推。由于在LZMA算法中,语法元素所对应的比特的数目是变化的。例如对于标志位来说,只有1比特,需要在解码完标志位以后才能决定接下来是解码文字还是解码距离和长度。所以如果接下来是要解码标志位的话,是无法一下子解码出2个比特的。正因为如此,需要对不同的语法元素采用不同进制的区间编解码,从而最大程度地提高区间编解码的吞吐量。
这里先来阐述现有技术中LZMA二进制区间编码以及解码的过程,包括一个LZMA码流数据的编码装置和一个LZMA码流数据的解码装置,分别参见图9和图10。
参考图9(现有技术中LZMA码流数据的编码装置的示意图),上下文及二进制字符生成器11:将相应的语法元素二进制化,并且将二进制字符输出,一次输出一个二进制字符。例如标志位是0和1,不需要二进制化,直接输出;文字是一个字节,需要二进制化成8个比特再输出(如128二进制化为“10000000”,255二进制化为“11111111”);相应的length和distance的二进制化过程可以前述内容。另外,还需要输出上下文,上下文包括,是何种语法元素,要编码的二进制字符是这种语法元素二进制化以后的第几个二进制字符,已经编好了的二进制字符的值。
二进制概率估计器12:根据上下文计算出概率存储器13中需要读取的概率的位置。
概率存储器13:存储特定二进制符号的各种概率,并依照二进制概率估计器12的要求输出概率值。
二进制区间计算器14:从区间存储更新器15中读取现有区间的值,根据输入的字符以及概率分布计算新的区间,并让区间存储更新器15存储新的区间值。
区间存储更新器15:存储区间编码中的区间值,并判断是否可以输出最高位字节到码流中,若需要输出最高位字节,则必须在输出后将区间的上界与下界左移。最后启动下一个二进制字符的区间编码过程。
下面以流程的形式来描述一个语法元素的二进制字符的区间编码过程。这里以literalbyte为例,当前输入字节为0x5f。
在上下文及二进制字符生成器11中将literalbyte二进制化,生成二进制字符串10011111。并将第一个二进制字符“1”输入二进制区间计算器14。生成上下文,这里需要编码的语法元素为literalbyte,编码的为第一个二进制字符,既最高位的二进制字符“1”。将上下文输入二进制概率估计器12。
二进制概率估计器12计算概率值在概率存储器13中存储的位置。例如利用语法元素为literalbyte可以知道起始位置为1846,由于编码的是第一个字符,所以额外的偏移量为1。(注意这里因为是第一个二进制字符所以只可能有一个概率,而第二个二进制字符有两个可能的概率值。相应的,由于前两个二进制字符有四种可能的组合“00,01,10,11”,所以第三个二进制字符有四个可能的概率值,以此类推。)
在概率存储器13中标号为1847的位置中取出概率值P{A0=0}=0.5输入二进制区间计算器14。
二进制区间计算器14从区间存储更新器15中读取区间值,读取到的区间值为[0x12000000,0x14000000)(注意在实际的区间编码中,区间都是用32位二进制也就是四个字节来表示的)。根据输入的概率分布,将区间分割为[0x12000000,0x13000000)和[0x13000000,0x14000000)。由于输入的二进制符号为1,所以输出第二个区间到区间存储更新器15。
区间存储更新器15更新区间[0x13000000,0x14000000)。启动下一个二进制字符的编码过程。
由于语法元素已经二进制化了,故这里不需要二进制化。输出第二个二进制字符,即次高位的二进制字符“0”到二进制区间计算器。生成上下文,这里需要编码的语法元素为literalbyte,编码的为第二个二进制字符“0”。将上下文输入二进制概率估计器12。
二进制概率估计器12计算概率值在概率存储器13中存储的位置。例如利用语法元素为literalbyte可以知道起始位置为1846,由于编码的是第二个字符,所以需要偏移2,需要参考刚才已经编码的那个二进制字符。由于刚才编码的字符是“1”,那么此时的额外偏移量为1。
在概率存储器13中标号为1849的位置中取出概率值P{A1=0|A0=1}=0.6输入二进制区间计算器14。
二进制区间计算器14从区间存储更新器15中读取区间值,读取到的区间值为[0x13000000,0x14000000)。根据输入的概率分布,将区间分割为[0x13000000,0x13a00000)和[0x13a00000,0x14000000)。由于输入的二进制符号为0,所以输出第一个区间到区间存储更新器15。
区间存储更新器15更新区间为[0x13000000,0x13a00000)。由于现在区间的范围已经小于4字节所能表达范围的1/256,所以需要输出字节0x13到码流,并且更新区间为[0x00000000,0xa0000000)。最后启动下一个二进制字符的编码过程。
后续为重复上述过程,直到8个比特全部编码完成结束。
上述过程同样适用于标志位、length以及distance的区间编码过程。
与编码过程相对应的为解码过程。图10是现有技术中LZMA码流数据的解码的示意图。
上下文生成器21:输出上下文,上下文包括,需要解码何种语法元素,需要解码的二进制字符是这种语法元素的第几个二进制字符,已经解码出来的二进制字符的值。
二进制概率估计器22、概率存储器23与区间存储更新器24的功能与编码装置的一样。
区间存储更新器24存储区间解码中的区间值,并判断上界与下界的最高位字节是否相等。若相等,则上界与下界以及码流的输入值同时左移一个字节,并且从码流中读取一个字节填补在新的码流输入值的最低位字节。最后启动下一个二进制字符的区间解码过程。
二进制区间计算器25:从区间存储更新器24中读取现有区间的值,根据概率分布计算新的区间,根据码流中读取的值判断现在位于哪一个区间,输出相应的二进制字符,最后更新区间存储更新器24的区间值。
下面以流程的形式来描述一个语法元素的二进制字符的区间解码过程。这里以literalbyte为例,输入的码流为0x13256f7b。
在上下文生成器21中生成上下文,这里需要解码的语法元素为literalbyte,解码的为第一个二进制字符。将上下文输入二进制概率估计器22。
二进制概率估计器22计算概率值在概率存储器中存储的位置。例如利用语法元素为literalbyte可以知道起始位置为1846,由于解码的是第一个字符,所以额外的偏移量为1。
在概率存储器23中标号为1847的位置中取出概率值P{A0=0}=0.5输入二进制区间计算器。
二进制区间计算器25从区间存储更新器24中读取区间值,读取到的区间值为[0x12000000,0x14000000)。根据输入的概率分布,将区间分割为[0x12000000,0x13000000)和[0x13000000,0x14000000)。由于输入的码流为0x13256f7b,属于第二个区间的范围,所以解码得到的二进制符号为“1”。
区间存储更新器24更新区间为[0x13000000,0x140000000)。启动下一个二进制字符的解码过程。
上下文生成器21生成上下文,这里需要解码的语法元素为literalbyte,解码的为第二个二进制字符。将上下文输入二进制概率估计器22。
二进制概率估计器22计算概率值在概率存储器23中存储的位置。例如利用语法元素为literalbyte可以知道起始位置为1846,由于解码的是第二个字符,所以需要偏移2,需要参考刚才已经解码的那个二进制字符。由于刚才解码的字符是“1”(从二进制区间计算器25输出),那么此时的额外偏移量为1。
在概率存储器23中标号为1849的位置中取出概率值P{A1=0|A0=1}=0.6输入二进制区间计算器25。
二进制区间计算器25从区间存储更新器24中读取区间值,读取到的区间值为[0x13000000,0x140000000)。根据输入的概率分布,将区间分割为[0x13000000,0x13a00000)和[0x13a00000,0x14000000)。由于输入的码流为0x13256f7b,属于第一个区间的范围,所以解码得到的二进制符号为“0”。
区间存储更新器24更新区间[0x13000000,0x13a000000)。由于现在区间的范围已经小于4字节所能表达范围的1/256,所更新区间为[0x00000000,0xa0000000),并且将码流中读取的值左移一个字节,从码流中读入一个新的字节存入最低位,将新的码流值更新为0x256f7bxx(XX为任意值)。最后启动下一个二进制字符的解码过程。
后续为重复上述过程,直到8个比特全部解码完成,literalbyte的解码结束。
图10中重建出语法元素表示:如果解码的是文字,那么此处输出的就是一个字节的文字,如果要解码的是distance,那么此处输出的就是distance,如果要解码的是标志位,那么此处输出的就是标志位,如果要解码的是length,那么此处输出的就是length。以文字为例,由于输出文字是8个比特,所以要进行八个二进制字符的解码后才能得到8个比特,最后这8个比特合起来成为一个文字,这个过程就是语法元素的重建过程。标志位、length和distance的重建过程与文字相同,此处不再赘述。
从上面的描述中可以看出,在区间编解码的过程中,整个流程循环一遍最多只能处理一个二进制字符,所以这对于硬件的流水结构来说吞吐量是远远不够的。所以为了提高区间解码的并行度,增加区间解码二进制字符的吞吐量,需要设法使得区间解码可以在一个周期内解码出两个或多个二进制字符。两个二进制字符本质上就是一个四进制字符。为了解决在前一个部分提到的问题,发明人提出了本发明的技术方案,考虑一种自适应的二进制和四进制的区间编解码装置,参见图11和图12。图11和图12所示的码流数据的编码装置和解码装置为其在实际应用中的一种实施方式,在其他实施例中不限于图示的内容。
参考图11,图11是相对于图9的改进。相对于图9来说,图11主要增加了以下器件:语法元素判决器10、上下文及四进制字符生成器16、四进制概率估计器17、四进制概率生成器18以及四进制区间计算器19。从图11的数据流向来说,主要有两个分支,一个是二进制区间编码分支,另外一个是四进制区间编码分支,而语法元素进入哪一个分支是由语法元素判决器10来决定的。
语法元素判决器10:用来判断当前需要编码的语法元素需要进入二进制的分支还是四进制的分支。由于标志位语法元素都是单个的二进制字符,所以所有的标志位语法元素全部送入二进制的分支。文字语法元素由于是8个二进制字符(也是4个四进制字符)所组成的,所以所有的文字语法元素都送入四进制的分支。除此以外,由于length语法元素可以是3个二进制字符或者8个二进制字符,所以需要根据此时图6中的分支的位置来决定进入二进制还是四进制分支。同样的道理也适用于distance语法元素。
上下文及四进制字符生成器16:将相应的语法元素二进制化,并且将二进制字符输出,一次输出两个二进制字符(注意这是与上下文及二进制字符生成器的区别)。另外,还需要输出上下文,上下文包括,是何种语法元素,要编码的几个(编码位数)二进制字符对应这种语法元素二进制化以后的第几个二进制字符,已经编好了的二进制字符的值。
四进制概率估计器17:根据上下文计算出概率存储器13中的三个需要读取的概率的位置。
四进制概率生成器18:根据输入的三个概率值生成四进制字符的概率分布,输入四进制区间计算器19。
四进制区间计算器19:从区间存储更新器15中读取现有区间的值,根据输入的四进制字符以及概率分布计算新的区间,并让区间存储更新器15存储新的区间值。
图11中的语法元素判决器10对应图3中的语法元素判决器100;上下文及四进制字符生成器16和上下文及二进制字符生成器可以集成在一起,与图3中的字符生成器200对应;四进制概率估计器17、二进制概率估计器、概率存储器13、四进制概率生成器18、四进制区间计算器19、二进制区间计算器、区间存储更新器15可以集成在一起,与图3的区间计算器300对应(本实施例中上下文及四进制字符生成器16和上下文及二进制字符生成器即确定编码位数又生成语法元素的进制字符串,因此上下文及四进制字符生成器16和上下文及二进制字符生成器也可以与图11中的语法元素判决器10集成在一起,与图3中的语法元素判决器100对应)。
下面以流程的形式来描述一个语法元素的四进制字符的区间编码过程。这里以literalbyte为例,当前输入字节为0x5f。注意,由于区间编码过程如果采用二进制的话,流程与前面所述一样,所以这里只说明进行四进制区间编码的过程。在实际的编码过程中,语法元素判决器10会根据语法元素的性质来决定流程的走向。
语法元素判决器10决定进行四进制的区间编码。在上下文及四进制字符生成器16中将literalbyte二进制化,生成二进制字符串10011111。并将前两个二进制字符“10”输入四进制区间计算器19。生成上下文,这里需要编码的语法元素为literalbyte,编码的为前两个二进制字符,既最高位的二进制字符“10”,可以参考图1中的步骤S1和步骤S2。将上下文输入四进制概率估计器17。
四进制概率估计器17计算概率值在概率存储器13中存储的位置。例如利用语法元素为literalbyte可以知道起始位置为1846,由于编码的是前两个字符,第一个字符的概率值的偏移量是1,而第二个编码的字符是决定于第一个编码字符的结果的,所以这里可以把第二个编码字符对应的两个偏移量2和3全部输出。
在概率存储器13中标号为1847的位置中取出概率值P{A0=0}=0.5,在1849的位置取出概率值P{A1=0|A0=1}=0.6,在1848的位置取出概率值P{A1=0|A0=0}=0.5输入四进制概率生成器18。
在四进制概率生成器18中生成四进制字符的概率分布,相应地,P{A0A1=00}=P{A0=0}×P{A1=0|A0=0}=0.5×0.5=0.25,P{A0A1=01}=P{A0=0}×P{A1=1|A0=0}=0.5×(1-0.5)0.5=0.25,P{A0A1=10}=P{A0=1}×P{A1=0|A0=1}=(1-0.5)×0.6=0.30,P{A0A1=11}=P{A0=1}×P{A1=1|A0=1}=(1-0.5)×(1-0.6)=0.20。至此,四进制符号的概率分布全部算出,并将该概率分布输入四进制区间计算器19。
四进制区间计算器19从区间存储更新器15中读取区间值,读取到的区间值为[0x12000000,0x14000000)。根据输入的概率分布,将区间分割为[0x12000000,0x12800000)、[0x12800000,0x13000000)、[0x13000000,0x13a00000)和[0x13a00000,0x14000000)。由于输入的四进制符号为“10”,所以输出第三个区间到区间存储更新器15。
区间存储更新器15更新区间为[0x13000000,0x13a000000)。由于现在区间的范围已经小于4字节所能表达范围的1/256,所以需要输出字节0x13到码流,并且更新区间为[0x00000000,0xa0000000),并启动下一个四进制字符的编码过程。
上述四进制概率估计器17、概率存储器13、四进制概率生成器18、四进制区间计算器19、区间存储更新器15所进行的操作可以参考图1中的步骤S3和S4。
后续为重复上述过程,直到4个四进制字符全部编码完成,结束literalbyte的编码。
从上述流程描述来看,与改进前的LZMA区间编码过程相比,改进后的方法一次可以编码两个二进制字符,从而减少了整个流程的步骤,提高了二进制字符的吞吐量。本质上来说,就是将两次二进制字符的区间计算过程合并成一次来计算,从而克服了第3部分所述的那两个问题。
与编码过程相对应的为解码过程。图12是本发明实施例中LZMA码流数据的解码装置的示意图,图12是基于图10改进后的LZMA码流数据的解码装置的示意图。
四进制上下文生成器29:输出上下文,上下文包括,需要解码何种语法元素(何种语法元素决定解码位数),需要解码的几个(解码位数)二进制字符对应这种语法元素的第几个二进制字符,已经解码出来的二进制字符的值。
语法元素判决器20、四进制概率估计器26、四进制概率生成器27、概率存储器23的功能与编码装置的一样。
区间存储更新器24存储区间解码中的区间值,并判断上界与下界的最高位字节是否相等。若相等,则上界与下界以及码流的输入值同时左移一个字节,并且从码流中读取一个字节填补在新的码流输入值的最低位字节。最后启动下一个四进制字符的区间解码过程。
四进制区间计算器28:从区间存储更新器中读取现有区间的值,根据概率分布计算新的区间,并根据码流中读取的值判断现在位于哪一个区间,输出相应的四进制字符,最后更新区间存储更新器的区间值。
图12中的语法元素判决器20、四进制上下文生成器29和上下文生成器可以集成在一起,与图4中的语法元素判决单元400对应;四进制概率估计器26、四进制概率生成器27、四进制区间计算器28、概率存储器23、二进制概率估计器、二进制区间计算器、区间存储更新器24可以集成在一起,与图4中的区间计算单元500对应。
下面以流程的形式来描述一个语法元素的四进制字符的区间解码过程。这里以literalbyte为例,输入的码流为0x13256f7b。
语法元素判决器20决定进行四进制的区间解码。在上下文生成器21中生成上下文,这里需要解码的语法元素为literalbyte,解码的为前两个二进制字符(解码位数)。将上下文输入四进制概率估计器26。上述操作可以参考图2中的步骤S11。
四进制概率估计器26计算概率值在概率存储器23中存储的位置。例如利用语法元素为literalbyte可以知道起始位置为1846,由于解码的是前两个字符,第一个字符的概率值的偏移量是1,而第二个解码的字符是决定于第一个解码字符的结果的,所以这里可以把第二个解码字符对应的两个偏移量2和3全部输出。
在概率存储器23中标号为1847的位置中取出概率值P{A0=0}=0.5,在1849的位置取出概率值P{A1=0|A0=1}=0.6,在1848的位置取出概率值P{A1=0|A0=0}=0.5输入四进制概率生成器27。
在四进制概率生成器27中生成四进制字符的概率分布,相应地,P{A0A1=00}=P{A0=0}×P{A1=0|A0=0}=0.5×0.5=0.25,P{A0A1=01}=P{A0=0}×P{A1=1|A0=0}=0.5×(1-0.5)0.5=0.25,P{A0A1=10}=P{A0=1}×P{A1=0|A0=1}=(1-0.5)×0.6=0.30,P{A0A1=11}=P{A0=1}×P{A1=1|A0=1}=(1-0.5)×(1-0.6)=0.20。至此,四进制符号的概率分布全部算出,并将该概率分布输入四进制区间计算器28。
四进制区间计算器28从区间存储更新器24中读取区间值,读取到的区间值为[0x12000000,0x14000000)。根据输入的概率分布,将区间分割为[0x12000000,0x12800000)、[0x12800000,0x13000000)、[0x13000000,0x13a00000)和[0x13a00000,0x14000000)。由于输入的码流为0x13256f7b,属于第三个区间的范围,所以解码得到的四进制符号为“10”。(这个字符也应该输入到四进制概率生成器用来帮助生成下一个四进制字符解码需要的概率)
区间存储更新器24更新区间为[0x13000000,0x13a00000)。由于现在区间的范围已经小于4字节所能表达范围的1/256,所更新区间为[0x00000000,0xa0000000),并且将码流中读取的值左移一个字节,从码流中读入一个新的字节存入最低位,将新的码流值更新为0x256f7bxx(XX为任意值)。最后启动下一个四进制字符的解码过程。
上述四进制概率估计器26、四进制概率生成器27、四进制区间计算器28、概率存储器23、区间存储更新器24进行的操作可以参考图2中的步骤S22。
后续为重复上述过程,直到四个四进制字符全部解码完成,literalbyte的解码结束。
从上述流程描述来看,与改进前的LZMA区间解码过程相比,改进后的方法一次可以解码两个二进制字符,从而减少了整个流程的步骤,提高了二进制字符的吞吐量。本质上来说,就是将两次二进制字符的区间计算过程合并成一次来计算,从而克服了前面所述的两个问题。
这里所举得例子仅是需要进行四进制编解码的过程,对于一些语法元素(例如标志位),还是需要进行二进制的编解码。
改进后的方法是一种自适应的二进制和四进制的区间编解码装置。在进行编解码之前,首先需要对相应的语法元素分类。所有需要进行奇数比特编码的语法元素进入原有的二进制编解码分支,而需要进行偶数比特编码的语法元素进入四进制编解码分支。该方法可以在不降低压缩效率的前提下提升区间编解码装置的吞吐量。需要注意的是,本发明不限于自适应的二进制和四进制的区间编解码装置,而可以扩展为任意进制的区间编解码装置。例如二进制、四进制和八进制的自适应区间编解码装置。此时,语法元素判决器的功能是首先判断语法元素的比特数是否是3的倍数,如果是,则进入八进制编解码的分支,如果不是,则判断是否是2的倍数,然后选择是进入二进制的分支还是进入四进制的分支。
本发明的技术方案至少具有以下优势:
分情况确定语法元素的目标编码进制,对于不同的语法元素分别确定目标编码进制,确定至少两种目标编码进制。选择适合当前语法元素的目标编码进制,以提高LZMA算法进行解压缩的速度,使得解压缩时的数据吞吐量更高。
所述语法元素是通过LZMA算法得到的,分情况确定语法元素的目标编码进制。多个语法元素可以同步进行编码或解码,从而实现嵌入式系统的实时性,提高整个系统的性能并且可以保持原来的压缩比不变。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。
Claims (49)
1.一种码流数据的编码方法,其特征在于,包括:
获取码流数据的语法元素,确定所获取的语法元素的目标编码进制及编码位数;
基于所确定的目标编码进制生成所述获取的语法元素的进制字符串;
基于所生成的进制字符串的字符的概率分布确定与所述生成的进制字符串相匹配的进制子区间;
在所确定的进制子区间的上下界的最高字节相等时,提取该进制子区间的上下界中相同的字节,以作为编码后的码流数据。
2.如权利要求1所述的码流数据的编码方法,其特征在于,所述码流数据包括至少两种语法元素,所述确定所获取的语法元素的目标编码进制包括:对于不同的语法元素分别确定目标编码进制,确定至少两种目标编码进制。
3.如权利要求1所述的码流数据的编码方法,其特征在于,所述语法元素是通过LZMA算法得到的。
4.如权利要求3所述的码流数据的编码方法,其特征在于,所述语法元素包括文字和标志位。
5.如权利要求4所述的码流数据的编码方法,其特征在于,所述标志位的目标编码进制为二进制,所述标志位的编码位数为一位,所述文字的目标编码进制为四进制或八进制,所述文字的编码位数为两位或三位。
6.如权利要求5所述的码流数据的编码方法,其特征在于,所述标志位的进制字符串为二进制字符串,所述文字的进制字符串为四进制字符串或八进制字符串。
7.如权利要求6所述的码流数据的编码方法,其特征在于,所述语法元素为文字,所述基于所确定的目标编码进制生成所述获取的语法元素的进制字符串包括:
输出所述文字的初始字符串,所述文字的初始字符串为二进制字符串;
按照所述文字的初始字符串的顺序,每编码位数个字符确定所述文字的进制字符串的一个字符并输出得到所述文字的进制字符串。
8.如权利要求4所述的码流数据的编码方法,其特征在于,所述文字的目标编码进制下字符的概率分布基于所述标志位的目标编码进制下字符的概率分布确定。
9.如权利要求8所述的码流数据的编码方法,其特征在于,所述基于所生成的进制字符串的字符的概率分布确定与所述生成的进制字符串相匹配的进制子区间包括:
基于所述标志位的目标编码进制将所述标志位对应的初始区间分割为所述标志位的进制子区间,所述标志位的进制子区间与所述标志位的目标编码进制下字符的概率分布相对应;将所述标志位的进制字符串分成标志位进制子串,基于所述标志位的目标编码进制下字符的概率分布计算所述标志位进制子串的概率分布;基于所述标志位进制子串的概率分布确定与所述标志位的进制字符串相匹配的标志位的进制子区间;
基于所述文字的目标编码进制将所述文字对应的初始区间分割为所述文字的进制子区间,所述文字的进制子区间与所述文字的目标编码进制下字符的概率分布相对应;将所述文字的进制字符串分成文字进制子串,基于所述文字的目标编码进制下字符的概率分布计算所述文字进制子串的概率分布;基于所述文字进制子串的概率分布确定与所述文字的进制字符串相匹配的文字的进制子区间。
10.如权利要求3所述的码流数据的编码方法,其特征在于,所述语法元素包括文字、标志位、长度和距离。
11.如权利要求10所述的码流数据的编码方法,其特征在于,所述标志位的目标编码进制为二进制,所述标志位的编码位数为一位,所述文字、长度和距离的目标编码进制为四进制或八进制,所述文字、长度和距离的编码位数为两位或三位。
12.如权利要求1所述的码流数据的编码方法,其特征在于,所述语法元素为以初始编码进制编码的字符串,所述语法元素的目标编码进制不同于所述初始编码进制。
13.如权利要求1所述的码流数据的编码方法,其特征在于,还包括,在所确定的进制子区间的上下界的最高字节不相等时,开始所述语法元素的新的进制字符串的编码。
14.一种码流数据的解码方法,其特征在于,包括:
确定编码后的码流数据中需要解码的语法元素,确定所获取的语法元素的目标解码进制和解码位数;
基于所确定的目标解码进制下字符的概率分布及所获取的语法元素确定与所获取的语法元素相匹配的进制子区间,获取与该进制子区间对应的所述目标解码进制下的字符。
15.如权利要求14所述的码流数据的解码方法,其特征在于,所述码流数据包括至少两种语法元素,所述确定所获取的语法元素的目标解码进制包括:对于不同的语法元素分别确定目标解码进制,确定至少两种目标解码进制。
16.如权利要求14所述的码流数据的解码方法,其特征在于,所述编码后的码流数据为通过LZMA算法编码后得到的码流数据,所述语法元素以字符串的形式输出。
17.如权利要求16所述的码流数据的解码方法,其特征在于,所述语法元素包括文字和标志位。
18.如权利要求17所述的码流数据的解码方法,其特征在于,所述标志位的目标解码进制为二进制,所述标志位的解码位数为一位;所述文字的目标解码进制为四进制或八进制,所述文字的解码位数为两位或三位。
19.如权利要求18所述的码流数据的解码方法,其特征在于,所述标志位和文字为二进制字符串。
20.如权利要求19所述的码流数据的解码方法,其特征在于,所述文字的目标解码进制下字符的概率分布基于所述标志位的目标解码进制下字符的概率分布确定。
21.如权利要求20所述的码流数据的解码方法,其特征在于,所述基于所确定的目标解码进制下字符的概率分布及所获取的语法元素确定与所获取的语法元素相匹配的进制子区间,获取与该进制子区间对应的所述目标解码进制下的字符包括:
基于所述标志位的目标解码进制将所述标志位对应的初始区间分割为所述标志位的进制子区间,所述标志位的进制子区间与所述标志位的目标解码进制下字符的概率分布相对应;
基于所述标志位的解码位数获取所述标志位中的标志位字符串,基于所述标志位的目标解码进制确定所述标志位字符串的概率分布,确定与所述标志位字符串的概率分布相匹配的标志位的进制子区间;获取所述标志位的进制子区间对应的所述标志位的目标解码进制下的标志位字符;
基于所述文字的目标解码进制将所述文字对应的初始区间分割为所述文字的进制子区间,所述文字的进制子区间与所述文字的目标解码进制下字符的概率分布相对应;
基于所述文字的解码位数获取所述文字中的文字字符串,基于所述文字的目标解码进制确定所述文字字符串的概率分布,确定与所述文字字符串的概率分布相匹配的文字的进制子区间;获取所述文字的进制子区间对应的所述文字的目标解码进制下的文字字符。
22.如权利要求16所述的码流数据的解码方法,其特征在于,所述语法元素包括文字、标志位、长度和距离。
23.如权利要求22所述的码流数据的解码方法,其特征在于,所述标志位的目标解码进制为二进制,所述标志位的解码位数为一位;所述文字、长度和距离的目标解码进制为四进制或八进制,所述文字、长度和距离的解码位数为两位或三位。
24.如权利要求23所述的码流数据的解码方法,其特征在于,所述标志位、文字、长度和距离为二进制字符串。
25.一种码流数据的编码装置,其特征在于,包括:
语法元素判决器,用以获取码流数据的语法元素,确定所获取的语法元素的目标编码进制及编码位数;
字符生成器,用以基于所确定的目标编码进制生成所述获取的语法元素的进制字符串;
区间计算器,用以基于所生成的进制字符串的字符的概率分布确定与所述生成的进制字符串相匹配的进制子区间;在所确定的进制子区间的上下界的最高字节相等时,提取该进制子区间的上下界中相同的字节,以作为编码后的码流数据。
26.如权利要求25所述的码流数据的编码装置,其特征在于,所述码流数据包括至少两种语法元素,所述语法元素判决器对于不同的语法元素分别确定目标编码进制,确定至少两种目标编码进制。
27.如权利要求25所述的码流数据的编码装置,其特征在于,所述语法元素是通过LZMA算法得到的。
28.如权利要求27所述的码流数据的编码装置,其特征在于,所述语法元素包括文字和标志位。
29.如权利要求28所述的码流数据的编码装置,其特征在于,所述语法元素判决器确定所述标志位的目标编码进制为二进制,所述标志位的编码位数为一位,所述文字的目标编码进制为四进制或八进制,所述文字的编码位数为两位或三位。
30.如权利要求29所述的码流数据的编码装置,其特征在于,所述标志位的进制字符串为二进制字符串,所述文字的进制字符串为四进制字符串或八进制字符串。
31.如权利要求30所述的码流数据的编码装置,其特征在于,所述字符生成器包括:
输出单元,用以输出所述文字的初始字符串,所述文字的初始字符串为二进制字符串;
确定单元,用以按照所述文字的初始字符串的顺序,每编码位数个字符确定所述文字的进制字符串的一个字符并输出得到所述文字的进制字符串。
32.如权利要求28所述的码流数据的编码装置,其特征在于,所述文字的目标编码进制下字符的概率分布基于所述标志位的目标编码进制下字符的概率分布确定。
33.如权利要求32所述的码流数据的编码装置,其特征在于,所述区间计算器包括:
第一分割单元,用以基于所述标志位的目标编码进制将所述标志位对应的初始区间分割为所述标志位的进制子区间,所述标志位的进制子区间与所述标志位的目标编码进制下字符的概率分布相对应;
第一拆分单元,用以将所述标志位的进制字符串分成标志位进制子串,基于所述标志位的目标编码进制下字符的概率分布计算所述标志位进制子串的概率分布;
第一匹配单元,用以基于所述标志位进制子串的概率分布确定与所述标志位的进制字符串相匹配的标志位的进制子区间;
第二分割单元,基于所述文字的目标编码进制将所述文字对应的初始区间分割为所述文字的进制子区间,所述文字的进制子区间与所述文字的目标编码进制下字符的概率分布相对应;
第二拆分单元,将所述文字的进制字符串分成文字进制子串,基于所述文字的目标编码进制下字符的概率分布计算所述文字进制子串的概率分布;
第二匹配单元,基于所述文字进制子串的概率分布确定与所述文字的进制字符串相匹配的文字的进制子区间。
34.如权利要求27所述的码流数据的编码装置,其特征在于,所述语法元素包括文字、标志位、长度和距离。
35.如权利要求34所述的码流数据的编码装置,其特征在于,所述语法元素判决器确定所述标志位的目标编码进制为二进制,所述文字、长度和距离的目标编码进制为四进制或八进制。
36.如权利要求25所述的码流数据的编码装置,其特征在于,所述语法元素为以初始编码进制编码的字符串,所述语法元素的目标编码进制不同于所述初始编码进制。
37.如权利要求25所述的码流数据的编码装置,其特征在于,所述区间计算器确定所述所确定的进制子区间的上下界的最高字节不相等时,所述编码装置开始所述语法元素的新的进制字符串的编码。
38.一种码流数据的解码装置,其特征在于,包括:
语法元素判决单元,用以获取编码后的码流数据的语法元素,确定所获取的语法元素的目标解码进制和解码位数;
区间计算单元,用以基于所确定的目标解码进制下字符的概率分布及所获取的语法元素确定与所获取的语法元素相匹配的进制子区间,获取与该进制子区间对应的所述目标解码进制下的字符。
39.如权利要求38所述的码流数据的解码装置,其特征在于,所述码流数据包括至少两种语法元素,所述语法元素判决器对于不同的语法元素分别确定目标解码进制,确定至少两种目标解码进制。
40.如权利要求38所述的码流数据的解码装置,其特征在于,所述编码后的码流数据为通过LZMA算法编码后得到的码流数据,所述语法元素以字符串的形式输出。
41.如权利要求40所述的码流数据的解码装置,其特征在于,所述语法元素包括文字和标志位。
42.如权利要求41所述的码流数据的解码装置,其特征在于,所述语法元素判决单元确定所述标志位的目标解码进制为二进制,所述文字的目标解码进制为四进制或八进制,所述标志位的解码位数和文字的解码位数为两位。
43.如权利要求42所述的码流数据的解码装置,其特征在于,所述标志位的目标解码进制为二进制,所述标志位的解码位数为一位;所述文字的目标解码进制为四进制或八进制,所述文字的解码位数为两位或三位。
44.如权利要求43所述的码流数据的解码装置,其特征在于,所述标志位和文字为二进制字符串。
45.如权利要求44所述的码流数据的解码装置,其特征在于,所述文字的目标解码进制下字符的概率分布基于所述标志位的目标解码进制下字符的概率分布确定。
46.如权利要求45所述的码流数据的解码装置,其特征在于,所述区间计算单元包括:
第三分割单元,用以基于所述标志位的目标解码进制将所述标志位对应的初始区间分割为所述标志位的进制子区间,所述标志位的进制子区间与所述标志位的目标解码进制下字符的概率分布相对应;
第一确定单元,用以基于所述标志位的解码位数获取所述标志位中的标志位字符串,基于所述标志位的目标解码进制确定所述标志位字符串的概率分布,确定与所述标志位字符串的概率分布相匹配的标志位的进制子区间;获取所述标志位的进制子区间对应的所述标志位的目标解码进制下的标志位字符;
第四分割单元,用以基于所述文字的目标解码进制将所述文字对应的初始区间分割为所述文字的进制子区间,所述文字的进制子区间与所述文字的目标解码进制下字符的概率分布相对应;
第二确定单元,用以基于所述文字的解码位数获取所述文字中的文字字符串,基于所述文字的目标解码进制确定所述文字字符串的概率分布,确定与所述文字字符串的概率分布相匹配的文字的进制子区间;获取所述文字的进制子区间对应的所述文字的目标解码进制下的文字字符。
47.如权利要求38所述的码流数据的解码装置,其特征在于,所述语法元素包括文字、标志位、长度和距离。
48.如权利要求47所述的码流数据的解码装置,其特征在于,所述语法元素判决器确定所述标志位的目标解码进制为二进制,所述标志位的解码位数为一位,所述文字、长度和距离的目标解码进制为四进制或八进制,所述文字、长度和距离的解码位数为两位或三位。
49.如权利要求48所述的码流数据的解码装置,其特征在于,所述标志位、文字、长度和距离为二进制字符串。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210024575.8A CN103248367B (zh) | 2012-02-03 | 2012-02-03 | 码流数据的编码、解码方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210024575.8A CN103248367B (zh) | 2012-02-03 | 2012-02-03 | 码流数据的编码、解码方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103248367A CN103248367A (zh) | 2013-08-14 |
CN103248367B true CN103248367B (zh) | 2016-03-16 |
Family
ID=48927619
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210024575.8A Active CN103248367B (zh) | 2012-02-03 | 2012-02-03 | 码流数据的编码、解码方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103248367B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9300322B2 (en) * | 2014-06-20 | 2016-03-29 | Oracle International Corporation | Encoding of plain ASCII data streams |
CN104199352B (zh) * | 2014-08-21 | 2017-02-15 | 东南大学 | 基于fpga的区间编码硬件实现系统 |
CN104869397B (zh) * | 2015-05-20 | 2017-11-03 | 哈尔滨工业大学 | 一种基于slwe概率估计模型的自适应区间编码方法及解码方法 |
CN104935406B (zh) * | 2015-05-29 | 2018-03-09 | 祝文闻 | 一种智能电网通信的数据压缩及解压缩方法和智能电网通信系统 |
CN105207677B (zh) * | 2015-09-01 | 2018-02-06 | 上海斐讯数据通信技术有限公司 | 一种图形化编解码系统及方法 |
CN105630755B (zh) * | 2016-01-22 | 2018-08-14 | 上海普适导航科技股份有限公司 | 北斗卫星短报文扩大信息量传输的信源编解码方法及装置 |
CN107277553B (zh) * | 2017-07-10 | 2020-10-27 | 中国科学技术大学 | 一种二元算术编码器 |
CN112106355B (zh) | 2018-04-13 | 2023-03-21 | 浙江大学 | 一种信息保持编解码方法与装置 |
CN112699639B (zh) * | 2021-02-09 | 2022-03-04 | 北京微步在线科技有限公司 | 整数数据的存储方法、装置及存储介质 |
CN118018331B (zh) * | 2024-04-09 | 2024-06-18 | 江苏琦易数字科技有限公司 | 一种大数据云服务的隐私保护方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101453642A (zh) * | 2007-11-30 | 2009-06-10 | 华为技术有限公司 | 图像编/解码方法、装置和系统 |
US7660720B2 (en) * | 2004-03-10 | 2010-02-09 | Samsung Electronics Co., Ltd. | Lossless audio coding/decoding method and apparatus |
CN101715143A (zh) * | 2008-10-07 | 2010-05-26 | 华为技术有限公司 | 自适应量化和自适应反量化的方法、装置及其系统 |
-
2012
- 2012-02-03 CN CN201210024575.8A patent/CN103248367B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7660720B2 (en) * | 2004-03-10 | 2010-02-09 | Samsung Electronics Co., Ltd. | Lossless audio coding/decoding method and apparatus |
EP1575032B1 (en) * | 2004-03-10 | 2010-03-03 | Samsung Electronics Co., Ltd. | Lossless audio coding/decoding method and apparatus |
CN101453642A (zh) * | 2007-11-30 | 2009-06-10 | 华为技术有限公司 | 图像编/解码方法、装置和系统 |
CN101715143A (zh) * | 2008-10-07 | 2010-05-26 | 华为技术有限公司 | 自适应量化和自适应反量化的方法、装置及其系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103248367A (zh) | 2013-08-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103248367B (zh) | 码流数据的编码、解码方法和装置 | |
CN100553152C (zh) | 基于cabac的编码方法和设备及解码方法和设备 | |
CN103067022B (zh) | 一种整型数据无损压缩方法、解压缩方法及装置 | |
CN108768403B (zh) | 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器 | |
US20120130965A1 (en) | Data compression method | |
CN102244518B (zh) | 并行解压缩的硬件实现的系统及方法 | |
CN102970043B (zh) | 一种基于gzip的压缩硬件系统及其加速方法 | |
CN116681036B (zh) | 基于数字孪生的工业数据存储方法 | |
CN110021369B (zh) | 基因测序数据压缩解压方法、系统及计算机可读介质 | |
CN100488056C (zh) | 使用贪婪的顺序上下文相关文法变换的改进的无损耗数据压缩方法 | |
CN105426413A (zh) | 一种编码方法及装置 | |
CN104125475B (zh) | 一种多维量子数据压缩、解压缩方法及装置 | |
CN109428603A (zh) | 一种数据编码方法、装置以及存储介质 | |
CN1426629A (zh) | 使用多个编码器的优化无损压缩的方法和装置 | |
US6748520B1 (en) | System and method for compressing and decompressing a binary code image | |
US7889102B2 (en) | LZSS with multiple dictionaries and windows | |
US11606103B2 (en) | Data compression method, data compression device, data decompression method, and data decompression device | |
JP2015534795A (ja) | セキュアで損失のないデータ圧縮 | |
CN104918049A (zh) | 适用于hevc标准的二进制算术编码模块 | |
CN115622571A (zh) | 一种基于数据处理的雷达目标识别方法 | |
CN108932315A (zh) | 一种数据解压的方法以及相关装置 | |
CN115913246A (zh) | 基于自适应瞬时熵的无损数据压缩算法 | |
Zavadskyi et al. | A Family of Data Compression Codes with Multiple Delimiters. | |
CN104199352A (zh) | 基于fpga的区间编码硬件实现系统 | |
Dhulavvagol et al. | Lossless Text Compression Using Recurrent Neural Networks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |