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

6.5 KiB
Raw Blame History

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 位于根目录:MakefileMakefile.DebugMakefile.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 坐标转换(雷达球坐标系 ↔ 直角坐标系)

关键数据结构

  • DataRevdata_process_class_dll.h)— 输入:雷达原始点迹,含距离/方位/俯仰/速度/幅度/SNR/RCS/波位等
  • PointRecvstruct.h)— 内部:预处理后的点迹,增加高度(由距离×sin(俯仰)计算)、使用标志
  • Trust_Trackstruct.h)— 内部:可靠航迹。含 IMM 全状态:X[6]/P[6][6] 总估计 + 三个子模型的 X1/P1、X2/P2、X3/P3 + 模型概率 u[3]
  • Temp_trackstruct.h)— 内部:临时航迹。简化卡尔曼 X[4]/P[4][4](无加速度分量)
  • Trackdata_process_class_dll.h)— 输出:航迹信息(位置/速度/预测值/航迹号/跟踪模式等),二维数组 [MAX_TRACK_NUM][10] 每条航迹最多 10 个历史点
  • RadarParadata_process_class_dll.h)— 外部配置:雷达参数、跟踪门限、IMM 机动参数、禁止区域
  • TrackingBeamdata_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 模型过程噪声