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