CN113346913A - 使用减量的出现次数的数据压缩 - Google Patents
使用减量的出现次数的数据压缩 Download PDFInfo
- Publication number
- CN113346913A CN113346913A CN202110668364.7A CN202110668364A CN113346913A CN 113346913 A CN113346913 A CN 113346913A CN 202110668364 A CN202110668364 A CN 202110668364A CN 113346913 A CN113346913 A CN 113346913A
- Authority
- CN
- China
- Prior art keywords
- reduced
- occurrences
- state
- symbol
- input data
- 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.)
- Granted
Links
- 230000002829 reductive effect Effects 0.000 title claims abstract description 90
- 238000013144 data compression Methods 0.000 title description 6
- 238000000034 method Methods 0.000 claims abstract description 37
- 238000009826 distribution Methods 0.000 claims abstract description 20
- 230000001186 cumulative effect Effects 0.000 claims description 40
- 238000007906 compression Methods 0.000 description 36
- 230000006870 function Effects 0.000 description 26
- 230000006835 compression Effects 0.000 description 14
- 230000006837 decompression Effects 0.000 description 4
- 230000003247 decreasing effect Effects 0.000 description 4
- 238000003491 array Methods 0.000 description 2
- 239000004576 sand Substances 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6058—Saving memory space in the encoder or decoder
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/42—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/04—Protocols for data compression, e.g. ROHC
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
提供了用于压缩数据的系统、装置和方法。该方法可以包括:接收要压缩的输入数据块;确定输入数据块中不同符号的出现次数;基于不同符号的出现次数生成不同符号的减量的出现次数;以及使用减量的出现次数作为输入数据块中不同符号的概率分布来编码输入数据块。
Description
技术领域
本公开涉及数据压缩,尤其涉及使用熵编码的无损压缩。
背景技术
数据压缩已广泛用于数字信号系统,例如通信和计算机系统。在信息论中,克劳德·香农(Claude Shannon)的信源编码定理(source coding theorem,或称为无噪声编码定理)确定了可能的数据压缩以及香农熵的运算含义的极限。根据香农的信源编码定理,符号的最佳代码长度为-logbP,其中b是用于制作输出代码的符号数,P是输入符号的概率。霍夫曼(Huffman)编码和算术(Arithmetic)编码是最常见的两种熵编码技术。自2014年以来,数据压缩器已开始使用熵编码技术的非对称数字系统(ANS)系列,该技术可结合算术编码的压缩率和类似于霍夫曼编码的运算成本。但是,这些现有的ANS实现是为通用计算系统开发的,该系统通常使用通用中央处理单元(CPU)来执行数据压缩或解压缩操作。因此,需要一种对硬件更友好的压缩技术,例如适用于现场可编程门阵列(FPGA)或专用集成电路(ASIC)的压缩技术。
发明内容
本公开提供了用于使用熵编码的无损压缩的系统和方法。在示例性实施例中,提供了一种方法,该方法可以包括:接收要压缩的输入数据块;确定输入数据块中不同符号的出现次数;基于不同符号的出现次数生成不同符号的减量的(reduced)出现次数;以及使用减量的出现次数作为输入数据块中不同符号的概率分布来编码输入数据块。
在另一个示例性实施例中,提供了一种压缩器,其可以包括:输入接口,被配置为接收要压缩的输入数据块;输入缓冲器,耦合到所述输入接口,以存储所接收的要压缩的输入数据块;计算器,耦合到所述输入接口,并且被配置为确定所述输入数据块中不同符号的出现次数,并且基于所述不同符号的出现次数生成所述不同符号的减量出现次数;以及编码器引擎,被配置为使用所述减量出现次数作为所述输入数据块中不同符号的概率分布来编码所述输入数据块。
附图简要说明
图1示意性地示出了根据本公开一实施例的压缩过程。
图2A示意性地示出了根据本公开一实施例的出现次数表。
图2B示意性地示出了根据本公开一实施例的累计出现表。
图2C示意性地示出了根据本公开一实施例的状态间隔和符号状态间隔。
图3示意性地示出了根据本公开一实施例的压缩器。
图4示意性地示出了根据本公开另一实施例的压缩过程。
具体实施方式
现在将参考附图详细描述根据本申请的具体实施例。为了一致性,各个图中的相同元件由相同的附图标记表示。
图1示意性地示出了根据本公开一实施例的压缩过程100。在框102中,可以接收输入数据的块。在一个实施例中,存储系统控制器(例如,SSD控制器)可以接收要存储在存储系统中的数据流。在另一个实施例中,信号发送器可以接收要发送的数据流。可以使用熵编码来压缩数据流,以减少用于存储的空间或用于传输的带宽。因此,压缩过程100也可以称为编码过程。在一些实施例中,数据流可以被分成数据块,并且每个数据块可以被分别编码。块的示例性大小可以是1KB、2KB、4KB等。例如,压缩器的一个实施例可以被配置为对大小为4KB的块进行编码,并且具有大于4KB的大小的文件可以被划分为几个4KB块,并且其他剩余划分在小于4KB的剩余块中。并且数据块可以被分别编码。
在框104中,可以建立用于编码的表。在各种实施例中,输入数据块中的数据可以以不同的数据单元(例如,4位、8位、16位等)表示或组织。在一些实施例中,数据单元可以是2的幂数位,但在某些其他实施例中可能不是2的幂数位。例如,在一个实施例中,输入数据块中的数据可以由7位的美国信息交换标准码(ASCII)码表示。一个数据单元可以被称为一个符号,因此输入数据块可以包括许多符号。输入数据块中所有符号的总数可以表示为Stotal,可以是1024、2048或4096或一个个位数、两位数、百位数,千位数或更大的另一个数字。对于不同的输入流,Stotal可能会有所不同。有时,Stotal可以是固定的特定数字,例如2的幂。在另一些时候,Stotal可能不是固定的特定数字,也不一定是2的幂。
通常,数据块可以由不同的符号的集形成的,每个符号出现一次或多次。在一些实施例中,可以针对输入数据块计算符号的概率分布,并且可以构建两个表来表示符号的概率分布,出现次数表和累计出现表。
在一个实施例中,可以扫描输入数据以建立不同符号的集,并且还可以计算不同符号的数量以及每个不同符号在输入数据块中出现多少次。在各种实施例中,符号可以具有预定义的大小,例如,1个字节、2个字节、4个字节等。该大小可以不是2的幂。如本文中所使用的,不同符号的集也可以被称为字母表(A),每个符号也可以被称为元素并且使用小写字母“s”来表示。小写字母“n”可用于表示字母表中不同符号(或元素)的数量,其中n是大于1的整数。应当注意,在一些实施例中,不同符号的集可以是预定义的,例如,预先编程的或由规范给出的。在这样的实施例中,可以扫描输入数据以仅计算不同符号的数量以及每个不同符号在输入数据块中出现多少次。
元素"s"的出现次数可以使用斜体小写字母"l”和下标s表示为"ls",并且块中所有符号的总出现次数可以表示为一个元素出现的概率可以通过将该元素出现的次数除以该块中所有符号的总出现次数来计算。也就是说,符号块中元素"s"的概率为ls/L。表示元素的实际出现次数的元素的出现次数可以称为"ls-actual”,并且可以例如通过对元素在输入数据块中出现的次数进行计数来获得。通过将所有不同符号的实际出现次数相加而获得的块中所有符号的总出现次数,可以称为所有符号的实际总出现次数或"Lactual”。符号块中的元素"s"的概率ls-actual/Lactual可以称为实际概率。应当注意的是,数字Lactual等于Stotal。
在各种实施例中,实际符号概率分布可以被处理为减量所有符号的总出现次数。该过程可以被称为L简化(reduction)过程。例如,在获得(例如,通过计数)元素的出现次数"ls-actual”之后,可以通过将"ls-actual”除以预定数DIV,并将除法结果四舍五入为非零整数,可以减少实际的出现次数,以生成减量的出现次数"ls-reduced”。在一些实施例中,该不同符号的集可仅包括出现在要压缩的输入数据块中的元素。即“ls-actual“对于字母表中的每个元素不是零。在一些其它实施例中,字母表可以是预定的符号集,例如ASCII或扩展ASCII,并且在这样的实施例中的至少一个中,不是每个元素都必须在输入数据块中。在这样的实施例中,如果字母表中的某个元素的“ls-actual“可以是零,该元素的减量的出现次数“ls-reduced”也可以是零。因此,在所有实施例中,当对应的"ls-actual”不是零,可以获得非零整数。
可以有不同的方法来获得非零整数。在一个实施例中,可以通过使用向上取整函数(例如,ceiling(ls-actual/DIV))将除法结果四舍五入到最接近的整数来获得非零整数。在另一个实施例中,可以通过使用下限函数(例如,floor(ls-actual/DIV))将除法结果四舍五入为最接近的整数来得到非零整数,并且如果下限函数的结果为零,可以将非零整数设置为1。即,如果ls-actual小于DIV,则非零整数可以是floor(ls-actual/DIV)+1。在又一个实施例中,可以通过将除法结果四舍五入为最接近的整数来获得非零整数(例如,如果余数等于或大于0.5,则向上舍入;如果余数小于0.5,则向下舍入),如果四舍五入的结果为零,则将结果设置为1。
预定数DIV可以是大于1的任意数量,典型示例数可以是正整数,例如但不限于2、3或4等。可以使用相同的预定数来减少输入数据块中每个不同符号的出现次数。在还原每个不同符号的每个单独出现次数之后,所有符号的总出现次数也可以减少为减量的所有符号的总出现次数,这可以表示为"Lreduced”。应当注意的是,Lreduced可以接近于Lactual/DIV,但不一定相等。
作为一个例子,假设符号"α"在4096个符号的块中出现了五(5)次,而符号"β"在同一个块中出现了三(3)次。同一个块中可能还有其他符号,出现的总数为4088(4096-8)。符号"α"可以具有5的实际出现次数和5/4096的实际出现概率。符号"β"可以具有3的实际出现次数和3/4096的实际出现概率。在一个实施例中,上限函数可以用于获得减量的出现次数,示例DIV为4,对于符号"α",可以通过ceiling(ls-actual/DIV)获得"ls-reduced",其等于二(2),对于符号"β",可以通过ceiling(ls-actual/DIV)获得"ls-reduced",其等于(一)1。在另一实施例中,下限函数可用于获得减量的出现次数,仍然示例DIV为4,对于符号"α",可通过floor(ls-actual/DIV)获得"ls-reduced”,其等于一(1);对于符号"β",因为ls-actual小于DIV,所以可以通过floor(ls-actual/DIV)+1来获得"ls-reduced”,该值也等于一(1)。在两种情况下,在L简化之后,减量的所有符号的总出现次数可以为 它可以等于1024(4096/4),或接近1024但不等于1024(例如,大于或小于1024)。
在各种实施例中,用于压缩或解压缩的概率分布可以是实际概率分布或L简化之后的概率分布,并且在两种情况下压缩都是无损的。应该注意的是,实施例可以获得具有实际概率分布的最佳压缩率。在L简化之后使用概率分布可以提高速度并降低硬件成本(例如,存储空间),但可能会牺牲一点压缩率。因为根据本公开的压缩和解压缩技术可以使用实际概率分布或在L简化之后的概率分布来实现,所以可以将术语"ls”用作元素"s"的出现次数的通用术语,它可以是元素"s"的实际出现次数,也可以是元素s减量的出现次数。并且,术语“L”可以用作数据块中所有符号的总出现次数的通用术语,其可以是数据块中所有符号的实际总出现次数或数据块中减量的所有符号的总出现次数。
L为8且具有三个元素的字母表的示例可用于示出根据一个实施例的压缩和解压缩操作。可以将三个元素字母表表示为{a,b,c},其中“a”,“b”,“c”代表三个不同的符号。在此示例中,假设元素“a”的出现次数为一(1),元素“b”的出现次数为五(5),元素“c”的出现次数为二(2),元素“a”的出现概率可以是1/8,元素“b”的出现概率可以是5/8,元素“c”的出现概率可以是2/8。在该示例中,字母“a”,“b”和“c”可用于表示任意三个不同的不同符号,而不必表示字母本身。应当注意,每个元素a,b或c可以具有预定义的大小,该大小在不同的实施例中可以是不同的,因为不同的实施例可以对元素使用不同的代码。例如,元素的预定义大小可以是ASCII中的7位,扩展ASCII中的8位或UTF-32中的32位。
图2A示意性地示出了根据本公开一个实施例的出现次数表202。出现次数表202可以是符号集的所有元素的出现次数表,并且可以被称为ls表。对于每个符号si(下标i从0到n-1),可以存储其出现次数为li。应当注意,在表202中示出了第一行元素用于说明。在一些实施例中,第二行中每个出现次数的位置可以对应于符号集中对应符号的位置,因此,表202可以仅需要第二行记录符号出现的次数。对于字母表为{a,b,c}且具有三个符号(n=3)的示例,出现次数表可以是下面的表1。在一个实施例中,可以在编码操作期间将字母表{a,b,c}分别存储在符号表中,并且可以将出现次数的列表{1、5、2}存储为表1的替代方案,其中出现次数的位置与字母表中的符号列表中的符号的位置相对应。
a | b | c |
1 | 5 | 2 |
表1简单示例中符号集{a,b,c}的出现次数
图2B示意性地示出了根据本公开的一个实施例的累计出现表204。累计出现表204可以是符号集的所有元素的累积出现表。元素的累积出现次数,可以称为bs,是字母表中该元素之前的所有元素出现的总和。换句话说,一个元素的累积出现是符号集中该元素之前的元素的出现总数。累积出现次数表204也可以称为bs表。对于符号s0,在第一个元素之前没有元素,因此符号s0的累积出现次数可以为零,存储在表204中。对于所有后续符号si(下标i从1到n-1),它们各自的累积出现次数可以是0+l0+…+li-1。
应当注意,在表204中示出了第一行元素用于说明。在一些实施例中,第二行中每个累积出现的位置可以对应于符号集中相应符号的位置,因此,表204可能仅需要第二行记录该符号的累积出现。对于具有三个符号(n=3)的字母表{a,b,c}的示例,累积出现表bs可以是下面的表2。在一个实施例中,可以在编码操作期间分别存储字母表{a,b,c},并且可以将累积出现的列表{0,1、6}存储为表2的替代,其中累积次数的位置对应于字母表中元素列表中元素位置的出现次数。
a | b | c |
0 | 1 | 6 |
表2简单示例中符号集{a,b,c}的累积次数
在一个实施例中,表202或表204中的任何一个都可以具有该行符号,但不能同时具有二者。
再次参考图1,在框106中,可以基于出现次数表和累计出现表来执行编码,并且在框108中,可以从压缩器输出编码的数据。在一个实施例中,编码可以生成数字序列,其中来自被处理的输入符号块的每个符号。数字序列中的每个数字可以表示一种状态,该状态可以基于该点处已处理的符号生成,并且序列中的下一个数字可以是当前状态和输入符号的函数。在一些实施例中,编码函数可以表示为C(x,s),其中x是当前状态,而s是输入符号(例如,要处理的下一个符号)。
应当注意,解码过程可以以相反的顺序对编码生成的状态进行处理。即,最后一个编码符号可以是被解码的第一个符号,并且解码过程可以从在压缩过程100期间生成的最后一个状态开始并且工作直到在压缩过程100期间生成的第一个状态。在一个实施例中,为了按照符号的输入块的顺序获得解码的符号,压缩过程100可以从输入块的最后一个符号开始并且向后工作直到输入块的第一个符号。在另一个实施例中,压缩过程100可以从输入块的第一个符号开始,并且向前工作直到输入块的最后一个符号,并且相应地,解码过程可以获取首先解码的输入块的最后一个符号和最后解码的输入块的第一个符号。
根据本公开的一个实施例可能需要选择L个不同的编码状态用于压缩。编码状态也可以称为编码的状态或状态。在一些实施例中,L个不同状态可以是在压缩过程100期间生成的L个不同数字的间隔。该间隔可以是数字序列的范围。在压缩过程100期间,当由编码函数C(x,s)生成的状态超过该范围时,可以将生成的状态的一些位转移到输出流(或输出缓冲器),使得生成的状态的剩余部分可以落入间隔。在一些实施例中,可以将生成的状态右移以减小生成的状态的值,并且可以将移位后的位传送到输出流(或输出缓冲器)。在各个实施例中,状态的间隔可以具有L的范围,例如,M到M+L-1,其中M可以是状态范围的基值,并且可以是等于或大于零的整数。图2C示意性地示出了根据本公开一实施例的状态间隔和符号状态间隔。图2C所示的表可以是{a,b,c}的简单示例的编码状态表,其分布为{1/8、5/8、2/8}。第一行可以是可以在编码过程中生成的状态。第二行可以是进行编码的符号“a”的出现次数,第三行可以是用于进行编码的符号“b”的出现次数,第四行可以是进行编码的符号“c”的出现次数。框206可以是3至10个选择作为L个不同的状态(例如,对于状态范围,基值M为3)。在框206中,符号“a”可以具有1到1的出现次数范围(例如,状态间隔为1到1),符号“b”可以具有2到4和5到6的出现次数范围(例如,状态间隔为2到6),并且符号“c”可以具有0到1的出现次数范围(例如,状态间隔为0到1)。
在至少一个实施例中,状态的范围可以选择为L至2*L-1,其中“L”是所有符号的出现之和,“*”表示乘法。在这样的实施例中,状态范围的基值M可以等于L。每个符号"s"也可以具有ls至2*ls-1的符号状态间隔Ints。框208可以是这样的选择,其中状态间隔为8至15(M为8,L也为8)。在框208中,符号"a"可以具有1至1的出现次数范围(例如,状态间隔为1至1,其中ls为1),符号"b"可以具有5至9的出现次数范围(例如,状态间隔为5到9,其中ls为5),并且符号"c"可以具有2到3的出现次数范围(例如,状态间隔为2到3,其中ls为2)。
在一些实施例中,在M被选择为等于“L”的情况下,在框106中的编码可以开始于将状态“x”初始化为初始值“L”,然后可以执行编码,使得对于输入数据块中的每个符号,基于出现次数表和累积出现表,可以在运行时动态获得用于右移用于编码当前符号的当前状态“x”的移位数和下一状态“x”。例如,在一个实施例中,框106中的编码可以为输入块的每个符号执行循环。循环可以作用于从输入块的最后一个符号到第一个符号的符号。在循环内部,"x"的值可能会右移,直到x的左边(可以称为xtmp)可以落入当前符号的符号状态间隔中。移位数可以被称为nBits。通过对当前符号进行编码而生成的下一个状态值可以通过将当前符号的累积出现次数加到xtmp,然后减去当前符号的出现次数并加上M来确定。也就是,新的"x”等于bs+xtmp-ls+M。在框108中,可以将向右移位的nBits个位输出到编码的数据。
在一个实施例中,在框106和108中的编码和输出操作可以如下用伪码表示,其中“lg()”是二进制对数函数,“>>”是右移运算符,“∈”是属于运算符:
在压缩过程100的结尾,编码结果可以包括编码数据和最终状态x。最终状态x可以是通过对输入中的最后一个符号减去M进行编码而生成的新状态x。可以在框108中输出编码结果。
可以使用简单示例符号集{a,b,c}来解释框106和框108,其中“L”为8,出现次数为{1、5、2},累积出现次数为{0、1、6}。为了编码字符串“bac”,在从最后一个符号开始并且直到第一个符号的实施例中,可以首先对字母“c”进行编码。初始值“x”可以初始化为8。字母“c”可能具有6的累积出现次数和2的出现次数。“c”的符号状态间隔可以是2到3(例如,2*2-1)。初始x值8可以二进制表示为b1000,因此可能需要右移两次以使值xtmp变为b10(例如,十进制数2),以落入2到3的间隔。新状态“x”可以变为6+2-2+8,可以等于14。右移的两位b00可以被放入编码数据中。
在状态“x”现在为14的情况下,可以对下一个字母“a”进行编码。字母“a”的累积出现次数为0,出现次数为1。“a”的符号状态间隔可以是1到1(例如,2*1-1)。数字14可以二进制表示为b1110,因此可能需要右移3次才能使值xtmp变为b1,使其落入1到1的间隔。新状态“x”可以变为0+1-1+8,可以等于8。右移的三位b110可以被放入编码数据中。
在状态“x”现在为8的情况下,可以对下一个字母“b”进行编码。字母“b”的累积出现次数为1,出现次数为5。“b”的符号状态间隔可以是5到9(例如,2*5-1)。数字8可以二进制表示为b1000,并且它可以不需要移位(零移位)即可使值xtmp落入5到9的间隔。新状态“x”可以变为1+8-5+8,可以等于12。由于“b”可以是要编码的最后一个符号,因此在对“b”进行编码之后,不能在编码数据中放入任何位,并且可以通过从最后生成的新状态“x”减去L来获得最终状态x(例如,12-8)。因此,在一个实施例中,从压缩器输出的编码结果可以是编码数据b11000和最终状态x 4。
应当注意,对于可以将被右移的位放入编码数据中的顺序没有限制。即,压缩器可以被配置为将被右移的位以不同的顺序放入编码的数据中,只要可以保留顺序信息,使得解压缩器可以稍后获得该信息以用于解码。例如,编码“a”产生的三位b110被移出并作为b110或b011放入编码数据中,并且顺序信息可以被保存以供解压缩器获得并用于解码。
此外,与在连续编码操作循环中生成的连续符号相对应的位集也可以以任何顺序被级联,只要可以保持级联顺序信息,使得解压缩器可以稍后获得该级联信息用于解码。例如,通过将第一个元素“c”编码而生成的b00和通过将第二个元素“b”编码而生成的b110可以由b011+b00连接为b01100,或者由b00+b011连接为b00011,并且可以将级联顺序信息保留为解压缩器获取以用于解码。在至少一个实施例中,位顺序、级联顺序或两者可以是预定义的(例如,在规范中指定),并且压缩器和解压缩器可以遵循预定的顺序,因此,在该实施例中,由于解压缩器可以通过使用预定顺序正确解码,因此位顺序、级联顺序或者两者可以不需要保留并传递给解压缩器。
因为压缩过程100可以包括具有循环索引的循环,对于每个符号,循环索引从0开始逐步增加到lg(L),与没有L简化的压缩过程100的实施例相比,具有L简化(较小的L)的压缩过程100的实施例可以花费更少的时间来完成。
根据本公开的压缩器实施例可以对硬件实现是友好地。出现次数表可能需要n个条目(其中,n是字母表的不同符号的数量),累计出现表也可能需要n个条目。条目大小可以是lg(L)位,以便这两个表所需的存储器可以是2*n*lg(L),其中“*”可以是乘法运算符,"lg()"可以是二进制对数函数。具有L简化的实施例也可以比没有L简化的实施例更加硬件友好,因为这些表可以以较少的条目大小占用更少的空间(L较小,因此lg(L)较小)。在符号的位长可以等于lg(L)的实施例中,字母表可以与表202或204一起存储。在符号的位长不等于Ig(L)的实施例中,字母表可以存储在单独的列表中,并且表202和204可以仅需要相应表中的第二行。应当注意,根据本公开的编码技术不需要任何包含所生成的状态的编码表,其中每个状态都伴随有对应的符号(用该符号编码的先前状态来生成状态)。因此,根据本公开的压缩器实施例可以需要很少的存储空间,并且可以易于在现场可编程门阵列(FPGA)或专用集成电路(ASIC)等中实现。
图3示意性地示出了根据本公开的一个实施例的压缩器300。压缩器300可以被配置为实施压缩过程100。压缩器300可以包括输入接口302、输入缓冲器304、计算器306、表缓冲器308、编码器引擎310和输出缓冲器312。输入接口302可以耦合到外部总线,并且被配置为执行框102以接收要被编码的数据。所接收的数据可以具有一个副本存储在输入缓冲器304中,并且另一副本发送至计算器306。计算器306可以被配置为执行框104,该框104包括:如果没有给出字母表,则扫描输入数据以构建字母表;确定字母表中每个符号的出现次数;以及计算累积出现。表缓冲器308可以存储由计算器306生成的表,该表可以包括出现次数表202和累积出现表204。
在一些实施例中,可以按顺序表示字母表中的符号,例如,扩展的ASCII码是与256个字符相对应的256个连续数字的列表,小写英文字符是从“a”到“z”的26个字母。在这样的实施例中,可以在不扫描输入数据的情况下获得字母表,并且可以不需要存储字母表,因为编码器和解码器都可以获取这种信息(例如,编码或解码规范可以提供字母表),并且表202和表204的每个条目的地址或索引可以指示对应的符号。例如,如果字母表是扩展的ASCII,则第一个符号可以是“null”,并且表202中的第一个条目可以对应于符号“null”的出现次数,并且表204中的第一个条目可以对应于符号“null”的累积出现。在另一示例中,如果字母表是小写英文字母,则第一个符号可以是“a”,并且表202中的第一个条目可以对应于符号“a”的出现次数,并且表204中的第一个条目可以对应于符号“a”的累积出现。
在一些其他实施例中,可以通过扫描输入数据来构建字母表,并且在扫描之前输入数据中的不同符号可能是未知的。在这样的实施例中,可以在运行时构建字母表,并且在一个实施例中,可以将其存储在表缓冲器308中的单独的表或列表中。在另一个实施例中,可以在运行时构建字母表,但是符号列表可以是表缓冲器308中的表202或表204中的一行,因此不需要单独的字母表或列表。
编码器引擎310可以被配置为使用表缓冲器308中的表和输入缓冲器304中的数据执行框106中的编码操作。可以将编码的数据放入用于框108操作的输出缓冲器312中。在一些实施例中,字母表和出现次数也可以放入输出缓冲器312中。此外,在一些实施例中,还可以输出(例如,到输出流或到输出缓冲器)用于编码数据的位顺序和级联顺序信息。
图4示意性地示出了根据本公开的一个实施例的压缩过程400。在一个或多个实施例中,压缩过程400也可称为编码过程,并且除非另有说明,关于压缩过程100描述的术语和技术也适用于压缩过程400。在框402中,可以接收输入数据块。在各种实施例中,框402可以与压缩过程100的框102相同。
在框404中,可以确定输入数据块中不同符号的出现次数。如关于框104所描述的,在各种实施例中,输入数据块中的数据可以用符号表示或组织,在一些实施例中,符号可以是2比特位的幂,而在一些其它实施例中,符号不是2比特位的幂,并且输入数据块中的所有符号的总数可以用Stotal表示。通常,数据块可以由一组不同的符号形成,每个符号出现一次或多次。在一个实施例中,可以扫描输入数据以建立一组不同符号,并且还可以计算不同符号的数量以及每个不同符号在输入数据块中出现多少次。因此,在框404中,可以获得输入数据块中的一组不同的符号的“ls-actual”和数据块的“Lactual”。
在框406中,可以生成输入数据块中不同符号的减量的出现次数。在一个实施例中,例如,通过计数元素的出现次数“ls-actual”之后,可以通过将“ls-actual”除以预定数DIV,并将除法结果四舍五入为非零整数,以生成减量的出现次数“ls-reduced”。如关于框104所描述的,可以存在获得非零整数的不同方法,并且它们可以在框406的各种实施例中实现。例如,可以通过使用上限函数将除法结果四舍五入到最接近的整数来获得非零整数;使用下限函数将除法结果向下舍入为最接近的整数,如果下限函数的结果为零,则将非零整数设置为1;或将除法结果四舍五入到最接近的整数(如余数等于或大于0.5时向上舍入,小于0.5时向下舍入),如果舍入的结果为零,则将非零的整数设置为1。
在简化每个不同符号的每个单独出现次数之后,所有符号的总出现次数也可以减小为所有符号的减量的总出现次数,这可以表示为“Lreduced”。应当注意的是,Lreduced可以接近于Lactual/DIV,但不一定相等。
在框408,可以使用减量的出现次数作为概率分布来编码数据块。在简化每个不同符号的每个单独出现次数之后,可以获得所有符号的减量的总出现次数“Lreduced”并且每个不同符号的出现概率可以是“ls-reduced/Lreduced”,并且可以使用基于概率分布的任何熵编码方案来执行编码。
在一些实施例中,在框408中,可以使用不同符号的减量的出现次数来构建编码表,并且可以执行使用这些表的编码。在一个实施例中,例如,表202和204可以使用不同符号的减量出现次数来构建,并且可以使用压缩过程100的编码技术(例如,框104、106和108的实现)。
在一些其它实施例中,任何常规的非对称数字系统(ANS)编码方法可以在框408用于编码,包括但不限于流ANS编码(stream ANS coding)、表ANS(table ANS)、范围ANS(range ANS)等。在一个实施例中,例如,可构建三个ANS表:可以构建起始表、位数表和编码状态表并用于编码。起始表可以表示为start[s],位数表可以表示为NB[s],索引“s”是字母表中的元素。起始表中的每个条目可以通过start[s]=-ls-reduced+sum(all ls'-reduced)获得,其中S'<S(S'可以表示字母表中可以位于元素“S”之前的元素)。位数表中的每个条目可以通过nb[s]=(k[s]<<r)-(ls-reduced<<k[s])获得,其中“<<”是左移位运算符,k[s]=R-floor(lg(ls-reduced)),R为lg(Lreduced),r为R+1。应当注意,因为R是由lg(Lreduced)得到的,该特定实施例可能需要Lreduced是2的次方。编码状态表可以表示为EncodingTable[i],索引“i”从0到Lreduced–1。为了填充编码状态表,可以将状态X的初始值设置为零,并且可以将迭代步长(step)设置为5/8*Lreduced+3,其中“*”可以是乘法运算符。索引“i”从0到Lreduced-1的循环可用于填充编码状态表的条目。在循环内部,EncodingTable[i]可以被设置为当前状态X,并且下一个状态X可以被设置为mod(X+step,Lreduced),其中mod()是模函数。
在该实施例中,一旦可以完成ANS表,就可以使用ANS表来执行编码。要为当前元素“s”生成的位数可以是nbBits=(x+nb[s])>>r,其中“x”可以是当前状态,“>>”可以是右移运算符。临时状态Xtmp可以设置为当前状态右移nbBits数。并且可以将新状态x设置为EncodingTable[start[s]+xTMP]+L和当前状态x的nbBits位(例如,x[NBBITS-1:0])可以被输出到编码数据(例如,输出流或输出缓冲器)。
在一个实施例中,ANS表可以由如下伪代码生成,其中R是lg(Lreduced),r=R+1,“<<”左移运算符,“>>”是右移位运算符,“*”是乘法运算符,mod()是模函数:
使用ANS表的编码过程可以由伪如下代码表示:
本公开提供了用于使用熵编码的无损压缩的系统和方法。在示例性实施例中,提供了一种方法,其可以包括接收要压缩的输入数据块,对于所述输入数据块中的每个符号,基于所述出现次数表和所述累积出现次数表,动态地获得用于右移当前状态“x”以编码当前符号的移位数,将被右移的位输出到编码数据,并获得下一状态“x”,以及从在最终循环中生成的最后状态“x”获得最终状态“X”。
压缩过程400可以通过压缩器300的实施例来实现,其中表缓冲器308可以是可选的。因为一些实施例可以使用编码表(例如,表202和204,或ANS表)来执行压缩,而一些其它实施例可以不使用编码表(例如,流ANS编码)来执行压缩。
在一个示例性实施例中,提供了一种方法,该方法可以包括:接收要压缩的输入数据块;确定输入数据块中不同符号的出现次数;基于不同符号的出现次数生成不同符号的减量的出现次数;以及使用减量的出现次数作为输入数据块中不同符号的概率分布来编码输入数据块。
在一个实施例中,使用减量的出现次数来编码输入数据块可以包括:使用不同符号的减量的出现次数来构建出现次数表和累积出现次数表;对于输入数据块中的每个符号,基于出现次数表和累积出现次数表,动态地获得用于右移当前状态“x”以编码当前符号的移位数,将被右移的位输出到编码数据,并获得下一个状态“x”;以及从在最终循环中生成的最后状态“x”获得最终状态“X”。
在一个实施例中,该方法可进一步包括将初始化初始状态“x”为数字Lreduced,
Lreduced是出现次数表中所有减量的出现次数的总和。通过最后状态“x”减去Lreduced可以从最后状态“x”获得最终状态“X”。
在一个实施例中,动态地获得移位的数量并获得下一状态“x”可以包括:向右移动状态“x”的值移位数直到所述状态“x”的右移值落入当前符号的符号状态间隔内为止,将所述移位数记录为nBits,从所述累积出现次数表中获得所述当前符号的减量的累积出现次数,从所述出现次数表中获得所述当前符号的减量的出现次数,并且通过将所述当前符号的减少的累积出现次数与所述状态“x”的右移值相加并减去所述当前符号的减少的出现次数并加上Lreduced来获得所述状态“x”的下一个值,其中Lreduced可以是输入数据块中所有不同符号的所有减量的出现次数的总和。
在一个实施例中,所述不同符号的所述减量的出现次数可以是通过将实际的出现次数除以预定的次数并将除法结果四舍五入为非零整数生成的。
在一个实施例中,将所述除法结果四舍五入为所述非零整数可以是对每个除法结果使用上限函数来执行的。
在一个实施例中,将所述除法结果四舍五入为所述非零整数可以是通过对每个除法结果使用下限函数来执行的,并且如果所述下限函数的结果为零,则将相应的非零整数设置为1。
在一个实施例中,将所述除法结果四舍五入为所述非零整数可以是通过将每个除法结果四舍五入到最接近的整数来执行的,并且如果通过四舍五入到最接近的整数的结果为零,则将相应的非零整数设置为1。
在一个实施例中,为了使用减量的出现次数对输入数据块进行编码,编码器引擎可以进一步被配置为:使用减量的出现次数建立起始表、位数表和编码状态表;并使用起始表、位数表和编码状态表对输入数据块进行编码。
在一个实施例中,所述起始表中的每个条目可以通过start[s]=-ls-reduced+sum(all ls'-reduced)获得的,其中,s'<s,ls-reduced是不同符号“s”的减量的出现次数,并且s'是不同符号的集中位于“s”之前的的不同符号;所述位数表中的每个条目可以通过nb[s]=(k[s]<<r)-(ls-reduced<<k[s])获得的,其中,“<<”是左移位运算符,k[s]是R-floor(lg(ls-reduced)),R为lg(Lreduced),r为R+1,Lreduced是所有减量的出现次数的总和,floor()是下限函数,lg()是二元对数函数;并且所述编码状态表可以是通过将状态X初始化为零和迭代步长初始化为5/8*Lreduced+3,然后执行循环索引“i”从0到Lreduced–1的循环并且将所述编码状态表的每个条目EncodingTable[i]设置为当前状态X,并获得下一个状态X为mod(X+步长,
Lreduced)获得的,其中,“*”是乘法运算符,mod()是模函数。
在另一示例性实施例中,提供一种压缩器,其可以包括:输入接口,被配置为接收要压缩的输入数据块,输入缓冲器,耦合到所述输入接口,以存储所接收的要压缩的输入数据块;计算器,耦合到所述输入接口,并且被配置为确定所述输入数据块中不同符号的出现次数,并且基于所述不同符号的出现次数生成所述不同符号的减量出现次数;以及编码器引擎,被配置为使用所述减量出现次数作为所述输入数据块中不同符号的概率分布来编码所述输入数据块。
在一个实施例中,使用减少的出现次数来编码输入数据块可以包括:使用不同符号的减量的出现次数来构建出现次数表和累积出现次数表;对于输入数据块中的每个符号,基于出现次数表和累积出现次数表,动态地获得用于右移当前状态“x”以编码当前符号的移位数,将被右移的位输出到编码数据,并获得下一个状态“x”;以及从在最终循环中生成的最后状态“x”获得最终状态“X”。
在一个实施例中,编码器引擎可进一步配置为:将初始状态“x”初始化为数字Lreduced,Lreduced是出现次数表中所有减量的出现次数的总和。通过最后状态“x”减去Lreduced可以从最后状态“x”获得最终状态“X”。
在一个实施例中,动态获得所述移位数并获得所述下一状态“x”,所述编码器引擎进一步被被配置为:向右移动状态“x”的值移位数直到所述状态“x”的右移值落入当前符号的符号状态间隔内为止,将所述移位数记录为nBits,从所述累积出现次数表中获得所述当前符号的减量的累积出现次数,从所述出现次数表中获得所述当前符号的减量的出现次数,并且通过将所述当前符号的减少的累积出现次数与所述状态“x”的右移值相加并减去所述当前符号的减少的出现次数并加上Lreduced,来获得所述状态“x”的下一个值,其中Lreduced可以是输入数据块中所有不同符号的所有减量的出现次数的总和。
在一个实施例中,所述不同符号的所述减量的出现次数可以是通过将实际的出现次数除以预定的次数并将除法结果四舍五入为非零整数生成的。
在一个实施例中,将所述除法结果四舍五入为所述非零整数可以是对每个除法结果使用上限函数来执行的。
在一个实施例中,将所述除法结果四舍五入为所述非零整数可以是通过对每个除法结果使用下限函数来执行的,并且如果所述下限函数的结果为零,则将相应的非零整数设置为1。
在一个实施例中,将所述除法结果四舍五入为所述非零整数可以是通过将每个除法结果四舍五入到最接近的整数来执行的,并且如果通过四舍五入到最接近的整数的结果为零,则将相应的非零整数设置为1。
在一个实施例中,为了使用减量的出现次数对输入数据块进行编码,编码器引擎可以进一步被配置为:使用减量的出现次数建立起始表、位数表和编码状态表;并使用起始表、位数表和编码状态表对输入数据块进行编码。
在一个实施例中,所述起始表中的每个条目可以通过start[s]=-ls-reduced+sum(all ls'-reduced)获得的,其中,s'<s,ls-reduced是不同符号“s”的减量的出现次数,并且s'是不同符号的集中位于“s”之前的的不同符号;所述位数表中的每个条目可以通过nb[s]=(k[s]<<r)-(ls-reduced<<k[s])获得的,其中,“<<”是左移位运算符,k[s]是R-floor(lg(ls-reduced)),R为lg(Lreduced),r为R+1,Lreduced是所有减量的出现次数的总和,floor()是下限函数,lg()是二元对数函数;并且所述编码状态表可以是通过将状态X初始化为零和迭代步长初始化为5/8*Lreduced+3,然后执行循环索引“i”从0到Lreduced–1的循环并且将所述编码状态表的每个条目EncodingTable[i]设置为当前状态X,并获得下一个状态X为mod(X+步长,
Lreduced)获得的,其中,“*”是乘法运算符,mod()是模函数。任何公开的方法和操作可以被实现为存储在一个或多个计算机可读存储介质(例如,非暂时性计算机可读介质,例如,一个或更多个光盘介质,易失性存储组件(例如,动态随机存取存储器(DRAM)或静态随机访问存储器(SRAM)),或非易失性存储组件(例如,硬盘驱动器)上并在设备控制器(例如,ASIC执行的固件)上执行的计算机可执行指令(例如,本文描述的操作的软件代码)。可以将用于实现所公开的技术的任何计算机可执行指令以及在所公开的实施例的实现期间创建和使用的任何数据可以存储在一个或多个计算机可读介质(例如,非暂时性计算机可读介质)上。
尽管本文已经公开了各个方面和实施例,但是其他方面和实施例对于本领域技术人员将是显而易见的。本文所公开的各个方面和实施例是出于说明的目的,而不是旨在进行限制,真实的范围和精神由所附权利要求书指示。
Claims (20)
1.一种方法,其特征在于,包括:
接收要压缩的输入数据块;
确定所述输入数据块中不同符号的出现次数;
基于所述不同符号的所述出现次数,生成所述不同符号的减量的出现次数;和
使用所述减量的出现次数作为所述输入数据块中所述不同符号的概率分布来编码所述输入数据块。
2.根据权利要求1所述的方法,其特征在于,使用所述减量的出现次数来编码所述输入数据块包括:
使用所述不同符号的所述减量的出现次数构建出现次数表和累积出现次数表;
对于所述输入数据块中的每个符号,基于所述出现次数表和所述累积出现次数表,动态地获得用于右移当前状态“x”以编码当前符号的移位数,将被右移的位输出到编码数据并获得下一状态“x”;和
从在最终循环中生成的最后状态“x”获得最终状态“X”。
3.根据权利要求2所述的方法,其特征在于,还包括:将初始状态“X”初始化为数字Lreduced,其中,Lreduced是所述出现次数表的所有减量的出现次数的总和,其中通过所述最后状态“x”减去Lreduced从所述最后状态“x”获得所述最终状态“X”。
4.根据权利要求2所述的方法,其特征在于,动态地获得所述移位数并获得所述下一状态“x”,包括:
向右移动状态“x”的值移位数直到所述状态“x”的右移值落入当前符号的符号状态间隔内为止;
将所述移位数记录为nBits;
从所述累积出现次数表中获得当前符号的减量的累积出现次数;
从所述出现次数表中获得当前符号的减量的出现次数;和
通过将当前符号的减量的累积出现次数与状态“X”的右移值相加,并减去当前符号的减量的出现次数,并加上Lreduced来获得状态“x”的下一个值,其中,Lreduced是所述输入数据块中所述出现次数表的所有减量的出现次数的总和。
5.根据权利要求1所述的方法,其特征在于,所述不同符号的所述减量的出现次数是通过将每一个实际的出现次数除以预定的次数并将除法结果四舍五入为非零整数生成的。
6.根据权利要求5所述的方法,其特征在于,将所述除法结果四舍五入为所述非零整数是对每个除法结果使用上限函数来执行的。
7.根据权利要求5所述的方法,其特征在于,将所述除法结果四舍五入为所述非零整数是通过对每个除法结果使用下限函数来执行的,并且如果所述下限函数的结果为零,则将相应的非零整数设置为1。
8.根据权利要求5所述的方法,其特征在于,将所述除法结果四舍五入为所述非零整数是通过将每个除法结果四舍五入到最接近的整数来执行的,并且如果通过四舍五入到最接近的整数的结果为零,则将相应的非零整数设置为1。
9.根据权利要求1所述的方法,其特征在于,使用所述减量的出现次数来编码所述输入数据块包括:
使用减量的出现次数建立起始表、位数表和编码状态表;和
使用所述起始表、所述位数表和所述编码状态表对所述输入数据块进行编码。
10.根据权利要求9所述的方法,其特征在于,所述起始表中的每个条目是通过start[s]=-ls-reduced+sum(all ls'-reduced)获得的,其中,s'<s,ls-reduced是不同符号“s”的减量的出现次数,并且s'是不同符号的集中位于“s”之前的的不同符号;所述位数表中的每个条目是通过nb[s]=(k[s]<<r)-(ls-reduced<<k[s])获得的,其中,“<<”是左移位运算符,k[s]是R-floor(lg(ls-reduced)),R为lg(Lreduced),r为R+1,Lreduced是所有减量的出现次数的总和,floor()是下限函数,lg()是二元对数函数;并且所述编码状态表是通过将状态X初始化为零和迭代步长初始化为5/8*Lreduced+3,然后执行循环索引“i”从0到Lreduced–1的循环并且将所述编码状态表的每个条目EncodingTable[i]设置为当前状态X,并获得下一个状态X为mod(X+步长,Lreduced)获得的,其中,“*”是乘法运算符,mod()是模函数。
11.一种压缩器,包括:
输入接口,被配置为接收要压缩的输入数据块;
耦合至所述输入接口的输入缓存器,用以储存所接收的要压缩的输入数据块;
计算器,其耦合到所述输入接口,并且被配置为:确定所述输入数据块中不同符号的出现次数,和基于所述不同符号的所述出现次数,生成所述不同符号的减量的出现次数;和
编码器引擎,被配置为使用所述减量的出现次数作为所述输入数据块中所述不同符号的概率分布来编码所述输入数据块。
12.根据权利要求11所述的压缩器,其特征在于,使用所述减量的出现次数来编码所述输入数据块包括:
使用所述不同符号的所述减量的出现次数构建出现次数表和累积出现次数表;
对于所述输入数据块中的每个符号,基于所述出现次数表和所述累积出现次数表,动态获得用于右移当前状态“x”以编码当前符号的移位数,将被右移的位输出到编码数据并获得下一状态“x”;和
从在最终循环中生成的最后状态“x”获得最终状态“X”。
13.根据权利要求12所述的压缩器,其特征在于,所述编码器引擎还被配置为:将初始状态“x”初始化为数字Lreduced,其中,Lreduced是所述出现次数表的所有减量的出现次数的总和,其中,所述最终状态“X”是从所述最后状态“x”通过所述最后状态“x”减去Lreduced获得的。
14.根据权利要求12所述的压缩器,其特征在于,动态地获得所述移位数并获得所述下一状态“x”,所述编码器引擎进一步被被配置为:
向右移动状态“x”的值移位数直到所述状态“x”的右移值落入当前符号的符号状态间隔内为止;
将所述移位数记录为nBits;
从所述累积出现表中获得所述当前符号的减量的累积出现次数;
从所述出现次数表中获得当前符号的减量的出现次数;和
通过将当前符号的减量的累积出现次数与状态“x”的右移值相加,并减去当前符号的减量的出现次数,并加上Lreduced,来获得状态“x”的下一个值,Lreduced,是所述输入数据块中所述出现次数表的所有减量的出现次数的总和。
15.根据权利要求11所述的压缩器,其特征在于,所述不同符号的所述减量的出现次数是通过将实际的出现次数除以预定的次数并将除法结果四舍五入为非零整数生成的。
16.根据权利要求15所述的压缩器,其特征在于,将所述除法结果四舍五入为所述非零整数是对每个除法结果使用上限函数来执行的。
17.根据权利要求15所述的压缩器,其特征在于,将所述除法结果四舍五入为所述非零整数是通过对每个除法结果使用下限函数来执行的,并且如果所述下限函数的结果为零,则将相应的非零整数设置为1。
18.根据权利要求15所述的压缩器,其特征在于,将所述除法结果四舍五入为所述非零整数是通过将每个除法结果四舍舍入到最接近的整数来执行的,并且如果通过四舍五入到最接近的整数的结果为零,则将相应的非零整数设置为1。
19.根据权利要求11所述的压缩器,其特征在于,为了使用所述减量的出现次数来编码所述输入数据块,所述编码器引擎还被配置为:
使用减量的出现次数建立起始表、位数表和编码状态表;和
使用所述起始表、所述位数表和所述编码状态表对所述输入数据块进行编码。
20.根据权利要求19所述的压缩器,其特征在于,所述起始表中的每个条目是通过start[s]=-ls-reduced+sum(all ls'-reduced)获得的,其中,s'<s,ls-reduced是不同符号“s”的减量的出现次数,并且s'是不同符号的集中位于“s”之前的的不同符号;所述位数表中的每个条目是通过nb[s]=(k[s]<<r)-(ls-reduced<<k[s])获得的,其中,“<<”是左移位运算符,k[s]是R-floor(lg(ls-reduced)),R为lg(Lreduced),r为R+1,Lreduced是所有减量的出现次数的总和,floor()是下限函数,lg()是二元对数函数;并且所述编码状态表是通过将状态X初始化为零和迭代步长初始化为5/8*Lreduced+3,然后执行循环索引“i”从0到Lreduced–1的循环并且将所述编码状态表的每个条目EncodingTable[i]设置为当前状态X,并获得下一个状态X为mod(X+步长,Lreduced)获得的,其中,“*”是乘法运算符,mod()是模函数。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/000,666 US11296720B2 (en) | 2020-08-24 | 2020-08-24 | Data compression using reduced numbers of occurrences |
US17/000,666 | 2020-08-24 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113346913A true CN113346913A (zh) | 2021-09-03 |
CN113346913B CN113346913B (zh) | 2024-05-24 |
Family
ID=77475721
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110668364.7A Active CN113346913B (zh) | 2020-08-24 | 2021-06-16 | 使用减量的出现次数的数据压缩 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11296720B2 (zh) |
CN (1) | CN113346913B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12034462B2 (en) * | 2022-08-09 | 2024-07-09 | Synaptics Incorporated | Compressing probability tables for entropy coding |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5357250A (en) * | 1992-11-20 | 1994-10-18 | International Business Machines Corporation | Adaptive computation of symbol probabilities in n-ary strings |
US5546080A (en) * | 1994-01-03 | 1996-08-13 | International Business Machines Corporation | Order-preserving, fast-decoding arithmetic coding arithmetic coding and compression method and apparatus |
JPH08251034A (ja) * | 1995-03-07 | 1996-09-27 | Fujitsu Ltd | データ符号化・復号化方法及び装置 |
US5867114A (en) * | 1996-02-29 | 1999-02-02 | Mitel Corporation | Method and apparatus for performing data compression |
JPH11317671A (ja) * | 1998-04-30 | 1999-11-16 | Advantest Corp | データ圧縮装置およびデータ圧縮方法 |
US6140945A (en) * | 1997-04-18 | 2000-10-31 | Fuji Xerox Co., Ltd. | Coding apparatus, decoding apparatus, coding-decoding apparatus and methods applied thereto |
US7518538B1 (en) * | 2007-11-30 | 2009-04-14 | Red Hat, Inc. | Adaptive entropy coding compression with multi-level context escapes |
US20090140894A1 (en) * | 2007-11-30 | 2009-06-04 | Schneider James P | Adaptive entropy coding compression output formats |
RU2009104211A (ru) * | 2009-02-09 | 2010-08-20 | Сергей Борисович Муллов (RU) | Способ сжатия и восстановления данных без потерь |
US20120262314A1 (en) * | 2011-04-15 | 2012-10-18 | Cavium Networks, Inc. | System and Method of Compression and Decompression |
CN106170921A (zh) * | 2014-02-20 | 2016-11-30 | 古鲁洛吉克微系统公司 | 涉及符号压缩的数据的源编码和解码方法及装置 |
US20170250707A1 (en) * | 2014-02-20 | 2017-08-31 | Gurulogic Microsystems Oy | Devices and methods of source-encoding and decoding of data |
US20190097650A1 (en) * | 2015-11-01 | 2019-03-28 | Gurulogic Microsystems Oy | Encoders, decoders, and methods |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130018932A1 (en) * | 2011-07-12 | 2013-01-17 | Hughes Network Systems, Llc | System and method for long range and short range data compression |
US9448965B2 (en) * | 2013-03-15 | 2016-09-20 | Micron Technology, Inc. | Receiving data streams in parallel and providing a first portion of data to a first state machine engine and a second portion to a second state machine |
US11115049B1 (en) * | 2020-08-24 | 2021-09-07 | Innogrit Technologies Co., Ltd. | Hardware friendly data decompression |
-
2020
- 2020-08-24 US US17/000,666 patent/US11296720B2/en active Active
-
2021
- 2021-06-16 CN CN202110668364.7A patent/CN113346913B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5357250A (en) * | 1992-11-20 | 1994-10-18 | International Business Machines Corporation | Adaptive computation of symbol probabilities in n-ary strings |
US5546080A (en) * | 1994-01-03 | 1996-08-13 | International Business Machines Corporation | Order-preserving, fast-decoding arithmetic coding arithmetic coding and compression method and apparatus |
JPH08251034A (ja) * | 1995-03-07 | 1996-09-27 | Fujitsu Ltd | データ符号化・復号化方法及び装置 |
US5867114A (en) * | 1996-02-29 | 1999-02-02 | Mitel Corporation | Method and apparatus for performing data compression |
US6140945A (en) * | 1997-04-18 | 2000-10-31 | Fuji Xerox Co., Ltd. | Coding apparatus, decoding apparatus, coding-decoding apparatus and methods applied thereto |
JPH11317671A (ja) * | 1998-04-30 | 1999-11-16 | Advantest Corp | データ圧縮装置およびデータ圧縮方法 |
US7518538B1 (en) * | 2007-11-30 | 2009-04-14 | Red Hat, Inc. | Adaptive entropy coding compression with multi-level context escapes |
US20090140894A1 (en) * | 2007-11-30 | 2009-06-04 | Schneider James P | Adaptive entropy coding compression output formats |
RU2009104211A (ru) * | 2009-02-09 | 2010-08-20 | Сергей Борисович Муллов (RU) | Способ сжатия и восстановления данных без потерь |
US20120262314A1 (en) * | 2011-04-15 | 2012-10-18 | Cavium Networks, Inc. | System and Method of Compression and Decompression |
CN106170921A (zh) * | 2014-02-20 | 2016-11-30 | 古鲁洛吉克微系统公司 | 涉及符号压缩的数据的源编码和解码方法及装置 |
US20170063392A1 (en) * | 2014-02-20 | 2017-03-02 | Gurulogic Microsystems Oy | Methods and devices for source-coding and decoding of data involving symbol compression |
US20170250707A1 (en) * | 2014-02-20 | 2017-08-31 | Gurulogic Microsystems Oy | Devices and methods of source-encoding and decoding of data |
US20190097650A1 (en) * | 2015-11-01 | 2019-03-28 | Gurulogic Microsystems Oy | Encoders, decoders, and methods |
Non-Patent Citations (2)
Title |
---|
QIANQIAN FAN等: "Adaptive-Length Coding of Image Data for Low-Cost Approximate Storage", 《IEEE TRANSACTIONS ON COMPUTERS》, vol. 69, no. 2, pages 239 - 252, XP011765182, DOI: 10.1109/TC.2019.2946795 * |
杨文涛等: "多阶上下文自适应二进制算术编码实现", 《华中科技大学学报(自然科学版)》, vol. 35, no. 3, pages 42 - 45 * |
Also Published As
Publication number | Publication date |
---|---|
US11296720B2 (en) | 2022-04-05 |
CN113346913B (zh) | 2024-05-24 |
US20220060196A1 (en) | 2022-02-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112994703B (zh) | 硬件友好的数据解压缩 | |
KR101078124B1 (ko) | 데이터 압축 | |
JP3017379B2 (ja) | 符号化方法、符号化装置、復号方法、復号器、データ圧縮装置及び遷移マシン生成方法 | |
RU2403677C1 (ru) | Способ сжатия и восстановления данных без потерь | |
CN113810057B (zh) | 用于语义值数据压缩和解压缩的方法、设备和系统 | |
US7907068B2 (en) | FIFO radix coder for electrical computers and digital data processing systems | |
US7671767B2 (en) | LIFO radix coder for electrical computers and digital data processing systems | |
JPH0253329A (ja) | 圧縮符号化方法及び復号方法 | |
CN110602498B (zh) | 一种自适应有限状态熵编码的方法 | |
CN113346913B (zh) | 使用减量的出现次数的数据压缩 | |
KR101023536B1 (ko) | 데이터 무손실 압축 방법 | |
CN114614832A (zh) | 基于前后游程长度编码的测试数据压缩及解压方法 | |
CN112738124B (zh) | 硬件友好的数据压缩方法、压缩器 | |
US5010344A (en) | Method of decoding compressed data | |
US7683809B2 (en) | Advanced lossless bit coding | |
CN113315523B (zh) | 硬件友好的数据解压缩 | |
Fenwick | Universal codes | |
EP3767457A1 (en) | Data communication | |
US6794999B1 (en) | Resilient parameterized prefix codes for adaptive coding | |
KR100207428B1 (ko) | 허프만 코드 변환에 적응적인 고속 가변장 복호화 장치 및 방법 | |
US20240137045A1 (en) | Noniterative entropy coding | |
JPH0629861A (ja) | データ圧縮方法 | |
US9614546B2 (en) | Data compression and decompression method | |
Said | Resilient Parameterized Tree Codes for Fast Adaptive Coding | |
CA2998336A1 (en) | Method of data compression |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |