无心飞扬 发表于 2025-2-13 11:29:48

数据采集补值Or卡尔曼滤波——遇到空值怎么办

数据采集,有很多类型。

比如采集每个人的温度,这种更多是数据统计为主。比如采集一个人一天不同时刻的温度,这种就是带着时间属性的数据采集。在工控实际环境中,更多是这种数据采集为主。而采集的数据,我们一般呈现出来的也有不同的。一般也是根据不同的需求来呈现。比如直接数据,更多是在界面上有个元件,直接显示当前的数据。高铁上面显示的当前速度,当前温度。都是这类的。在HMI上面的直接显示当前的产量,计数,温度,湿度,也是这类数据。还有一种是报警事件。比如设定一个条件,当温度超过30度就产生一个事件。事件就在界面上弹出来,可以配合声音警报或者在界面上凸出显示,如果是物联网的话,还可以将报警信息推送到手机,微信等。除此之外,还有一种数据采集,一般就历史数据,趋势图数据。这种就是和时间有关系,比如,定时1s或者1分钟采集一次数据。连续采集几天或者几个月,甚至更久的数据。这样的历史数据,就可以通过趋势图,或者导出到电脑,用表格可以制作各种数据图表,可用于表示,分析,记录等用途,可用于科研,工艺品质的分析,产量的指导工作等。像这种历史数据采集,比如1分钟采集一次。一般是1分钟的时间到了,然后去执行一次采集,并记录。但是在现场实际通信中,特别是如果使用串口通信,现场有干扰的,就会遇到某一次采集,是采集不到的情况,就会出现数据为空的情况。
12:00:0636.1
12:00:0736.2
12:00:0836.3
12:00:09丢了
12:00:1036.5
12:00:1136.6

这种情况怎么办呢。下面我们就来聊聊。


行业经理:这个行业的数据采集,增加个需求,如果遇到某次数据采集不到,想办法补个值进去,让数据好看一些。不然空在那里很难看。
普通开发:这个怎么补嘛。这一次就是采集不到呀。就是为空的数据呀。总不能做个假的数据进去吧。我做不了。
普通项目经理:实在不行,这次的数据就用上一次的数据直接填充,或者取前三次的数据,算个平均值,填进去,反正客户又发现不了,怎么就做不了呢。这不是很简单么。
高级开发:可以考虑插值法嘛,必要的话 ,可以使用卡尔曼滤波来填补这一次获取不到的数据。
高级项目经理:卡尔曼滤波,就是可以利用历史的数据,对未来进行估计,如果这一次采集不到,就可以利用卡尔曼滤波,估算出这一次的数据,填写进去。当然,也可以先跳过这一次的数据,往后多采集一些,再进行反推那一次丢失的数据。也不是不可以做这个事的。在实际应用场景中,确实会出现某一次数据采集不到的情况,如果想更好的填补这一次丢失的数据,卡尔曼滤波则是一种不错的选择。
那什么是卡尔曼滤波呢。卡尔曼滤波本就是一种数据处理技术。在很早很早以前,数据采集,主要是通过传感器进行采集,比如采集温度,采集湿度,通过模拟量转数字信号等原理。早期的传感器,在采集精度,准度,数据稳定性上还没有现在的这么好,那自然就存在数据采集有误差,数据有噪声。为了消除噪声,消除误差,科学家们就发明了这个卡尔曼滤波,更好地将数据还原到更真实的情况,同时,还可以将历史数据,预估出后面的数据。比如速度与位置,可以根据每时刻采集的速度和位置,可以大概知道下一时刻的人或者物的大概位置。
同样的,在现在的数据采集模式下,也随着卡尔曼滤波的不断优化和迭代,也慢慢地适用了各种数据采集需求场景中去。
那么问题来了。如果在数据采集过程中,遇到采集不到的时候,出现空值的情况下,怎么办呢。
当然,以下只是个人的一些经验和算法,可以当做参考和交流。一 什么都不做。不做就不会错。空了就空了,相当于缺了一条记录。这种就是比较保险的做法,也是很多目前数据采集的基本法。像这种如果对数据需要足够的真实性有效性来说,确实不做就不会错。二 直接沿用上一次的数据。这种就是针对数据不会突然跳变很大,或者数据随时时间变化比较缓慢的,在一定范围内变化的。而且,数据需要导出做曲线之类的,如果空出一个数据,可能会让曲线看起来比较怪。这种就比较简单粗暴了。如果对于数据不是很敏感,更多是关注的数据在一定时间内的变化,统计之类的,倒是可以这么干。三 取前面N次的数据,算平均值来填补。前面N次,这个可能就是根据经验值,以及根据数据变化的速度来判断了。不过,这个也和直接沿用上一次数据差不多一个意思。


四 卡尔曼滤波估值。
这种看起来就比较专业了。这种就是数据有一定变化,比如,像距离,位移,温度这种在变化的数据,数据更多是呈线性的。
而且要经过更多的测试和调整,才可以应用到实际环境中。不然什么情况下都直接上卡尔曼滤波,有可能预估出一个可能突然很大或者很小的值就尴尬了。


五 插值法。
有时候数据采集不到,暂时不用马上就补上这个数据,可以先将这个数据留空。可以继续往下采集,等前后数据采集有一定量,就可以采用插值法,再将之前留空的数据,进行一定的插值法运算补回来。
这种插值法看起来也好实现也有一定的效果。比如针对有递增的,每天的产量,计件数,比如100 ,200 ,X ,400 ,500 。通过插值法就知道这个X为300的可能性很大。就把300插入进去。这样不影响实际的效果。
因为这个X,通过这个规律就可以分析出来,肯定是介于200到400之间,因为这个数据在实际场景中是递增的。通过这样的插值法,就可以很好地将数据弥补回来。不影响数据的统计和观测,也为后续的数据统计分析也提供了良好的数据弥补。
当然,针对像这种有需求的用户,我感觉其实也可以做成开放可选的。让用户参与选择。这样用户在使用数据采集的产品时,可以根据自己的应用和产品,选择合适的数据采用插值处理,让数据更好地得到记录和展示,也增强了产品的数据采集处理能力。


页: [1]
查看完整版本: 数据采集补值Or卡尔曼滤波——遇到空值怎么办