高精度浮点类型时序数据的无损压缩及解压方法
文献发布时间:2023-06-19 19:35:22
技术领域
本发明涉及数据无损压缩技术领域,具体涉及高精度浮点类型时序数据的无损压缩及解压方法。
背景技术
随着技术的发展和移动设备的普及,海量时序数据在源源不断产生。如汽车轨迹、手机的信令数据、传感器收集到的信息等。数据的多样性和指数级增长给数据存储和传输带来了巨大压力,严重阻碍了高性能计算在科学领域的运用和发展。数据压缩一直是人们用于解决此类问题的热点技术,寻找高效的数据压缩技术可以有效降低数据存储量和传输成本。
数据压缩按解码后的数据是否完整恢复原数据,可分为有损压缩和无损压缩。其中,有损压缩是指解压缩时不能精确恢复原始数据,有一定的信息损失,该方法主要用于图像、视频、音频等少量信息遗失而不会影响原有数据效果的领域。无损压缩又称为熵编码、无失真编码,其工作原理是减少或去除数据中的冗余度,且原数据可被精确恢复。时序数据在热力图展现、人员追踪等应用中不能够轻易有信息的损失,其就需要做到无损压缩。时序数据类型较多,例如整型数据、布尔型数据以及浮点型数据,其中浮点型时序数据是一类较难压缩的数据。
针对浮点类型时序数据的压缩,FaceBook在2015年提出了一种基于异或算法的浮点数压缩算法,研究员们发现了浮点数时序数据在同个时间序列中,大部分浮点数占用的有效二进制(bit)位是类似的,并且一般只有中间的一个连续区块存储着不同的数据。因此,现有技术通过异或计算,使得相同部分的数据可以得到大量的0,便可以省略存储这些前导零和尾随零来达到压缩的效果。然而,当浮点数精度较高的时(如GPS经纬度数据),存储不同数据的连续区块较大,所以现有标准的异或压缩算法的压缩率不高。同时,现有压解算法在解压时需要对前导零和尾随零以及有效位的拼接,会花费大量的时间或者进行额外的优化设计,导致数据压缩的成本较高。因此,如何设计一种能够实现高精度浮点类型时序数据的无损压缩,且能够有效提高压缩率并降低压解时间的方法是亟需解决的技术问题。
发明内容
针对上述现有技术的不足,本发明所要解决的技术问题是:如何提供一种高精度浮点类型时序数据的无损压缩方法,能够实现高精度浮点类型时序数据的无损压缩,且能够有效提高压缩率并降低压解时间,从而能够保证浮点类型时序数据的压缩效果和压解成本,进而有效降低数据存储量和传输成本。
为了解决上述技术问题,本发明采用了如下的技术方案:
高精度浮点类型时序数据的无损压缩方法,包括:
S1:对待压缩的时序数据进行排序;
S2:按顺序将各条时序数据与其相邻时序数据进行异或计算,得到对应的异或值;
S3:去除各条时序数据的异或值中的前导零,生成对应的有效位;
S4:根据各条时序数据的有效位确定对应的有效位位数;
S5:压缩时序数据时,存储对应时序数据的有效位及其有效位位数。
优选的,步骤S2中,从排第二位的时序数据开始,按顺序将各条时序数据与其相邻的前一条时序数据进行异或计算,得到各条时序数据对应的异或值。
优选的,步骤S3中,首先将各条时序数据的异或值转换为二进制形式,然后去除前导零以生成二进制形式的有效位。
优选的,前导零是指异或值中在第一个有效数字之前所有的0,在二进制中表现为值为1的最高位之前所有的0。
优选的,步骤S4中,首先根据排第二位时序数据的有效位长度确定其有效位位数;然后从排第三位的时序数据开始,按顺序将各条时序数据的有效位长度与其相邻前一条时序数据的有效位长度进行对比,以确定各条时序数据对应的有效位位数。
优选的,通过如下规则确定时序数据的有效位位数:
1)若当前时序数据的有效位长度大于其相邻前一条时序数据的有效位长度,则根据当前时序数据的有效位长度确定有效位位数;
2)若当前时序数据的有效位长度小于或等于其相邻前一条时序数据的有效位长度,则当前时序数据的有效位位数与其相邻前一条时序数据的有效位位数保持一致,且有效位长度不足的用0补位。
优选的,通过如下规则为各条时序数据生成具有两个控制位的标志位:
1)对于异或值为0的时序数据,标志位为0;
2)若对应时序数据的异或值不为0,则其标志位的第一控制位为1;
3)若时序数据的有效位长度小于或等于其相邻前一条时序数据的有效位长度且长度差值小于6位,则其标志位的第二控制位为0;
4)若时序数据的有效位长度大于其相邻前一条时序数据的有效位长度,则其标志位的第二控制位为1。
优选的,步骤S5中,压缩时序数据时,首先存储排第一位的时序数据,然后按顺序依次存储其他时序数据的标志位、有效位及其有效位位数以生成对应的时序数据压缩包。
优选的,压缩时序数据时,对于异或值为0的时序数据,存储为1位标志位0。
本发明还公开了一种高精度浮点类型时序数据解压方法,其基于本发明中高精度浮点类型时序数据的无损压缩方法实施,具体包括:
S01:获取待解压的时序数据压缩包;
S02:得到排第一位的时序数据;
S03:对于排第二位的时序数据:首先依据有效位长度来补全对应时序数据有效位的前导零,得到二进制形式的异或值;然后将对应时序数据二进制形式的异或值转成与排第一位的时序数据相对应的格式即原始格式,得到对应的异或值;最后根据对应时序数据的异或值结合排第一位的时序数据进行异或计算,得到排第二位的时序数据;
S04:从排第三位的时序数据开始:首先根据对应时序数据的标志位结合其相邻前一条时序数据的有效位位数确定对应时序数据的有效位位数;然后根据对应时序数据的有效位位数补全其有效位的前导零,得到二进制形式的异或值;随后将对应时序数据二进制形式的异或值转成原始格式,得到对应的异或值;最后根据对应时序数据的异或值结合其相邻前一条时序数据的时序数据进行异或计算,得到对应的时序数据;
S05:重复执行步骤S04,直至完成所有时序数据的解压。
本发明中高精度浮点类型时序数据的无损压缩方法,具有如下有益效果:
本发明通过高精度浮点类型时序数据的时序数据相差较小以及在同个时间序列中大部分浮点数的占用的有效二进制位是类似的,并且往往只有中间的一个连续区块存储着不同数据的特点,将时序数据与其相邻时序数据进行异或计算得到异或值,并去除异或值的前导零生成有效位并确定有效位位数,使得能够通过存储有效位及其有效位位数来实现时序数据的存储,进而能够有效实现高精度浮点类型时序数据的无损压缩,并提高时序数据的压缩率;同时,本发明直接从最低位开始存储时序数据的异或值,并且只省略存储了前导零,而舍弃了对尾随零的处理(异或后数据尾随零数量较少,但存储尾随零的个数需要6位,而异或后数据尾随零个数极大概率不到6位),使得能够减少时序数据的存储位数,在解压时也无需额外对尾随零进行操作,即无需进行额外的优化设计,能够降低时序数据的压解时间,从而能够保证浮点类型时序数据的压缩效果和压解成本,进而有效降低数据存储量和传输成本。
附图说明
为了使发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步的详细描述,其中:
图1为无损压缩方法的逻辑框图;
图2为无损压缩方法的示例图;
图3为压缩率比较示意图;
图4为压缩时间比较示意图;
图5为解压时间比较示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。此外,术语“水平”、“竖直”等术语并不表示要求部件绝对水平或悬垂,而是可以稍微倾斜。如“水平”仅仅是指其方向相对“竖直”而言更加水平,并不是表示该结构一定要完全水平,而是可以稍微倾斜。在本发明的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”、“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
下面通过具体实施方式进一步详细的说明:
实施例一:
本实施例中公开了一种高精度浮点类型时序数据的无损压缩方法。
如图1和图2所示,高精度浮点类型时序数据的无损压缩方法,包括:
S1:对待压缩的时序数据进行排序;
S2:按顺序将各条时序数据与其相邻时序数据进行异或计算,得到对应的异或值;
本实施例中,从排第二位的时序数据开始,按顺序将各条时序数据与其相邻的前一条时序数据进行异或计算,得到各条时序数据对应的异或值。
S3:去除各条时序数据的异或值中的前导零,生成对应的有效位;
本实施例中,首先将各条时序数据的异或值转换为二进制形式,然后去除前导零以生成二进制形式的有效位。
前导零是指异或值中在第一个有效数字之前所有的0,在二进制中表现为值为1的最高位之前所有的0;尾随零是指异或值中在最后一个有效数字后所有的0,在二进制中表现为值为1的最低位之后所有的0。
S4:根据各条时序数据的有效位确定对应的有效位位数;
S5:压缩时序数据时,存储对应时序数据的有效位及其有效位位数。
本实施例中,压缩时序数据时,首先存储排第一位的时序数据,然后按顺序依次存储其他时序数据的标志位、有效位及其有效位位数以生成对应的时序数据压缩包。对于异或值为0的时序数据,存储为1位标志位0。
需要说明的是,本发明的无损压缩方法不仅适用于浮点类型时序数据,对于float类型时序数据依然适合,但是压缩率较浮点类型时序数据提升较少。同时,本发明的无损压缩方法对于较低精度的浮点类型时序数据也使用,仍然不需要额外的读写优化。
本发明通过高精度浮点类型时序数据的时序数据相差较小以及在同个时间序列中大部分浮点数的占用的有效二进制位是类似的,并且往往只有中间的一个连续区块存储着不同数据的特点,将时序数据与其相邻时序数据进行异或计算得到异或值,并去除异或值的前导零生成有效位并确定有效位位数,使得能够通过存储有效位及其有效位位数来实现时序数据的存储,进而能够有效实现高精度浮点类型时序数据的无损压缩,并提高时序数据的压缩率;同时,本发明直接从最低位开始存储时序数据的异或值,并且只省略存储了前导零,而舍弃了对尾随零的处理(异或后数据尾随零数量较少,但存储尾随零的个数需要6位,而异或后数据尾随零个数极大概率不到6位),使得能够减少时序数据的存储位数,在解压时也无需额外对尾随零进行操作,即无需进行额外的优化设计,能够降低时序数据的压解时间,从而能够保证浮点类型时序数据的压缩效果和压解成本,进而有效降低数据存储量和传输成本。
具体实施过程中,首先根据排第二位时序数据的有效位长度确定其有效位位数;然后从排第三位的时序数据开始,按顺序将各条时序数据的有效位长度与其相邻前一条时序数据的有效位长度进行对比,以确定各条时序数据对应的有效位位数。
通过如下规则确定时序数据的有效位位数:
1)若当前时序数据的有效位长度大于其相邻前一条时序数据的有效位长度,则根据当前时序数据的有效位长度确定有效位位数;
2)若当前时序数据的有效位长度小于或等于其相邻前一条时序数据的有效位长度,则当前时序数据的有效位位数与其相邻前一条时序数据的有效位位数保持一致,且有效位长度不足的用0补位。
本发明通过将时序数据的有效位长度与其相邻前一条时序数据的有效位长度进行对比来确定时序数据的有效位位数,使得时序数据的有效位数能够与其相邻时序数据关联,能够通过存储有效位及其有效位位数来实现时序数据的存储,进而能够有效实现高精度浮点类型时序数据的无损压缩,并进一步提高时序数据的压缩率。
具体实施过程中,通过如下规则为各条时序数据生成具有两个控制位的标志位:
1)对于异或值为0的时序数据,标志位为0;
2)若对应时序数据的异或值不为0,则其标志位的第一控制位为1;
3)如图2(a)所示,若时序数据的有效位长度小于或等于其相邻前一条时序数据的有效位长度且长度差值小于6位,则其标志位的第二控制位为0;
4)如图2(b)所示,若时序数据的有效位长度大于其相邻前一条时序数据的有效位长度,则其标志位的第二控制位为1。
本发明通过为时序数据生成具有两个控制位的标志位,使得能够时序数据解压时通过标志位获知时序数据的类型以及当前异或值的存储的结构(例如,标志位为10,则利用上一位的有效位长度来存储当前有效位),能够减少存储有效位的长度(减少存储位数6bit-|上一个异或值的有效位长度-当前异或值的有效长度|),能够辅助实现通过存储有效位及其有效位位数完成时序数据的存储,进而能够有效实现高精度浮点类型时序数据的无损压缩,并进一步提高时序数据的压缩率。
为了验证本发明技术方案的有效性,本实施例中选用了两个真实轨迹数据集来进行压缩实验。轨迹数据由大量GPS点构成,其中,经纬度为精度较高的浮点(double)类型时序数据。
1、数据集
在本实验中我们使用了两个真实数据集:
1)重庆出租车数据集。我们使用2017年重庆出租车某一天的轨迹数据,共包含12041辆出租车的69430938个GPS轨迹点,采样率15s。
2)北京出租车数据集T-drive(来自),共包含7992辆出租车的8619111个GPS轨迹点,采样频率177s。
2、实验设置
我们主要验证上述算法的压缩率和压缩/解压时间。并且根据不同采样率和数据集进行实验分析(用JAVA语言实现)。所有的实验都在一台win11操作系统的64位主机上,该主机CPU为11代GenIntel(R)Core(TM)i5-11400,并且带有16GB内存。
3、实验方法
1)针对轨迹数据的改进XORwithoutTrail算法(XORWT)。
2)对照方法:异或算法(XOR)。
4、对比标准
我们主要从三个方面来评判算法的效果:
1)压缩率(CompressionRatio)=原始数据大小/压缩后数据大小。即压缩率越大,压缩效果越好;
2)压缩时间(CompressionTime),单位:毫秒(ms);
3)解压时间(DecompressionTime),单位:毫秒(ms)。压缩和解压时间越小说明算法的使用时间越短,说明算法较好。
1)压缩率
如图3所示,在两个数据集中,改进后的异或算法的压缩率都有较高的提升。由于经纬度信息的精度高,导致异或操作后剩余的有效位较多,XORWT算法较XOR算法有着10%左右的提升,验证了我们对于去除尾随零的方法的有效,更加适合对于高精度的浮点类型数据压缩。
2)压缩时间
我们同样对于XOR、XORWT进行压缩时间的实验,结果如图4所示。由于省去了对于有效位的位置判断,相比于XOR,XORWT的压缩速度更快。
3)解压时间
由于我们这里没有对XOR的拼接处理进行优化,结果如图5所示。可以明显看出,拼接操作极大地减慢了XOR的解压效率,而XORWT舍去了尾随零的存储,直接可以译码为异或值,故解压效率更高。
实施例二:
本实施例中还公开了基于实施例一中高精度浮点类型时序数据的无损压缩方法实施的高精度浮点类型时序数据解压方法。
一种高精度浮点类型时序数据解压方法,具体包括:
S01:获取待解压的时序数据压缩包;
S02:得到排第一位的时序数据;
S03:对于排第二位的时序数据:首先补全对应时序数据有效位的前导零和尾随零,得到二进制形式的异或值;然后将对应时序数据二进制形式的异或值转成与排第一位的时序数据相对应的格式即原始格式,得到对应的异或值;最后根据对应时序数据的异或值结合排第一位的时序数据进行异或计算的还原,得到排第二位的时序数据;
S04:从排第三位的时序数据开始:首先根据对应时序数据的标志位结合其相邻前一条时序数据的有效位位数确定对应时序数据的有效位位数;然后根据对应时序数据的有效位位数补全其有效位的前导零和尾随零,得到二进制形式的异或值;随后将对应时序数据二进制形式的异或值转成原始格式,得到对应的异或值;最后根据对应时序数据的异或值结合其相邻前一条时序数据的时序数据进行异或计算的还原,得到对应的时序数据;
S05:重复执行步骤S04,直至完成所有时序数据的解压。
本发明直接从最低位开始存储时序数据的异或值,并且只省略存储了前导零,而舍弃了对尾随零的处理(异或后数据尾随零数量较少,但存储尾随零的个数需要6位,而异或后数据尾随零个数极大概率不到6位),使得能够减少时序数据的存储位数,在解压时也无需额外的前导零和尾随零以及有效位的拼接,即无需进行额外的优化设计,能够降低时序数据的压解时间,从而能够保证浮点类型时序数据的压缩效果和压解成本,进而有效降低数据存储量和传输成本。
最后需要说明的是,以上实施例仅用以说明本发明的技术方案而非限制技术方案,本领域的普通技术人员应当理解,那些对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,均应涵盖在本发明的权利要求范围当中。
- 一种面向科学计算的浮点型数据并行无损压缩方法
- 一种面向科学计算的浮点型数据无损压缩方法