Files
radar_data_process/CLAUDE.md
T
2026-06-26 17:10:28 +08:00

135 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 模型 IMMInteracting 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 模型过程噪声