一种基于熵编码的编解码方法、系统、存储介质及设备与流程

文档序号:32418218发布日期:2022-12-02 22:33阅读:18来源:国知局
一种基于熵编码的编解码方法、系统、存储介质及设备与流程

1.本发明涉及编解码技术领域,尤其涉及一种基于熵编码的编解码方法、系统、存储介质及设备。


背景技术:

2.随着互联网、物联网等技术高速发展,人类社会已经进入“万物互联”时代。云计算、大数据、人工智能、区块链等前沿技术的迅速发展,催生了数据爆发式增长。在产业数字化转型的持续发展中,数据成为关键生产要素。面对持续增长的海量数据,数据压缩成为减轻服务器存储负担、降低存储成本的最有效方法。
3.数据压缩在不丢失有用信息的前提下,通过缩减数据量以减少存储空间,可以提高传输、存储和处理效率。无损数据压缩一般通过两种方法来实现:一种是通过字典的方式实现压缩的算法,包括lz系列算法,这类算法能实现重复数据的搜索功能;一种是基于频率统计模型的熵编码算法,如huffman(哈夫曼)编码、算术编码、非对称数字系统(ans)等,这类算法的核心思想是依照符号出现频率分配码长,符号频率越大,码长就越短,可以用如下两个公式描述:
4.p(1)≤p(2)≤p(3)

≤p(n-1)≤p(n)
5.l(1)≥l(2)≥l(3)

≥l(n-1)≥l(n)
6.为了实现更高的压缩率,当前最常见数据压缩算法都会采用上述2种方法进行混合压缩。所有的压缩算法都需要定期(分块)对熵编码的概率分布进行更新并封装编码。deflate协议在封装哈夫曼编码时,虽然仅仅编码封装每个符号哈夫曼码长,其实码长等效于概率为2的负幂次方。对于追求更高压缩比的熵编码算法,例如算术编码和非对称数字系统,两者都追求更精确的概率,以接近于信源的信息熵。
7.数据压缩算法通常基于分块数据进行概率统计,为了能使解码端准确解码恢复压缩数据,需要将编码器统计得到的概率分布编码封装进压缩数据。解码端通过解析得到与编码端相同的概率分布,进而准确恢复原始数据。
8.当前大多数压缩格式采用等长编码的方法,依次封装符号的概率,封装时每个概率采用统一的编码码长n。
9.例如:如下概率分布:{8,17,4,5,1,1,2,3,12,40,37,5,2,19,18,17,17,1,13,5,2,1,24,1,1},其概率总和为256,因此每个概率编码码长n=8,那么封装这个概率集合需要的总码长为200(即25*8)bit。
10.等长编码之所以采用概率总和对应的位宽n,是因为单个概率可能的取值较大,并且解码端无法知道概率的取值,只能以最大的位宽解码概率。然而,概率分布的封装是依次对概率进行序列封装,因此编码完成一个概率后,后续的概率取值范围(极大值)相应会减小。上例中,当编码封装完成第一个概率“8”时,第二概率的取值范围将变为[0,248]。需要说明的是这个概率的取值范围对于解码端是可感知的。
[0011]
基于此,编码完成一个概率后,不仅可以计算后续该概率的可能取值范围(极大
值),而且可以适时更新后续概率的位宽。例如当编码完37后,后续概率的取值范围更新为[0,126],此时可以将后续概率的编码位宽调整为
[0012]
将编码流程中尚未编码的概率总和叫做剩余概率。由剩余概率可以计算得到一个编码位宽,由信息论可知,最佳码长为显然前者不小于后者,存在一定的信息冗余。为了解决此项信息冗余,需要一种码长变化的,尤其是码长可以缩小的编码方式。


技术实现要素:

