一种针对数据幅值范围已知的数据流进行编码的方法转让专利

申请号 : CN201910085839.2

文献号 : CN109672690B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 范晓鹏孙晨添赵德斌

申请人 : 哈尔滨工业大学

摘要 :

本发明提出一种针对数据幅值范围已知的数据流进行编码的方法。所述方法包括数据流的统计分布、子集划分设计、实际编码和实际解码步骤。本发明的子集编码方法可以有效编码已知幅值范围的数据流,相比现有方法可以较大程度提高编码性能,并且具有较低的编码复杂度,是一个实际可用的编码方法。并且本方法的应用范围不限于已知幅值范围已知的数据流,在编码幅值范围不确定的数据流时,也可以与现有编码方法结合使用,应用前景广阔。

权利要求 :

1.一种针对数据幅值范围已知的数据流进行编码的方法,其特征在于:具体包括以下步骤:步骤一、统计数据流的整体分布情况、数据流最高点位置以及数据幅值范围信息,确定数据流整体分布特征;

步骤二、根据数据流幅值分布情况和数值出现频率最高点位置确定数据流整体的子集划分设计;

步骤三、对数据流进行实际编码;

步骤四、对编码后的数据流进行实际解码,重构出完整数据流;

所述子集划分设计的原则是:子集划分中,内一层集合是外一层集合的真子集,并且集合由内层到外层的覆盖范围层层递增,编码时由内层子集向外层子集依次编码,直到最外层;最外层子集也是全集;

所述步骤三具体为:

步骤三一、将输入的数据信息进行细分,将其信息细分为数据的所属子集的标志信息和数据在子集中的编号信息;

步骤三二、假设设计的子集分别为A0,A1,A2…Ai-1,Ai…;

步骤三三、依次编码数据流中所有数据所在子集的标志;

步骤三四、编码数据流中所有数据在所属子集中的编号;

所述依次编码数据流中所有数据所在子集的标志,具体为:第一步,依次编码数据流中每个元素是否属于集合A0的标志;

第二步,对数据流中不属于集合A0的元素,依次编码元素是否属于集合A1的标志;

第i步,对数据流中不属于集合Ai-1的元素,依次编码元素是否属于集合Ai的标志;

如此循环,直到编码到最外层子集;

所述编码数据流中所有数据在所属子集中的编号,具体为:第一步,如果集合A0中的元素的数量多于一个,则依次编码数据流中每个元素在集合A0中的编号,否则直接进入下一步;

第二步,如果集合A1-A0中的元素的数量多于一个,则依次编码所有不属于集合A0的元素在集合A1-A0中的编号,否则直接进入下一步;

第i步,如果集合Ai-Ai-1中的元素的数量多于一个,则依次编码所有不属于Ai-1的元素在集合Ai-Ai-1中的编号,否则直接进入下一步;

如此循环,直到编码到最外层子集;

所述步骤四具体为:

步骤四一、依次解码数据流中所有数据所在子集的标志;

步骤四二、解码数据流中所有数据在所属子集中的编号;

步骤四三、基于数据流中每个数据所在子集的标志和数据在所属子集中的编号,重构出完整数据流;

所述依次解码数据流中所有数据所在子集的标志,具体为:第一步,依次解码数据流中每个元素是否属于集合A0的标志;

第二步,对数据流中不属于集合A0的元素,依次解码元素是否属于集合A1的标志;

第i步,对数据流中不属于集合Ai-1的元素,依次解码元素是否属于集合Ai的标志;

如此循环,直到解码到最外层子集;

所述解码数据流中所有数据在所属子集中的编号,具体为:第一步,如果集合A0中的元素的数量多于一个,则依次解码数据流中每个元素在集合A0中的编号,否则直接进入下一步;

第二步,如果集合A1-A0中的元素的数量多于一个,则依次解码所有不属于集合A0的元素在集合A1-A0中的编号,否则直接进入下一步;

第i步,如果集合Ai-Ai-1中的元素的数量多于一个,则依次解码所有不属于Ai-1的元素在集合Ai-Ai-1中的编号,否则直接进入下一步;

如此循环,直到解码到最外层子集。

2.根据权利要求1所述的方法,其特征在于:所述步骤一中还包括统计每个数据流的特征,作为后面实际编码的一个参数。

3.根据权利要求1所述的方法,其特征在于:所述步骤三之前还包括数据流变换步骤,实际编码数据流之前,对数据流进行DCT变换或hadma变换。

