一种数据压缩的方法、装置、终端及计算机可读存储介质与流程

文档序号:16380202发布日期:2018-12-22 09:24阅读:181来源:国知局
技术简介:
本专利针对传统数据压缩算法在低功耗设备中计算复杂度高、实时性差的问题,提出一种结合整数小波变换与Huffman编码的动态压缩方法。通过设定波动阈值,对小波系数进行分类处理:高频突变数据直接存储,低频平稳数据采用Huffman编码压缩,兼顾压缩效率与计算开销,适用于可穿戴设备等资源受限场景。
关键词:数据压缩,小波变换

本申请涉及数据处理技术领域,特别涉及一种数据压缩的方法、装置、终端及计算机可读存储介质。

背景技术

目前,数据压缩算法大多采用熵编码的原理及其变种,例如霍夫曼编码、香农编码、算术压缩算法。或者采用重复结构压缩的算法,例如lz77压缩算法。其中,采用熵编码原理的压缩算法需要对数据进行统计以及构造字典;采用重复结构压缩的算法由于其逻辑复杂,其对应的空间复杂度高。其中,熵编码即编码过程中按熵原理不丢失任何信息的编码。

可以看到,上述各类压缩方法虽然压缩效果比较好,但是它们对于处理器的计算性能要求很高,因此它们绝大多数被用于pc、服务器、智能手机、相机等处理器性能较强的系统中。对于只存在微控制器的设备中,由于微控制器计算能力较弱、内存空间极其有限,所以无法执行上述压缩算法。



技术实现要素:

本申请的目的是提供一种数据压缩的方法、装置、终端及计算机可读存储介质,能够在超低运算能力系统下实现数据压缩。

为解决上述技术问题,本申请提供一种数据压缩的方法,所述方法包括:

对当前读入的2n个待压缩数据进行整数小波变换,得到小波系数;

判断所述小波系数是否大于波动阈值;

若大于,则将所述小波系数添加到压缩包尾部,并在编码标记字节串中对应各位均写入第一预设数值;

若不大于,则将所述小波系数对应的霍夫曼hofmann编码添加到所述压缩包尾部,并在所述编码标记字节串中对应各位均写入第二预设数值。

可选的,在编码标记字节串中对应各位均写入第一预设数值,包括:

根据所述压缩包的字节长度更新编码标记字节串长度以及索引位,并根据更新后的编码标记字节串长度以及索引位在所述编码标记字节串中对应各位均写入所述第一预设数值;

在所述编码标记字节串中对应各位均写入第二预设数值,包括:

根据所述压缩包的字节长度更新编码标记字节串长度以及索引位,并根据更新后的编码标记字节串长度以及索引位在所述编码标记字节串中对应各位均写入所述第二预设数值。

可选的,对当前读入的2n个待压缩数据进行整数小波变换,得到小波系数之前,还包括:

初始化压缩头文件;其中,所述压缩头文件包含存储在rom中的霍夫曼hofmann树以及所述编码标记字节串,存储在内存中的所述编码标记字节串长度以及所述索引位。

可选的,初始化压缩头文件之前,还包括:

添加数据压缩任务,并将所述数据压缩任务的优先级设置为最低。

可选的,所述判断所述小波系数是否大于波动阈值之前,所述方法还包括:

获取预设数量的待压缩样本数据;

确定所述待压缩样本数据的最大值和最小值的差值;

选取所述差值的预设倍数作为所述波动阈值。

本申请还公开一种数据压缩的装置,包括:

小波变换模块,用于对当前读入的2n个待压缩数据进行整数小波变换,得到小波系数;

判断模块,用于判断所述小波系数是否大于波动阈值;

第一执行模块,用于若大于所述波动阈值,则将所述小波系数添加到压缩包尾部,并在编码标记字节串中对应各位均写入第一预设数值;

第二执行模块,用于若不大于所述波动阈值,则将所述小波系数对应的霍夫曼hofmann编码添加到所述压缩包尾部,并在所述编码标记字节串中对应各位均写入第二预设数值。

可选的,所述装置还包括:

初始化模块,用于初始化压缩头文件;其中,所述压缩头文件包含存储在rom中的霍夫曼hofmann树以及所述编码标记字节串,存储在内存中的所述编码标记字节串长度以及所述索引位。

可选的,所述装置还包括:

波动阈值确定模块,用于获取预设数量的待压缩样本数据;确定所述待压缩样本数据的最大值和最小值的差值;选取所述差值的预设倍数作为所述波动阈值。