[0013]
有鉴于此,本发明的目的在于提出一种基于熵编码的编解码方法、系统、存储介质及设备,用以解决现有技术中在熵编码中采用等长编码的方式会造成信息冗余的问题。
[0014]
基于上述目的,本发明提供了一种基于熵编码的编解码方法,包括以下步骤:
[0015]
响应于待编码符号中有部分符号已完成编码,将未完成编码的剩余符号对应的概率的总和作为剩余概率;
[0016]
响应于当前符号预备进行编码,计算当前符号的当前概率对应的码长,并基于码长和剩余概率计算阈值;
[0017]
基于阈值对码长进行修正,以得到新码长;
[0018]
基于当前概率和阈值得到当前码字,并对当前码字进行解码。
[0019]
在一些实施例中,基于阈值对码长进行修正,以得到新码长包括:
[0020]
判断当前概率是否小于阈值;
[0021]
响应于当前概率小于阈值,将码长减一以得到修正后的新码长。
[0022]
在一些实施例中,基于当前概率和阈值得到当前码字包括:
[0023]
判断当前概率是否小于阈值;
[0024]
响应于当前概率小于阈值,将当前概率的值作为当前码字;或者
[0025]
响应于当前概率大于等于阈值,计算当前概率的值与阈值的和,以作为当前码字。
[0026]
在一些实施例中,计算当前符号的当前概率对应的码长,并基于码长和剩余概率计算阈值包括:
[0027]
计算以2为底的剩余概率的对数,得到码长;
[0028]
以码长作为指数,2作为底数,进行幂运算,得到幂运算结果,并计算幂运算结果与剩余概率的差值,得到阈值。
[0029]
在一些实施例中,对当前码字进行解码包括:
[0030]
对当前码字进行解析,得到解码码字,其中,解析的比特位数等于新码长;
[0031]
判断解码码字的数值是否小于阈值,并基于判断结果确定解析的比特位数是否增加一位,且基于判断结果确定当前码字解码得到的符号所对应的概率值。
[0032]
在一些实施例中,基于判断结果确定解析的比特位数是否增加一位包括:
[0033]
响应于解码码字的数值小于阈值,确定解析的比特位数无需增加;
[0034]
响应于解码码字的数值大于等于阈值,确定解析的比特位数需增加一位。
[0035]
在一些实施例中,基于判断结果确定当前码字解码得到的符号所对应的概率值包括:
[0036]
响应于解码码字的数值小于阈值,将解码码字的数值作为解码得到的符号所对应
的概率值;
[0037]
响应于解码码字的数值大于等于阈值,基于解码码字的数值、阈值以及从码流中读取的比特位数得到解码得到的符号所对应的概率值。
[0038]
本发明的另一方面,还提供了一种基于熵编码的编解码系统,包括:
[0039]
剩余概率模块,配置用于响应于待编码符号中有部分符号已完成编码,将未完成编码的剩余符号对应的概率的总和作为剩余概率;
[0040]
计算模块,配置用于响应于当前符号预备进行编码,计算当前符号的当前概率对应的码长,并基于码长和剩余概率计算阈值;
[0041]
码长修正模块,配置用于基于阈值对码长进行修正,以得到新码长;以及
[0042]
解码模块,配置用于基于当前概率和阈值得到当前码字,并对当前码字进行解码。
[0043]
本发明的又一方面,还提供了一种计算机可读存储介质,存储有计算机程序指令,该计算机程序指令被处理器执行时实现上述方法。
[0044]
本发明的再一方面,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该计算机程序被处理器执行时执行上述方法。
[0045]
本发明至少具有以下有益技术效果:
[0046]
本发明通过将未完成编码的剩余符号对应的概率的总和作为剩余概率,并在当前符号预备进行编码时,计算当前符号的当前概率对应的码长,并基于码长和剩余概率计算阈值,并基于阈值对码长进行修正,以得到新码长,然后基于当前概率和阈值得到当前码字,并对当前码字进行解码,从而解决了现有技术中在熵编码中采用等长编码的方式会造成信息冗余的问题,缩减了编码所需的位宽,进而缩减了数据量,有利于节省存储空间。
附图说明
[0047]
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
[0048]
图1为根据本发明实施例提供的基于熵编码的编解码方法的示意图;
[0049]
图2为根据本发明实施例提供的基于熵编码的编解码系统的示意图;
[0050]
图3为根据本发明实施例提供的实现基于熵编码的编解码方法的计算机可读存储介质的示意图;
[0051]
图4为根据本发明实施例提供的执行基于熵编码的编解码方法的计算机设备的硬件结构示意图。
具体实施方式
[0052]
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。
[0053]
需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称的非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定。此外,术语“包括”和“具有”以及他们的任何变形,意图在
于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备固有的其他步骤或单元。
[0054]
基于上述目的,本发明实施例的第一个方面,提出了一种基于熵编码的编解码方法的实施例。图1示出的是本发明提供的基于熵编码的编解码方法的实施例的示意图。如图1所示,本发明实施例包括如下步骤:
[0055]
步骤s10、响应于待编码符号中有部分符号已完成编码,将未完成编码的剩余符号对应的概率的总和作为剩余概率;
[0056]
步骤s20、响应于当前符号预备进行编码,计算当前符号的当前概率对应的码长,并基于码长和剩余概率计算阈值;
[0057]
步骤s30、基于阈值对码长进行修正,以得到新码长;
[0058]
步骤s40、基于当前概率和阈值得到当前码字,并对当前码字进行解码。
[0059]
本发明实施例通过将未完成编码的剩余符号对应的概率的总和作为剩余概率,并在当前符号预备进行编码时,计算当前符号的当前概率对应的码长,并基于码长和剩余概率计算阈值,并基于阈值对码长进行修正,以得到新码长,然后基于当前概率和阈值得到当前码字,并对当前码字进行解码,从而解决了现有技术中在熵编码中采用等长编码的方式会造成信息冗余的问题,缩减了编码所需的位宽,进而缩减了数据量,有利于节省存储空间。
[0060]
在一些实施例中,基于阈值对码长进行修正,以得到新码长包括:判断当前概率是否小于阈值;响应于当前概率小于阈值,将码长减一以得到修正后的新码长。
[0061]
在一些实施例中,基于当前概率和阈值得到当前码字包括:判断当前概率是否小于阈值;响应于当前概率小于阈值,将当前概率的值作为当前码字;或者响应于当前概率大于等于阈值,计算当前概率的值与阈值的和,以作为当前码字。
[0062]
在一些实施例中,计算当前符号的当前概率对应的码长,并基于码长和剩余概率计算阈值包括:计算以2为底的剩余概率的对数,得到码长;以码长作为指数,2作为底数,进行幂运算,得到幂运算结果,并计算幂运算结果与剩余概率的差值,得到阈值。
[0063]
在一些实施例中,对当前码字进行解码包括:对当前码字进行解析,得到解码码字,其中,解析的比特位数等于新码长;判断解码码字的数值是否小于阈值,并基于判断结果确定解析的比特位数是否增加一位,且基于判断结果确定当前码字解码得到的符号所对应的概率值。
[0064]
在一些实施例中,基于判断结果确定解析的比特位数是否增加一位包括:响应于解码码字的数值小于阈值,确定解析的比特位数无需增加;响应于解码码字的数值大于等于阈值,确定解析的比特位数需增加一位。
[0065]
在一些实施例中,基于判断结果确定当前码字解码得到的符号所对应的概率值包括:响应于解码码字的数值小于阈值,将解码码字的数值作为解码得到的符号所对应的概率值;响应于解码码字的数值大于等于阈值,基于解码码字的数值、阈值以及从码流中读取的比特位数得到解码得到的符号所对应的概率值。
[0066]
本发明的基于熵编码的编解码方法的具体实施例如下:
[0067]
由于每个概率的编码位宽由剩余概率的信息量决定,假设剩余概率为p,对应的编
码码长为l,则
[0068]
l和p之间满足如下关系:2
l
≥p,后续概率数值范围是[1,p],但是码长为l的数字的取值范围是[1,2
l
],显然后者的范围大于前者,存在数字冗余。为了解决这个问题,最简单设想:将区间[1,p]划分为两部分,一部分的编码码长(码长表示编码符号所需的位宽)为l,另一部分的码长为l-1。如果这个设想成立,显然就找到了一种更高效的编码方案。为了给这个设想构建一个可行的编码方案,需要考虑并解决如下问题:
[0069]
1.两种码长各自对应概率取值范围;
[0070]
2.对于单个可能的概率,码长与码字如何分配;
[0071]
3.由于解码端对于码长是不可知的,只能感知码字,因此解码端如何确定概率的码长。
[0072]
关于确定两种码长对应符号的数目的计算,在此把短码长(l-1)对应数目为num1,较长码长(l)对应的数目num2。显然num1与num2满足如下关系:
[0073]
num1+num2=p
ꢀꢀꢀꢀ
(1)
[0074]
于是要想求解num1与num2还需要找到另一种关系:码长l的码字总空间(码字总数)为2
l
,如果单个短码长(l-1)映射至码长l的空间,可以对应两个码字。于是num1与num2存在如下关系:2*num1+num2=2
l

