一种数据压缩方法及电子设备与流程

文档序号:31604916发布日期:2022-09-21 10:16阅读:88来源:国知局
一种数据压缩方法及电子设备与流程

1.本技术涉及数据压缩技术,特别涉及一种数据压缩方法及电子设备。


背景技术:

2.各种需要实时监控的工业设备在运行过程中产生的高频数据对于状态监测、在线诊断和离线分析均具有非常重要的价值。然而大量监控变量的毫秒级高频数据对于海量数据的历史存储提出了严峻的挑战。由于高频数据的海量特性,常规的数据压缩算法存在速度慢,压比低等缺点,很难满足大数据量场景下的生产实践要求。


技术实现要素:

3.对于上述问题,本技术提供了一种数据压缩方法及电子设备,以提高压缩比和压缩速度。
4.本技术实施例提供的技术方案包括:
5.一种数据压缩方法,所述方法包括:
6.按照相同时间间隔获取原始数据,并将获取到的原始数据划分为多个第一数组;
7.对于任一第一数组,依据业务精度,以及所述原始数据中的最大值和/或最小值,将所述第一数组转换为第二数组,其中,所述第二数组中的数据类型为整数类型;
8.依据设定的差分类型,将所述第二数组转换为第三数组;
9.依据所述第三数组中的最大值,确定对所述第三数组中的数据进行二进制存储的二进制存储位宽;
10.依据所述二进制存储位宽,将所述第三数组中各数据转换为等宽比特流,并转换为二进制字节数组;
11.依据获取到的原始数据对应的二进制字节数组,生成存储文件并进行存储。
12.可选的,所述依据业务精度,以及所述原始数据中的最大值和/或最小值,将所述第一数组转换为第二数组包括:
13.所述业务精度为绝对业务精度时,依据所述绝对业务精度确定转换步长,并依据所述转换步长和所述原始数据中的最大值或最小值将所述第一数组转换为第二数组;或,
14.所述业务精度为相对业务精度时,依据所述相对业务精度、所述原始数据中的最大值和最小值确定转换步长,并依据所述转换步长和所述原始数据中的最大值或最小值将所述第一数组转换为第二数组。
15.可选的,所述依据所述绝对业务精度确定转换步长包括:
16.所述转换步长通过以下公式进行计算:
17.s=2δ
18.其中,s为转换步长,δ为所述绝对业务精度;或,
19.所述依据所述相对业务精度、所述原始数据中的最大值和最小值确定转换步长包括:
20.所述转换步长通过以下公式进行计算:
21.s=(tmax-tmin)*2δ
22.其中,tmax为所述原始数据中的最大值,tmin为所述原始数据中的最小值,s为转换步长,δ为所述相对业务精度。
23.可选的,所述依据所述转换步长和所述原始数据中的最大值或最小值将所述第一数组转换为第二数组包括:
24.对于第一数组中的任一原始数据p[i],通过以下公式对该原始数据进行转换,并将转换后的数据进行取整操作,得到该原始数据对应的整数类型数据:
[0025]
v[i]=(p[i]-tmin)/s。
[0026]
可选的,所述依据所述转换步长和所述第一数组的指定值将所述第一数组转换为第二数组包括:
[0027]
对于第一数组中的任一原始数据p[i],通过以下公式对该原始数据进行转换,并将转换后的数据进行取整操作,得到该原始数据对应的整数类型数据:
[0028]
v[i]=(tmax-p[i])/s。
[0029]
可选的,所述依据设定的差分类型,将所述第二数组转换为第三数组包括:
[0030]
对所述第二数组进行一阶差分处理,得到一阶差分数组;
[0031]
依据所述一阶差分数组中的指定值,将所述一阶差分数组转换为第三数组,其中,所述指定值包括最大值或最小值。
[0032]
可选的,所述依据设定的差分类型,将所述第二数组转换为第三数组包括:
[0033]
对所述第二数组进行一阶差分处理,得到一阶差分数组;
[0034]
对所述第二数组进行二阶差分处理,得到二阶差分数组;
[0035]
对比依据所述一阶差分数组中的最大值和最小值确定的二进制存储位宽和依据所述二阶差分数组中的最大值和最小值确定的二进制存储位宽,确定目标差分数组;
[0036]
依据所述目标差分数组中的指定值,将所述目标差分数组转换为第三数组,其中,所述指定值包括最大值或最小值。
[0037]
可选的,所述依据所述第三数组中的最大值,确定对所述第三数组中的数据进行二进制存储的二进制存储位宽包括:
[0038]
将所述第三数组中的最大值对应的二进制数值的位宽,确定为对所述第三数组中的数据进行二进制存储的二进制存储位宽。
[0039]
可选的,所述第三数组中的最大值对应的二进制数值的位宽通过以下公式确定:
[0040][0041]
其中,dmax为所述第三数组中的最大值,为向下取整运算,w为所述第三数组中的最大值对应的二进制数据值的位宽。
[0042]
可选的,所述依据获取到的原始数据对应的二进制字节数组,生成存储文件包括:
[0043]
依据所述第三数组转换的二进制字节数组创建压缩块,所述压缩块包括:所述第二数组中的首个数据,所述差分类型,所述二进制存储位宽,所述二进制字节数组;
[0044]
依据所述相对业务精度或所述绝对业务精度及所述原始数据中的最大值和最小值的差值获取第一数组转换为第二数组的转换步数;
[0045]
依据所述原始数据总个数、所述压缩块中的原始数据个数、所述第一数组的最大值、所述第一数组的最小值、所述转换步数创建文件头;
[0046]
依据所述文件头和所述压缩块创建临时文件,并将所述临时文件压缩为存储文件。
[0047]
可选的,所述依据所述绝对业务精度获取第一数组转换为第二数组的转换步数包括:
[0048]
所述转换步数通过以下公式进行计算:
[0049]
c=1/(2δ)
[0050]
其中,c为所述转换步数,δ为所述相对业务精度。
[0051]
可选的,所述依据所述业务精度及所述原始数据中的最大值和最小值的差值获取第一数组转换为第二数组的转换步数包括:
[0052]
所述转换步数通过以下公式进行计算:
[0053]
c=(tmax-tmin)/2δ
[0054]
其中,tmax为所述原始数据中的最大值,tmin为所述原始数据中的最小值,c为所述转换步数,δ为所述绝对业务精度。
[0055]
可选的,所述将所述临时文件压缩为存储文件之后,还包括:
[0056]
解压所述存储文件以获得所述临时文件;
[0057]
读取所述临时文件以获得所述文件头和所述压缩块;
[0058]
获取所述压缩块中的二进制存储位宽和二进制字节数组,依据所述二进制存储位宽,将所述二进制字节数组中各数据转换为等宽比特流,并转换为所述第三数组;
[0059]
依据所述压缩块中记录的第二数组的首个数据,所述第一数组的最大值、所述第一数组的最小值、所述文件头中记录的转换步数将所述第三数组中的数据转换为原始数据。
[0060]
本技术实施例还提供了一种电子设备,该电子设备包括:
[0061]
一个或多个处理器;
[0062]
机器可读存储介质,用于存储一个或多个计算机可读指令,当所述一个或多个计算机可读指令被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一项公开的方法。
[0063]
由以上技术方案可以看出,本技术中,将原始数据分割为多个数据段,减小后续编码过程中的局部峰谷差,以提高压缩速度和压缩比,并将各数据段依据该原始数据的业务精度转换为整数类型的数据,以去除超出业务精度的无效数据,从而进一步提高压缩速度和压缩比,还将整数类型的数据进行差分处理,以减小需要存储的数据值,从而进一步提高压缩速度和压缩比,最后还将差分处理后的数据以二进制格式存储,使该数据占用空间更小,读写速度更快,实现提高压缩比和压缩速度。
附图说明
[0064]
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
[0065]
图1为本技术实施例提供的方法流程图;
[0066]
图2为本技术另一个实施例提供的方法流程图;
[0067]
图3为本技术实施例提供的装置结构图;
[0068]
图4为本技术实施例提供的电子设备结构图。
具体实施方式
[0069]
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的装置和方法的例子。
[0070]
在本技术使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术。在本技术和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0071]
应当理解,尽管在本技术可能采用术语第一、第二、第三等来描述各种器件,但这些信息不应限于这些术语。这些术语仅用来将同一类型的器件彼此区分开。例如,在不脱离本技术范围的情况下,第一器件也可以被称为第二器件,类似地,第二器件也可以被称为第一器件。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
[0072]
为了使本领域技术人员更好地理解本技术实施例提供的技术方案,并使本技术实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本技术实施例中技术方案作进一步详细的说明。
[0073]
本技术提供了一种数据压缩方法,用于对现有的数据压缩方法进行了优化,以提高压缩比和压缩速度。
[0074]
参见图1,图1为本技术实施例提供的方法流程图。
[0075]
如图1所示,该流程可包括以下步骤:
[0076]
步骤s101,按照相同时间间隔获取原始数据,并将获取到的原始数据划分为多个第一数组。
[0077]
在本实施例中,可以通过在数据源端保证获取原始数据的时间间隔相同。例如数据源端每隔相同时间向数据接收端发送原始数据,即可达到获取原始数据的时间间隔相同的效果。为了防止数据源端发送的某个时间点的原始数据丢失,数据接收端还可以对接收的原始数据进行相应的处理,例如,当数据接收端接收到的某个时间点的原始数据丢失时,可以在数据接收端对丢失的原始数据进行补齐,例如直接将丢失的前一个原始数据补充为丢失的原始数据,也可以取丢失的原始数据的前一个原始数据和后一个原始数据的平均值为丢失的原始数据,本技术对此不作限制。
[0078]
在本实施例中,可以通过在数据接收端设置划分时间,并依据此划分时间对获取到的原始数据进行划分。例如本实施例中数据接收端每隔20豪秒获取一个原始数据,而要对接收1小时的原始数据进行压缩时,以划分时间为1分钟为例,此时将1小时接收的原始数据划分为60个第一数组,数据接收端每秒钟获取1/(20/1000)=50个原始数据,则每个第一数组中包含的原始数据个数为60秒*50秒/个=3000个。
tmin)/c计算将第一数组转换为第二数组的转换步长,而转换步数c则需要通过公式c=1/2δ计算获得。将两个公式相结合,则可以得出s=(tmax-tmin)*2δ,可知在本实施例中,当获取的业务精度为相对精度时,则需要通过业务精度,上述原始数据中的最大值和最小值计算出转换步长。
[0094]
可选的,上述依据上述转换步长和上述原始数据中的最大值或最小值将所述第一数组转换为第二数组包括:
[0095]
对于第一数组中的任一原始数据p[i],通过以下公式对该原始数据进行转换,并将转换后的数据进行取整操作,得到该原始数据对应的整数类型数据:
[0096]
v[i]=(p[i]-tmin)/s。
[0097]
在本实施例中,通过第一数组中的原始数据与所有原始数据的最小值的差值以及转换步长,除了将原始数据转换为整数类型的数据,还去除了超出业务精度的数据细节,以减少数据,从而达到提升压缩比的效果。
[0098]
可选的,上述依据上述转换步长和上述原始数据中的最大值或最小值将上述第一数组转换为第二数组包括:
[0099]
对于第一数组中的任一原始数据p[i],通过以下公式对该原始数据进行转换,并将转换后的数据进行取整操作,得到该原始数据对应的整数类型数据:
[0100]
v[i]=(pmax-p[i])/s。
[0101]
在本实施例中,通过第一数组中的原始数据与所有原始数据中的最大值的差值以及业务精度,实现了如上述实施例中将原始数据转换为整数类型的数据以及去除了超出业务精度的数据细节,以减少数据,从而达到提升压缩比的效果。
[0102]
步骤s103,依据设定的差分类型,将所述第二数组转换为第三数组。
[0103]
在本实施例中,可以在数据接收端设定一个差分类型,并依据该差分类型对第二数组进行差分处理,将差分处理后的数据确定为第三数组。在本实施例中,将第二数组进行差分处理,可以有效的缩小数据规模,以提高数据的压缩比。
[0104]
可选的,上述依据设定的差分类型,将上述第二数组转换为第三数组包括:
[0105]
对上述第二数组进行一阶差分处理,得到一阶差分数组;
[0106]
依据上述一阶差分数组中的指定值,将上述一阶差分数组转换为第三数组,其中,上述指定值包括最大值或最小值。
[0107]
在本实施例中,可以通过公式d1[i]=v[i+1]-v[i](i=0

n-2)对第二数组进行一阶差分处理,其中,n为该第二数组中的数据个数。
[0108]
同时,对比该一阶差分数组中的各个值,以获得最大值d1max和最小值d1min。
[0109]
当依据d1max将该一阶差分数组转换为第三数组时,通过公式h1[i]=d1max-d1[i],缩小该一阶差分数组的数据规模,进一步提高压缩比。
[0110]
而当依据d1min将该一阶差分数组转换为第三数组时,则通过公式h1[i]=d1[i]-d1min,缩小该一阶差分数组的数据规模,进一步提高压缩比。
[0111]
可选的,上述依据设定的差分类型,将上述第二数组转换为第三数组包括:
[0112]
对上述第二数组进行一阶差分处理,得到一阶差分数组;
[0113]
对上述第二数组进行二阶差分处理,得到二阶差分数组;
[0114]
对比依据上述一阶差分数组中的最大值和最小值确定的二进制存储位宽和依据
上述二阶差分数组中的最大值和最小值确定的二进制存储位宽,确定目标差分数组;
[0115]
依据所述目标差分数组中的指定值,将所述目标差分数组转换为第三数组,其中,所述指定值包括最大值或最小值。
[0116]
在本实施例中,可以先通过公式d1[i]=v[i+1]-v[i](i=0

n-2)对第二数组进行一阶差分处理,以获得一阶差分数组,其中,n为该第二数组中的数据个数。再通过d2[0]=d1[0],d2[i]=d1[i]-d1[i-1](i=1

n-2)对上述一阶差分数组进行一阶差分处理,以获得第二数组的二阶差分数组。
[0117]
此时还可以通过公式h1[i]=d1max-d1[i]或h1[i]=d1[i]-d1min对一阶差分数组进行处理,以进一步缩小该一阶差分数组的数据规模。同时通过公式h2[i]=d2max-d2[i]或h2[i]=d2[i]-d2min对该二阶差分数组进行处理,以进一步缩小该二阶差分数组的数据规模。
[0118]
因二进制存储位宽越小,压缩效果越好,此时可以通过处理后的一阶差分数组中的最大值h1max计算该处理后的一阶差分数组的二进制存储位宽w1,通过处理后的二阶差分数组中的最大值h2max计算该处理后的二阶差分数组的二进制存储位宽w2。对比w1和w2,当w1《=w2时,则确定一阶差分为本实施例中的差分类型,确定一阶差分数组为目标差分类型。而当w1》w2时,则确定二阶差分为本实施例中的差分类型,确定二阶差分数组为目标差分类型。
[0119]
需要说明的是,在上述方案中,是分别对一阶差分数组和二阶差分数组进行处理后,再通过h1max、h2max获得对应的二进制存储位宽,而该处理后数组中的最大值实际上就是该一阶差分数组和二阶差分数组中最大值和最小值的差值,因此为了减少计算量,可以不对一阶差分数组和二阶差分数组进行处理,直接依据一阶差分数组和二阶差分数组中最大值和最小值的差值计算w1和w2,通过w1和w2的对比,确定差分类型,将依据该差分类型对第二数组进行处理的差分数组确定为目标差分数组,例如w1《=w2,目标差分数据为一阶差分数组d1[i],则此时通过公式h1[i]=d1max-d1[i]或h1[i]=d1[i]-d1min对数组d1[i]进行处理,以获得第三数组h1[i],而w1》w2时,目标差分数据为二阶差分数组d2[i],此时通过公式h2[i]=d2max-d2[i]或h2[i]=d2[i]-d2min对该二阶差分数组进行处理,以获得第三数组h2[i]。
[0120]
步骤s104,依据上述第三数组中的最大值,确定对上述第三数组中的数据进行二进制存储的二进制存储位宽。
[0121]
在本实施例中,第三数组中的最大值可以通过将该第三数组中的各个整数类型的数据进行对比获得。
[0122]
可选的,上述依据上述第三数组中的最大值,确定对上述第三数组中的数据进行二进制存储的二进制存储位宽包括:
[0123]
将上述第三数组中的最大值对应的二进制数值的位宽,确定为对所述第三数组中的数据进行二进制存储的二进制存储位宽。
[0124]
由于以二进制格式存储的数据占用的空间较小,因此为了提要压缩效果和压缩比,在本实施例中将第二数组中的整数类型的数据进行二进制存储。本领域的技术人员应该知道,整数类型的数据以二进制格式存储时候,该数据的值与二进制存储位宽成正比,例如整数5转换为二进制格式后的值为101,二进制存储位宽为3,而8转换为二进制格式后的
值为1000,8的二进制存储位宽为4。因此在本实施例中,二进制存储位宽只需满足该整数类型的数据中的最大值,即可满足该第二数组中的其他任意数据。
[0125]
可选的,上述第三数组中的最大值对应的二进制数值的位宽通过以下公式确定:
[0126][0127]
其中,dmax为所述第三数组中的最大值,为向下取整运算,w为所述第三数组中的最大值对应的二进制数据值的位宽。
[0128]
在本实施例中,通过计算公式确定上述第二数组中的最大值vmax的二进制数据值的位宽w,显而易见的,该w还是满足该第二数组中任一数据的最小值w。使得w可以满足该第二数组中任一数据的同时,又不会因为w过大导致影响压缩效果,降低压缩比。
[0129]
s105,依据所述二进制存储位宽,将所述第三数组中各数据转换为等宽比特流,并转换为二进制字节数组,依据获取到的原始数据对应的二进制字节数组,生成存储文件并进行存储。
[0130]
在本实施例中,可以通过上述二进制数据值的位宽w和第一数组中的原始数据总个数计算二进制字节数组的长度,由于对第二数组进行差分处理生成第三数组时会导致数据减1,因此通过公式(n-1)*w/8获得二进制字节数组的长度,数据接收端的设备依据该长度创建二进制字节数组,并将上述第三数组中各数据转换为等宽比特流,存储与该二进制字节数组中。
[0131]
需要说明的是,当二进制字节数组的长度计算结果包含小数时,则将计算结果进行向上取整操作,以保证创建的二进制字节数组能够完整的存储该第二数组中各数据。例如w为10,第一数组中的原始数据总个数为100万,通过公式(n-1)*w/8获得二进制字节数组的长度,将计算结果向上取整后,可以获得二进制字节数组的长度为125万。
[0132]
可选的,上述依据获取到的原始数据对应的二进制字节数组,生成存储文件包括:
[0133]
依据上述第三数组转换的二进制字节数组创建压缩块,该压缩块包括:上述第二数组中的首个数据,上述目标差分数组中的最小值,上述差分类型,上述二进制存储位宽,上述二进制字节数组;
[0134]
依据上述相对业务精度或上述绝对业务精度及上述原始数据中的最大值和最小值的差值获取第一数组转换为第二数组的转换步数;
[0135]
依据所述原始数据总个数、所述压缩块中的原始数据个数、所述第一数组的最大值、所述第一数组的最小值、所述转换步数创建文件头;
[0136]
依据所述文件头和所述压缩块创建临时文件,并将所述临时文件压缩为存储文件。
[0137]
在本实施例中,以其中某个第一数组为例,数据接收端的设备创建该第一数组对应的压缩块,该压缩块中记录了由该第一数组转换的第二数组的首个数据,该第二数组转换为第三数组的差分类型,上述目标差分数组中的最小值,该第三数组的二进制存储位宽,以及该第三数组转换的二进制字节组,记录的数据用于将该压缩块恢复成第一数组。
[0138]
其他各个第一数组依据上述第一数组转换的方法转换成对应的压缩块,并且依据各个第一数组的顺序记录各个压缩块的顺序。
[0139]
并且依据业务精度或上述业务精度及上述原始数据中的最大值和最小值的差值计算获得第一数组转换为第二数组的转换步数,并创建文件头,该文件头中记录了原始数据的总个数,第一数组的数据个数,上述转换步数,和第一数组中的最大值和最小值,用于将压缩后的数据恢复成原始数据。
[0140]
依据顺序合并的各个压缩块和创建头创建临时文件,该临时文件中记录了各个压缩块的位置,各个压缩块以及上述文件头。并且用户可以根据速度需求和压比需求,在数据接收端的设备本地设置对应的压缩工具,对该临时文件进行压缩。例如,如果需要选择压缩速度快的压缩工具,则可以在本地将压缩工具设置为gzip。如果需要选择压缩比高的压缩工具,则可以在本地将压缩工具设置为bzip2。
[0141]
需要说明的是,在本实施例中,根据实际业务场景,还可以先通过上述压缩工具先对各个压缩块进行压缩,再顺序合并各个压缩块创建临时文件。
[0142]
例如实际业务场景需要经常批量解压某时段范围内多个压缩块时,可以选择先合并压缩块再通过压缩工具进行压缩。而当实际使用场景经常只需解压单个压缩块时,可以选择先通过压缩工具压缩再进行合并,以便只需解压单个压缩块可以选择对应的压缩块单独进行解压。具体选择先合并还是先利用压缩工具进行压缩,本技术不作出限定。
[0143]
可选的,上述依据上述相对业务精度获取第一数组转换为第二数组的转换步数包括:
[0144]
上述转换步长通过以下公式进行计算:
[0145]
c=1/(2δ)
[0146]
其中,c为上述转换步数,δ为上述相对业务精度。
[0147]
可选的,上述依据上述绝对业务精度及上述原始数据中的最大值和最小值的差值获取第一数组转换为第二数组的转换步数包括:
[0148]
上述转换步长通过以下公式进行计算:
[0149]
c=(tmax-tmin)/2δ
[0150]
其中,tmax为上述原始数据中的最大值,tmin为上述原始数据中的最小值,c为上述转换步数,δ为上述绝对业务精度。
[0151]
在本实施例中,当数据接收端获取的业务精度为相对精度时,转换步数c则可以通过公式c=1/2δ计算获得。当数据接收端获取的业务精度为绝对精度时,转换步数c则可以通过公式c=(tmax-tmin)/2δ计算获得。
[0152]
至此,完成图1所示流程。
[0153]
在本实施例中,将原始数据分割为多个数据段,减小后续编码过程中的局部峰谷差,以提高压缩速度和压缩比,并将各数据段依据该原始数据的业务精度转换为整数类型的数据,以去除超出业务精度的无效数据,从而进一步提高压缩速度和压缩比,还将整数类型的数据进行差分处理,以减小需要存储的数据值,从而进一步提高压缩速度和压缩比,最后还将差分处理后的数据以二进制格式存储,使该数据占用空间更小,读写速度更快,实现提高压缩比和压缩速度。
[0154]
基于本技术上述描述的数据压缩方法,本技术还提供了上述数据压缩方法对应的数据解压方法。
[0155]
如图2所示,该流程可包括以下步骤:
[0156]
步骤s201,解压上述存储文件以获得上述临时文件,读取所述临时文件以获得所述文件头和所述压缩块。
[0157]
在本实施例中,可以通过在数据接收端的设备本地设置的压缩工具对存储文件进行解压,以获得存储了文件头和各个压缩块的临时文件,并读取该临时文件以获得上述文件头和各个压缩块。
[0158]
步骤s202,获取上述压缩块中的二进制存储位宽和二进制字节数组,依据上述二进制存储位宽,将上述二进制字节数组中各数据转换为等宽比特流,并转换为上述第三数组。
[0159]
在本实施例中,在上述数据压缩方法中创建压缩块时保存了二进制字节数组和该二进制字节数组对应的二进制存储位宽,因此这里可以通过读取上述临时文件中的压缩块,以获得二进制字节数组和该二进制字节数组对应的二进制存储位宽。并依据该二进制存储位宽将该二进制字节数组中的数据转换为整数类型的数据,以获得上述第三数组。
[0160]
s203,依据上述压缩块中记录的第二数组的首个数据,上述第一数组的最大值、上述第一数组的最小值、上述文件头中记录的转换步数将上述第三数组中的数据转换为原始数据。
[0161]
在本实施例中,可以依据各压缩块中的差分类型,将该第三数组转换为第二数组。以差分数组依据该差分数组中的最小值转换为第三数组为例。
[0162]
当差分类型为一阶差分时,该第三数组通过公式d1[i]=h1[i]+d1min(i=0

n-2)转换为一阶差分数组。而压缩块中记录了第二数组的首个数据v[0],因此该一阶差分数组中可以通过公式v[i+1]=v[i]+d1[i](i=0

n-2)转换为第二数组。
[0163]
而当差分类型为二阶差分时,该第三数组可以通过公式d2[i]=d[i]+dmin(i=0

n-2)转换为二阶差分数组,该二阶差分数组通过公式d1[0]=d2[0]+dmin,d1[i]=d1[i-1]+d2[i]转换为一阶差分数组,再依据压缩块中记录的第二数组的首个数据v[0]和公式v[i+1]=v[i]+d1[i](i=0

n-2)将一阶差分数组转换为第二数组。
[0164]
读取文件头中的第一数组的最大值和最小值,转换步数,依据公式p[i]=pmin+(pmax-pmin)/c*v[i](i=0

n-1)将第二数组转换为第一数组。
[0165]
对各个压缩块执行上述方法,获得各个压缩块对应的第一数组,并且依据各个压缩块的顺序,可以知道各个第一数组的先后顺序,使各个原始数据的顺序不会发生改变。
[0166]
至此,完成图2所示流程。
[0167]
在本实施例中,还提供了一种数据解压方法,可以依据上述压缩方法对压缩后的文件进行解压,以获得原始数据,并且解压后的原始数据不包含超出业务精度的无效数据。
[0168]
下面通过一个具体实施例对图1、2所示流程进行说明。本实施例中以风力发电机组24小时20ms高频数据文件压缩与解压示例。
[0169]
首先,通过计算可知,一秒的原始数据量为1000ms/20ms=50个,24小时的原始数据总量为n=50个/秒*86400秒/天=432万个。
[0170]
在本实施例中,数据压缩步骤包括:
[0171]
1、定义该变量业务精度需求δ为满量程的0.0125%。
[0172]
2、对比所有原始数据,获得该432万个原始数据中的最大值tmax=0.745439和最小值tmin=-0.649694。
[0173]
3、由于峰谷值小于满量程,因此通过峰谷值计算的实际精度高于业务需求,这里以该日峰谷差(tmax-tmin)作为满量程,计算各原始数据的转换步数和转换步长,c=1/(2δ)=1/(0.0125%*2)=4000,s=(tmax-tmin)/c=(0.745439+0.649694)/4000=3.4878e-4。
[0174]
4、将24小时432万原始数据按分钟顺序切割为1440段,每段包含(1000ms/20ms)*60=3000个原始数据,记为第一数组p[]。
[0175]
5、将第一数组p[]按公式v[i]=(p[i]-tmin)/s=(p[i]+0.649694)/3.4878e-4(i=0

n-1)四舍五入转换为第二数组v[]。
[0176]
6、计算第二数组v[]的一阶差分d1[i]=v[i+1]-v[i](i=0

n-2),获得一阶差分数组d1以及d1的最大值d1max和最小值d1min:d1max=1,d1min=-1。
[0177]
7、计算一阶差分数组d1的峰谷差d1pp和存储位数w1:d1pp=d1max-d1min=1+1=2,w1=log(d1pp)/log(2)+1=log(2)/log(2)+1=2(向下取整)
[0178]
8、计算第二数组v[]的二阶差分d2[0]=d1[0],d2[i]=d1[i]-d1[i-1](i=1

n-2),获得二阶差分数组d2以及d2的最大值d2max和最小值d2min:d2max=2,d2min=-2。
[0179]
9、计算二阶差分序列d2的峰谷差d2pp和存储位数w2:d2pp=d2max-d2min=2+2=4,w2=log(d2pp)/log(2)+1=log(4)/log(2)+1=3(向下取整)
[0180]
10、比较w1和w2的大小,取其较小值w1对应的差分数组d1为目标差分数组。
[0181]
11、按公式h[i]=d[i]-dmin将目标差分数组转换为第三数组h[]。并将h[]顺序无隙压入长度为w*(n-1)/8=2*2999/8=750(向上取整)的二进制字节数组y。
[0182]
12、创建每段数据(时长t=1分钟)的压缩块r,首段数据示例:r={v[0](第二数组首个数据=1756),dt(差分类型=一阶差分),dmin(目标差分数组最小值=-1),w(二进制存储位宽=2),y(二进制数组长度=750字节)}。
[0183]
13、创建文件头:h={x(原始数据总个数=432万),n(数据块容量=3000),c(转换步数=4000),tmax(最大原始值=0.745439),tmin(最小原始值=-0.649694)}
[0184]
14、顺序合并所有r块生成临时文件:f={h(文件头),o[i](i=0

n-1)(各r块位置),r[i](i=0

n-1)(各r块内容)}
[0185]
15、置风力发电机的本地压缩工具为bzip2,将临时文件f压缩为存储文件。本实施例中压缩比约等于50,压缩时间约等于0.15秒。
[0186]
数据解压步骤包括:
[0187]
1、用bzip2解压存储文件,获得临时文件f={h(文件头),o[i](i=0

n-1)(各r块位置),r[i](i=0

n-1)(各r块内容)}。
[0188]
2、读取f获取文件头h={432万(原始数据总个数x),3000(数据块容量n),4000(转换步数c),0.745439(最大原始值tmax),-0.649694(最小原始值tmin)}。
[0189]
3、计算数据块总数m=x/n=4320000/3000=1440(向上取整)。
[0190]
4、读取数据块索引o,得到各数据块相对文件头的地址偏移量o[i](i=0

m-1)和长度l[i]=o[i+1]-o[i](i=0

m-1),其中,l[m]为文件长度。
[0191]
5、读取数据块r,首段数据示例r={1756(首个整数值v[0]),1(差分类型dt=一阶差分),-1(目标差分数组最小值dmin),2(二进制存储位宽w),数据块(二进制字节数组y)}
[0192]
6、通过文件头中的二进制存储位宽w,将数据块中的二进制字节数组y中各数据转
换为等宽比特流,并转换为整数类型的数据,以获得上述第三数组h[]。
[0193]
7)读取数据块中的差分类型为一阶差分,目标差分数组最小值dmin=-1,依据公式d1[i]=h[i]+hmin=h[i]-1(i=0

n-2)将第三数组h[]转换为目标差分数组,在本实施例中也就是一阶差分数组d1[]。
[0194]
8、读取文件头中的最大原始值pmax、最小原始值pmin、满量程步数c和数据块中的第二数组首个数据v[0],依据公式
[0195]
s=(pmax-pmin)/c=(0.745439+0.649694)/4000=3.4878e-4,
[0196]
v[0]=1756,p[0]=pmin+s*v[0]=-0.649694+3.4878e-4*1756=-0.037236,v[1]=v[0]+d1[0]=1756+1=1757,
[0197]
p[1]=pmin+s*v[1]=-0.649694+3.4878e-4*1757=-0.036888将一阶差分数组中的数据转换为原始数据。
[0198]
至此,完成上述实施例所示的流程。
[0199]
在本实施例中,通过将风力发电机24小时的原始数据依据图1、2中的方法进行压缩和解压缩,实现了该原始数据的压缩比达到了50,压缩时间0.15秒,解压时间0.1秒。而采用目前常用的压缩方法对该原始数据进行压缩,效果如表1所示:
[0200]
压缩方法压缩比压缩速度(ms)解压速度(ms)csv(无损)gzip压缩3.172222331csv(无损)bzip2压缩3.3030781453bin(无损)gzip压缩1.16756164bin(无损)bzip2压缩1.1719021167
[0201]
表1
[0202]
对比可知,本实施例中提供的压缩方法实现了提高压缩比,压缩速度和解压速度的效果。
[0203]
进一步的,本技术在针对不同精度,不同压缩工具情况下,对本技术和当前常用的压缩方法进行了对比。
[0204]
平滑曲线下的对比效果如表2所示:
[0205]
压缩方法压缩比压缩速度(ms)解压速度(ms)csv(无损)gzip压缩3.172222331csv(无损)bzip2压缩3.3030781453bin(无损)gzip压缩1.16756164bin(无损)bzip2压缩1.1719021167本方法(精度0.012%)不压缩14.635739本方法(精度0.012%)gzip压缩39.2116948本方法(精度0.012%)bzip2压缩48.7015999本方法(精度0.00076%)不压缩7.525646本方法(精度0.00076%)gzip压缩14.0426966本方法(精度0.00076%)bzip2压缩16.44258195
[0206]
表2
[0207]
跳变曲线下的对比效果如表3所示:
[0208][0209][0210]
表3
[0211]
可知本技术在不同精度,不同压缩工具情况下,均实现了提高压缩比,压缩速度和解压速度的效果。
[0212]
以上对本技术提供的方法进行了描述,下面对本技术提供的装置进行描述:
[0213]
参见图3,图3为本技术实施例提供的装置结构图。该装置对应图1和2所示流程。如图3所示:
[0214]
本技术提供了一种数据压缩装置,所述装置包括:
[0215]
数据划分单元301,用于按照相同时间间隔获取原始数据,并将获取到的原始数据划分为多个第一数组;
[0216]
第一数据转换单元302,用于对于任一第一数组,依据业务精度,以及所述原始数据中的最大值和/或最小值,将所述第一数组转换为第二数组,其中,所述第二数组中的数据类型为整数类型;
[0217]
第二数据转换单元303,用于依据设定的差分类型,将所述第二数组转换为第三数组;
[0218]
确定存储位宽单元304,用于依据所述第三数组中的最大值,确定对所述第三数组中的数据进行二进制存储的二进制存储位宽;
[0219]
第三数据转换单元305,用于依据所述二进制存储位宽,将所述第三数组中各数据转换为等宽比特流,并转换为二进制字节数组;
[0220]
存储单元306,用于依据获取到的原始数据对应的二进制字节数组,生成存储文件并进行存储。
[0221]
可选的,所述第一数据转换单元302依据业务精度,以及所述原始数据中的最大值和/或最小值,将所述第一数组转换为第二数组包括:
[0222]
所述业务精度为绝对业务精度时,依据所述绝对业务精度确定转换步长,并依据所述转换步长和所述原始数据中的最大值或最小值将所述第一数组转换为第二数组;或,
[0223]
所述业务精度为相对业务精度时,依据所述相对业务精度、所述原始数据中的最大值和最小值确定转换步长,并依据所述转换步长和所述原始数据中的最大值或最小值将所述第一数组转换为第二数组。
[0224]
可选的,所述第一数据转换单元302依据所述绝对业务精度确定转换步长包括:
[0225]
所述转换步长通过以下公式进行计算:
[0226]
s=2δ
[0227]
其中,s为转换步长,δ为所述绝对业务精度;或,
[0228]
所述第一数据转换单元302依据所述相对业务精度、所述原始数据中的最大值和最小值确定转换步长包括:
[0229]
所述转换步长通过以下公式进行计算:
[0230]
s=(tmax-tmin)*2δ
[0231]
其中,tmax为所述原始数据中的最大值,tmin为所述原始数据中的最小值,s为转换步长,δ为所述相对业务精度。
[0232]
可选的,所述第一数据转换单元302依据所述转换步长和所述原始数据中的最大值或最小值将所述第一数组转换为第二数组包括:
[0233]
对于第一数组中的任一原始数据p[i],通过以下公式对该原始数据进行转换,并将转换后的数据进行取整操作,得到该原始数据对应的整数类型数据:
[0234]
v[i]=(p[i]-tmin)/s。
[0235]
可选的,所述第一数据转换单元302依据所述转换步长和所述第一数组的指定值将所述第一数组转换为第二数组包括:
[0236]
对于第一数组中的任一原始数据p[i],通过以下公式对该原始数据进行转换,并将转换后的数据进行取整操作,得到该原始数据对应的整数类型数据:
[0237]
v[i]=(tmax-p[i])/s。
[0238]
可选的,所述第二数据转换单元303依据设定的差分类型,将所述第二数组转换为第三数组包括:
[0239]
对所述第二数组进行一阶差分处理,得到一阶差分数组,将所述一阶差分数组确定为目标差分数组;
[0240]
依据所述目标差分数组中的指定值,将所述目标差分数组转换为第三数组,其中,所述指定值包括最大值或最小值。
[0241]
可选的,所述第二数据转换单元303依据设定的差分类型,将所述第二数组转换为第三数组包括:
[0242]
对所述第二数组进行一阶差分处理,得到一阶差分数组;
[0243]
对所述第二数组进行二阶差分处理,得到二阶差分数组;
[0244]
对比依据所述一阶差分数组中的最大值和最小值确定的二进制存储位宽和依据所述二阶差分数组中的最大值和最小值确定的二进制存储位宽,确定目标差分数组;
[0245]
依据所述目标差分数组中的指定值,将所述目标差分数组转换为第三数组,其中,所述指定值包括最大值或最小值。
[0246]
可选的,所述确定存储位宽单元304依据所述第三数组中的最大值,确定对所述第三数组中的数据进行二进制存储的二进制存储位宽包括:
[0247]
将所述第三数组中的最大值对应的二进制数值的位宽,确定为对所述第三数组中的数据进行二进制存储的二进制存储位宽。
[0248]
可选的,所述第三数组中的最大值对应的二进制数值的位宽通过以下公式确定:
[0249][0250]
其中,dmax为所述第三数组中的最大值,为向下取整运算,w为所述第三数组中的最大值对应的二进制数据值的位宽。
[0251]
可选的,所述存储单元306依据获取到的原始数据对应的二进制字节数组,生成存储文件包括:
[0252]
依据所述第三数组转换的二进制字节数组创建压缩块,所述压缩块包括:所述第二数组中的首个数据,所述目标差分数组中的最小值,所述差分类型,所述二进制存储位宽,所述二进制字节数组;
[0253]
依据所述相对业务精度或所述绝对业务精度及所述原始数据中的最大值和最小值的差值获取第一数组转换为第二数组的转换步数;
[0254]
依据所述原始数据总个数、所述压缩块中的原始数据个数、所述第一数组的最大值、所述第一数组的最小值、所述转换步数创建文件头;
[0255]
依据所述文件头和所述压缩块创建临时文件,并将所述临时文件压缩为存储文件。
[0256]
可选的,所述存储单元306依据所述相对业务精度获取第一数组转换为第二数组的转换步数包括:
[0257]
所述转换步数通过以下公式进行计算:
[0258]
c=1/(2δ)
[0259]
其中,c为所述转换步数,δ为所述相对业务精度。
[0260]
可选的,所述存储单元306依据所述绝对业务精度及所述原始数据中的最大值和最小值的差值获取第一数组转换为第二数组的转换步数包括:
[0261]
所述转换步数通过以下公式进行计算:
[0262]
c=(tmax-tmin)/2δ
[0263]
其中,c为所述转换步数,δ为所述绝对业务精度。
[0264]
可选的,所述存储单元306将所述临时文件压缩为存储文件之后,还包括:
[0265]
解压单元307,用于解压所述存储文件以获得所述临时文件;
[0266]
读取所述临时文件以获得所述文件头和所述压缩块;
[0267]
获取所述压缩块中的二进制存储位宽和二进制字节数组,依据所述二进制存储位宽,将所述二进制字节数组中各数据转换为等宽比特流,并转换为所述第三数组;
[0268]
依据所述压缩块中记录的第二数组的首个数据,所述第一数组的最大值、所述第一数组的最小值、所述文件头中记录的转换步数将所述第三数组中的数据转换为原始数据。
[0269]
本技术实施例还提供了图3所示装置的硬件结构。参见图4,图4为本技术实施例提供的电子设备结构图。如图4所示,该硬件结构可包括:处理器和机器可读存储介质,机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;所述处理器用于执行机器可
执行指令,以实现本技术上述示例公开的方法。
[0270]
基于与上述方法同样的申请构思,本技术实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被处理器执行时,能够实现本技术上述示例公开的方法。
[0271]
示例性的,上述机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:ram(radom access memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
[0272]
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
[0273]
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本技术时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0274]
本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0275]
本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0276]
而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。
[0277]
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0278]
以上所述仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1