本申请还公开一种终端,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上述所述数据压缩的方法的步骤。本申请还公开一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述所述数据压缩的方法的步骤。

本申请所提供的数据压缩的方法,包括:对当前读入的2n个待压缩数据进行整数小波变换,得到小波系数;判断小波系数是否大于波动阈值;若大于,则将小波系数添加到压缩包尾部,并在编码标记字节串中对应各位均写入第一预设数值;若不大于,则将小波系数对应的hofmann编码添加到压缩包尾部,并在编码标记字节串中对应各位均写入第二预设数值。

可见,该方法通过hofmann编码和小波变换相结合的方式降低计算复杂度(其中小波变换和hofmann编码计算复杂度都较小),实现在超低运算能力系统下的数据压缩;且通过波动阈值将待压缩数据区分对待,从而提高压缩比;本申请还提供了数据压缩的装置、终端及计算机可读存储介质,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例所提供的数据压缩的方法的流程图;

图2为本申请实施例所提供的数据压缩的装置的结构框图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

现有技术中无论是采用熵编码原理进行数据压缩的方法还是采用重复结构压缩的方法,其对应的计算复杂度都很高,因此这些方法都只能应用在性能很强的处理器中。而面对仅具有微处理器的设备时则不能实现上述压缩算法。本实施例提供的数据压缩方法具有很低的计算复杂度同时具有较高的压缩比,能够实现在超低运算能力系统下进行数据压缩。具体请参考图1,图1为本申请实施例所提供的数据压缩的方法的流程图;该方法可以包括:

s100、对当前读入的2n个待压缩数据进行整数小波变换,得到小波系数。

本实施例并不对待压缩数据的种类进行限定,例如可以是运动数据,心电数据,图像数据等。为了提高数据压缩比,优选的,本实施例可以选取波动性较小的数据。即当需要进行压缩的数据波动性小于阈值,则将其作为待压缩数据。可以理解为数据中小幅度变化的量比较多,大幅度变化的量比较小。例如心率传感器采集的心率数值,在一个区间内会存在小幅度波动,但是很少会出现在该区间外的心率数值。即本实施例针对这样的数据(如传感器数据)具有很小的压缩率。

具体的,该步骤的主要目的是对当前获取的待压缩数据进行整数小波变换得到小波系数。即本实施例在对待压缩数据进行压缩时,需要依据待压缩数据的数量,分批次对待压缩数据进行数据压缩。例如针对待压缩数据依照信号来源,顺次读入的2n个待压缩数据进行整数小波变换(即每次都读入2n个待压缩数据)。该步骤就是对当前读入的2n个待压缩数据进行整数小波变换。本实施例中并不对n的数值进行限定,可以根据硬件计算能力进行确定。由于微处理器的计算能力有限,若n的取值过大则计算复杂度会提高,会影响在超低运算能力系统下进行数据压缩的效果;若n的范围太小的话,待压缩数据计算次数会增加。因此为了保证计算效果,优选的,本实施例中n的范围可以是8到10之间。进一步,当硬件处理能力较低时,为了减少数据对于处理器内存的占用,可以直接从rom中读入当前的2n个待压缩数据进行整数小波变换。当确定当前得到的小波系数全部处理完后(即当前得到的小波系数全部执行完后续操作),可以按照顺序读入下一个2n个待压缩数据进行整数小波变换。

其中,小波系数就是小波基函数与原信号相似的系数。小波变换计算量很小。本实施例并不对具体的整数小波变换的过程进行限定,具体可以参考现有技术中的整数小波变换的计算过程。

s110、判断小波系数是否大于波动阈值。

其中,波动阈值用于对待压缩数据进行区分,根据区分结果执行不同的压缩动作。当小波系数大于波动阈值则该小波系数对应的待压缩数据不需要进行编码(即不需要进行hofmann编码),当小波系数不大于波动阈值则该小波系数对应的待压缩数据需要进行编码(即需要进行hofmann编码)。因此波动阈值与待压缩数据的压缩比相关。

具体的,本实施例中并不对波动阈值的具体数值进行限定。例如用户可以根据待压缩数据的波动特点以及经验进行设定波动阈值;用户也可以通过对待压缩数据对应的样本数据(可以称之为待压缩样本数据)的波动性进行计算得到波动阈值。

进一步,为了提高压缩比,优选的,本实施例中波动阈值的确定方法可以包括:

获取预设数量的待压缩样本数据;

确定待压缩样本数据的最大值和最小值的差值;

选取差值的预设倍数作为波动阈值。

具体的,本实施例并不对预设数量的数值进行限定。一般情况下预设数量越大计算得到的波动阈值对应的压缩比越高。用户可以根据实际待压缩样本数据的种类确定对应的预设数量的数值。本实施例也不对预设倍数的具体数值进行限定,一般情况下,预设倍数为小于1的数值。例如预设倍数的数值为0.1。

本实施例中为了提高计算效率,步骤s110至步骤s130可以在得到一个小波系数后就执行一次,直到当前2n个待压缩数据得到的小波系数全部执行完步骤s110至步骤s130后,即可再次执行步骤s100。

s120、若大于,则将小波系数添加到压缩包尾部,并在编码标记字节串中对应各位均写入第一预设数值;其中,编码标记字节串中位与压缩包中字节串顺次对应,第一预设数值表示该位对应的压缩包中字节串为未编码的数据。

s130、若不大于,则将小波系数对应的霍夫曼hofmann编码添加到压缩包尾部,并在编码标记字节串中对应各位均写入第二预设数值;其中,第二预设数值表示该位对应的压缩包中字节串为编码后的数据。

本实施例中小波系数对应的hofmann编码可以通过hofmann数中获取,即从hofmann数中查找到小波系数对应的hofmann编码。其中,hofmann编码不需要大的模型,也不需要进行迭代计算等是一种计算量很小的算法。其中,hofmann树(霍夫曼树)是带权路径长度最短的树,权值较大的结点离根较近。hofmann树的设置可以根据波动阈值以及待压缩数据的种类进行确定。本实施例对此并不进行限定。

本实施例中当小波系数大于波动阈值,则说明其对应的数据发生了突变,这样的数据出现的频率很低,因此对应的hofmann编码会很长,因此为了提高计算效率,减少计算复杂度,本实施例在这种情况下,可以直接将小波系数添加到压缩包尾部,不需要对其进行hofmann编码。当小波系数不大于波动阈值,则说明其对应的数据很稳定,这样的数据出现的频率很高,因此对应的hofmann编码会很短,因此为了在计算复杂度很小的情况下提高压缩比,本实施例在这种情况下,可以将小波系数对应的hofmann编码添加到压缩包尾部,此时需要获取其对应的hofmann编码。

其中,本实施例并不对第一预设数值和第二预设数值的具体数值进行限定,只要可以通过编码标记字节串中每个位上记录的数值确定该位对应的压缩包中字节串是否进行编码(即hofmann编码)即可。例如,当编码标记字节串中某一个位上记录的数值为第一预设数值,则确定该位对应的压缩包中字节串为未进行编码(即hofmann编码)的数据。当编码标记字节串中某一个位上记录的数值为第二预设数值,则确定该位对应的压缩包中字节串为进行编码(即hofmann编码)后的数据。

进一步,为了提高写入效率,并且尽可能减少对硬件存储资源的占用。优选的,本实施例可以通过二进制编码标记字节串(即01串)进行记录,具体的,第一预设数值为1,第二预设数值为0,或者是第一预设数值为0,第二预设数值为1。这样就可以得到一个只有0和1的编码标记字节串。

具体的,本实施例中编码标记字节串中的位与压缩包中字节串顺次对应。即编码标记字节串中的一个位对应于压缩包中的一个字节串。例如压缩包中的第一个字节串对应于编码标记字节串中的第一个位。这样用户在进行解压缩时可以确定编码标记字节串中的每个位对应压缩包中的具体哪个字节串。

本实施例并不限定具体如何将编码标记字节串中位与压缩包中字节串顺次对应的方式。只要能够实现编码标记字节串中位与压缩包中字节串顺次对应记录即可。例如可以通过先确定当前对压缩包加入数据后对应的字节长度变化数n(如将当前压缩包数据长度减去前一次的压缩包数据长度得到的差值再除以8得到压缩包的字节长度变化数n),再将编码标记字节串在上次记录位置处往后增加n个位,并在增加的每个位上记录对应的数值(第一预设数值或第二预设数值)。或者是根据当前的压缩包数据长度更新编码标记字节串长度(用于记录编码标记字节串的当前长度)以及索引位(表示压缩包中最后一个字节用到第几位),其中,对应的更新方式可以是利用压缩包数据长度除以8得到的整数部分为编码标记字节串中的位数(即编码标记字节串中第几位),余数为索引位数值;并根据更新后的(即当前的)编码标记字节串长度以及索引位可以确定当前需要在编码标记字节串中记录的位的位置,然后再该位置上记录对应的数值(第一预设数值或第二预设数值)。