[0075]
联立可得如下方程组:
[0076][0077]
求解以上方程组,可以得出如下解:
[0078][0079]
每个符号码长及码字分配:
[0080]
经过上述计算,已经得出两种码长对应符号的总数目:num1以及num2,本步需要确定每个符号的码长及码字。可以采用如下做法:较小的符号分配较小码长(l-1),较大符号分配较长码长(l),如下式所示:
[0081][0082]
关于码字分配,一般变长编码采用“连片”的分配方案,即码长相同的符号的码字同属一个区间。对于此处的“两种码长”的情形,存在两种可能的方案:
[0083]
a.短码长对应码字区间基值(基值表示数值区间的最小值/基准值)较小,较长码长的对应码字区间基值较大。如公式(5)所示
[0084]
[0085]
其中,code是指编码封装后的码字;s是指符号(symbol),也指概率值;两者之间,可以看做是对应关系:编码端把s变换后得到code(s),解码端把code(s)变换后得到s。
[0086]
b.短码长的对应码字区间基值较大,较长码长的对应码字区间基值较小。如公式(6)所示:
[0087][0088]
对比(5)与(6)所示的两种方案,可以发现(5)所述的方案,短码长区间的符号的码字等于符号本身,既利于编码端码字计算,又利于解码端码字解码。因此本实施例中采用(5)所述的码字分配方案。
[0089]
关于解码端码长的确定:由于解码端对于码长是不可知的,只能感知码字,因此只能根据码字确定码长以及符号。编码端与解码端共享一个符号集合{s},解码端对于{s}的种类数目n是可知的,因此解码端对于num1、num2也是感知的。公式(5)所对应解码方案如下:
[0090]
首先读取一个(l-1)bits的二级制code,如果code《num1,那么code就是最终解码结果,即码长为(l-1);
[0091]
如果code≥num1,需要再额外读取1bits,再进位计算最终的解码结果,码长为l。
[0092][0093]
其中,read表示从码流中读取数据,read_bits(1)表示读取1bit数据。
[0094]
在熵编码算法中,概率分布具有如下特点:
[0095]
1.概率总数有限为2n,其中n值决定概率的精度,n值越大,概率的精度越高;
[0096]
2.对于单个符号的概率而言,其可能的取值范围较大,极限范围fps∈[1,2n),经验取值大致为fps∈[1,2
n-2
];
[0097]
3.数据总个数有限,与具体的压缩格式协议相关,通常取值为20~50。
[0098]
基于以上内容,本实施例设计一种码长可变的编码方案,尽量减小码长,从而高效对概率分布实现编码及封装。流程如下:
[0099]
1)计算(更新)剩余概率,即后续待编码概率值的总和:
[0100][0101]
2)计算(更新)当前概率对应编码位宽:bit为较长的码长。
[0102]
3)计算阈值thresh,计算方法与上述公式(3)的num1计算方法一样:thresh=2
bit-p
res
[0103]
4)编码位宽修正,得到新码长,同上述公式(4),具体如下:
[0104][0105]
5)二进制原码编码当前概率值,编码的码字公式同上述公式(5),具体如下:
[0106][0107]
伪代码如下:
[0108][0109][0110]
以概率分布:{8,17,4,5,1,1,2,3,12,40,37,5,2,19,18,17,17,1,13,5,2,1,24,1,1}为例,其概率总和为256。该概率分布中每个概率的编码结果如下表1所示:
[0111]
表1各概率编码结果表
[0112]
[0113][0114]
本实施例的编码方案对应的解码流程如下:
[0115]
1)计算(更新)剩余概率,即后续待编码概率值的总和p
res

