3.5 KiB
3.5 KiB
速度计算系统设计文档
1. 数据结构分析
1.1 当前数据结构
目前系统中已实现的数据结构如下:
MovementState(运动状态)
public class MovementState {
public GeoPosition position; // 位置信息
public Velocity velocity; // 速度信息
public double heading; // 航向(度)
public long timestamp; // 时间戳(毫秒)
}
MovingObject(移动对象基类)
public abstract class MovingObject {
public GeoPosition currentPosition; // 当前位置
public Velocity velocity; // 速度
public double heading; // 航向(度)
public long timestamp; // 时间戳(毫秒)
public Deque<MovementState> stateHistory; // 历史状态队列
public int MAX_HISTORY = 10; // 最大历史记录数
public double maxSpeed; // 最大速度
public MovingObjectType type; // 类型枚举
}
1.2 数据结构评估
当前数据结构基本合理,但需要考虑以下几点优化:
-
历史状态队列:
- 当前MAX_HISTORY=10可能不足以支持平滑的速度计算
- 建议增加到30-60,以支持更长时间窗口的数据分析
-
速度计算相关字段:
- 需要在Velocity类中添加速度计算的置信度字段
- 考虑添加加速度计算结果的缓存字段
-
数据质量标记:
- 建议在MovementState中添加数据质量标记字段
- 用于标识原始数据是否可靠
2. 速度计算方案
2.1 基本思路
-
数据预处理:
- 对原始位置数据进行异常值检测
- 使用卡尔曼滤波进行数据平滑
-
速度计算方法:
- 使用滑动窗口计算平均速度
- 根据飞机状态(起飞/降落)调整计算参数
2.2 具体实现方案
2.2.1 数据预处理
-
异常值检测:
// 检测标准: - 位置跳变:相邻两点间距离超过合理范围 - 时间异常:时间戳倒退或跳变 - 速度异常:计算得到的速度超过最大限制 -
卡尔曼滤波:
- 状态向量:[x, y, vx, vy]
- 观测向量:[x, y]
- 考虑加速度作为系统噪声
2.2.2 速度计算
-
滑动窗口计算:
// 窗口大小: - 起飞状态:5-10秒 - 降落状态:3-5秒 -
加速度约束:
// 合理加速度范围: - 起飞:0.5-2.5 m/s² - 降落:-2.0-0 m/s²
2.3 状态判断
-
起飞状态判断:
- 速度持续增加
- 高度持续增加
- 位置相对跑道起点的距离增加
-
降落状态判断:
- 速度持续减小
- 高度持续减小
- 位置接近跑道
3. 实现步骤
-
更新数据结构:
- 修改MAX_HISTORY值
- 添加数据质量字段
- 添加速度计算置信度字段
-
实现数据预处理:
- 异常值检测
- 卡尔曼滤波
-
实现速度计算:
- 滑动窗口机制
- 状态判断
- 加速度约束
-
添加数据质量监控:
- 记录异常数据比例
- 监控速度计算置信度
4. 注意事项
-
数据同步:
- 确保位置数据的时间戳准确
- 处理数据延迟和丢失情况
-
计算效率:
- 优化卡尔曼滤波计算
- 合理设置滑动窗口大小
-
异常处理:
- 定义清晰的异常处理流程
- 保存异常数据用于分析
-
参数调优:
- 根据实际运行数据调整参数
- 建立参数自适应机制