1、增加数据冻结的判断,冻结数据为坏点

2、自适应周期优化
This commit is contained in:
weidong 2024-01-16 07:48:29 +08:00
parent 6fe9c14d67
commit 45fa9509e7

View File

@ -33,6 +33,7 @@ public class GNSSCalcFilterService {
static final float XY_THRESHOLD = 30; //水平异常点30mm static final float XY_THRESHOLD = 30; //水平异常点30mm
static final float Z_THRESHOLD = 30; //高程异常点30mm static final float Z_THRESHOLD = 30; //高程异常点30mm
static final float AUTO_THRESHOLD = 50; //触发自适应滤波的门限50mm static final float AUTO_THRESHOLD = 50; //触发自适应滤波的门限50mm
static final double MIN_CHANGE = 0.01;
static class VaryFilterCycle{ static class VaryFilterCycle{
public LocalDateTime startTime; public LocalDateTime startTime;
@ -116,6 +117,12 @@ public class GNSSCalcFilterService {
newRecord.setEnabled(false); //记录为坏点下次不参与滤波 newRecord.setEnabled(false); //记录为坏点下次不参与滤波
logger.info(deviceId + " abnormal gnss data"); logger.info(deviceId + " abnormal gnss data");
} }
else if (Math.abs(newRecord.getB562e() - record0.getB562e()) < MIN_CHANGE &&
Math.abs(newRecord.getB562n() - record0.getB562n()) < MIN_CHANGE &&
Math.abs(newRecord.getB562d() - record0.getB562d()) < MIN_CHANGE) {
newRecord.setEnabled(false); //如果两次解算结果相等数据有被冻住的嫌疑记录为坏点下次不参与滤波
logger.info(deviceId + " abnormal gnss data");
}
else { else {
// 求本组和最近recordNum组原始值的平均值 // 求本组和最近recordNum组原始值的平均值
double sumE = newRecord.getB562e(); double sumE = newRecord.getB562e();
@ -166,20 +173,22 @@ public class GNSSCalcFilterService {
LocalDateTime cmpTime = now.minusHours(groupCalc.getFilter_min_hour()); LocalDateTime cmpTime = now.minusHours(groupCalc.getFilter_min_hour());
QueryWrapper<GnssCalcData> queryWrapper = new QueryWrapper<>(); QueryWrapper<GnssCalcData> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("deviceid", deviceId); queryWrapper.eq("deviceid", deviceId);
queryWrapper.ge("createtime",cmpTime.format(dateFormatter)); queryWrapper.le("createtime",cmpTime.format(dateFormatter));
queryWrapper.last("limit 1"); queryWrapper.last("limit 3");
GnssCalcData gnssCalcData = repository.selectOne(queryWrapper); queryWrapper.orderByDesc("createtime");
if(gnssCalcData != null && gnssCalcData.getEnabled()){ List<GnssCalcData> gnssCalcDataList = repository.selectList(queryWrapper);
if(gnssCalcData.getRb562e()!=null && gnssCalcData.getRb562d()!=null){ for (GnssCalcData gnssCalcData:gnssCalcDataList) {
if (gnssCalcData.getEnabled() && gnssCalcData.getRb562e() != null) {
double gapE = Math.abs(gnssCalcData.getRb562e() - curCalcData.getRb562e()); double gapE = Math.abs(gnssCalcData.getRb562e() - curCalcData.getRb562e());
double gapN = Math.abs(gnssCalcData.getRb562n() - curCalcData.getRb562n()); double gapN = Math.abs(gnssCalcData.getRb562n() - curCalcData.getRb562n());
if(gapE>=groupCalc.getAuto_threshold() || gapN>=groupCalc.getAuto_threshold()){ if (gapE >= groupCalc.getAuto_threshold() || gapN >= groupCalc.getAuto_threshold()) {
VaryFilterCycle varyCycle1 = new VaryFilterCycle(); VaryFilterCycle varyCycle1 = new VaryFilterCycle();
varyCycle1.startTime = now; varyCycle1.startTime = now;
varyCycle1.filterCycleHour = groupCalc.getFilter_min_hour(); varyCycle1.filterCycleHour = groupCalc.getFilter_min_hour();
autoCycleDevices.put(deviceId, varyCycle1); autoCycleDevices.put(deviceId, varyCycle1);
logger.info(deviceId + ": filter cycle change to "+varyCycle1.filterCycleHour); logger.info(deviceId + ": filter cycle change to " + varyCycle1.filterCycleHour);
} }
break;
} }
} }
} }