优选的,为了提高解压缩的可靠性,本实施例中在编码标记字节串中对应各位均写入第一预设数值可以包括:

根据压缩包的字节长度更新编码标记字节串长度以及索引位,并根据更新后的编码标记字节串长度以及索引位在编码标记字节串中对应各位均写入第一预设数值;

在编码标记字节串中对应各位均写入第二预设数值可以包括:

根据压缩包的字节长度更新编码标记字节串长度以及索引位,并根据更新后的编码标记字节串长度以及索引位在编码标记字节串中对应各位均写入第二预设数值。

具体的,根据更新后的编码标记字节串长度以及索引位确定在编码标记字节串中需要写入数值的位的具体位置,然后在该位置中写入所需数值(即第一预设数值或第二预设数值)。其中,当一个字节串具有八位时,索引位为0至7的索引,第0位为最低位,第7位为最高位。

基于上述技术方案,本申请实施例提供的一种数据压缩的方法,该方法通过hofmann编码和小波变换相结合的方式降低计算复杂度,实现在超低运算能力系统下的数据压缩;且通过波动阈值将待压缩数据区分对待,从而提高压缩比。

进一步,在进行数据压缩前需要对压缩头文件进行初始化,例如获取初始的hofmann树以及编码标记字节串。本实施例并不对具体的初始化压缩头文件的方式进行限定,也不对压缩头文件中的内容进行限定。用户可以根据实际需要进行压缩头文件内容的确定并进行对应的初始化。基于上述实施例,本实施例中为了进一步提高硬件资源的利用率,当压缩头文件中包含hofmann树、编码标记字节串、编码标记字节串长度以及索引位时,优选的,将压缩头文件中包含的hofmann树以及编码标记字节串存储在rom中,将编码标记字节串长度以及索引位存储在内存中。

其中,rom是只读存储器(read-onlymemory)的简称,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中,并且资料不会因为电源关闭而消失。内存(memory)也被称为内存储器,其作用是用于暂时存放cpu中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,cpu就会把需要运算的数据调到内存中进行运算,当运算完成后cpu再将结果传送出来,内存的运行也决定了计算机的稳定运行。

具体的,hofmann树以及编码标记字节串非常重要,且hofmann树基本不需发生变化,因此hofmann树以及编码标记字节串放置在rom中,而编码标记字节串长度以及索引位在运算的过程中需要经常更新使用,因此将编码标记字节串长度以及索引位放置在运算速度更高的内存中。其中,编码标记字节串长度以及索引位可以通过两个寄存器实现。

进一步,当本实施例中的数据压缩的方法应用在超低运算能力系统时,为了保证超低运算能力系统的正常运行,本实施例中可以在超低运算能力系统中添加数据压缩任务,并将数据压缩任务的优先级设置为最低。

具体的,首先超低运算能力系统中芯片(如微处理器)是低功耗,计算能力较差的芯片,而超低运算能力系统中优先级为高的内容又比较多,数据压缩相对来说并不紧急,因此可以将其设置为优先级最低。进一步,由于在执行数据压缩时,需要进行数据缓冲等操作,因此也需要等待一定时间,所以也不需要将其优先级设置为高。

下面举例说明上述超低运算能力系统下的数据压缩过程:

1、添加数据压缩任务,并将数据压缩任务的优先级设置为最低。

2、初始化压缩文件头:一个hofmann树位于rom,一个编码标记字节串位于rom;一个编码标记字节串长度及位索引位于内存。

3、针对待压缩的数据的信号来源,从rom顺次取当前2n个待压缩数据进行整数小波变换,得到小波系数。

4、判断小波系数是否大于波动阈值。

5、若大于波动阈值,则将小波系数添加到压缩包尾部,并在编码标记字节串中作标记:在编码标记字节串中依次增加n个位(称之为更新位)并置1,n为最近一次压缩包的字节长度变化数,如果更新位达到所使用字节的最低位,则动态增加字节串的长度,并更新编码标记字节串长度的计数。

6、若不大于波动阈值,则将小波系数对应的hofmann编码添加到压缩包尾部,并在编码标记字节串中作标记:在编码标记字节串中依次增加n个位并置0,n为最近一次压缩包的长度变化数。