说明书 :

一种针对数据幅值范围已知的数据流进行编码的方法

技术领域

[0001] 本发明属于压缩编码技术领域,特别是涉及一种针对数据幅值范围已知的数据流进行编码的方法。

背景技术

[0002] 实际应用中,数据的压缩编码算法多种多样,有针对数据整体进行编码的,例如区间编码算法;有针对数据每一个比特进行编码的,例如二进制算术编码;也有将数据根据出现频率不同,而设计不同的数据树形结构进而进行编码的,例如哈夫曼编码。以上算法针对不同的场景具有不同的编码性能。但是目前并没有将数据流划分为不同的互相嵌套的子集,并进而进行编码的算法。实际上,某些情况下,例如待编码数据流幅值范围已知且满足某些特殊分布的情况,如果可以根据数据的幅值分布范围提前将数据流根据其幅值范围分为不同的互相嵌套的子集,并进而进行编码,往往可以更有效的提高数据流的编码性能。

发明内容

[0003] 本发明目的是为了解决现有技术中的技术问题,提出了一种针对数据幅值范围已知的数据流进行编码的方法。本发明提出一个对数据流根据其数值范围分布的特征,将数据流划分为多个互相嵌套的子集并进而进行有效压缩的编码方法。该方法具有复杂度低,编码性能高的特点,具有很好的实际应用效果。
[0004] 本发明是通过以下技术方案实现的,本发明提出一种针对数据幅值范围已知的数据流进行编码的方法,具体包括以下步骤:
[0005] 步骤一、统计数据流的整体分布情况、数据流最高点位置以及数据幅值范围信息,确定数据流整体分布特征;
[0006] 步骤二、根据数据流幅值分布情况和数值出现频率最高点位置确定数据流整体的子集划分设计;
[0007] 步骤三、对数据流进行实际编码;
[0008] 步骤四、对编码后的数据流进行实际解码,重构出完整数据流。
[0009] 进一步地,所述子集划分设计的原则是:子集划分中,内一层集合是外一层集合的真子集,并且集合由内层到外层的覆盖范围层层递增,编码时由内层子集向外层子集依次编码,直到最外层;最外层子集也是全集。
[0010] 进一步地,所述步骤三具体为:
[0011] 步骤三一、将输入的数据信息进行细分,将其信息细分为数据的所属子集的标志信息和数据在子集中的编号信息;
[0012] 步骤三二、假设设计的子集分别为A0,A1,A2…Ai-1,Ai…;
[0013] 步骤三三、依次编码数据流中所有数据所在子集的标志;
[0014] 步骤三四、编码数据流中所有数据在所属子集中的编号。
[0015] 进一步地,所述依次编码数据流中所有数据所在子集的标志,具体为:
[0016] 第一步,依次编码数据流中每个元素是否属于集合A0的标志;
[0017] 第二步,对数据流中不属于集合A0的元素,依次编码元素是否属于集合A1的标志;
[0018]
[0019] 第i步,对数据流中不属于集合Ai-1的元素,依次编码元素是否属于集合Ai的标志;
[0020] 如此循环,直到编码到最外层子集。
[0021] 进一步地,所述编码数据流中所有数据在所属子集中的编号,具体为:
[0022] 第一步,如果集合A0中的元素的数量多于一个,则依次编码数据流中每个元素在集合A0中的编号,否则直接进入下一步;
[0023] 第二步,如果集合A1-A0中的元素的数量多于一个,则依次编码所有不属于集合A0的元素在集合A1-A0中的编号,否则直接进入下一步;
[0024]
[0025] 第i步,如果集合Ai-Ai-1中的元素的数量多于一个,则依次编码所有不属于Ai-1的元素在集合Ai-Ai-1中的编号,否则直接进入下一步;
[0026] 如此循环,直到编码到最外层子集。
[0027] 进一步地,所述步骤四具体为:
[0028] 步骤四一、依次解码数据流中所有数据所在子集的标志;
[0029] 步骤四二、解码数据流中所有数据在所属子集中的编号;
[0030] 步骤四三、基于数据流中每个数据所在子集的标志和数据在所属子集中的编号,重构出完整数据流。
[0031] 进一步地,所述依次解码数据流中所有数据所在子集的标志,具体为:
[0032] 第一步,依次解码数据流中每个元素是否属于集合A0的标志;
[0033] 第二步,对数据流中不属于集合A0的元素,依次解码元素是否属于集合A1的标志;
[0034]
[0035] 第i步,对数据流中不属于集合Ai-1的元素,依次解码元素是否属于集合Ai的标志;
[0036] 如此循环,直到解码到最外层子集。
[0037] 进一步地,所述解码数据流中所有数据在所属子集中的编号,具体为:
[0038] 第一步,如果集合A0中的元素的数量多于一个,则依次解码数据流中每个元素在集合A0中的编号,否则直接进入下一步;
[0039] 第二步,如果集合A1-A0中的元素的数量多于一个,则依次解码所有不属于集合A0的元素在集合A1-A0中的编号,否则直接进入下一步;
[0040]
[0041] 第i步,如果集合Ai-Ai-1中的元素的数量多于一个,则依次解码所有不属于Ai-1的元素在集合Ai-Ai-1中的编号,否则直接进入下一步;
[0042] 如此循环,直到解码到最外层子集。
[0043] 进一步地,所述步骤一中还包括统计每个数据流的特征,作为后面实际编码的一个参数。
[0044] 进一步地,所述步骤三之前还包括数据流变换步骤,实际编码数据流之前,对数据流进行DCT变换或hadma变换。
[0045] 本发明有益效果:本发明能够针对数据幅值范围已知的场景,在运算时间复杂度很低的前提下,取得了较高的编码性能。并且具有进一步拓展应用范围的潜力。

