发明内容
本发明要解决的问题是:对于工业现场环境产生的数据,需要进行即时存储并且对存储的历史数据进行快速高效的访问和分析,要在有限的物理存储空间中存储大量的历史数据,同时还需要考虑数据能够被快速的存储和访问,现有的数据压缩方法不能满足这些要求,易受噪点、野点、噪声干扰,压缩效果不够理想。
本发明的技术方案为:一种基于数值排序线性拟合的历史数据压缩方法,包括以下步骤:
1)对获取的历史数据按值的大小排序:从历史数据缓冲队列获取历史数据,进行排序处理,把历史数据按照值的大小从小到大进行排序;
2)值域线性拟合:对于排好顺序的历史数据,以其位序为横坐标,值为纵坐标建立值域,按照排序顺序对历史数据依序进行线性拟合处理,线性拟合处理最终获得两个点,这两个点连接的直线为拟合直线,通过拟合直线来拟合排序在这两个点之间的所有点,从而达到数据压缩的目的;线性拟合处理中,点到已获得的拟合直线的偏差必须在设定的压缩精度范围内,如所处理的点到拟合直线的偏差在设定的压缩精度范围外,则以这一点为起点开始新的线性拟合处理;
3)按域存储:对线性拟合处理的数据进行域分隔,产生标识域、时间域和数据值域三部分,标识出某时间点的值是否被压缩,为拟合还原提供依据;
4)数据处理完成判断:检查获取的历史数据是否都已完成压缩过程,如果完成则获取新的历史数据,执行步骤1)开始下一轮压缩,没有完成则回到步骤2)。
优选的,历史数据排序前进行预处理:
11)获取当前历史缓冲队列中存储的缓冲数据量;
12)缓冲数据量判断:设定一次处理数据量的限值,对从历史数据缓冲队列获取的历史数据量与所述限值进行比较,超过限值,则对获取的历史数据按值的大小排序,否则继续从历史数据缓冲队列获取历史数据。
值域线性拟合具体为:
21)设置起点和待压点并保存起点:对于排好顺序的历史数据的值,按照排序顺序依序进行处理,按位序取出待处理的第一个点作为拟合起点(x1,y1),下一点作为待压点(xn,yn),如果本步骤是第一次执行则存储起点(x1,y1);
22)求出待压点的门限点和门限点斜率范围:设置压缩精度d%,求出待压点(xn,yn)的两个门限点(xn,yn±|ynd%|),所述门限点是指点值按照压缩精度确定的可近似范围边界,可近似范围为[yn-|ynd%|,yn+|ynd%|],然后分别求出从拟合起点(x1,y1)到两个门限点所确定直线的斜率范围的最小值kn min和最大值kn max:
通过[kn min,kn max]确定本次拟合过程的斜率判断范围[kmin,kmax]:
[kmin,kmax]=[kn min,kn max]
23)数据量判断:按位序检查待压点是否还存在下一点,如果没有下一点,则转到步骤27)保存待压点;如果存在下一点,则转到步骤24);
24)获得判断点并求出起点到判断点的斜率:按位序取出待压点的下一点作为判断点(xn+1,yn+1),求出从拟合起点到判断点所确定直线的斜率kn+1:
25)斜率范围判断:检查kn+1是否在[kmin,kmax]范围内,在此范围内表示待压点可以被压缩,转到步骤26);不在此范围内,表示待压点不能被压缩,需要开始新的压缩过程,转到步骤27);
26)丢弃当前待压点并重新设置新待压点:丢弃待压点(xn,yn),把判断点(xn+1,yn+1)设置为新待压点,求出新待压点的两个门限点(xn+1,yn+1±|yn+1d%|),再分别求出从起点到两个门限点所确定直线的斜率范围的最小值kn+1min和最大值kn+1max:
更新斜率判断范围[kmin,kmax]:
[kmin,kmax]=[max(kmin,kn+1min),min(kmax,kn+1max)]
新待压点设置好后,继续步骤23);
27)保存待压点:存储当前的待压点(xn,yn),本次压缩过程结束,并把缓存中待处理的第一个点设置为新一轮压缩的拟合起点,转到步骤21)进行下一拟合过程的处理。
按域存储具体为:将线性拟合的各种数据分为标识域、时间域、数据值域三个部分存储,标识域存储压缩标识,压缩标识按位序来标识值域中在该位序的历史数据是否被压缩,时间域存储每一个历史数据本身所对应的时间;数据值域存储线性拟合中与拟合处理相关的数据。
本发明的目的在于提供一种基于数值排序线性拟合的历史数据压缩方法,它能在保证数据压缩效率的前提下在设定的数据精度范围内利用线性拟合恢复数据,并且能够隔离测量噪声干扰,从而减小测量误差对压缩算法的影响。
本发明的有益效果在于:
本发明在处理数据压缩时采用了数据按值排序的方法,对于稳态或线性数据经过排序后可以使得线性趋势更加明显,而且可以达到分隔噪点的目的;对于非线性数据或非稳态数据经过排序后,绝大多数会体现出正态分布的特点,即在某个较小的值区间内集中绝大多数的值。这样,通过排序使得数据规则化,适合于压缩。压缩方式采用线性拟合方法,通过两个点连接的直线来拟合位序在这两个点之间的所有点,并且这些点到该直线的偏差控制在设定的压缩精度范围内,从而达到有效的数据压缩的目的,由于线性拟合压缩方法处理过程简单,而且可以获得较高的压缩比,所以是一种高效的压缩方法。通过本发明的压缩方法,基本解决了非稳态数据和噪点对压缩效率的影响,具有较高的实际应用价值。
具体实施方式
以下结合附图对本发明做进一步说明。
图1和图2是本发明基于数值排序线性拟合的历史数据压缩方法的流程图。包括以下步骤:
1)对获取的历史数据按值的大小排序:从历史数据缓冲队列获取历史数据,进行排序处理,把历史数据按照值的大小从小到大进行排序;
2)值域线性拟合:对于排好顺序的历史数据,以其位序为横坐标,值为纵坐标建立值域,按照排序顺序对历史数据依序进行线性拟合处理,线性拟合处理最终获得两个点,这两个点连接的直线为拟合直线,通过拟合直线来拟合排序在这两个点之间的所有点,从而达到数据压缩的目的;线性拟合处理中,点到已获得的拟合直线的偏差必须在设定的压缩精度范围内,如所处理的点到拟合直线的偏差在设定的压缩精度范围外,则以这一点为起点开始新的线性拟合处理;
3)按域存储:对线性拟合处理的数据进行域分隔,产生标识域、时间域和数据值域三部分,标识出某时间点的值是否被压缩,为拟合还原提供依据;
4)数据处理完成判断:检查获取的历史数据是否都已完成压缩过程,如果完成则获取新的历史数据,执行步骤1)开始下一轮压缩,没有完成则回到步骤2)。
其中,步骤1)优选进行拟合压缩预处理:
11)获取当前历史缓冲队列中存储的缓冲数据量;
12)缓冲数据量判断:设定一次处理数据量的限值,对从历史数据缓冲队列获取的历史数据量与所述限值进行比较,超过限值,则对获取的历史数据按值的大小排序,否则继续从历史数据缓冲队列获取历史数据。
下面具体介绍本发明的值域线性拟合步骤,如图2所示:
值域线性拟合具体为:
21)设置起点和待压点并保存起点:对于排好顺序的历史数据的值,按照排序顺序依序进行处理,按位序取出待处理的第一个点作为拟合起点(x1,y1),下一点作为待压点(xn,yn),如果本步骤是第一次执行则存储起点(x1,y1);
22)求出待压点的门限点和门限点斜率范围:设置压缩精度d%,求出待压点(xn,yn)的两个门限点(xn,yn±|ynd%|),所述门限点是指点值按照压缩精度确定的可近似范围边界,可近似范围为[yn-|ynd%|,yn+|ynd%|],然后分别求出从拟合起点(x1,y1)到两个门限点所确定直线的斜率范围的最小值kn min和最大值knmax:
通过[kn min,knmax]确定本次拟合过程的斜率判断范围[kmin,kmax]:
[kmin,kmax]=[kn min,kn max]
23)数据量判断:按位序检查待压点是否还存在下一点,如果没有下一点,则转到步骤27)保存待压点;如果存在下一点,则转到步骤24);
24)获得判断点并求出起点到判断点的斜率:按位序取出待压点的下一点作为判断点(xn+1,yn+1),求出从拟合起点到判断点所确定直线的斜率kn+1:
25)斜率范围判断:检查kn+1是否在[kmin,kmax]范围内,在此范围内表示待压点可以被压缩,转到步骤26);不在此范围内,表示待压点不能被压缩,需要开始新的压缩过程,转到步骤27);
26)丢弃当前待压点并重新设置新待压点:丢弃待压点(xn,yn),把判断点(xn+1,yn+1)设置为新待压点,求出新待压点的两个门限点(xn+1,yn+1±|yn+1d%|),再分别求出从起点到两个门限点所确定直线的斜率范围的最小值kn+1min和最大值kn+1max:
更新斜率判断范围[kmin,kmax]:
[kmin,kmax]=[max(kmin,kn+1min),min(kmax,kn+1max)]
新待压点设置好后,继续步骤23);
27)保存待压点:存储当前的待压点(xn,yn),本次压缩过程结束,并把缓存中待处理的第一个点设置为新一轮压缩的拟合起点,转到步骤21)进行下一拟合过程的处理。
图3为值域线性拟合算法的实例模拟示意图。首先设置起点和待压点并保存起点。按位序取出待处理的第一个点S设置为起点,下一点A1设置为待压点,把起点S保存到结果队列中。然后,求出待压点的门限点和门限点斜率范围。两个门限点AH和AL按照设置的压缩精度d%通过下式确定:
AH=(xn,yn+|ynd%|)
AL=(xn,yn-|ynd%|)
由起点到两个门限点确定的直线的斜率通过下式得到:
通过下式得到斜率判断范围[kmin,kmax]:
[kmin,kmax]=[kn min,kn max]
然后,进行数据量判断。检查是否还存在下一点,如果没有下一点,表示处理过程结束,保存当前的待压点到结果队列中;如果存在下一点,则执行获得判断点并求出起点到判断点的斜率。取出缓冲中当前待处理的点C作为判断点,用于检查待压点A1是否可以被压缩,通过下式求出起点S到判断点C的斜率:
然后,斜率范围判断。检查kn+1是否在[kmin,kmax]范围内,不在此范围内,表示待压点A1不能被压缩,需要开始新的压缩过程,本次压缩过程结束,则执行保存待压点A1;如果在此范围内,表示待压点A1可以被压缩,执行丢弃当前待压点并把判断点设置为待压点。
丢弃待压点A,把判断点C设置为新的待压点A’,通过下式求出待压点的两个门限点:
AH=(xn+1,yn+1+|yn+1d%|)
AL=(xn+1,yn+1-|yn+1d%|)
再通过下式分别求出从起点到两个门限点所确定直线的斜率范围的最大值和最小值:
通过下式更新斜率判断范围[kmin,kmax ]:
[kmin,kmax]=[max(kmin,kn+1min),min(kmax,kn+1max)]
继续执行数据量判断,进行后续点的处理,直到线性拟合步骤全部结束。
线性拟合步骤结束,进行按域存储。将线性拟合的各种数据分为标识域、时间域、数据值域三个部分存储,标识域存储压缩标识,压缩标识按位序来标识值域中在该位序的历史数据是否被压缩,时间域存储每一个历史数据本身所对应的时间;数据值域存储线性拟合中与拟合处理相关的数据,所述的相关数据包括设定的压缩精度,拟合起点、待压点的值,拟合直线的数据等,例如,步骤4)获得的压缩后的数据就是数据值域的部分。
进行数据处理完成判断,检查历史缓冲队列中的数据是否已经全部处理完成,如果完成则获取新的历史数据,执行步骤1)开始下一轮压缩,没有完成则回到步骤2)。
本发明方法压缩数据后,需要还原时,按照标识域将被压缩的点还原,利用数据值域存储的数据,通过与压缩时线性拟合逆向的方式,还原出被压缩的点,再根据时间域将所有点按时间重新排列,还原出原始历史数据。
为了更好的说明本发明的方法在数据压缩率方面的优势,采用仿真方式对各种类型的数据利用本发明的方法进行压缩,并与旋转门压缩算法进行比较。
图4~7是稳态值仿真实例,使用了一个测量点的200点实时数据。图4给出了未经过压缩的原始数据曲线。图5使用了本发明的数值排序线性拟合的历史数据压缩方法对值域拟合的结果,拟合后的曲线横坐标为值排序的位序,图中的黑点表示压缩过程中保存的点。图6给出了通过本压缩方法压缩的数据经过还原的数据曲线,可以看出本压缩方法保留了绝大部分原始数据的细节。图7为使用旋转门压缩算法的还原后的曲线图,可以看出数据前半部分的细节基本都被压缩,而无法还原。经过该仿真测试,可以看出对于稳态值的处理本发明的数值排序线性拟合的历史数据压缩方法不仅可以获得较大的压缩比,而且与旋转门压缩算法相比可以保留数据的绝大多数细节,得到的数据更加真实。
图8~11是非线性值仿真实例,使用了一个测量点的1000点实时数据。图8给出了原始的数据曲线。图9使用了本发明的压缩方法,图中的黑点表示压缩过程中保存的点。图10是本发明的压缩数据还原的数据曲线,图11是使用旋转门压缩方法的还原数据曲线。可以看出,在处理该非线性值拟合过程中,本压缩方法的压缩比要比旋转门压缩算法高得多,而且还原曲线也相当准确。
图12~15是非稳态值仿真实例,使用了一个测量点的500点实时数据。图12给出了原始的数据曲线。图13使用了本发明的压缩方法,图中的黑点表示压缩过程中保存的点。图14是本发明的压缩数据还原的数据曲线,图15是使用旋转门压缩方法的还原数据曲线。可以看出,对非稳态值旋转门压缩方法基本没有压缩效果,而使用本发明的压缩方法,在确保数据精度的情况下,仍然获得了较高的压缩比。
图16~19是振动值仿真实例,使用了一个测量点的500点实时数据。类似非稳态仿真,旋转门压缩方法基本没有压缩效果,而使用本发明的压缩方法,仍然可以获得一定压缩比。
通过以上的仿真实验,说明本发明的数值排序线性拟合的历史数据压缩方法在获得较高数据压缩比前提下,不仅确保数据了还原精度,而且还能保留绝大部分数据的微变细节。本发明的压缩方法对于绝大多数非稳态数据的处理,基本可以获得较好的效果,而且随着数据量的增大,将趋向更好的压缩效果。