diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..e52aa39 --- /dev/null +++ b/CLAUDE.md @@ -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 模型 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 模型过程噪声 diff --git a/data_process_class_dll/data_process_class_dll.pro.user b/data_process_class_dll/data_process_class_dll.pro.user index 5accdd2..c05350d 100644 --- a/data_process_class_dll/data_process_class_dll.pro.user +++ b/data_process_class_dll/data_process_class_dll.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -54,7 +54,9 @@ ProjectExplorer.Project.PluginSettings - + + + ProjectExplorer.Project.Target.0