CN112738124B - 硬件友好的数据压缩方法、压缩器 - Google Patents

硬件友好的数据压缩方法、压缩器 Download PDF

Info

Publication number
CN112738124B
CN112738124B CN202110013408.2A CN202110013408A CN112738124B CN 112738124 B CN112738124 B CN 112738124B CN 202110013408 A CN202110013408 A CN 202110013408A CN 112738124 B CN112738124 B CN 112738124B
Authority
CN
China
Prior art keywords
state
symbol
occurrences
occurrence
cumulative
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
Application number
CN202110013408.2A
Other languages
English (en)
Other versions
CN112738124A (zh
Inventor
不公告发明人
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yingren Technology Co ltd
Original Assignee
Yingren Technology Shanghai Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Yingren Technology Shanghai Co ltd filed Critical Yingren Technology Shanghai Co ltd
Publication of CN112738124A publication Critical patent/CN112738124A/zh
Application granted granted Critical
Publication of CN112738124B publication Critical patent/CN112738124B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/04Protocols for data compression, e.g. ROHC
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4043Adaptive prefix coding
    • H03M7/4062Coding table adaptation
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3002Conversion to or from differential modulation
    • H03M7/3004Digital delta-sigma modulation
    • H03M7/3015Structural details of digital delta-sigma modulators
    • H03M7/3031Structural details of digital delta-sigma modulators characterised by the order of the loop filter, e.g. having a first order loop filter in the feedforward path
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3059Digital compression and data reduction techniques where the original information is represented by a subset or similar information, e.g. lossy compression
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4087Encoding of a tuple of symbols
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/42Conversion 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

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

提供了用于压缩数据和解压缩压缩数据的系统、装置和方法。一种方法可以包括:接收要压缩的输入数据块,为所述输入数据块中的不同符号生成出现次数表和累积出现表,对于所述输入数据块中的每个符号,基于所述出现次数表和所述累积出现表,动态获得用于右移当前状态“x”以编码当前符号的移位数,将被右移的位输出到编码数据并获得下一状态“x”,并且从在最终循环中生成的最后状态“x”获得最终状态“X”。

Description

硬件友好的数据压缩方法、压缩器
技术领域
本公开涉及数据压缩,尤其涉及使用熵编码的无损压缩。
背景技术
数据压缩已广泛用于数字信号系统,例如通信和计算机系统。在信息论中,克劳德·香农(Claude Shannon)的信源编码定理(source coding theorem,或称为无噪声编码定理)确定了可能的数据压缩以及香农熵的运算含义的极限。根据香农的信源编码定理,符号的最佳代码长度为-logbP,其中b是用于制作输出代码的符号数,P是输入符号的概率。霍夫曼(Huffman)编码和算术(Arithmetic)编码是最常见的两种熵编码技术。自 2014年以来,数据压缩器已开始使用熵编码技术的非对称数字系统(ANS)系列,该技术可结合算术编码的压缩率和类似于霍夫曼编码的运算成本。但是,这些现有的ANS实现是为通用计算系统开发的,该系统通常使用通用中央处理单元(CPU)来执行数据压缩或解压缩操作。因此,需要一种对硬件更友好的压缩技术,例如适用于现场可编程门阵列 (FPGA)或专用集成电路(ASIC)的压缩技术。
发明内容
本公开提供了用于使用熵编码的无损压缩的系统和方法。在示例性实施例中,提供了一种方法,该方法可以包括:接收要压缩的输入数据块,为该输入数据块中的不同符号生成出现次数表和累积出现表,对于该输入数据块中的每个符号,基于该出现次数表和该累积出现表,动态获得用于右移当前状态“x”以编码当前符号的移位数,将被右移的位(bits)输出到编码数据并获得下一状态“x”,并且从在最终循环中生成的最后状态“x”获得最终状态“X”。
在另一个示例性实施例中,提供了一种压缩器,其可以包括:输入接口,被配置为接收要压缩的输入数据块;输入缓冲器,其耦合到该输入接口以存储接收到的要压缩的输入数据块;计算器,其被耦合到输入接口并被配置为生成输入数据块中不同符号的出现次数表,并为输入数据块中的不同符号生成累积出现表;表缓冲器,被配置为存储出现次数表和累积出现表,以及一个编码器引擎,被耦合到表缓冲器和输入缓冲器,并被配置为:对于输入数据块中的每个符号,基于出现次数表和累积出现表,动态获得用于右移当前状态“x”以编码当前符号的移位数,将右移位输出到编码数据并获得下一状态“x”,并从最终循环中生成的最后状态“x”获得最终状态“X”。
附图简要说明
图1示意性地示出了根据本公开一实施例的压缩过程。
图2A示意性地示出了根据本公开一实施例的出现次数表。
图2B示意性地示出了根据本公开一实施例的累计出现表。
图2C示意性地示出了根据本公开一实施例的状态间隔和符号状态间隔。
图3示意性地示出了根据本公开一实施例的压缩器。
图4示意性地示出了根据本公开一实施例的解压缩过程。
图5A示意性地示出了根据本公开一实施例的解码表。
图5B示意性地示出了根据本公开另一实施例的解码表。
图6示出了根据本公开一实施例的解压缩器。
具体实施方式
现在将参考附图详细描述根据本申请的具体实施例。为了一致性,各个图中的相同元件由相同的附图标记表示。
图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",并且块中所有符号的总出现次数可以表示为
Figure DEST_PATH_BDA0002886027420000041
一个元素出现的概率可以通过将该元素出现的次数除以该块中所有符号的总出现次数来计算。也就是说,符号块中元素"s"的概率为ls/L。表示元素的实际出现次数的元素的出现次数可以称为"ls-actual”,并且可以例如通过对元素在输入数据块中出现的次数进行计数来获得。通过将所有不同符号的实际出现次数相加而获得的块中所有符号的总出现次数,可以称为所有符号的实际总出现次数或 "Lactual”。符号块中的元素"s"的概率ls-actual/Lactual可以称为实际概率。应当注意的是,数字Lactual等于Stotal
在各种实施例中,实际符号概率分布可以被处理为减少所有符号的总出现次数。该过程可以被称为L还原(reduction)过程或简称为还原。例如,在获得(例如,通过计数)元素的出现次数"ls-actual”之后,可以通过将"ls-actual”除以预定数DIV,并将除法结果四舍五入为非零整数,可以减少实际的出现次数,以生成减少的出现次数"ls-reduced”。可以有不同的方法来获得非零整数。在一个实施例中,可以通过使用向上取整函数(例如, 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还原之后,减小的所有符号的总出现次数可以为
Figure DEST_PATH_BDA0002886027420000061
Figure DEST_PATH_BDA0002886027420000062
它可以等于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()”是二进制对数函数,“>>”是右移运算符,“∈”是属于运算符:
Figure DEST_PATH_BDA0002886027420000101
Figure DEST_PATH_BDA0002886027420000111
在压缩过程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。在一个或多个实施例中,解压缩过程也可以被称为解码过程。在框402中,可以接收编码的数据的块。在各种实施例中,编码的数据的块可以通过对一个符号块进行编码来生成。应该注意的是,由于字母表,符号的概率分布或输入数据在输入数据块中的位置可能不同,一个输入数据(例如,短语、句子、段落、页面、图片或图片的一部分等)可以被编码以生成不同的编码数据块。
在框404中,可以获得与编码的数据相关联的元数据。在根据本公开的实施例中,编码的数据块可以具有关联的元数据。例如,解压缩器可能需要知道原始数据块Stotal的大小,从字母表、符号的出现次数或概率分布中可以生成编码的数据块,以及在编码过程中生成最终状态。在一个实施例中,可以由解码器引擎获得编码数据中的符号的Stota,不同符号的出现次数以及在编码过程中生成的最终状态。应该注意的是,所有符号的总出现次数(无论是否为减小的L)都可以是从出现次数获得的信息的一部分,例如,通过将所有不同符号的出现次数相加而得出。而且,在一些实施例中,位顺序和/或级联顺序也可以被包括在要从压缩器传递到解压缩器的元数据中。元数据可以以多种方式获得。例如,元数据可以与编码数据一起存储或发送,或者元数据可以与编码数据分开存储或发送,但是具有标识信息以将元数据与特定的编码数据相关联。
在框406中,可以生成解码表。图5A示意性地示出了根据本公开的一个实施例的解码表502。解码表502可以示出为四行。第一行可以是用于编码的L个不同的状态。在一些实施例中,L个不同状态可以是M至M+L-1范围的L个不同值,其中M是该范围的基值。在图5A所示的实施例中,状态范围可以是零至L-1,M为零。第二行可以是与状态相对应的符号,并且可以被表示为具有从零到L-1的索引i的Symbol[i]表示。第三行可以是要从与状态相对应的编码数据中恢复的位数,并且可以被表示为具有从零到L-1的索引i的nBits[i]表示。并且第四行可以是从编码数据中解码出该列中的符号之后的新状态,并且可以被表示为具有从零到L-1的索引i的newX[i]。应当注意,第一行中的值可以与其他行的基于零的索引匹配,因此,在至少一个实施例中,第一行不需要保留在表中。
在一些实施例中,表502可以被构造成具有两个循环:用于遍历字母表的所有元素的外循环和用于遍历每个元素的所有出现次数的内循环。解码表的建立过程可以从将状态X初始化为初始值零(0)并将R初始化为lg(L)开始,然后执行具有对应于字母表中每个元素位置的循环索引的外循环。在一个实施例中,索引可以是基于零(从零开始),因此字母表中的第一个元素的索引可以为零,字母表中的第二个元素的索引可以为一,依此类推。在外循环内部,可以将Ls的初始值(带有大写字母L和下标s)设置为当前元素的出现次数,以使Ls=ls。内循环可以从1开始,直到1s。在内循环内部,可以将当前解码符号设置为当前元素(例如,当前解码符号=当前元素),可以将要从编码数据中恢复的当前位数设置为R减去floor(lg(Ls))(例如,nBits=R-floor(lg(Ls))),新状态X可以设置为Ls,左移当前要恢复的位数减去L(例如,newX=(Ls<<nBits)–L),其中<<可以是左移运算符。当前解码的符号、当前要恢复的位数和新状态可以存储在解码表中用于与状态X对应的条目。然后对于下一次内循环迭代,状态X可以加1,并且Ls也可以增加1。一旦针对一个元素的所有出现次数的内循环迭代完成,则外循环可进行到字母表中的下一个元素。
在一实施例中,可以用如下伪码来表示在框406中构建解码表502的操作:
Figure DEST_PATH_BDA0002886027420000171
对于具有三个符号(n=3)的字母表{a,b,c}的示例,解码表502可以是下面的表3。 应当注意,第一行可以对应于从零开始的索引(对于范围M至M+8-1,基本值M 为零)。因此, 第一行可以仅出于说明目的而示出,并且不需要被存储在解码表的实施例中。
X 0. 1. 2. 3. 4. 5. 6. 7.
Symbol[X] a b b b b b c c
nBits[X] 3. 1. 1. 1. 0. 0. 2. 2.
newX[X] 0. 2. 4. 6. 0. 1. 0. 4.
表3简单示例中的用于符号集{a,b,c}的第一示例性解码表
在一些实施例中,当L不是2的幂时,方程nBits=R–floor(lg(Ls))不再正确。即,当L是2的幂时,可以使用由等式nBits=R-floor(lg(Ls))构建的解码表502。当L 不是2的幂时,在构建解码表502时,可以以与当L是2的幂时相同的方式获得R的符号行,但是可以通过不同的方法来填充nBits和newX行。在一个实施例中,当L不是2 的幂时,在构建解码表502时,可以将R设置为ceiling(lg(L)),并且可以通过执行从0到R的索引"j”循环的操作获得n_Bits(替代nBits),并且可以将数字new_State (替代新状态newX)设置为当前Ls。在循环内部,可以通过将初始Ls左移循环索引号 j,并将获得的左移值加2的j次幂,然后从获得的值中减去1,以获得称为Ls_tmp的临时 Ls。也就是说,Ls_tmp=(Ls<<j)+(2^j-1),其中<<是左移位运算符,^是幂运算符。在一个实施例中,在硬件实现中,可以通过将Ls向左移位j位并以最低有效位(LSB)插入j 位1来执行针对(Ls<<j)+(2^j-1)的运算。可以通过每次将循环索引从零递增到R直到 Ls_tmp落入间隔{L,…,2L-1)中来获得Ls_tmp。然后,可以将n_Bits设置为“j”(并且代替nBits保存到表502中)并且可以停止循环。
应当注意,要从编码数据中恢复的位数可以是n_Bits或n_Bits+1,但是只有j和 j+1中较小的一个可以记录在解码表502中。即,尽管在L不是2的幂的情况下可以将 n_Bits数保存为nBits数的替代,但是n_Bits数不一定是要从编码数据中恢复的实际位数,其可以在当执行基于解码表502的解码操作时动态地确定。
在一个实施例中,在框406中为L不是2的幂的构建解码表502的操作可以采用如下伪码表示:
Figure DEST_PATH_BDA0002886027420000181
Figure DEST_PATH_BDA0002886027420000191
图5B示意性地示出了根据本公开的另一个实施例的解码表504。解码表504可以示出为两行。第一行可以是用于编码的L个不同的状态。在一些实施例中,L个不同状态可以是M至M+L-1范围的L个不同值,其中M是该范围的基值。在图5B所示的实施例中,状态范围可以是从零到L-1,M是零。第二行可以是与状态相对应的符号,并且可以表示为具有从零到L-1的索引i的Symbol[i]。应当注意,第一行中的值可以与其他行的基于零的索引匹配,因此,在至少一个实施例中可以省略第一行。此外,在实现解码表504 的实施例中,可以从运行时计算当前要从编码数据恢复的位数nBits和新状态X newX。因此,与实现解码表502的实施例相比,可以减少存储空间,因此,与构建解码表504的实施例相比,解压缩器在集成电路(IC)芯片中可以需要较小的面积。
在一些实施例中,表504可以被构造成具有两个循环:用于遍历字母表的所有元素的外循环和用于遍历每个元素的所有出现次数的内循环。解码表构建过程可以开始于将状态“X”初始化为初始值零(0),然后使用与索引中的每个元素的位置相对应的循环索引执行外循环。在一个实施例中,索引可以是基于零(从零开始),因此字母表中的第一个元素的索引可以为零,字母表中的第二个元素的索引可以为一,依此类推。内循环可以从1开始,直到1s。在内循环内部,可以将当前解码符号设置为当前元素(例如,当前解码符号=当前元素)。当前解码的符号可以被存储到解码表504中用于与状态X相对应的条目。然后对于下一次内循环迭代,状态X可以被增加1。一旦针对一个元素的所有出现次数的内循环迭代完成,则外循环可进行到字母表中的下一个元素。
在一实施例中,可以如下用伪码来表示在框406中构建解码表504的操作:
Figure DEST_PATH_BDA0002886027420000201
对于具有三个符号(n=3)的字母表{a,b,c}的示例,解码表504可以是下面的表4。 应当注意,第一行可以对应于从零开始的索引(对于范围M至M+8-1,基本值M 为零)。因此, 第一行可以仅出于说明目的而示出,并且不需要被存储在解码表的实施例中。
X 0. 1. 2. 3. 4. 5. 6. 7.
Symbol[X] a b b b b b c c
表4简单示例中的用于符号集{a,b,c}的第二示例性解码表
在框408中,可以执行基于解码表的解码。编码数据中的最终状态可以成为解压缩过程400中的第一个状态,以被解码以获得第一个恢复的符号。在生成解码表502的实施例中,最终状态可以与解码表502的索引匹配,与索引相对应的符号可以是第一个恢复的符号。当L是2的幂时,还可以从解码表502直接获得要从编码数据恢复的位数 (例如,nBits)。可以通过将解码表502中的对应的新状态newX与要从编码数据中恢复的位数表示的恢复值相加来获得下一状态X。利用下一个状态X,可以获得下一个符号,以及下一个nBits和newX。然后,解码操作可以继续,直到恢复编码数据中的所有 "Stotal”符号为止。应当注意的是,某些符号在编码时不会产生右移位,因此将没有从这些符号中恢复的位。例如,表3示出nBits[X]行中有两个“0”条目。一个或多个这样的符号可以最后被编码以生成编码数据是可能的。因此,即使已经处理了编码数据中的所有位,但是对于当前的恢复数据块,恢复的符号还没有达到"Stotal”,解压缩处理400的实施例可以继续。
使用表3作为解码表502的示例,编码数据可以是b01100,并且第一个状态可以是四。应当注意,解压缩过程中的第一个状态可以是压缩过程中的最后状态或最终状态。因为解压缩过程可以是单独的过程,所以不应将解压缩过程中描述的状态与压缩过程中的状态混淆。第一个状态可以与索引匹配,因此,第一个解码符号可以是Symbol[4],如表 3所示,它是“b”。如表3所示,索引为4,nBits[4]可以为0,newX[4]可以为0。因为 nBits[4]为零,所以没有从编码数据中恢复的位,并且恢复的值可以为零,因此下一个状态X=0+0=0。现在以状态X=0作为第二个索引,第二个解码符号可以是Symbol[0],即表3 所示的“a”。而且,可以从表3分别将nBits[0]和newX[0]设为3和0。现在nBits为3,可以从编码数据中恢复三位。因为解压缩器可以获得有关位顺序和级联顺序的元数据信息,所以解压缩器可以从解码的数据获得b011并将其识别为b110,其原始顺序为十进制 6。因此,下一状态X=0+6=6。现在,以状态X=6作为第三个索引,第三个解码符号可以是Symbol[6],即表3所示的“c”。此外,可以从表3中分别将nBits[6]和newX[6]设为 2和0。在nBits现在为2的情况下,可以从编码数据中恢复编码数据的最后两位b00。
应该注意的是,尽管解压缩器可以从表3中获得nBits[6]和newX[6]并继续计算下一个状态X,但是由于解压缩器已经成功地解码了三个符号“bac”,所以没有必要这样做。因此,在使用解码表502的至少一个实施例中,在压缩处理100期间,可以不需要将用于对第一个符号进行编码的右移位输出到编码数据,因为在解压缩过程400中可能不需要这些位。
在生成解码表504的实施例中,编码数据的最终状态可以与解码表504的索引匹配,与该索引相对应的符号可以是第一个恢复符号。但是,解码表504不具有nBits或 newX信息,因此它们可以在运行时动态地生成。也就是说,使用解码表504的实施例可能需要基于当前状态X从解码表获得当前符号,并动态地确定运行时当前要从编码数据恢复的位数和新状态X。在一个实施例中,可能需要累积出现表bs,并且可以基于出现次数信息(例如,表ls)来生成累积出现表bs。在该实施例中,可以使用符号状态值 (SSV)获得要恢复的位数nBits,例如,nBits=R–floor(lg(SSV)),新状态X可以等于 [(SSV)<<nBits]–L+(编码数据的nBits),其中<<是左移运算符,其值SSV由bs+1+X– 2*bs获得,其中bs和bs+1可以是字母表中当前符号和下一个符号的累积出现,并且*可以是乘法运算符。在一个实施例中,可以在解码期间建立出现次数表bs。在另一个实施例中,可以从元数据获得出现次数表bs。当符号是字母表中的最后一个元素时,可能会有一个特殊的值bs+1设置为L。应当注意,因为bs+1=bs+ls,由公式bs+1+X–2*bs获得的数与公式ls+X–bs相同。也就是说,SSV也等于ls+X–b s
使用表4作为解码表504的示例,编码数据可以是b01100,并且第一个状态可以是四。第一个状态可以与索引匹配,因此,第一个解码符号可以是Symbol[4],如表4所示,它是“b”。如表2所示,对于元素b,累积出现次数bs可以为1,累积出现次数bs+1可以为6,因此SSV=(bs+1+X–2*bs)=(6+4-2*1)=8。nBits可以是R-lg8=0,并且新状态X可以是[8<<0]-8+0=0。现在以状态X=0作为第二个索引,第二个解码符号可以是 Symbol[0],即表4所示的“a”。如表2所示,对于元素a,累积出现次数bs可以为0,累积出现次数bs+1可以为1,因此SSV=(bs+1+X–2*bs)=(1+0-2*0)=1。nBits可以为R- lg1=3。因为解压缩器可以获得有关位顺序和级联顺序的元数据信息,所以解压缩器可以从解码的数据获得b011并将其识别为b110,其原始顺序为十进制6。因此,新状态X可以是[1<<3]-8+b110=6。现在,以状态X=6作为第三个索引,第三个解码符号可以是 Symbol[6],即表3所示的“c”。如表2所示,对于元素c,累积出现次数b s可以为6,并且由于c是字母表的最后一个元素,因此累积出现次数bs+1可以为bn(例如,L=8),因此SSV=(bs+1+X–2*bs)=(8+6-2*6)=2。nBits可以是R-lg2=2,并且新状态X可以是 [2<<2]-8+0=0。在nBits现在为2的情况下,可以从编码数据中恢复编码数据的最后两位b00。类似于使用解码表3的实施例,不需要恢复与右移位相对应的最后两位以对第一个符号进行编码。因此,在使用解码表504的至少一个实施例中,在压缩过程100期间,可以不需要将用于对第一个符号进行编码的右移位输出到编码数据,因为在解压缩过程400中可以不需要这些位。
在某些情况下,例如,在L还原过程或数据输入流已经被另一个压缩过程(例如Lempel-Ziv压缩)压缩之后,数字L可能不是2的幂。在这些情况下,仍然可以生成解码表502,但是用n_Bits替代要恢复的位数,用new_State替代新状态X存储在解码表502 中。解码表504不包含要恢复的位数或新状态X,并且可以与对于L为2的幂的方式相同的方式来生成,但是替代n_Bits和替代new_State仍然可以动态地生成。因此,对于L 不是2的乘方,框408中的解码操作可以从编码数据获得需要恢复的位数并从替代n_Bits 和替代new_State获得下一状态X。
对于使用解码表502的实施例,可以从解码表502获得当前符号的替代n_Bits和替代new_State。在一个实施例中,为了确定n_Bits或n_Bits+1中的哪一个是正确的要从编码数据恢复的位数,可以计算两个X值,一个基于n_Bits,另一个基于n_Bits+1。两个 X值之一可以落入L个状态的间隔中(例如,对于基值M为零的{0,…,L-1}),并且那一个可以是下一个状态X,相应的n_Bits或n_Bits+1可以是从编码数据中恢复的位数。
可以使用如下伪码来表示从编码数据恢复的实际位数以及从存储在表502中的n_Bits和new_State中获得下一状态X的运算,其中“<<”是左移位运算符,“∈”是属于运算符:
Figure DEST_PATH_BDA0002886027420000241
Figure DEST_PATH_BDA0002886027420000251
对于使用解码表504的实施例,替代n_Bits和替代new_State可以在框408的操作中动态生成。首先,当L不是2的幂时,在编码过程和解码过程中都可以将R设置为 ceiling(lg(L))。设置R=ceiling(lg(L))不会影响编码过程。在解码过程中,对于当前状态X,可以将Ls的初始值设置为符号状态值(SSV),该值可以通过bs+1+X–2*bs或 ls+X–bs,获得,其中bs和bs+1可以是字母表中当前符号和下一个符号的累积出现,并且* 可以是乘法运算符。通过执行从0到R的索引“j”的循环,可以获得n_Bits。
在循环内部,可以通过将初始Ls左移循环索引号j,并将获得的左移值加2的j次幂,然后从获得的值中减去1,以获得称为Ls_tmp的临时Ls。即,Ls_tmp=(Ls<<j)+(2^j- 1)。在一个实施例中,在硬件实现中,可以通过将Ls向左移位j位并以最低有效位 (LSB)插入j位1来执行针对(Ls<<j)+(2^j-1)的运算。可以通过每次将循环索引从零递增到R直到Ls_tmp落入间隔{L,…,2L-1)中来获得Ls_tmp。然后,可以将n_Bits设置为“j”,并且可以停止循环。要从编码数据中恢复的位数可以是n_Bits或n_Bits+1。在一个实施例中,为了确定n_Bits或n_Bits+1中的哪一个是正确的要从编码数据恢复的位数,可以计算两个X值,一个基于n_Bits,另一个基于n_Bits+1。两个X值之一可以落入L个状态的间隔中(例如,对于基值M为零的{0,…,L-1}),并且那一个可以是下一个状态X,相应的n_Bits或n_Bits+1可以是从编码数据中恢复的位数。
可以使用如下伪码来表示要从编码数据恢复的位数和下一状态X的运算,其中“<<”是左移位运算符,“ε”是属于运算符,并且“*”是一个乘法运算符:
Figure DEST_PATH_BDA0002886027420000261
因此,执行获得n_Bits并确定n_Bits和下一状态X的操作可以在用于构建解码表502的实施例中在构建解码表502的过程中(例如,在框406中)或用于构建解码表504 的实施例中在解码操作过程中(例如,在框408中)执行。
在框410中,可以从解压缩器输出恢复的符号。在一些实施例中,每个恢复的符号可以在可以被解码之后从解压缩器输出。也就是说,框410不需要等待直到所有符号都已被解码以执行。
因为解压缩过程400可以包括具有循环索引的循环,对于每个符号,循环索引从1开始逐步增加到ls,与没有L还原的解压缩过程400的实施例相比,具有L还原(对于每个符号较小的L)的解压缩过程400的实施例可以花费更少的时间来完成。
在实现解码表502和解码表504的实施例中的解压缩器可以对硬件实现友好。解码表504可以仅需要用于lg(n)位中的每一个的L个条目的存储空间。尽管解码操作可能需要表bs和值bn,但是解压缩器仍可以以紧凑的尺寸实现在IC芯片中,因此一个实施例可以称为超小面积解压缩器。此外,尽管解码表502可以大于解码表504,但是两个表的条目数量仍可以与L成比例,因此具有L还原的实施例与没有具有L还原的实施例相比仍然对硬件更友好。因此,根据本公开的解压缩器实施例可以需要很少的存储空间,并且可以易于在现场可编程门阵列(FPGA)或专用集成电路(ASIC)等中实现。
图6示意性地示出了根据本公开的一个实施例的解压缩器600。解压缩器600包括解包器602、解码表构造器604、解码表存储器606、解码器引擎608和输出缓冲器 610。解压缩器600可以被配置为实施解压缩过程400。解包器602可以被耦合到数据总线,并且被配置为执行框402以接收要解码的编码数据。例如,数据总线可以是耦合到存储设备的总线,并且可以从存储设备接收编码的数据。解包器602可以解包接收到的数据,例如,获得编码数据和与编码数据相关联的任何元数据。元数据可以包括例如字母表、元素ls的出现。在一个实施例中,可以由解包器602获得编码数据中的符号总数的大小"Stotal”,并且可以通过对元素ls的出现求和来获得L。并且在一些实施例中,元数据还可包括但不限于位顺序信息、级联顺序信息或两者。
解压缩的编码数据和元数据可以具有一个副本传递给解码表构造器604,而另一副本传递给解码器引擎608。解码表构造器604可以被配置为执行框406以构建解码表502或504。在使用表504的实施例中,解码表构造器604还可被配置为建立累积出现表bs。解码表存储器606可以是配置为存储由解码表构造器604生成的解码表的缓冲器。
解码器引擎608可以被配置为使用解码表存储器606中的解码表和来自解包器602的编码数据来执行框408中的解码操作。可以将解码的符号放入输出缓冲器610中。
在示例性实施例中,提供了一种方法,该方法可以包括:接收要压缩的输入数据块,为该输入数据块中的不同符号生成出现次数表和累积出现表,对于该输入数据块中的每个符号,基于该出现次数表和该累积出现表,动态获得用于右移当前状态“x”以编码当前符号的移位数,将被右移的位输出到编码数据并获得下一状态“x”,并且从在最终循环中生成的最后状态“x”获得最终状态“X”。
在一个实施例中,可以通过选择编码状态的L个值的范围来选择用于该不同符号的符号状态间隔,其中L是该出现次数表中所有出现次数的总和,每个不同符号的对应符号状态间隔可以是各个不同符号的出现次数范围。
在一个实施例中,该方法可以进一步包括:将初始状态“x”初始化为数字M,其中M是用于编码状态的L个值的范围的基值,其中,该最终状态“X”可以是从最后一个状态“x”减去M获得的。
在一个实施例中,动态获得移位数并获得下一状态“x”可以包括:向右移动状态“x”的值移位数直到该状态“x”的右移值落入当前符号的符号状态间隔内为止,将该移位数记录为nBits,从该累积出现表中获得当前符号的累积出现次数,从该出现次数表中获得当前符号的出现次数,并通过将该当前符号的累积出现次数与该状态“x”的右移值相加,减去该当前符号的出现次数并加M,获得该状态“x”的下一个值。
在一个实施例中,该移位数可以具有从零到ceiling(lg(L))的范围,其中L是该出现次数表中所有出现的总和。
在一个实施例中,可以根据预定的位顺序输出每个循环中的右移位。
在一个实施例中,可以以预定的级联顺序将连续循环中的右移位的集合级联在该编码数据中。
在一个实施例中,该出现次数表可以包含减小的出现次数,并且该累计出现表可以包含基于该减小的出现次数的减小的累积出现次数。
在一个实施例中,可以通过将实际的出现次数除以预定的次数并将结果四舍五入为非零数来获得该减小的出现次数。
在一个实施例中,该方法可以进一步包括保留该最终状态“X”以及编码数据。
在另一个示例性实施例中,提供了一种压缩器,其可以包括:输入接口,被配置为接收要压缩的输入数据块;输入缓冲器,其耦合到该输入接口以存储接收到的要压缩的输入数据块;计算器,其被耦合到输入接口并被配置为生成输入数据块中不同符号的出现次数表,并为输入数据块中的不同符号生成累积出现表;表缓冲器,被配置为存储出现次数表和累积出现表,以及一个编码器引擎,被耦合到表缓冲器和输入缓冲器,并被配置为:对于输入数据块中的每个符号,基于出现次数表和累积出现表,动态获得用于右移当前状态“x”以编码当前符号的移位数,将右移位输出到编码数据并获得下一状态“x”,并从最终循环中生成的最后状态“x”获得最终状态“X”。
在一个实施例中,可以通过选择编码状态的L个值的范围来选择用于该不同符号的符号状态间隔,其中L是该出现次数表中所有出现次数的总和,每个不同符号的对应符号状态间隔可以是各个不同符号的出现次数范围。
在一个实施例中,编码器引擎可以进一步被配置为将初始状态“x”初始化为数字M,其中M是用于编码状态的L个值的范围的基值,其中,该最终状态“X”可以是从最后一个状态“x”减去M获得的。
在一个实施例中,动态地获得移位数并获得下一状态“x”,编码器引擎可以进一步被配置为:向右移动状态“x”的值移位数直到该状态“x”的右移值落入当前符号的符号状态间隔内为止,将该移位数记录为nBits,从该累积出现表中获得当前符号的累积出现次数,从该出现次数表中获得当前符号的出现次数,并通过将该当前符号的累积出现次数与该状态“x”的右移值相加,减去该当前符号的出现次数并加M,获得该状态“x”的下一个值。
在一个实施例中,该移位数可以具有从零到ceiling(lg(L))的范围,其中L是该出现次数表中所有出现的总和。
在一个实施例中,可以根据预定的位顺序输出每个循环中的右移位。
在一个实施例中,可以以预定的级联顺序将连续循环中的右移位的集合级联在该编码数据中。
在一实施例中,该出现次数表可以包含减小的出现次数,并且该累计出现表可以包含基于该减小的出现次数的累积出现次数。
在一个实施例中,可以通过将实际的出现次数除以预定的次数并将结果四舍五入为非零数来获得该减小的出现次数。
在一个实施例中,该编码器引擎可以进一步被配置为保留最终状态“X”以及编码数据。
任何公开的方法和操作可以被实现为存储在一个或多个计算机可读存储介质(例如,非暂时性计算机可读介质,例如,一个或更多个光盘介质,易失性存储组件(例如,动态随机存取存储器(DRAM)或静态随机访问存储器(SRAM)),或非易失性存储组件(例如,硬盘驱动器)上并在设备控制器(例如,ASIC执行的固件)上执行的计算机可执行指令(例如,本文描述的操作的软件代码)。可以将用于实现所公开的技术的任何计算机可执行指令以及在所公开的实施例的实现期间创建和使用的任何数据可以存储在一个或多个计算机可读介质(例如,非暂时性计算机可读介质)上。
尽管本文已经公开了各个方面和实施例,但是其他方面和实施例对于本领域技术人员将是显而易见的。本文所公开的各个方面和实施例是出于说明的目的,而不是旨在进行限制,真实的范围和精神由所附权利要求书指示。

Claims (14)

1.一种数据压缩方法,其特征在于,包括:
接收要压缩的输入数据块;
为所述输入数据块中的不同符号生成出现次数表和累积出现表,所述累积出现表中包括表示当前符号之前的所有符号出现总数的累积出现次数;
对于所述输入数据块中的每个符号,基于所述出现次数表和所述累积出现表,动态获得用于右移当前状态“x”以编码当前符号的移位数,将被右移的位输出到编码数据并获得下一状态“x”;和
从在最终循环中生成的最后状态“x”获得最终状态“X”。
2.根据权利要求1所述的方法,其特征在于,通过选择编码状态的L个值的范围来选择用于所述不同符号的符号状态间隔,其中L是所述出现次数表中所有出现次数的总和,每个不同符号的对应符号状态间隔是各个不同符号的出现次数范围。
3.根据权利要求2所述的方法,其特征在于,还包括:将初始状态“x”初始化为数字M,其中M是用于编码状态的L个值的范围的基值,其中,所述最终状态“X”是从最后一个状态“x”减去M获得的。
4.根据权利要求3所述的方法,其特征在于,动态获得所述移位数并获得所述下一状态“x”,包括:
向右移动状态“x”的值移位数直到所述状态“x”的右移值落入当前符号的符号状态间隔内为止;
将所述移位数记录为nBits;
从所述累积出现表中获得当前符号的累积出现次数;
从所述出现次数表中获得当前符号的出现次数;和
通过将所述当前符号的累积出现次数与所述状态“x”的右移值相加,减去所述当前符号的出现次数并加M,获得所述状态“x”的下一个值。
5.根据权利要求1所述的方法,其特征在于,所述移位数具有从零到对lg(L)向上取整的范围,其中L是所述出现次数表中所有出现的总和。
6.根据权利要求1所述的方法,其特征在于,根据预定的位顺序输出每个循环中的右移位。
7.根据权利要求1所述的方法,其特征在于,以预定的级联顺序将连续循环中的右移位的集合级联在所述编码数据中。
8.根据权利要求1所述的方法,其特征在于,所述出现次数表包含减小的出现次数,并且所述累积出现表包含基于所述减小的出现次数的减小的累积出现次数。
9.根据权利要求8所述的方法,其特征在于,通过将实际的出现次数除以预定的次数并将结果四舍五入为非零数来获得所述减小的出现次数。
10.根据权利要求1所述的方法,其特征在于,还包括:保留所述最终状态“X”以及编码数据。
11.一种压缩器,包括:
输入接口,被配置为接收要压缩的输入数据块;
输入缓冲器,耦合至所述输入接口以储存所接收的待压缩输入数据块;
耦合到所述输入接口的计算器,被配置为:
为所述输入数据块中的不同符号生成一个出现次数表;
为所述输入数据块中的不同符号生成累积出现表,所述累积出现表中包括表示当前符号之前的所有符号出现总数的累积出现次数;
表缓冲器,被配置为存储所述出现次数表和所述累积出现表;
编码器引擎,被耦合到所述表缓冲器和输入缓冲器,并被配置为:
对于所述输入数据块中的每个符号,基于所述出现次数表和所述累积出现表,动态获得用于右移当前状态“x”以编码当前符号的移位数,将右移位输出到编码数据并获得下一状态“x”;和
从在最终循环中生成的最后状态“x”获得最终状态“X”。
12.根据权利要求11所述的压缩器,其特征在于,通过选择编码状态的L个值的范围来选择用于所述不同符号的符号状态间隔,其中L是所述出现次数表中所有出现次数的总和,每个不同符号的对应符号状态间隔是各个不同符号的出现次数范围。
13.根据权利要求12所述的压缩器,其特征在于,所述编码器引擎进一步被配置为将初始状态“x”初始化为数字M,其中M是用于编码状态的L个值的范围的基值,其中,所述最终状态“X”是从最后一个状态“x”减去M获得的。
14.根据权利要求13所述的压缩器,其特征在于,动态获得所述移位数并获得所述下一状态“x”,所述编码器引擎进一步被配置为:
向右移动状态“x”的值移位数直到所述状态“x”的右移值落入当前符号的符号状态间隔内为止;
将所述移位数记录为nBits;
从所述累积出现表中获得当前符号的累积出现次数;
从所述出现次数表中获得当前符号的出现次数;和
通过将所述当前符号的累积出现次数与所述状态“x”的右移值相加,减去所述当前符号的出现次数并加M,获得所述状态“x”的下一个值。
CN202110013408.2A 2020-08-24 2021-01-06 硬件友好的数据压缩方法、压缩器 Active CN112738124B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/000,607 2020-08-24
US17/000,607 US11184023B1 (en) 2020-08-24 2020-08-24 Hardware friendly data compression

Publications (2)

Publication Number Publication Date
CN112738124A CN112738124A (zh) 2021-04-30
CN112738124B true CN112738124B (zh) 2022-11-01

Family

ID=75591385

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110013408.2A Active CN112738124B (zh) 2020-08-24 2021-01-06 硬件友好的数据压缩方法、压缩器

Country Status (2)

Country Link
US (1) US11184023B1 (zh)
CN (1) CN112738124B (zh)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108683603A (zh) * 2018-05-14 2018-10-19 广州经传多赢投资咨询有限公司 一种基于实时流压缩技术的高效二进制传输协议

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4646061A (en) * 1985-03-13 1987-02-24 Racal Data Communications Inc. Data communication with modified Huffman coding
US5796356A (en) * 1995-03-14 1998-08-18 Fujitsu Limited Data compressing apparatus, data restoring apparatus and data compressing/restoring system
US5838691A (en) * 1996-09-30 1998-11-17 Apple Computer, Inc. Codebook-based lossy data compression encoding system
US8456331B2 (en) * 2011-04-15 2013-06-04 Cavium, Inc. System and method of compression and decompression
CN103634273A (zh) * 2012-08-21 2014-03-12 电信科学技术研究院 数据压缩发送及解压缩方法和设备
GB2523348B (en) * 2014-02-20 2016-03-30 Gurulogic Microsystems Oy Encoder, decoder and method
US9385751B2 (en) * 2014-10-07 2016-07-05 Protein Metrics Inc. Enhanced data compression for sparse multidimensional ordered series data
FR3068556A1 (fr) * 2017-06-29 2019-01-04 B<>Com Procede de decodage d'une image, procede de codage, dispositifs, equipement terminal et programmes d'ordinateurs associes
CN107565971B (zh) * 2017-09-07 2020-04-14 华为技术有限公司 一种数据压缩方法及装置
CN108011966B (zh) * 2017-12-14 2021-07-06 广东金赋科技股份有限公司 一种自助终端日志压缩上传的优化方法
US10476518B1 (en) * 2018-12-06 2019-11-12 Nyquist Semiconductor Limited Hardware friendly data compression
CN111030702A (zh) * 2019-12-27 2020-04-17 哈尔滨理工大学 一种文本压缩方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108683603A (zh) * 2018-05-14 2018-10-19 广州经传多赢投资咨询有限公司 一种基于实时流压缩技术的高效二进制传输协议

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于数据相关性的测试数据压缩方法;王志杰等;《现代电子技术》;20090815(第16期);全文 *

Also Published As

Publication number Publication date
US11184023B1 (en) 2021-11-23
CN112738124A (zh) 2021-04-30

Similar Documents

Publication Publication Date Title
CN112994703B (zh) 硬件友好的数据解压缩
CN108768403B (zh) 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器
CN106560010B (zh) Vlsi高效霍夫曼编码设备和方法
US7965207B2 (en) Variable length integer encoding system and method
KR101092106B1 (ko) 데이터 압축
CN107836083B (zh) 用于语义值数据压缩和解压缩的方法、设备和系统
US10938410B2 (en) Hardware friendly data compression
US7671767B2 (en) LIFO radix coder for electrical computers and digital data processing systems
US7907068B2 (en) FIFO radix coder for electrical computers and digital data processing systems
JPH0253329A (ja) 圧縮符号化方法及び復号方法
US20090245382A1 (en) Method and apparatus for data compression and decompression
CN113346913B (zh) 使用减量的出现次数的数据压缩
CN112738124B (zh) 硬件友好的数据压缩方法、压缩器
CN113315523B (zh) 硬件友好的数据解压缩
US8018359B2 (en) Conversion of bit lengths into codes
JPH03204235A (ja) 圧縮データの復号方法
US7683809B2 (en) Advanced lossless bit coding
CN116209983A (zh) 将数据认证用于数据压缩的方法
Safieh et al. Address space partitioning for the parallel dictionary LZW data compression algorithm
Doshi et al. “Quad-Byte Transformation as a Pre-processing to Arithmetic Coding
Rajab et al. Source coding schemes for flash memories
JP2003273746A (ja) 可変長符号復号装置
CN117917857A (zh) 非迭代熵编码
TW202418807A (zh) 非疊代的熵編碼
KR20210012580A (ko) 이진데이터의 압축 방법 및 장치

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
CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: Room 601-606, No. 40, Lane 565, Shengxia Road, China (Shanghai) Pilot Free Trade Zone, Pudong New Area, Shanghai, 201210 (nominal floor 6, actual floor 5)

Patentee after: Yingren Technology Co.,Ltd.

Address before: 2 / F, No.1, Lane 500, shengxia Road, China (Shanghai) pilot Free Trade Zone, Pudong New Area, Shanghai 201210

Patentee before: Yingren Technology (Shanghai) Co.,Ltd.