# 速度计算系统设计文档

## 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<MovementState> 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. **参数调优**：
   - 根据实际运行数据调整参数
   - 建立参数自适应机制