[0116]
2)由剩余概率计算确定基准码长bit,
[0117]
3)阈值thresh计算,thresh=2
bit-p
res

[0118]
4)先从码流中解析(bit-1)位,得到一个二进制code;
[0119]
5)根据code取值大小,决定是否再需要额外解析一个bit:
[0120]
code跟thresh比较大小,然后决定是否再读取1bit:
[0121]
若code《thresh,不需要再读取1bit,且概率值为fps=code;
[0122]
若code》=thresh,还需要额外读取1bit,且概率值为fps=2*code+read_bit(1)-thresh。
[0123]
本实施例中25个概率的编码码长及码字见表1的最后两列,将每个概率编码码长相加,得出概率分布封装码长总和为147bit(即8x2+7x11+6x4+5x4+4x2+2)。与等长编码(200bit)相比,显然本实施例优势明显。
[0124]
本发明实施例的第二个方面,还提供了一种基于熵编码的编解码系统。图2示出的是本发明提供的基于熵编码的编解码系统的实施例的示意图。如图2所示,一种基于熵编码
sdram)、增强sdram(esdram)、同步链路dram(sldram)、以及直接rambus ram(drram)。所公开的方面的存储设备意在包括但不限于这些和其它合适类型的存储器。
[0132]
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现的功能,但是这种实现决定不应被解释为导致脱离本发明实施例公开的范围。
[0133]
以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。
[0134]
应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。
[0135]
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1