下面对本申请实施例提供的数据压缩的装置、终端及计算机可读存储介质进行介绍,下文描述的数据压缩的装置、终端及计算机可读存储介质与上文描述的数据压缩的方法可相互对应参照。

请参考图2,图2为本申请实施例所提供的数据压缩的装置的结构框图;该装置可以包括:

小波变换模块100,用于对当前读入的2n个待压缩数据进行整数小波变换,得到小波系数;

判断模块200,用于判断小波系数是否大于波动阈值;

第一执行模块300,用于若大于波动阈值,则将小波系数添加到压缩包尾部,并在编码标记字节串中对应各位均写入第一预设数值;其中,编码标记字节串中位与压缩包中字节串顺次对应,第一预设数值表示该位对应的压缩包中字节串为未编码的数据;

第二执行模块400,用于若不大于波动阈值,则将小波系数对应的霍夫曼hofmann编码添加到压缩包尾部,并在编码标记字节串中对应各位均写入第二预设数值;其中,第二预设数值表示该位对应的压缩包中字节串为编码后的数据。

基于上述实施例,第一执行模块300,可以包括:

第一写入单元,用于根据所述压缩包的字节长度更新编码标记字节串长度以及索引位,并根据更新后的编码标记字节串长度以及索引位在所述编码标记字节串中对应各位均写入所述第一预设数值;

第二执行模块400,可以包括:

第二写入单元,用于根据所述压缩包的字节长度更新编码标记字节串长度以及索引位,并根据更新后的编码标记字节串长度以及索引位在所述编码标记字节串中对应各位均写入所述第二预设数值。

基于上述实施例,该装置还可以包括:

初始化模块,用于初始化压缩头文件;其中,所述压缩头文件包含存储在rom中的霍夫曼hofmann树以及所述编码标记字节串,存储在内存中的所述编码标记字节串长度以及所述索引位。

基于上述任意实施例,该装置还可以包括:

优先级设置模块,用于添加数据压缩任务,并将所述数据压缩任务的优先级设置为最低。

基于上述任意实施例,该装置还可以包括:

波动阈值确定模块,用于获取预设数量的待压缩样本数据;确定待压缩样本数据的最大值和最小值的差值;选取差值的预设倍数作为波动阈值。

需要说明的是,基于上述任意实施例,所述装置可以是基于可编程逻辑器件实现的,可编程逻辑器件包括fpga,cpld,单片机等。这些可编程逻辑器件可以设置在微处理器中。

本申请实施例还提供一种终端,包括:存储器,用于存储计算机程序;处理器,用于执行计算机程序时实现如上述任意实施例数据压缩的方法的步骤。如处理器用于执行计算机程序时实现对当前读入的2n个待压缩数据进行整数小波变换,得到小波系数;判断小波系数是否大于波动阈值;若大于,则将小波系数添加到压缩包尾部,并在编码标记字节串中对应各位均写入第一预设数值;其中,编码标记字节串中位与压缩包中字节串顺次对应,第一预设数值表示该位对应的压缩包中字节串为未编码的数据;若不大于,则将小波系数对应的hofmann编码添加到压缩包尾部,并在编码标记字节串中对应各位均写入第二预设数值;其中,第二预设数值表示该位对应的压缩包中字节串为编码后的数据。

具体的,本实施例中的处理器可以是微处理器,当然也可以是pc、服务器、智能手机、相机等设备中使用的性能较高的处理器。

基于上述实施例,终端具体为穿戴设备。例如智能手表,智能手环,智能帽子,智能耳机等。

本申请还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述任意实施例数据压缩的方法的步骤。如计算机程序被处理器执行时实现对当前读入的2n个待压缩数据进行整数小波变换,得到小波系数;判断小波系数是否大于波动阈值;若大于,则将小波系数添加到压缩包尾部,并在编码标记字节串中对应各位均写入第一预设数值;其中,编码标记字节串中位与压缩包中字节串顺次对应,第一预设数值表示该位对应的压缩包中字节串为未编码的数据;若不大于,则将小波系数对应的hofmann编码添加到压缩包尾部,并在编码标记字节串中对应各位均写入第二预设数值;其中,第二预设数值表示该位对应的压缩包中字节串为编码后的数据。

该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本申请所提供的一种数据压缩的装置、终端及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

当前第1页1 2 
网友询问留言 留言:0条
  • 还没有人留言评论。精彩留言会获得点赞!