6.5 KiB
6.5 KiB
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 编译。
# 生成 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 模型过程噪声