142 lines
3.5 KiB
Markdown
142 lines
3.5 KiB
Markdown
# 速度计算系统设计文档
|
||
|
||
## 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. **参数调优**:
|
||
- 根据实际运行数据调整参数
|
||
- 建立参数自适应机制 |