附图说明

[0046] 图1为本发明所述针对数据幅值范围已知的数据流进行编码的方法流程图;
[0047] 图2为本发明中一个子集划分实例图。

具体实施方式

[0048] 下面将结合本发明实施例中的附图对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0049] 结合图1,本发明提出一种针对数据幅值范围已知的数据流进行编码的方法,具体包括以下步骤:
[0050] 步骤一、统计数据流的整体分布情况、数据流最高点位置以及数据幅值范围信息,确定数据流整体分布特征;
[0051] 步骤二、根据数据流幅值分布情况和数值出现频率最高点位置确定数据流整体的子集划分设计;
[0052] 步骤三、对数据流进行实际编码;
[0053] 步骤四、对编码后的数据流进行实际解码,重构出完整数据流。
[0054] 具体实施例一:
[0055] 步骤一-统计环节:
[0056] 根据要编码的数据流,可以抽样选择数据流的一部分的数据进行统计,也可以基于已编码的数据流进行统计。得到数据整体分布情况,包括数据流出现频率最高的数值以及数据幅值范围,确定数据流整体分布特征。
[0057] 步骤二–子集划分设计:
[0058] 根据数据幅值分布情况和分布曲线最高点确定子集划分设计。数值出现频率最高的部分作为最内层子集。数据幅值只编码绝对值,而数据符号位单独编码。对于出现频率较高的数据,可以单独设计子集。但是数据子集的设计仍要遵循子集覆盖范围逐渐递增的原则。
[0059] 一个实际子集划分的例子如图2所示,数据流被划分为4个子集,分别为A0,A1,A2,A3。
[0060] 步骤三-实际编码:
[0061] 将输入的数据信息进行细分。将其信息细分为:数据的所属子集的标志信息,数据在子集中的编号信息等。
[0062] 假设步骤二设计的子集分别为A0,A1,A2…Ai-1,Ai…(集合A0,A1,A2…Ai-1,Ai…的覆盖范围逐渐增大,并且A0为A1的真子集,A1为A2的真子集,依次类推)。
[0063] 对数据流的编码过程如下:
[0064] 1)依次编码数据流中所有数据所在子集的标志,过程如下:
[0065] 第一步,依次编码数据流中每个元素是否属于集合A0的标志。
[0066] 第二步,对数据流中不属于集合A0的元素,依次编码元素是否属于集合A1的标志。
[0067]
[0068] 第i步,对数据流中不属于集合Ai-1的元素,依次编码元素是否属于集合Ai的标志。
[0069] 如此循环,直到编码到最外层子集。
[0070] 2)编码数据流中所有数据在所属子集中的编号,过程如下:
[0071] 第一步,如果集合A0中的元素的数量多于一个,则依次编码数据流中每个元素在集合A0中的编号。否则直接进入下一步。
[0072] 第二步,如果集合A1-A0中的元素的数量多于一个,则依次编码所有不属于集合A0的元素在集合A1-A0中的编号。否则直接进入下一步。
[0073]
[0074] 第i步,如果集合Ai-Ai-1中的元素的数量多于一个,则依次编码所有不属于Ai-1的元素在集合Ai-Ai-1中的编号。否则直接进入下一步。
[0075] 如此循环,直到编码到最外层子集。
[0076] 步骤四-实际解码:
[0077] a、数据流子集信息解码阶段,过程如下:
[0078] 1)依次解码数据流中所有数据所在子集的标志,过程如下:
[0079] 第一步,依次解码数据流中每个元素是否属于集合A0的标志。
[0080] 第二步,对数据流中不属于集合A0的元素,依次解码元素是否属于集合A1的标志。
[0081]
[0082] 第i步,对数据流中不属于集合Ai-1的元素,依次解码元素是否属于集合Ai的标志。
[0083] 如此循环,直到解码到最外层子集。
[0084] 2)解码数据流中所有数据在所属子集中的编号,过程如下:
[0085] 第一步,如果集合A0中的元素的数量多于一个,则依次解码数据流中每个元素在集合A0中的编号。否则直接进入下一步。
[0086] 第二步,如果集合A1-A0中的元素的数量多于一个,则依次解码所有不属于集合A0的元素在集合A1-A0中的编号。否则直接进入下一步。
[0087]
[0088] 第i步,如果集合Ai-Ai-1中的元素的数量多于一个,则依次解码所有不属于集合Ai-1的元素在集合Ai-Ai-1中的编号。否则直接进入下一步。
[0089] 如此循环,直到解码到最外层子集。
[0090] b、基于数据流中每个数据所在子集的编号和数据在子集中的编号,重构出完整数据流。
[0091] 具体实施例二:
[0092] 本实施例是实施例一在基因数据压缩领域的一个应用,具体应用在基因数据的质量因子(quality score以下简称QS值)压缩。
[0093] 具体实现步骤如下:
[0094] 步骤一-统计环节:
[0095] 首先需要统计待编码基因QS值数据流的分布情况。包括出现频率最高的QS值以及QS值的整体分布情况。
[0096] 由于基因QS值数据流被分成一个一个短读,每个短读内部包含固定数量的QS值。每个短读本身的特征也需要进行统计,以提高后续编码性能。
[0097] 由于基因QS值数据流本身较为平缓,但是由于实际测试中存在误差等情况,QS值数据流中会存在随机出现的幅值较大的噪声数据,统计时需要对噪声数据进行过滤,具体方法为,对于出现频率小于预设阈值的数据不计入统计过程,以避免对统计精确度的影响,如果数据流中没有噪声或者噪声影响不大也可以选择不加入滤波操作,也可以加入别的方式的滤波操作。
[0098] 步骤二-子集划分设计:
[0099] 基于步骤一的统计结果,对QS值分布曲线进行移动,以保证出现频率最高的数值与0点位置重合。以提高后续的编码效率。曲线移动后,尽量保证0为出现频率最高的位置。在进行子集设计环节中出现频率最高点的位置也可以选择其他不是0点的位置。提取符号位,符号位后续单独编码,对于某些特殊的数据流,可以不需要编码数据符号位。例如,某些数据流本身全为正数,且初始化时不需要移动数据流整体分布曲线,则可以不需要编码数据符号位。只要数据流本身数据分布范围已知,则可以根据数据流分布形式不同,进行不同形式的初始化。例如,可以对数据流的分布曲线进行二次拟合,可以对数据流进行线性拟合,也可以不初始化直接编码数据流。假设此时QS值范围变为[0,k]。
[0100] 根据步骤一的统计结果,假设子集划分结果为A0,A1,A2…Ai-1,Ai…(集合A0,A1,A2…Ai-1,Ai…的覆盖范围逐渐增大,并且A0为A1的真子集,A1为A2的真子集,依次类推)。
[0101] 步骤三-实际编码:
[0102] 将输入的QS值数据流的信息进行细分。将其信息细分为:QS值数据的所属子集的标志信息,QS值数据在子集中的编号信息等。
[0103] 假设步骤二设计的子集分别为A0,A1,A2…Ai-1,Ai…(集合A0,A1,A2…Ai-1,Ai…的覆盖范围逐渐增大,并且A0为A1的真子集,A1为A2的真子集,依次类推)。
[0104] 对数据流的编码过程如下:
[0105] 1)依次编码QS值数据流中所有QS值数据所在子集的标志,过程如下:
[0106] 第一步,依次编码QS值数据流中每个元素是否属于集合A0的标志。
[0107] 第二步,对QS值数据流中不属于集合A0的元素,依次编码元素是否属于集合A1的标志。
[0108]
[0109] 第i步,对QS值数据流中不属于集合Ai-1的元素,依次编码元素是否属于集合Ai的标志位。
[0110] 如此循环,直到编码到最外层子集。
[0111] 2)编码QS值数据流中所有数据在所属子集中的编号,过程如下:
[0112] 第一步,如果集合A0中的元素的数量多于一个,则依次编码数据流中每个元素在集合A0中的编号。否则直接进入下一步。
[0113] 第二步,如果集合A1-A0中的元素的数量多于一个,则依次编码所有不属于集合A0的元素在集合A1-A0中的编号。否则直接进入下一步。
[0114]
[0115] 第i步,如果集合Ai-Ai-1中的元素的数量多于一个,则依次编码所有不属于Ai-1的元素在集合Ai-Ai-1中的编号。否则直接进入下一步。
[0116] 如此循环,直到编码到最外层子集。
[0117] 步骤四-实际解码:
[0118] a、QS值数据流子集信息解码阶段,过程如下:
[0119] 1)依次解码QS值数据流中所有QS值数据所在子集的编号标志,过程如下:
[0120] 第一步,依次解码QS值数据流中每个元素是否属于集合A0的标志。
[0121] 第二步,对QS值数据流中不属于集合A0的元素,依次解码元素是否属于集合A1的标志。
[0122]
[0123] 第i步,对QS值数据流中不属于集合Ai-1的元素,依次解码元素是否属于集合Ai的标志。
[0124] 如此循环,直到解码码到最外层子集。
[0125] 2)解码QS值数据流中所有数据在所属子集中的编号,过程如下:
[0126] 第一步,如果集合A0中的元素的数量多于一个,则依次解码数据流中每个元素在集合A0中的编号。否则直接进入下一步。
[0127] 第二步,如果集合A1-A0中的元素的数量多于一个,则依次解码所有不属于集合A0的元素在集合A1-A0中的编号。否则直接进入下一步。
[0128]
[0129] 第i步,如果集合Ai-Ai-1中的元素的数量多于一个,则依次解码所有不属于Ai-1的元素在集合Ai-Ai-1中的编号。否则直接进入下一步。
[0130] 如此循环,直到解码到最外层子集。
[0131] b、基于数据流中所有数据所在子集的编号和数据在子集中的编号,重构出最终的完整数据流。
[0132] 在进行数据统计时,不仅可以统计数据的整体分布,也可以统计每个数据流的特征,作为后面实际编码的一个参数。例如,可以在编码过程中,加入对单个数据流的基于率失真优化的编码参数选择。另外,还可以在实际编码数据流之前,加入变换步骤。例如,实际编码数据流之前,可以进行DCT变换或hadma变换等变换方式。
[0133] 本发明所述方法,也可以用来编码某些幅值范围未知或者过大的数据流。此时,数据层次可以不需要覆盖数据流的全部范围,而是只需要覆盖部分范围即可。例如,当数据流符合正态分布时,只要设计的数据子集范围覆盖(μ-2.58σ,μ+2.58σ)的部分即可,其他部分由于出现概率极小,可以采用其他方式编码,例如指数哥伦布算法。
[0134] 实施例一在基因压缩领域,在基因压缩通测序列NA12878_read_1.fq,NA12878_read_2.fq两个序列上进行了测试,并与现有技术中的编码算法fqzcomp和QVZ两种编码框架的压缩性能进行了比较,结果如下所示。可以看到本发明所述方法的编码性能相比现有技术中的两种方法均有提升。
[0135]   read1 read2子集编码 30.39% 37.53%
QVZ 31.00% 38.20%
Fqzcomp 31.14% 38.34%
[0136] 本发明的子集编码方法可以有效编码已知幅值范围的数据流,相比现有方法可以较大程度提高编码性能,并且具有较低的编码复杂度,是一个实际可用的编码方法。并且本方法的应用范围不限于已知幅值范围已知的数据流,在编码幅值范围不确定的数据流时,也可以与现有编码方法结合使用,应用前景广阔。
[0137] 以上对本发明所提供的一种针对数据幅值范围已知的数据流进行编码的方法,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。