更新:增加CLAUDE.md文件

Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
2026-06-26 17:10:28 +08:00
parent 7c10ae919c
commit d8892cb124
2 changed files with 138 additions and 2 deletions
+134
View File
@@ -0,0 +1,134 @@
# 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 模型过程噪声
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.0.2, 2026-06-17T16:00:38. -->
<!-- Written by QtCreator 4.0.2, 2026-06-25T15:53:21. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
@@ -54,7 +54,9 @@
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap"/>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangStaticAnalyzer.SuppressedDiagnostics"/>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>