1、增加数据冻结的判断,冻结数据为坏点
2、自适应周期优化
This commit is contained in:
parent
6fe9c14d67
commit
45fa9509e7
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user