@@ -1,9 +1,9 @@
# 雷达数据处理 DLL( data_process_class_dll)
> X256 雷达数据处理动态链接库:将雷达输出的原始点迹(TWS/TAS)处理为稳定可靠的目标航迹,并给出 TAS 跟踪波束控制指令。
> 仓库 simianzhen256-v1.5.5-ms-vscode(目录名沿用旧版本,当前代码版本为 **V1.5.9 **;已由 Qt/qmake 工程迁移为 VS Code + CMake 工程,编译器为 MSVC 2022 / v143, C++17, x64 目标)。
> 仓库 simianzhen256-v1.5.5-ms-vscode(目录名沿用旧版本,当前代码版本为 **V1.5.10 **;已由 Qt/qmake 工程迁移为 VS Code + CMake 工程,编译器为 MSVC 2022 / v143, C++17, x64 目标)。
>
> 版本号由 `parameters.h` 的 `MAJOR_VERSION` / `MINOR_VERSION` / `PATCH_VERSION`(当前 1.5.9 )与 `VERSION_INFO`( `"GENERIC"`——机扫/相扫版本已合并为同一份 DLL,无体制后缀)拼装为 `VERSION_STRING`( `V1.5.9 .GENERIC`),实例创建后可从 `Data_Process_Factory::GetB()` 返回对象的公开成员 `version_info`( `const char*`)读取。
> 版本号由 `parameters.h` 的 `MAJOR_VERSION` / `MINOR_VERSION` / `PATCH_VERSION`(当前 1.5.10 )与 `VERSION_INFO`( `"GENERIC"`——机扫/相扫版本已合并为同一份 DLL,无体制后缀)拼装为 `VERSION_STRING`( `V1.5.10 .GENERIC`),实例创建后可从 `Data_Process_Factory::GetB()` 返回对象的公开成员 `version_info`( `const char*`)读取。
>
> **工作参数来源(参数配置方式改造后)**:全部雷达工作参数由宿主调用 `parameters_reload(配置文件路径)` 从 **TOML 配置文件**加载到 DLL 内的**全局对象 `rdp_parameter`**( `struct.h` 中 `extern` 声明、`data_process.cpp` 中定义并零初始化),不再由宿主下发 `struct RadarPara`、也不再由 `parameters.h` 编译期宏配置;各处理模块直接访问该全局对象(见 5.1、10)。
@@ -66,9 +66,10 @@
- **航迹质量(V1.5.8)**:归一化航迹质量(0~1,内部)贯穿起始→关联→外推三阶段——临时航迹每延长一点按「统计距离 + SNR」重算,关联实点后按「统计距离 + SNR + 有效点占比」加权并指数平滑,未关联期间按未更新时长二次衰减;起批需达到**按长度分级**的最低质量,输出航迹给 0~100 的 `Quality` 字段;**普通 TWS 航迹的消亡改由质量决定**(`Quality < 0.3` ),重点航迹与 TAS 航迹仍按外推圈数(见 9.11)。
- **点迹附加信息字段扩展(需同步重编译宿主)**:`DataRev` 新增 `amp_asv` / `prn_fftn` , `Track` 新增 `amp_asv_point` / `prn_fftn_point` ,结构体布局随之变化,宿主必须使用同一版本头文件重新编译对接;输入侧已打通(TWS 输出有效,TAS 输出仍未写回),详见 11.2。
- **高度维独立平滑**:按距离分段选择滑动平均窗长,TWS 为 `height_smooth_win + {2,3,4,6}` 、TAS 为 `height_smooth_win + {6,8,10,12}` (样例配置 `height_smooth_win` =6 对应相扫;机扫需配 3),抑制俯仰测量跳变(见 9.7)。
- **参数配置外置(参数配置方式改造)**:全部工作参数(原 `parameters.h` 宏 + `RadarPara` 字段)改由 TOML 配置文件提供,宿主在 `GetB()` 后调用一次 `parameters_reload(路径)` 加载(重连/换配置可再次调用);加载器严格校验 11 个配置段、键名/类型/取值范围与屏蔽区数组长度,失败返回 -1 且不改变当前参数(见 10.1)。样例配置 `config/config_tmp.toml` 为**相扫**取值(`scan_mode = 0` ) ; 机扫部署需改用 `scan_mode = 1 ` 并把 `extrapolate_max_tas` 、 `height_smooth_win` 、 `track_die_round_tas` 、 `tas_track_num_max` 配为 48 / 3 / 96 / 1(这 4 项在改造前按扫描体制取不同宏值,现在同一份配置对所有体制生效) 。**判圈逻辑由配置项 `scan_mode` 决定**(不再是编译期体制),详见 4.2、7.2。
- **TAS 波束控制**:手动转 TAS 目标入队(队列容量为编译期常量 `RDP_TAS_QUEUE_CAPACITY` 、运行期上限为配置项 `tas_track_num_max` ),按最新时间戳外推输出跟踪波束(距离/方位/俯仰/**航迹指纹**)。
- **参数配置外置(参数配置方式改造)**:全部工作参数(原 `parameters.h` 宏 + `RadarPara` 字段)改由 TOML 配置文件提供,宿主在 `GetB()` 后调用一次 `parameters_reload(路径)` 加载(重连/换配置可再次调用);加载器严格校验 11 个配置段、键名/类型/取值范围与屏蔽区数组长度,失败返回 -1 且不改变当前参数(见 10.1)。`config/` 下现提供 **8 份配置 ** (通用样例 + 7 份设备配置,见 3 节); `config/config_tmp.toml` 为**相扫**取值(`scan_mode = 0` ) , 机扫/单跟踪部署可直接选用对应的 `X256_MS_* ` / `X1024_MS_*` 配置 。**判圈逻辑由配置项 `scan_mode` 决定**(不再是编译期体制),详见 4.2、7.2。
- **TAS 波束控制**:手动转 TAS 目标入队(队列容量为编译期常量 `RDP_TAS_QUEUE_CAPACITY` 、运行期上限与遍历上界均 为配置项 `tas_track_num_max` ),按最新时间戳外推输出跟踪波束(距离/方位/俯仰/**航迹指纹**);俯仰输出取 `max(计算俯仰, tas_beam_pitch_min)` ,可用配置项设下限避免波束打到地面(V1.5.10) 。
- **航迹指纹(V1.5.9)**:起批时用末点的 `r` /`azi` /`vr` /`RCS` /`CPI_time` 生成 16 bit `Track_fingerprint` (量化 + splitmix64 混合 + 折叠);TAS 波束改为下发**指纹**而非可复用的批号,TAS 数据帧也按指纹定位航迹,使 TAS 控制命令在回放/重连后仍对应同一目标(见 9.12)。
- **用户操作日志(V1.5.10)**:手动清空/删除、重点目标增删、手动转/停 TAS、TAS 队列移除等操作均以 `RDP_LOG_INFO` 记录(随 spdlog 双写进入标准输出与日志文件),便于复盘操作序列(见 9.10、7.1)。
- **航迹生命周期管理**:外推轮数计数、超时消亡与质量消亡(普通 TWS 航迹)、手动删除、全清空(含各模块 reset,防重连后幽灵航迹)。
- **防御性加固**:见 archived_docs/BUG_FIX_REPORT.md——越界防护、时间戳正序校验、方位角 ±π 环绕、asin 定义域钳位、IMM 概率奇异保护等已修复项。
- **日志输出(基于 spdlog) **:内置 spdlog v1.17.0( `third_party/spdlog` ,以静态库目标 `spdlog` 编译进 DLL),日志**始终同时**写到标准输出与 `RDP_LOG_DIR` ( `.\rdp_logs\` )下按日期+时间命名的日志文件(`rdp_YYYYMMDD_HHMMSS.log` ,每次 `GetB()` 一个文件;同一秒内文件已存在时追加 `_1` ~`_999` 后缀,不复用文件):`GetB()` 调用 `rdp_log::Init()` 完成初始化、`Destroy()` 调用 `rdp_log::Shutdown()` flush 并关闭。日志行格式为 `[YYYY-MM-DD HH:MM:SS.mmm] [级别] [文件名:行号] 内容` (毫秒时间戳 + spdlog 级别 trace/debug/info/warning/error/critical + 源码位置),所有级别逐条 flush。日志宏为 `RDP_LOG_TRACE` / `RDP_LOG_DEBUG` / `RDP_LOG_INFO` / `RDP_LOG_WARN` / `RDP_LOG_ERROR` / `RDP_LOG_CRITICAL` ( `RDP_LOG_ERR` 为 `RDP_LOG_ERROR` 的别名,支持 fmt 风格格式化,如 `RDP_LOG_INFO("batch: {}", id)` ),原 `RDP_LOG` 流式宏已删除;日志级别由 CMake 缓存变量 `RDP_LOG_LEVEL` 映射 `SPDLOG_ACTIVE_LEVEL` 在**编译期**控制(AUTO 时 Debug=TRACE、其余构建=INFO,OFF 编译期关闭全部日志且不创建日志文件),原 `RDP_LOG_ENABLE` 布尔开关已移除(见 4.3、10.4)。
@@ -85,8 +86,15 @@
├── CHANGELOG.md # 变更日志(Keep a Changelog 格式,按 git 提交记录维护)
├── README.md # 本文件:项目说明(架构、接口、流程、算法、参数)
├── requirements.md # 需求说明:日志组件 rdp_log 改为使用 spdlog(日志同时输出标准输出与日志文件、RDP_LOG_* 级别宏、SPDLOG_ACTIVE_LEVEL 编译期控制)——已按该说明实现
├── config/ # 参数配置文件目录
│ └ ── config_tmp.toml # 参数配置样例(TOML,11 个配置段,键名与 struct RDP_parameter 成员一致;样例为相扫取值 )
├── config/ # 参数配置文件目录(共 8 份 TOML,键名与 struct RDP_parameter 成员一致)
│ ├ ── config_tmp.toml # 通用样例:相扫、TAS 4 目标、data_rate_tas=1( 9.2 GHz 频点 )
│ ├── X256_PS_3S_TAS_1Hz.toml # X256 相扫、3 s 扫描、TAS 1 Hz( data_rate_tas=0.85,俯仰下限 5.4)
│ ├── X256_PS_3S_TAS_2Hz.toml # X256 相扫、TAS 2 Hz( data_rate_tas=0.3,俯仰下限 5.4)
│ ├── X256_MS_4S.toml # X256 机扫、4 s 扫描、单跟踪(tas_track_num_max=1, data_rate_tas=0,俯仰下限 5.4)
│ ├── X1024_PS_3S_TAS_2Hz.toml # X1024 相扫、TAS 2 Hz( data_rate_tas=0.4)
│ ├── X1024_MS_4.8S.toml # X1024 机扫、4.8 s、单跟踪(data_rate_tas=0)
│ ├── X1024_MS_5S.toml # X1024 机扫、5 s、单跟踪(data_rate_tas=0)
│ └── Ku2304_PS.toml # Ku2304 相扫(16.5 GHz、频点步进 0.05 GHz、单跟踪、俯仰下限 -90 即不限制)
├── archived_docs/ # 过期文档留档(仅作历史参考;接口与流程以本 README 与 docs/ 专项说明为准)
│ ├── BUG_REPORT.md # 全量逻辑 BUG 分析报告(P0~P3,37 项)
│ └── BUG_FIX_REPORT.md # BUG 修复报告(修复明细 + 编译验证结果)
@@ -173,7 +181,7 @@
机扫与相扫版本已合并为**同一份 DLL**:构建不再有扫描体制维度(`CMakeLists.txt` 不再有 `RADAR_SCAN_MODE` 缓存变量,也不再定义 `PHASE_SCANNING` / `MECHANICAL_SCANNING` 编译宏;`parameters.h` 的 `VERSION_INFO` 固定为 `"GENERIC"` ,版本串为 `V1.5.9.GENERIC` )。扫描模式改由运行期配置项 `[radar_params] scan_mode` 决定(0 相扫 / 1 机扫),随全部工作参数由 TOML 配置文件经 `parameters_reload()` 载入(见 10);同一份 DLL 加载不同配置即可分别用于相扫 / 机扫部署,TWS 判圈行为随之切换(见 7.2)。
> **部署一致性提示**: DLL 不校验配置项 `scan_mode` 与实际雷达体制 / 波位号序列是否一致(不报错)。机扫部署须把 `scan_mode` 配为 1,并把 4 项体制相关参数按机扫取值:`extrapolate_max_tas=48`、`height_smooth_win=3`、`track_die_round_tas=96`、`tas_track_num_max=1`(样例 `config/config_tmp.toml` 为相扫取值,见 10.1 )。判圈要求:相扫每圈波位号先增后回到起点、机扫每圈均出现 0。
> **部署一致性提示**: DLL 不校验配置项 `scan_mode` 与实际雷达体制 / 波位号序列是否一致(不报错)。机扫部署须把 `scan_mode` 配为 1,并把 4 项体制相关参数按机扫取值:`extrapolate_max_tas=48`、`height_smooth_win=3`、`track_die_round_tas=96`、`tas_track_num_max=1`;可直接选用 `config/X256_MS_4S.toml`、`config/X1024_MS_*.toml`(已按机扫取值),相扫可选用 `config/X256_PS_*` / `config/X1024_PS_*` / `config/Ku2304_PS.toml`。TAS 波束俯仰下限 `tas_beam_pitch_min` 按设备几何配置(详见 3 节与 10.2 )。判圈要求:相扫每圈波位号先增后回到起点、机扫每圈均出现 0。
构建只按「构建类型 × 记录模式」划分目录(见 4.3):
@@ -363,7 +371,7 @@ classDiagram
| Track_Asso_Tas | TAS 航迹关联(只处理由指纹定位到的那条航迹 `tas_track_idx` ,门限与 TWS 略有差异;输出同样受 `Track_Update_Flag` 门控,外推上限 `extrapolate_max_tas` 的判定方向与 TWS 相反) |
| Track_Init | 逻辑法航迹起始,每圈顺序固定:点-临时航迹关联(延长 ≥2 点临时航迹)→ 点-航迹头关联(两点起始)→ 剩余点转新航迹头 → 长度达标者起批(三点卡尔曼初始化);另含起批屏蔽区判断与临时航迹消亡 |
| Track_Die / Track_Die_Tas | 可靠航迹消亡:**TWS 普通航迹按航迹质量**(V1.5.8:`Quality < 0.3` )、TWS 重点航迹按未关联轮数(10)、TAS 按未关联轮数(相扫 20、机扫 96),或手动删除标志置位时输出消亡批号并删除 |
| TAS_Ctrl | TAS 波束控制:手动目标入队(tas_target_add)、失效目标出队(tas_target_del)、跟踪波束预测输出(tas_beam_output:数据率门控 + 队内选择最早 CPI 目标)、调度时刻记录(last_track_time) |
| TAS_Ctrl | TAS 波束控制:手动目标入队(tas_target_add)、失效/手动取消 目标出队(tas_target_del:出队时置 `Track_Mode=0` 并输出完整航迹更新 )、跟踪波束预测输出(tas_beam_output:数据率门控 + 队内选择最早 CPI 目标 + 俯仰下限 `tas_beam_pitch_min` )、调度时刻记录(last_track_time);队列遍历上界为配置项 `tas_track_num_max` |
| Track_Ind_Mangement | 航迹号 1~`track_index_max` (默认 500)的顺序分配与回绕复用 |
| kalman | 两点/三点滤波初始化、线性卡尔曼预测/滤波、EKF(3 维量测含多普勒)、马氏统计距离 d、盲速 Bind_speed |
| coor_trans | 极坐标 ↔ 直角坐标转换 |
@@ -390,9 +398,9 @@ classDiagram
| 结构体 | 用途 | 关键字段 |
|---|---|---|
| RDP_parameter | 工作参数(唯一来源,**全局对象 `rdp_parameter` **) | 按注释分组:雷达工作参数(`radar_work_mode` /`scan_mode` /`freq_0_GHz` /`radar_height` /`radar_system_delay` /`data_rate_tws` /`data_rate_tas` /`data_rate_track_only` )、点迹凝聚参数、航迹关联参数(`sigma_*` /`associate_threshold` /`extrapolate_max(_tas)` /`height_smooth_win` )、航迹起始参数(`track_init_*` )、航迹消亡参数(`track_die_*` )、航迹质量参数(`track_quality_*` )、航迹批号(`track_index_max` )、波束调度(`default_track_beam_type` /`tas_track_num_max` )、singer 模型参数(`model_*_Q_*` )、两个屏蔽区(各 30 组距离/方位区间);与 TOML 配置段/键一一对应(见 10.2)。`struct.h` 中另有 `extern RDP_parameter rdp_parameter;` 全局对象声明(定义在 data_process.cpp,模块直接访问) |
| RDP_parameter | 工作参数(唯一来源,**全局对象 `rdp_parameter` **) | 按注释分组:雷达工作参数(`radar_work_mode` /`scan_mode` /`freq_0_GHz` /** `freq_step_GHz` (频点步进,V1.5.10) **/ `radar_height` /`radar_system_delay` /`data_rate_tws` /`data_rate_tas` /`data_rate_track_only` )、点迹凝聚参数、航迹关联参数(`sigma_*` /`associate_threshold` /`extrapolate_max(_tas)` /`height_smooth_win` )、航迹起始参数(`track_init_*` )、航迹消亡参数(`track_die_*` )、航迹质量参数(`track_quality_*` )、航迹批号(`track_index_max` )、波束调度(`default_track_beam_type` /`tas_track_num_max` /** `tas_beam_pitch_min` ( TAS 波束俯仰下限,V1.5.10) ** )、singer 模型参数(`model_*_Q_*` )、两个屏蔽区(各 30 组距离/方位区间);与 TOML 配置段/键一一对应(共 65 键, 见 10.2)。`struct.h` 中另有 `extern RDP_parameter rdp_parameter;` 全局对象声明(定义在 data_process.cpp,模块直接访问) |
| PointRecv | 内部点迹 | 距离/方位(弧度)/速度/幅度/高度/SNR/RCS/CPI/GNSS 时间、点迹号 `point_id` / 帧号 `frame_id` / 圈号 `circle_id` (记录链路用,c3c7e66 新增)、使用标志、波位/PRF/频点、跟踪模式、点迹区号、归一化幅度 `amp_asv_point` / 速度维 FFT 点数 `prn_fftn_point` 、十字星数据 |
| Trust_Track | 可靠航迹(IMM 全状态) | 航迹号、**航迹指纹 `Track_fingerprint` ( 16 bit,V1.5.9 新增,起批时按末点计算,TAS 波束与 TAS 数据帧用它定位航迹,见 9.12)**、标识字段 `track_id` / `point_id` / `circle_id` (b227ae1 新增,起批时取临时航迹末点的 `temp_track_id` /`point_id` /`circle_id` ,关联成功时刷新为被关联点迹的 ID)、高度、极坐标量快照 `Range` / `Azimuth` / `Elevation` / `Velocity` (b227ae1 新增,仅在本圈有输出时回填)、**航迹质量相关状态(V1.5.8 新增)`Quality` ( 0~1) / `Point_sum` (累计点数,含外推)/ `Valid_point_sum` (累计实点关联次数)/ `Unupdated_time` (连续未关联实点的累计毫秒)** 、航迹时间 `T_track` ( CPI 时间)/ `GNSS_time` 、更新标志 Track_Update_Flag( ** 输出门控** :仅置 1 的航迹当圈被输出,输出后清零)、外推轮数 Extrapolate_round、实虚点标志、手动删除/手动 TAS/ 重点目标( primary_target_flag, 决定消亡走质量还是 `track_die_round_pramary` 轮数)标志、关联点数、高度平滑缓冲 Hight_smooth、关联点信息、归一化幅度 `amp_asv_point` / 速度维 FFT 点数 `prn_fftn_point` 、融合状态 X[6]/P[6][6]、三个子模型 X1/X2/X3、P1/P2/P3、模型概率 u[3] |
| Trust_Track | 可靠航迹(IMM 全状态) | 航迹号、**航迹指纹 `Track_fingerprint` ( 16 bit,V1.5.9 新增,起批时按末点计算,TAS 波束与 TAS 数据帧用它定位航迹,见 9.12)**、标识字段 `track_id` / `point_id` / `circle_id` (b227ae1 新增,起批时取临时航迹末点的 `temp_track_id` /`point_id` /`circle_id` ,关联成功时刷新为被关联点迹的 ID)、高度、极坐标量快照 `Range` / `Azimuth` / `Elevation` / `Velocity` (b227ae1 新增,仅在本圈有输出时回填)、**航迹质量相关状态(V1.5.8 新增)`Quality` ( 0~1) / `Point_sum` (累计点数,含外推)/ `Valid_point_sum` (累计实点关联次数)/ `Unupdated_time` (连续未关联实点的累计毫秒)、航迹时间 `T_track` ( CPI 时间)/ `GNSS_time` 、更新标志 Track_Update_Flag(输出门控:仅置 1 的航迹当圈被输出,输出后清零)、外推轮数 Extrapolate_round、实虚点标志、手动删除 `manual_delete_flag` / 手动 TAS `manual_tracking_flag` / 手动取消 TAS `manual_untracking_flag` ( V1.5.10 新增:`tracking_stop` 置 1,出队后清 `Track_Mode` , TAS 输入匹配要求为 0) / 重点目标 ` primary_target_flag` ( 决定消亡走质量还是 `track_die_round_pramary` 轮数)标志、关联点数、高度平滑缓冲 Hight_smooth、关联点信息、归一化幅度 `amp_asv_point` / 速度维 FFT 点数 `prn_fftn_point` 、融合状态 X[6]/P[6][6]、三个子模型 X1/X2/X3、P1/P2/P3、模型概率 u[3] |
| Temp_track | 临时航迹(航迹起始阶段) | 4 维状态 X[4]/P[4][4]、极坐标点信息(`r` /`azi` /`vr` /`height` /`SNR` /`RCS` /`amplitude` )、**航迹质量 `quality` (0~1, V1.5.8 新增,起批时带给 Trust_Track)**、时间戳 `CPI_time` / `GNSS_time` 、`buff_round` (已缓存圈数)、标识字段 `temp_track_id` / `point_id` / `circle_id` 、区号 `temp_track_section_idx` 、俯仰波位号 `pitch_num` 、关联标志(c3c7e66 起字段统一更名,如原 `snr` /`Amp` /`T` ) |
| Asso_Info | 点航关联候选(track_asso.cpp / track_asso_tas.cpp 共用) | `point_id` / `track_id` / `circle_id` 、三模型统计距离 `d1` /`d2` /`d3` 与最小值 `d_min` 、点迹/航迹下标、`delta_T` /`delta_h` /`R` /`VT` 、来源标志 `tas_flag` ( 1 TAS / 0 TWS, 5cb67cc 新增)、门限判定结果 `thd_d` /`thd_h` /`thd_r` 、是否被最近邻取中 `min_d_flag` ( b227ae1 提升到 struct.h; TAS 侧 5cb67cc 起改用同一结构) |
| Tracking_Target | TAS 队列元素 | 批号 Index、空标志 empty_flag、最近波束输出时间 last_track_time |
@@ -412,15 +420,15 @@ classDiagram
|---|---|---|
| Data_Process_Factory::GetB() | 实例指针 | 获取单例(首次调用时创建,并写入 `version_info` ) |
| Data_Process_Factory::Destroy() | — | 销毁实例并将指针置空 |
| version_info(基类公开成员) | `const char*` | DLL 版本字符串,由 `GetB()` 赋值为 `VERSION_STRING` ( `V1.5.9 .GENERIC` ——机扫/相扫已合并,无体制后缀);只读使用,不要释放(b227ae1) |
| version_info(基类公开成员) | `const char*` | DLL 版本字符串,由 `GetB()` 赋值为 `VERSION_STRING` ( `V1.5.10 .GENERIC` ——机扫/相扫已合并,无体制后缀);只读使用,不要释放(b227ae1) |
| parameters_reload(const char* path) | 0 成功 / -1 失败 | **加载全部工作参数 ** :解析 TOML 配置文件并校验,成功后整体写入**全局对象 `rdp_parameter` **(零初始化,失败时保持原值)并打印原因。建议 `GetB()` 后立即调用一次,重连/换配置时再次调用即可热重载;重载应与处理调用互斥(与 BUG-03 线程模型一致,见 10.1) |
| data_preprocess(DataRev[150]) | 0/1/2/3 | 输入一帧点迹并缓存,返回处理模式(见下表) |
| track_process(Track[][10], &num, dieIdx[], &dieNum, model) | 1 | 按 data_preprocess 的返回值执行 TWS/TAS 处理 |
| Beam_Ctrl(TrackingBeam*, Track[][10], &num) | — | TAS 波束控制(内部清零并重填航迹输出计数) |
| track_clear_all() | 0 | 清空全部航迹/缓存并复位各模块状态 |
| track_delete(n, idx[]) | 0 | 按批号标记手动删除(下一轮消亡输出) |
| tracking_start(track_index) | 0 | 手动转 TAS 跟踪(置 manual_tracking_flag,由 Beam_Ctrl 入队) |
| tracking_stop(track_index) | 0 | 手动取消 TAS(清标志并 Track_Mode=0;队列项延至下一次 Beam_Ctrl 移除) |
| tracking_start(track_index) | 0 | 手动转 TAS 跟踪(置 ` manual_tracking_flag=1` 、清 `manual_untracking_flag` ,由 Beam_Ctrl 入队;记录 INFO 日志 ) |
| tracking_stop(track_index) | 0 | 手动取消 TAS:清 `manual_tracking_flag` 并置 `manual_untracking_flag=1` ( **不再立即清 `Track_Mode` **,V1.5.10);队列项延至下一次 Beam_Ctrl 出队,出队时置 `Track_Mode=0` 并输出完整航迹更新行;记录 INFO 日志 |
| primary_target_add(track_index) | 0 | 手动将指定批号标为**重点目标**(置 `primary_target_flag=1` ,消亡轮数放宽到 10 圈;批号不存在时不报错、无副作用) |
| primary_target_cancel(track_index) | 0 | 取消指定批号的重点目标标记(置 `primary_target_flag=0` ,恢复普通航迹的消亡判据——V1.5.8 起为 `Quality < 0.3` ) |
| tracking_point(azimuth) | 0 | 手动打跟踪波束——**未实现(保留空实现)** |
@@ -492,16 +500,16 @@ flowchart TD
``` mermaid
flowchart TD
A["data_preprocess: 点迹入 Data_buffer_tas,记录 TAS 航迹指纹/latest_timestamp → model=3"] --> B["track_process(3)"]
B --> B1["按指纹在航迹表中定位航迹 → 置 manual_tracking_flag=1、 Track_Mode=1"]
B --> B1["按指纹 + manual_un tracking_flag==0 定位航迹 → 置 Track_Mode=1"]
B1 --> C["dot_coh_tas 单帧凝聚 → point_recv_tas"]
C --> D["track_asso_tas: 仅对该航迹做 IMM+EKF 关联(含高度门限)"]
D --> E["未关联 → 按 latest_timestamp 外推(ΔT≤0 跳过)"]
E --> F["track_die_tas: TAS 连续未关联超上限 / 手动删除 → 消亡输出"]
F --> G["输出该航迹(point_type=1) "]
G --> H["Beam_Ctrl: 数据率门控 + 队内最早 CPI 目标 + 预测波束输出(携带航迹指纹)"]
G --> H["Beam_Ctrl: 数据率门控 + 队内最早 CPI 目标 + 预测波束输出(携带航迹指纹,俯仰不低于 tas_beam_pitch_min ) "]
```
TAS 输出同样受 `Track_Update_Flag` 门控:只有该航迹(由指纹定位)本圈有更新(关联到实点、或外推成功)时才向 `Trust_Track_Output` 写一行(`point_type=1` )。TAS 外推上限为配置项 `extrapolate_max_tas` (样例配置为相扫 5,机扫需配 48),判定方向与 TWS 相反(`Extrapolate_round >= 上限` 时才外推并输出),详见 9.9 与 11.2。TAS 队列内部仍以 `Track_Index` 索引,**只有对外接口(`DataRev` 输入、`TrackingBeam` 输出)使用指纹**(见 9.12)。
TAS 输出同样受 `Track_Update_Flag` 门控:只有该航迹(由指纹定位)本圈有更新(关联到实点、或外推成功)时才向 `Trust_Track_Output` 写一行(`point_type=1` )。TAS 外推上限为配置项 `extrapolate_max_tas` (样例配置为相扫 5,机扫需配 48),判定方向与 TWS 相反(`Extrapolate_round >= 上限` 时才外推并输出),详见 9.9 与 11.2。TAS 队列内部仍以 `Track_Index` 索引,**只有对外接口(`DataRev` 输入、`TrackingBeam` 输出)使用指纹**(见 9.12) ;被用户取消跟踪的目标( `manual_untracking_flag=1` )不再按指纹重新置 TAS 模式(V1.5.10) 。
### 8.3 航迹起始流程(逻辑法)
@@ -928,9 +936,9 @@ $$
### 9.10 TAS 波束控制(tas_ctrl.cpp)
- **入队条件**(仅手动):manual_tracking_flag==1 且 Track_Mode==0 且队列未满(配置项 `tas_track_num_max` ,样例为相扫 4;机扫需 配 1,上限 `RDP_TAS_QUEUE_CAPACITY` =30)且不在 TAS 禁止区内。入队即置 Track_Mode=1、以航迹时间初始化 last_track_time,并输出一次航迹更新。
- **出队**:队列中目标在航迹表中不存在、或不再处于手动 TAS 状态时清除 。(自动转 TAS / 自动退出的 tas_auto_start/tas_auto_end 逻辑全部注释停用——只支持手动。)
- **波束输出**:在 TAS 队列内遍历,逐个目标先按**数据率门控**筛选——仅要求目标距上次波束输出(`last_track_time` )的时间 `delta_T_last_track = (latest_timestamp − last_track_time)/1000` 大于配置项 ` data_rate_tas` 秒 (单位 s, 1521592 起由 Hz 改为 s;加载器校验须 ≥0,**0 表示不做 DLL 内部 TAS 波束限速、输出间隔改由宿主 `Beam_Ctrl` 调用频率决定**),保证 TAS 目标输出间隔不随波束时间(Beam_Ctrl 调用频率)变化;对通过门控的目标再比较航迹时间 `T_track` ,取 CPI 时间最早者,选中后按其 CPI 时间与最新时间戳之差外推到 latest_timestamp:
- **入队条件**(仅手动):manual_tracking_flag==1 且 Track_Mode==0 且队列未满(队列遍历上界为 配置项 `tas_track_num_max` ,样例为相扫 4;机扫/单跟踪 配 1,上限 `RDP_TAS_QUEUE_CAPACITY` =30)且不在 TAS 禁止区内。入队即置 Track_Mode=1、以航迹时间初始化 last_track_time,并输出一次航迹更新( V1.5.10 起该行不再叠加 `radar_system_delay` 补偿) 。
- **出队**:队列中目标在航迹表中不存在、或不再处于手动 TAS 状态( `manual_tracking_flag≠1` )时清除;**目标仍存在时出队会置 `Track_Mode=0` 并输出一整套完整航迹更新行**(V1.5.10,覆盖用户手动取消跟踪的场景;若目标已消亡则只清队列项、不再输出) 。(自动转 TAS / 自动退出的 tas_auto_start/tas_auto_end 逻辑全部注释停用——只支持手动。)
- **波束输出**:在 TAS 队列内遍历,逐个目标先按**数据率门控**筛选——仅要求目标距上次波束输出(`last_track_time` )的时间 `delta_T_last_track = (latest_timestamp − last_track_time)/1000` 满足 `delta_T_last_track >= data_rate_tas` (单位 s, 1521592 起由 Hz 改为 s;加载器校验须 ≥0,**0 表示不做 DLL 内部 TAS 波束限速、输出间隔改由宿主 `Beam_Ctrl` 调用频率决定**),保证非 0 时 TAS 目标输出间隔不随波束时间(Beam_Ctrl 调用频率)变化;对通过门控的目标再比较航迹时间 `T_track` ,取 CPI 时间最早者,选中后按其 CPI 时间与最新时间戳之差外推到 latest_timestamp:
$$
\Delta T=(latest\_timestamp-CPI\_time)/1000,\qquad
@@ -938,9 +946,11 @@ x_p=x+v_x\Delta T,\quad y_p=y+v_y\Delta T,\quad
r_p=\sqrt{x_p^2+y_p^2},\quad \theta_p=\operatorname{atan2}(y_p,x_p)
$$
输出 TrackingBeam{open_flag=1, type=default_track_beam_type(配置项,样例 1) , Range=rp, Azi=θp(°), Elev=asin(h/rp)(°), **TAS_track_index=航迹指纹 ** (V1.5.9 起,不再下发批号)};队空、目标不在航迹表或数据率门控未通过时 open_flag=0。输出后更新该目标队列项的 last_track_time;原每次 Beam_Ctrl 末尾的整队循环移位(队列轮转)已停用,改为按数据率门控在队列内轮换目标。
输出 TrackingBeam{open_flag=1, type=default_track_beam_type(配置项,样例 1) , Range=rp, Azi=θp(°), ** Elev=max( asin(h/rp)(°), tas_beam_pitch_min) ** (V1.5.10 起俯仰有下限,避免波束打到地面), **TAS_track_index=航迹指纹 ** (V1.5.9 起,不再下发批号)};队空、目标不在航迹表或数据率门控未通过时 open_flag=0。输出后更新该目标队列项的 last_track_time;原每次 Beam_Ctrl 末尾的整队循环移位(队列轮转)已停用,改为按数据率门控在队列内轮换目标。
> **入队当圈的输出(eb9f30c 修复)**:手动转 TAS 时 `tas_target_add()` 会立即输出一次该航迹的更新行;该行原只填少数字段,现 与常规关联输出使用同一套字段(含 `Quality`、`Direction_Angle`、`Flag_Direction`、关联点信息、`x/y/v_x/v_y`、十字星数据等),宿主在转跟踪当圈即可拿到完整航迹信息。
> **入队/出队 当圈的输出(eb9f30c 修复, V1.5.10 扩展到出队) **:手动转 TAS 时 `tas_target_add()`、手动取消/失效出队时 `tas_target_del()` 都 会立即输出一次该航迹的更新行,且 与常规关联输出使用同一套字段(含 `Quality`、`Direction_Angle`、`Flag_Direction`、关联点信息、`x/y/v_x/v_y`、十字星数据等),宿主在转/停 跟踪当圈即可拿到完整航迹信息;这两条路径的坐标直接用滤波位置 `X[0]`/`X[3]`(不叠加 `radar_system_delay`) 。
>
> **用户操作日志(V1.5.10) **: `tracking_start/stop`、`track_delete`、`primary_target_add/cancel`、`track_clear_all` 以及 TAS 队列移除均以 `RDP_LOG_INFO` 记录(含批号),随 spdlog 双写落到日志文件。
> e0bf227 修正:数据率门控原先同时要求「距上次波束输出」与「航迹时间 T_track 距最新时间戳」都超过 `data_rate_tas`,第二个条件与「选 CPI 最早目标」的语义冲突(航迹时间越早反倒越容易被抑制),会漏掉本应输出的波束;现已只保留前者。
@@ -1038,14 +1048,14 @@ DLL : rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
| 配置段 | 内容 |
|---|---|
| `[radar_params]` | 雷达工作参数:工作模式、**扫描模式 `scan_mode` **、频点、平台高度、系统延迟、TWS/TAS/纯跟踪数据率 |
| `[radar_params]` | 雷达工作参数:工作模式、**扫描模式 `scan_mode` **、频点 `freq_0_GHz` 与**频点步进 `freq_step_GHz` ( V1.5.10) ** 、平台高度、系统延迟、TWS/TAS/纯跟踪数据率 |
| `[cohesion]` | 点迹凝聚参数:距离/速度/方位门限、有效量程上下限 |
| `[track_associate]` | 航迹关联参数:量测误差 `sigma_*` 、关联门限 `associate_threshold` 、外推上限、高度平滑窗长 |
| `[track_init]` | 航迹起始参数:起批波门/折角/点数、起批质量门限 L3~L7、起始速度范围 |
| `[track_die]` | 航迹消亡参数:消亡圈数(普通/重点/TAS)、质量消亡门限 |
| `[track_quality]` | 航迹质量参数:折算上下限、三项权重、平滑与衰减系数 |
| `[track_index]` | 航迹批号管理:`track_index_max` |
| `[beam_control]` | 波束调度:默认跟踪波束类型、最大同时跟踪 TAS 目标数 |
| `[beam_control]` | 波束调度:默认跟踪波束类型、最大同时跟踪 TAS 目标数、**TAS 波束俯仰下限 `tas_beam_pitch_min` ( V1.5.10) ** |
| `[singer_model]` | 三个 Singer 模型的过程噪声强度(fast/slow) |
| `[track_init_prohibite_area]` | 起批屏蔽区:`*_num` + 4 个与成员同名的 TOML 数组 |
| `[tas_prohibite_area]` | 禁止 TAS 跟踪区:`*_num` + 4 个与成员同名的 TOML 数组 |
@@ -1055,7 +1065,7 @@ DLL : rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
1. 11 个配置段**全部必填**,且必须是 TOML 表;顶层出现未知配置段直接拒绝;
2. 所有**标量键必填**,类型必须匹配(浮点参数接受整数或浮点,整数参数只接受整数),且不得超出 C++ `float` /`int` 可表示范围;
3. 每个段内只允许登记过的键,**拼错的键按未知参数拒绝**(不会静默忽略);
4. 取值范围校验:如 `radar_work_mode∈[0,2]` 、`scan_mode∈{0,1}` 、`freq_0_GHz>0` 、`data_rate_tws>0` 、`data_rate_tas≥0` ( **0 表示不做 DLL 内部 TAS 波束限速、由宿主 `Beam_Ctrl` 调用频率决定**)、`sigma_*>0` 、`associate_threshold>0` 、`height_smooth_win≥1` 、`track_init_point_num_min∈[3,9]` 、`track_init_angle∈(0,180]` 、`track_init_quality_L3~L7∈[0,1]` 、`track_init_velocity_max>min≥0` 、消亡圈数≥0、质量门限∈[0,1]、质量衰减系数≤0、`track_index_max∈[1, MAX_TRACK_NUM]` 、`tas_track_num_max∈[0, RDP_TAS_QUEUE_CAPACITY]` 、Singer 模型 Q>0 等(完整清单以源码为准);
4. 取值范围校验:如 `radar_work_mode∈[0,2]` 、`scan_mode∈{0,1}` 、`freq_0_GHz>0` 、** `freq_step_GHz>0` **、 `data_rate_tws>0` 、`data_rate_tas≥0` ( **0 表示不做 DLL 内部 TAS 波束限速、由宿主 `Beam_Ctrl` 调用频率决定**)、`sigma_*>0` 、`associate_threshold>0` 、`height_smooth_win≥1` 、`track_init_point_num_min∈[3,9]` 、`track_init_angle∈(0,180]` 、`track_init_quality_L3~L7∈[0,1]` 、`track_init_velocity_max>min≥0` 、消亡圈数≥0、质量门限∈[0,1]、质量衰减系数≤0、`track_index_max∈[1, MAX_TRACK_NUM]` 、`tas_track_num_max∈[0, RDP_TAS_QUEUE_CAPACITY]` 、Singer 模型 Q>0 等(完整清单以源码为准);** `tas_beam_pitch_min` 目前只要求键存在且为浮点,未做范围校验**;
5. 屏蔽区:`*_num∈[0,30]` ;4 个数组的元素个数必须**等于** `*_num` ( `*_num=0` 时数组可省略,存在时必须为空数组);并逐区校验距离 `0≤min<max` 、方位 `0≤min<max≤360` ;
6. 失败语义:返回 -1,并经可选 `std::string* error_msg` 给出**首条**可读原因(`Data_Process::parameters_reload` 失败时以 `RDP_LOG_ERROR` 打印到日志),**当前已加载参数保持不变**(加载过程先写入临时对象,全部成功后才整体赋值)。
@@ -1070,6 +1080,7 @@ DLL : rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
| radar_params | `radar_work_mode` | 0 | 工作模式:0 近程 / 1 中程 / 2 远程(当前影响凝聚是否带速度维约束;TWS 外推已改为固定 `data_rate_tws` 、不再按模式三选一;原 `RadarPara.work_mode` ) |
| radar_params | `scan_mode` | 0 | **扫描模式:0 相扫 / 1 机扫 ** (加载器校验仅允许 0/1),决定 `data_preprocess()` 的 TWS 判圈逻辑(见 7.2);构建不区分体制,同一份 DLL 通过该配置切换扫描模式(见 4.2) |
| radar_params | `freq_0_GHz` | 9.2 | 载波频点(GHz,盲速计算基准;原 `FREQ0` ) |
| radar_params | `freq_step_GHz` | 0.02 | **频点步进(GHz,校验 >0, V1.5.10 新增) ** :盲速频点为 `freq_0_GHz + 频点号 × freq_step_GHz` (原硬编码 0.02);Ku2304 配置取 0.05 |
| radar_params | `radar_height` | 0 | 雷达平台高度(m,输出 z 叠加;原 `Height` ) |
| radar_params | `radar_system_delay` | 0 | 系统延迟(s,输出位置按 `x + vx·delay` 补偿;原 `Sys_delay` ) |
| radar_params | `data_rate_tws` | 3 | TWS 数据率/外推步长(s;原按 `work_mode` 在 `DATA_RATE_SHORT/MIDDLE/FAR` 中三选一) |
@@ -1109,7 +1120,8 @@ DLL : rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
| track_quality | `track_quality_decrease_coeff_o1` | −0.0025 | 质量衰减一次项系数(须 ≤0) |
| track_index | `track_index_max` | 500 | 航迹号上限(1~500;原 `MAX_TRACK_INDEX` ,内部航迹号表按该值分配) |
| beam_control | `default_track_beam_type` | 1 | 跟踪波束 `TrackingBeam.type` 取值(原硬编码 1) |
| beam_control | `tas_track_num_max` | 4 | 最大同时跟踪 TAS 目标数(0~30;原 `MAX_TAS_NUM` ,机扫需配 1 ) |
| beam_control | `tas_track_num_max` | 4 | 最大同时跟踪 TAS 目标数(0~30;原 `MAX_TAS_NUM` ,机扫/单跟踪需配 1);同时作为 TAS 队列遍历上界(V1.5.10 ) |
| beam_control | `tas_beam_pitch_min` | 3.0 | **TAS 波束俯仰下限(°,V1.5.10 新增) ** :输出俯仰取 `max(计算俯仰, 该值)` ,避免波束打到地面;样例 3.0、X256_MS_4S / X256_PS_* 5.4、Ku2304 − 90(等价不限制);加载器**未做范围校验** |
| singer_model | `model_1_Q_fast` | 0.000001 | 模型 1 过程噪声(**当前未参与计算**,模型 1 只用 slow) |
| singer_model | `model_1_Q_slow` | 0.000001 | 模型 1 过程噪声(恒定,见 9.5.1) |
| singer_model | `model_2_Q_fast` | 0.01 | 模型 2 过程噪声 fast 档 |
@@ -1246,6 +1258,9 @@ DLL : rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
- **`scan_mode` 与实际雷达体制需一致(部署约束)**:DLL 不校验配置项 `scan_mode` 与实际雷达体制/波位号序列是否一致(不报错);机扫部署须把 `scan_mode` 配为 1 且 4 项数值按机扫取值(见 4.2)。机扫/相扫已合并为同一份构建,不再有编译期体制可作交叉校验。
- **航迹指纹的复用与碰撞(V1.5.9)**:指纹为 **16 bit ** (0~65535),由目标特征生成,因此 ① 理论上存在碰撞(同帧命中多条航迹时 `track_process(model=3)` 取遍历到的第一条);② 同一目标消亡后重新起批,因末点测量与 CPI 时间不同,指纹通常不同(跨起批不保证稳定);③ 指纹只用于跨 DLL 边界,**批号仍是内部主键**,`tracking_start/tracking_stop` 等手动接口仍按批号;④ 字段名 `TAS_track_index` 未改名而语义已变为指纹,对接时不要按旧含义当批号使用(见 9.12)。
- **指纹未入记录表(V1.5.9)**:`RdpRecTrustTrack` 实体未包含 `Track_fingerprint` ,记录库中只能通过 `Track_Index` / `track_id` 关联航迹;若要按指纹复盘 TAS 控制命令,需按 docs/data_record_debug.md 第 6 节配方自行加字段。
- **`tas_beam_pitch_min` 未做范围校验(V1.5.10)**:加载器只要求该键存在且为浮点数,没有上下限;配置成 `-90` 等价于不设下限(Ku2304 配置即如此),配置成大于目标真实俯仰的值会让波束始终指向上限方向——部署时需自行核对取值合理性。
- **`manual_untracking_flag` 与 `manual_tracking_flag` 的分工(V1.5.10)**:转跟踪由 `tracking_start` 置 `manual_tracking_flag=1` 、清 `manual_untracking_flag` ;取消由 `tracking_stop` 清前者、置后者(此时 `Track_Mode` 仍是 1,要到下一次 `Beam_Ctrl` 出队才清 0 并输出更新行)。因此取消后同一帧内再喂入该目标的 TAS 数据会被指纹匹配的 `manual_untracking_flag==0` 条件挡住(避免刚取消又被重新置为 TAS);如需立即恢复跟踪,应重新调用 `tracking_start` 。
- **`freq_step_GHz` 决定盲速与频点号映射(V1.5.10)**:盲速计算使用 `freq_0_GHz + freq_ind × freq_step_GHz` ;如果宿主给的频点号含义与配置的步进不一致,盲速折叠会整体偏移(且不报错),换雷达/换频点计划时需同步修改该配置项。
### 11.3 未启用功能
@@ -1272,19 +1287,25 @@ DLL : rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
## 12. 版本历史
当前代码版本:**V1.5.9 **( `parameters.h` 的 `PATCH_VERSION` = 9 、`VERSION_INFO` = `"GENERIC"` ,版本串 `V1.5.9 .GENERIC` ——机扫/相扫已合并为同一份构建,无体制后缀;版本号于 019af7a 提升,2026-10-27 )。版本号自 1.5.6 起可运行时读取(`version_info` ,见 7.1)。中间状态 b4aed8a 曾把版本号置为 7,但未单独发布/记录。**1.5.8 之后的全部改动已随 [1.5.9 ] 归档**( 参数配置方式改造 + 机扫/相扫合并、工作参数全局化、日志组件 spdlog、构建脚本适配、航迹指纹 、手动转 TAS 输出修复 ),详见 CHANGELOG `[1.5.9 ]` 。
当前代码版本:**V1.5.10 **( `parameters.h` 的 `PATCH_VERSION` = 10 、`VERSION_INFO` = `"GENERIC"` ,版本串 `V1.5.10 .GENERIC` ——机扫/相扫已合并为同一份构建,无体制后缀;`PATCH_VERSION` 9→10 的改动**尚未提交**,工作区生效 )。版本号自 1.5.6 起可运行时读取(`version_info` ,见 7.1)。中间状态 b4aed8a 曾把版本号置为 7,但未单独发布/记录。**1.5.9 之后的全部改动已随 [1.5.10 ] 归档**( 配置加载放宽 `data_rate_tas` 、7 份设备配置、频点步进与 TAS 俯仰下限参数 、手动取消 TAS 时序与完整输出、单跟踪偶发 TWS 波束修复、用户操作日志 ),详见 CHANGELOG `[1.5.10 ]` 。
近期提交(git log --oneline,新→旧;仅列代码改动,纯文档提交略):
| 提交 | 内容 |
|---|---|
| 工作区(`data_rate_tas=0` 加载修复,未提交) | 放宽 `data_rate_tas` 校验为 `≥0` : `rdp_parameter_loader.cpp` 原要求 `data_rate_tas > 0` ,导致 `config/X256_MS_4S.toml ` / `config/X1024_MS_4.8S.toml` ( `data_rate_tas = 0` )经 `parameters_reload()` 加载返回 -1;现允许 0(代码中该值仅用于 `delta_T_last_track > data_rate_tas` 比较,无除法),**0 表示不做 DLL 内部 TAS 波束限速、输出间隔由宿主 `Beam_Ctrl` 调用频率决定**; `data_rate_tws` 仍要求 >0。验证(Lead 实测,2026-10-30):加载器单测 240 项断言全通过(新增 0 允许 / 负值拒绝 / data_rate_tws=0 拒绝);4 配置重建 0 warning 0 error; 5 份配置经 DLL 公开接口 `parameters_reload()` 全部返回 0;公开接口运行期测试 4 配置 × 38 项断言通过。详见 CHANGELOG `[1.5.9]` |
| 工作区(版本号 1.5.10,未提交) | `parameters.h ` 的 `PATCH_VERSION` 9→10( `VERSION_STRING` 变为 `V1.5.10.GENERIC` );无功能改动 |
| 95118d8 | 更新 7 份配置:补齐 `freq_step_GHz = 0.02` (与 `freq_0_GHz` 配套),使既有样例与新增频点步进参数一致 |
| 4926e90 | 增加频点步进参数 `freq_step_GHz` ( `[radar_params]` ,校验 >0):`Bind_speed()` 的频点由硬编码 `+freq_ind*0.02` 改为 `+freq_ind*freq_step_GHz` ; Ku2304 配置取 0.05 |
| a002961 | 新增 Ku2304 雷达配置 `config/Ku2304_PS.toml` (相扫、`freq_0_GHz=16.5` 、单跟踪、俯仰下限 -90) |
| 66cabb8 | 增加 TAS 波束俯仰下限 `tas_beam_pitch_min` ( `[beam_control]` ):`tas_beam_output()` 输出 `max(elev, tas_beam_pitch_min)` ,避免波束打到地面;7 份配置补该键(样例 3.0、X256_MS_4S / X256_PS_* 5.4) |
| b728ebc | 新增 X1024 配置 `X1024_MS_5S.toml` 、`X1024_PS_3S_TAS_2Hz.toml` |
| c77b6c2 | ① 放宽 `data_rate_tas` 校验为 `≥0` (0 = 不做 DLL 内部限速,由宿主调用频率决定),修复 `data_rate_tas=0` 的机扫配置加载返回 -1;② 新增 4 份配置(X256_PS 1Hz/2Hz、X256_MS_4S、X1024_MS_4.8S);③ 修复单跟踪模式偶发发送 TWS 波束(TAS 队列遍历上界由编译期 30 改为配置项 `tas_track_num_max` );④ 手动取消 TAS: `tracking_stop` 改置 `manual_untracking_flag=1` ,出队时置 `Track_Mode=0` 并输出完整航迹更新行;⑤ 新增用户操作日志(清空/删除/重点目标/转停 TAS/队列移除,INFO 级) |
| eb9f30c | 修复手动转 TAS 时输出航迹更新信息不完整:`tas_target_add()` 的即时输出行改为与常规关联输出同一套字段(含 `Quality` /`Direction_Angle` /`Flag_Direction` /关联点信息/`x,y,v_x,v_y` /十字星数据等),并补写 `point_type=0` |
| 0f3da99 | 增加航迹指纹:`Trust_Track::Track_fingerprint` ( 16 bit,起批时按末点 `r` /`azi` /`vr` /`RCS` /`CPI_time` 量化 + splitmix64 + 折叠生成);TAS 波束改为下发指纹、TAS 数据帧按指纹匹配航迹(不再按批号),实现 TAS 回放(见 9.12) |
| 24ce1e6 | **日志组件由 `std::cout` 重定向改为内置 spdlog v1.17.0 ** :新增内置第三方库 `third_party/spdlog` ( `include/` + `src/` + `LICENSE` + `UPSTREAM.md` , MIT, spdlog v1.17.0 上游快照,含随库内置的 {fmt} 12.1.0);根 `CMakeLists.txt` 新增静态库目标 `spdlog` ( `SPDLOG_COMPILED_LIB` ,第三方源码以 `/w` 编译)与缓存变量 `RDP_LOG_LEVEL` ( `AUTO` /`TRACE` /`DEBUG` /`INFO` /`WARN` /`ERROR` /`CRITICAL` /`OFF` , AUTO 时 Debug=TRACE、其它构建=INFO),映射为 PUBLIC 编译定义 `SPDLOG_ACTIVE_LEVEL` 同时提供给 `data_process_class_dll` 与 `rdp_record` ; `data_process_class_dll/rdp_log.h/.cpp` 重写:不再重定向 `std::cout` , `rdp_log::Init()` 创建 `RDP_LOG_DIR` ( `.\rdp_logs\` )下 `rdp_YYYYMMDD_HHMMSS.log` (每次 `GetB()` 一个文件,同秒冲突追加 `_1` ~`_999` ),默认 logger 同时输出到标准输出与文件,行格式 `"[%Y-%m-%d %H:%M:%S.%e] [%l] [%s:%#] %v"` (毫秒时间戳、级别、文件名:行号、内容),所有级别逐条 flush,文件创建失败时降级为仅标准输出并返回 false;`rdp_log::Shutdown()` flush 并关闭日志文件;原流式 `RDP_LOG` 宏改为 `RDP_LOG_TRACE` / `RDP_LOG_DEBUG` / `RDP_LOG_INFO` / `RDP_LOG_WARN` / `RDP_LOG_ERROR` / `RDP_LOG_CRITICAL` ( `RDP_LOG_ERR` 为 ERROR 别名)的 fmt 风格调用;`RDP_LOG_ENABLE` 宏已删除,日志级别改由 `SPDLOG_ACTIVE_LEVEL` 在编译期控制(OFF = 编译期关闭且不创建日志文件);`Data_Process_Factory::GetB()` 中启用 `rdp_log::Init()` (在 `rdp_record::Init()` 之前)、`Destroy()` 中在 `rdp_record::Shutdown()` 之后调用 `rdp_log::Shutdown()` ;调用点迁移(`data_process.cpp` 参数重载成功 INFO / 失败 ERROR、`track_asso_tas.cpp` ΔT≤0 告警 WARN、`rdp_record.cpp` 19 处 info/warn/error 分级;其余注释代码中的旧宏同步改写);`parameters.h` 删除 `RDP_LOG_ENABLE` 、保留 `RDP_LOG_DIR` ,注释改为说明 spdlog + `SPDLOG_ACTIVE_LEVEL` 。验证(Lead 实测,2026-10-28):4 配置(Release/Debug × REC_OFF/REC_ON) 0 warning 0 error;公开接口测试 38 项断言全部通过;运行期实测日志同时写入标准输出与文件、文件名/行格式正确、`Destroy()` →`GetB()` 同秒重连生成 `_1` 后缀新文件。详见 CHANGELOG `[1.5.9]` |
| 7e4cb29 | **工作参数改为全局对象 ** : `struct.h` 新增 `extern RDP_parameter rdp_parameter;` (声明位于 `struct.h` ),`data_process.cpp` 定义并零初始化;`Data_Process` 删除 `RDP_parameter` 成员;`parameters_reload()` 直接调用 `rdp_parameter_load(path, rdp_parameter, &error)` (loader 仅在校验全部通过后写入,失败不写入,「失败保持当前参数」语义不变);删除处理模块(kalman 11 个方法、dot_coh/dot_coh_tas、track_asso 系列、track_init 系列、track_die 系列、track_index_mangement、tas_ctrl,共 12 个模块的 24 个 .h/.cpp 文件)全部 `const RDP_parameter& rdp_parameter` 形参与调用实参,函数体内 `rdp_parameter.<field>` 一处未改、现直接解析全局对象;接口签名/公式/阈值/数值行为不变;全局对象为 DLL 内单实例、非线程安全(配置重载须与处理互斥,见 BUG-03/BUG-13)。验证(Lead 实测,2026-10-27):4 配置(Release/Debug × REC_OFF/REC_ON)重建成功、0 warning 0 error; DLL 体积 Release REC_OFF 331,264 / Release REC_ON 1,652,736 / Debug REC_OFF 1,715,200 / Debug REC_ON 4,691,968 字节;导出表仍 31 项(`parameters_reload` 在列、全局 `rdp_parameter` 不导出);加载器单测 233 项断言、公开接口运行期测试 4 配置 × 38 项断言全部通过;静态检查处理模块已无 `const RDP_parameter&` 形参(仅 loader 内部 `validate_parameter` 保留)。详见 CHANGELOG `[1.5.9]` |
| 76b0b46 | 构建脚本适配机扫/相扫合并:构建不再区分 `PHASE_SCANNING` / `MECHANICAL_SCANNING` : `CMakeLists.txt` 删除 `RADAR_SCAN_MODE` 缓存变量与体制编译宏;构建目录改为 `build/<Debug\|Release>/<REC_AUTO\|REC_OFF\|REC_ON>` (去掉 PS/MS 维度);`config_paths.bat` /`configure.bat` /`build.bat` /`clean.bat` 参数改为 `<Debug\|Release> [AUTO\|ON\|OFF]` ,新增 `build_config.bat` (单配置配置+构建,取代 `build_all.bat` ),`clean_all.bat` 同时清理旧版 `build/X256_PS` 、`build/X256_MS` ; `tasks.json` 5 个任务改为「清理全部」+ 4 个「配置并构建(...)」;`settings.json` ( buildDirectory 去掉 scanMode 维度)、`cmake-variants.yaml` (移除 scanMode 变体)、`c_cpp_properties.json` (合并为单个 X256 配置)、`launch.json` 同步。验证:5 个任务返回 0,4 种配置(Release/Debug × REC_OFF/REC_ON) 0 warning 0 error,编译命令无体制宏,增量重建 0 编译步骤 |
| 423c200 / 019af7a(参数配置方式改造 + 机扫/相扫版本合并) | **参数配置方式改造:TOML 配置文件 → `RDP_parameter` ** 。新增 `rdp_parameter_loader.h/.cpp` (严格校验 11 个配置段、标量键必填、类型/范围校验、未知段/键拒绝、屏蔽区数组长度等于 `*_num` ,失败 -1 且不改变当前参数)与示例 `config/config_tmp.toml` ;内置 toml++ v3.4.0 单头文件 `third_party/toml/toml.hpp` ;公开头删除 `struct RadarPara` 与 `track_process_parameters_initial/modify` ,新增 `virtual int parameters_reload(const char*)` ( `Data_Process` 实现为加载成功后整体替换 `rdp_parameter` ;**后于本工作区的「全局工作参数对象改造」改为写入全局对象**);`data_process.h` 删除 `Work_Parameter` ,各模块(kalman 11 个方法、dot_coh、dot_coh_tas、track_asso(_tas/_direct_tracking)、track_init(_direct_tracking)、track_die(_tas)、track_index_mangement、tas_ctrl)改为 `const RDP_parameter& rdp_parameter` (**后于本工作区的「全局工作参数对象改造」删除该形参、改为直接访问全局对象**),宏与旧字段按映射等价替换;**新增配置项 `scan_mode` ( 0 相扫 / 1 机扫)**, `data_process.cpp` 的 TWS 判圈由编译期 `#ifdef PHASE_SCANNING` 改为按 `scan_mode` 运行时选择(行为逐分支等价);019af7a 进一步把机扫/相扫合并为**同一份代码与同一份构建**(版本号 1.5.9、`VERSION_INFO` 改为 `GENERIC` , `PHASE_SCANNING` /`MECHANICAL_SCANNING` 不再参与任何功能);`parameters.h` 仅保留 PI、版本/日志/记录宏、`MAX_TRACK_NUM` 、`RDP_TAS_QUEUE_CAPACITY` 、`Round` ( `UNCONF_TARGET` 已删除,起批处 `Target_Type` 直接写 0);`track_index_mangement` 航迹号表改按 `track_index_max` 分配,TAS 队列容量用 `RDP_TAS_QUEUE_CAPACITY` 、运行期上限用 `tas_track_num_max` ,波束类型用 `default_track_beam_type` 。验证(Lead 实测,2026-10-27):合并前 8 配置、合并后 4 配置均 0 warning 0 error; Release REC_OFF DLL 331,776 字节、Debug REC_ON 4,694,528 字节、导出表 31 项(新增 `parameters_reload` ,旧参数接口与 `RadarPara` 符号消失);加载器单测 233 项断言、公开接口运行期测试(含判圈运行时切换)全部通过;`RDP_parameter` 成员 / 加载器键 / TOML 键均为 63 个,11 个配置段不变。详见 CHANGELOG `[1.5.9]` |
| 423c200 / 019af7a(参数配置方式改造 + 机扫/相扫版本合并) | **参数配置方式改造:TOML 配置文件 → `RDP_parameter` ** 。新增 `rdp_parameter_loader.h/.cpp` (严格校验 11 个配置段、标量键必填、类型/范围校验、未知段/键拒绝、屏蔽区数组长度等于 `*_num` ,失败 -1 且不改变当前参数)与示例 `config/config_tmp.toml` ;内置 toml++ v3.4.0 单头文件 `third_party/toml/toml.hpp` ;公开头删除 `struct RadarPara` 与 `track_process_parameters_initial/modify` ,新增 `virtual int parameters_reload(const char*)` ( `Data_Process` 实现为加载成功后整体替换 `rdp_parameter` ;**后于本工作区的「全局工作参数对象改造」改为写入全局对象**);`data_process.h` 删除 `Work_Parameter` ,各模块(kalman 11 个方法、dot_coh、dot_coh_tas、track_asso(_tas/_direct_tracking)、track_init(_direct_tracking)、track_die(_tas)、track_index_mangement、tas_ctrl)改为 `const RDP_parameter& rdp_parameter` (**后于本工作区的「全局工作参数对象改造」删除该形参、改为直接访问全局对象**),宏与旧字段按映射等价替换;**新增配置项 `scan_mode` ( 0 相扫 / 1 机扫)**, `data_process.cpp` 的 TWS 判圈由编译期 `#ifdef PHASE_SCANNING` 改为按 `scan_mode` 运行时选择(行为逐分支等价);019af7a 进一步把机扫/相扫合并为**同一份代码与同一份构建**(版本号 1.5.9、`VERSION_INFO` 改为 `GENERIC` , `PHASE_SCANNING` /`MECHANICAL_SCANNING` 不再参与任何功能);`parameters.h` 仅保留 PI、版本/日志/记录宏、`MAX_TRACK_NUM` 、`RDP_TAS_QUEUE_CAPACITY` 、`Round` ( `UNCONF_TARGET` 已删除,起批处 `Target_Type` 直接写 0);`track_index_mangement` 航迹号表改按 `track_index_max` 分配,TAS 队列容量用 `RDP_TAS_QUEUE_CAPACITY` 、运行期上限用 `tas_track_num_max` ,波束类型用 `default_track_beam_type` 。验证(Lead 实测,2026-10-27):合并前 8 配置、合并后 4 配置均 0 warning 0 error; Release REC_OFF DLL 331,776 字节、Debug REC_ON 4,694,528 字节、导出表 31 项(新增 `parameters_reload` ,旧参数接口与 `RadarPara` 符号消失);加载器单测 233 项断言、公开接口运行期测试(含判圈运行时切换)全部通过;`RDP_parameter` 成员 / 加载器键 / TOML 键均为 63 个,11 个配置段不变( V1.5.10 新增 `freq_step_GHz` 与 `tas_beam_pitch_min` 后为 **65 个 ** ) 。详见 CHANGELOG `[1.5.9]` |
| 1ffb287 | 增加航迹质量记录到数据库:`RdpRecTempTrack` 增 `quality` , `RdpRecTrustTrack` 增 `Quality` /`Unupdated_time` /`Point_sum` /`Valid_point_sum` 并同步注册 |
| 6284f3f | 修改 TAS 模式高度平滑点数:`track_asso_tas.cpp` 分段偏移 `+2/+3/+4/+6` → `+6/+8/+10/+12` ,相扫 `H_F_WIN_LEN` 3→6(相扫 TAS 窗口 12/14/16/18、机扫 9/11/13/15; TWS 相扫随之 8/9/10/12) |
| 5d105d2 | 修改相扫模式下 TAS 航迹消亡圈数:`TRACK_DIE_ROUND_TAS` 10→20(机扫保持 96),相扫 TAS 实际连续 21 圈无实点才消亡 |
@@ -1351,7 +1372,7 @@ DLL : rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
| archived_docs/BUG_REPORT.md | 全量逻辑 BUG 分析(P0~P3 共 37 项,含位置、说明、建议、处置结论)——过期留档,仅作历史参考 |
| archived_docs/BUG_FIX_REPORT.md | 修复明细、修复状态汇总表与 MSVC 2013 x86 编译验证记录——过期留档(对应 01d28e0 时期) |
| requirements.md | 修改需求说明:**日志组件 rdp_log 改为使用 spdlog**(日志同时输出到标准输出与日志文件、路径与文件名规则沿用 `.\rdp_logs\` + 日期+时间、每次启动一个文件;`RDP_LOG` 宏按 spdlog 级别改为 `RDP_LOG_TRACE` / `RDP_LOG_DEBUG` / `RDP_LOG_INFO` / `RDP_LOG_WARN` / `RDP_LOG_ERROR` / `RDP_LOG_CRITICAL` ;原 `RDP_LOG_ENABLE` 改为用 `SPDLOG_ACTIVE_LEVEL` 在编译期控制日志级别)——已按该说明实现(见 4.3、5.2、10.4);此前 requirements.md 中的雷达参数配置方式改造需求、以及更早的数据记录调试功能需求亦已实现,分别见 10 与 docs/data_record_debug.md(旧的日志文件输出需求已由本次 spdlog 改造取代,见 12 的 1521592 行) |
| config/config_tmp.toml | 参数配置样例(TOML, 11 个配置段、63 个键与 `RDP_parameter` 成员一一对应,样例为相扫取值( `scan_mode=0` ); 机扫差异项见 10.1 兼容性提示)——参数表见 10.2 |
| config/*.toml | 参数配置文件(共 **8 份 ** : `config_tmp.toml` 通用相扫样例 + `X256_PS_3S_TAS_1Hz` / `X256_PS_3S_TAS_2Hz` / `X256_MS_4S` / `X1024_PS_3S_TAS_2Hz` / `X1024_MS_4.8S` / `X1024_MS_5S` / `Ku2304_PS` 设备配置; 11 个配置段、**65 个键** 与 `RDP_parameter` 成员一一对应,各份差异见 3 节)——参数表见 10.2, 机扫差异项见 10.1 兼容性提示 |
| third_party/toml/toml.hpp | 内置 toml++ v3.4.0 单头文件(MIT,上游原样保存);仅参数加载器 `rdp_parameter_loader.cpp` 以 `#pragma warning(push, 0)` 包裹使用,来源与许可证信息见文件头 |
| backup/data_process_class_dll/data_process_class_dll.pro | 迁移前的 Qt/qmake 工程文件(源文件清单参考) |
| .vscode/tasks.json、.vscode/cmake-variants.yaml、.vscode/scripts/*.bat | VS Code 任务、构建变体与构建脚本(构建目录布局见 4.3) |