135 lines
6.5 KiB
Markdown
135 lines
6.5 KiB
Markdown
# CLAUDE.md
|
||
|
||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||
|
||
## 项目概述
|
||
|
||
2003 雷达数据处理动态链接库。实现航迹跟踪处理、TAS/TWS 跟踪控制。将原始雷达点迹数据转换为稳定的目标航迹输出。
|
||
|
||
- **开发环境**: Qt 5.7 + MSVC 2013, C++
|
||
- **编译产物**: `data_process_class_dll.dll`(动态链接库)
|
||
- **线性代数**: 使用 Eigen 3.3.7 (`Eigen/Dense`)
|
||
|
||
## 构建
|
||
|
||
项目使用 qmake 生成 Makefile,然后通过 nmake 编译。
|
||
|
||
```bash
|
||
# 生成 Makefile(在项目根目录执行)
|
||
qmake.exe -spec win32-msvc2013 -o Makefile data_process_class_dll\data_process_class_dll.pro
|
||
|
||
# 编译 Release 版本
|
||
nmake release
|
||
|
||
# 编译 Debug 版本
|
||
nmake debug
|
||
|
||
# 清理
|
||
nmake clean
|
||
```
|
||
|
||
已生成的 Makefile 位于根目录:`Makefile`、`Makefile.Debug`、`Makefile.Release`。构建输出在 `release/` 和 `debug/` 目录。
|
||
|
||
## 架构
|
||
|
||
### 设计模式
|
||
|
||
- **接口/工厂模式**:`Data_process_class_dll` 是抽象基类(定义在 `data_process_class_dll.h`),`Data_Process` 是具体实现(`data_process.h/cpp`)。外部通过 `Data_Process_Factory::GetB()` 获取实例,`Destroy()` 销毁。
|
||
- 所有外部接口都是虚函数,主程序只需要链接 DLL 并调用这些接口。
|
||
|
||
### 数据处理三模式
|
||
|
||
`data_preprocess()` 根据输入点迹类型返回处理模式:
|
||
|
||
| 返回值 | 模式 | 条件 |
|
||
|--------|------|------|
|
||
| `0` | 无数据 | 既非 TWS 也非 TAS |
|
||
| `1` | TWS 航迹处理 | `point_type == 0` 且波位号 == 16 |
|
||
| `2` | TWS 蓄数据 | `point_type == 0` 但波位号 != 16(继续缓存) |
|
||
| `3` | TAS 处理 | `point_type == 1` |
|
||
|
||
### TWS 处理流水线(model=1)
|
||
|
||
```
|
||
data_preprocess() → 缓存点迹到 Data_buffer
|
||
→ dot_coh.dot_coh_process_buff() 点迹凝聚(滑窗聚合)
|
||
→ track_asso.track_asso_process() 航迹关联(IMM 卡尔曼滤波更新已有航迹)
|
||
→ track_die.track_die_process() 航迹消亡(清除超时未更新的航迹)
|
||
→ track_init.track_init_process_logic() 航迹起始(从未关联点迹创建新航迹,逻辑法)
|
||
```
|
||
|
||
### TAS 处理流水线(model=3)
|
||
|
||
```
|
||
data_preprocess() → 缓存点迹到 Data_buffer_tas
|
||
→ dot_coh_tas.dot_coh_tas_process() TAS 点迹凝聚
|
||
→ track_asso_tas.track_asso_process_tas() TAS 航迹关联
|
||
→ track_die_tas.track_die_process_tas() TAS 航迹消亡
|
||
```
|
||
|
||
### 核心算法模块
|
||
|
||
| 文件 | 职责 |
|
||
|------|------|
|
||
| `kalman.cpp/h` | 卡尔曼滤波(两点/三点初始化)、EKF(含多普勒)、IMM 统计距离计算 |
|
||
| `track_asso.cpp/h` | TWS 航迹关联:IMM 模型交互→三个子模型滤波→模型输出。3 个 Singer 模型(不同 Q 值应对不同机动性) |
|
||
| `track_asso_tas.cpp/h` | TAS 航迹关联(独立实现,因 TAS 数据率不同) |
|
||
| `track_init.cpp/h` | 逻辑法航迹起始:点迹→航迹头关联→临时航迹转可靠航迹(需满足角度/波门条件) |
|
||
| `track_init_direct_tracking.cpp/h` | 引导跟踪航迹起始 |
|
||
| `dot_coh.cpp/h` | TWS 点迹凝聚:滑窗方式在距离-方位-速度维聚合相近点迹 |
|
||
| `dot_coh_tas.cpp/h` | TAS 点迹凝聚 |
|
||
| `track_die.cpp/h` | TWS 航迹消亡:持续外推超过阈值(4 圈)则消亡 |
|
||
| `track_die_tas.cpp/h` | TAS 航迹消亡(5 圈阈值) |
|
||
| `tas_ctrl.cpp/h` | TAS 波束调度:管理 TAS 目标队列(最多 4 个),自动/手动开启和退出 |
|
||
| `track_index_mangement.cpp/h` | 航迹号分配管理 |
|
||
| `coor_trans.cpp/h` | 坐标转换(雷达球坐标系 ↔ 直角坐标系) |
|
||
|
||
### 关键数据结构
|
||
|
||
- **`DataRev`**(`data_process_class_dll.h`)— 输入:雷达原始点迹,含距离/方位/俯仰/速度/幅度/SNR/RCS/波位等
|
||
- **`PointRecv`**(`struct.h`)— 内部:预处理后的点迹,增加高度(由距离×sin(俯仰)计算)、使用标志
|
||
- **`Trust_Track`**(`struct.h`)— 内部:可靠航迹。含 IMM 全状态:X[6]/P[6][6] 总估计 + 三个子模型的 X1/P1、X2/P2、X3/P3 + 模型概率 u[3]
|
||
- **`Temp_track`**(`struct.h`)— 内部:临时航迹。简化卡尔曼 X[4]/P[4][4](无加速度分量)
|
||
- **`Track`**(`data_process_class_dll.h`)— 输出:航迹信息(位置/速度/预测值/航迹号/跟踪模式等),二维数组 `[MAX_TRACK_NUM][10]` 每条航迹最多 10 个历史点
|
||
- **`RadarPara`**(`data_process_class_dll.h`)— 外部配置:雷达参数、跟踪门限、IMM 机动参数、禁止区域
|
||
- **`TrackingBeam`**(`data_process_class_dll.h`)— 输出:TAS 波束调度指令
|
||
|
||
### IMM 模型说明
|
||
|
||
TWS 航迹关联使用 3 模型 IMM(Interacting Multiple Model)处理目标机动:
|
||
|
||
- **Model 1**: Singer 模型,低过程噪声 Q(`Model1_Q_fast/slow`),适合匀速目标
|
||
- **Model 2**: Singer 模型,中过程噪声 Q(`Model2_Q_fast/slow`),适合中等机动
|
||
- **Model 3**: Singer 模型,高过程噪声 Q(`Model3_Q_fast/slow`),适合强机动
|
||
|
||
模型转移概率矩阵 `Pt[3][3]` 定义在 `Track_Asso` 类中。每个 CPI 周期执行:模型交互 → 各子模型卡尔曼预测+更新 → 模型概率更新 → 加权融合输出。
|
||
|
||
### 航迹区概念
|
||
|
||
按方位角将 360° 划分为 9 个航迹区(每个 40°),航迹按区组织以减少计算量。点迹区类似划分(每个区含 6 个波位)。相关参数在 `parameters.h` 中(当前版本大部分被注释,实际通过 `RadarPara` 动态配置)。
|
||
|
||
## 外部接口调用顺序
|
||
|
||
```
|
||
1. track_process_parameters_initial() — 初始化雷达参数
|
||
2. 每帧循环:
|
||
a. data_preprocess() — 输入原始点迹
|
||
b. 根据返回值调用 track_process() — 执行 TWS 或 TAS 处理
|
||
c. Beam_Ctrl() — TAS 波束调度
|
||
3. tracking_start() / track_delete() — 手动控制(按需)
|
||
4. track_clear_all() — 清空所有航迹
|
||
5. Data_Process_Factory::Destroy() — 销毁实例
|
||
```
|
||
|
||
## 参数配置
|
||
|
||
关键可调参数(通过 `RadarPara` 传入或 `parameters.h` 定义):
|
||
|
||
- `track_start_point_num` / `track_start_threshold` — 起航所需点数和波门大小
|
||
- `track_asso_threshold` — TWS 关联波门(统计距离阈值)
|
||
- `track_asso_threshold_tas` — TAS 关联波门
|
||
- `TRACK_DIE_ROUND` (4) / `TRACK_DIE_ROUND_TAS` (5) — 航迹消亡圈数
|
||
- `DOT_COH_RANGE` / `DOT_COH_V` / `DOT_COH_AZI` — 凝聚门限(距离/速度/方位)
|
||
- `TAS_QUEUE_LENGTH` (4) / `MAX_TAS_NUM` (4) — TAS 队列长度和最大目标数
|
||
- `Model1/2/3_Q_fast/slow` — IMM Singer 模型过程噪声
|