更新:1、增加扫描模式配置项;

2、优化不必要的宏定义;
3、合并机扫和相扫版本;

Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
2026-10-27 14:04:51 +08:00
parent 423c200659
commit 019af7a229
12 changed files with 65 additions and 61 deletions
+25 -15
View File
@@ -51,12 +51,13 @@
| 点迹类型 | point_type = 0 为 TWS,point_type = 1 为 TAS |
| 跟踪模式 | Track_Mode = 0 为 TWS,Track_Mode = 1 为 TAS |
| 参数来源 | TOML 配置文件(`config/config_tmp.toml` 为样例)→ 内部 `struct RDP_parameter`,宿主通过 `parameters_reload()` 加载;参数对照见 10 |
| 判圈模式 | 由配置项 `[radar_params] scan_mode` 运行时选择:0 相扫(波位号 ≤ 上一帧判满圈)/ 1 机扫(波位号 == 0 判满圈),与构建体制解耦(见 4.2、7.2) |
---
## 2. 功能特性
- **双模式处理管线**:data_preprocess 按输入类型与扫描圈完成标志返回 0/1/2/3,track_process 据此调度 TWS 凝聚/关联/起始或 TAS 凝聚/关联。判圈条件按扫描体制区分(3e6763c,编译期 `#ifdef PHASE_SCANNING` 隔离):**相扫**比较前后两帧方位波位号(当前波位号 ≤ 上一帧波位号即判满圈),**机扫**以「方位波位号 == 0」判满圈(规避转台反转导致的误判),详见 7.2。
- **双模式处理管线**:data_preprocess 按输入类型与扫描圈完成标志返回 0/1/2/3,track_process 据此调度 TWS 凝聚/关联/起始或 TAS 凝聚/关联。判圈条件由配置项 `[radar_params] scan_mode` **运行时**选择(0 相扫 / 1 机扫):**相扫**比较前后两帧方位波位号(当前波位号 ≤ 上一帧波位号即判满圈),**机扫**以「方位波位号 == 0」判满圈(规避转台反转导致的误判),详见 7.2。
- **两帧滑窗点迹凝聚**:TWS 点迹先与上一帧缓存合并凝聚,再进入关联,兼顾跨波位(CPI)相邻点迹的分裂问题;近程模式增加速度维约束。
- **逻辑法航迹起始**:每圈按固定顺序推进——① 未关联点迹先与 ≥2 点临时航迹做 EKF 波门 + 折角约束关联(延长临时航迹),② 再与 1 点航迹头做速度法关联(两点卡尔曼初始化出 2 点临时航迹),③ 两步都做完后删除被消费的点迹、剩余点迹转成新航迹头,④ 长度达标的临时航迹经三点卡尔曼初始化转可靠航迹;带起批屏蔽区与重复航迹去重。
- **3 模型 IMM 滤波**:三个 Singer 模型(低/中/高过程噪声),量测为「距离-方位-径向速度」三维的 EKF,多普勒残差按盲速折叠,似然用 3×3 新息协方差。
@@ -65,8 +66,8 @@
- **航迹质量(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` 为**相扫**取值;`extrapolate_max_tas`、`height_smooth_win`、`track_die_round_tas`、`tas_track_num_max` 在改造前按扫描体制取不同宏值(机扫依次为 48 / 3 / 96 / 1),现在同一份配置对所有体制生效,机扫部署需改用对应取值的配置文件(相扫/机扫的**判圈逻辑**仍由编译期 `PHASE_SCANNING` / `MECHANICAL_SCANNING` 区分,见 4.2、7.2)。
- **TAS 波束控制**:手动转 TAS 目标入队(队列长度与容量随扫描体制切换),按最新时间戳外推输出跟踪波束(距离/方位/俯仰/批号)。
- **参数配置外置(参数配置方式改造)**:全部工作参数(原 `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`),按最新时间戳外推输出跟踪波束(距离/方位/俯仰/批号)。
- **航迹生命周期管理**:外推轮数计数、超时消亡与质量消亡(普通 TWS 航迹)、手动删除、全清空(含各模块 reset,防重连后幽灵航迹)。
- **防御性加固**:见 archived_docs/BUG_FIX_REPORT.md——越界防护、时间戳正序校验、方位角 ±π 环绕、asin 定义域钳位、IMM 概率奇异保护等已修复项。
- **日志文件输出**:`RDP_LOG_ENABLE` 定义时,首次 `Data_Process_Factory::GetB()` 自动用 `rdbuf()` 将 `std::cout` 重定向到 `RDP_LOG_DIR`(`.\rdp_logs\`)下按日期+时间命名的日志文件,`Destroy()` 时恢复控制台并关闭文件;`RDP_LOG` 日志宏在每条日志前附加 `[时间戳][文件:行号]`。该宏在 `parameters.h` 中**当前为注释状态(默认不启用)**,即默认不做重定向、日志输出到控制台(见 10.4)。
@@ -123,7 +124,7 @@
│ ├── rdp_parameter_loader.h / .cpp # TOML 参数加载器(内部模块,不属于宿主接口):rdp_parameter_load() 严格校验 11 个配置段并写入 RDP_parameter,失败返回 -1 且不改变入参
│ ├── data_process.h / .cpp # Data_Process 实现:接口分发、TWS/TAS 主流程、参数加载(parameters_reload)、清空/删除/转跟踪;含 point_id/frame_id/circle_id 自增计数(记录用)
│ ├── struct.h # 内部结构体:PointRecv / Trust_Track / Temp_track / Asso_Info / Tracking_Target / RDP_parameter(工作参数,与 TOML 配置一一对应)
│ ├── parameters.h # 编译期常量:PI、版本宏、RDP_LOG_*、RDP_RECORD_*、MAX_TRACK_NUM、RDP_TAS_QUEUE_CAPACITY、UNCONF_TARGET、Round(不再含雷达工作参数宏)
│ ├── parameters.h # 编译期常量:PI、版本宏、RDP_LOG_*、RDP_RECORD_*、MAX_TRACK_NUM、RDP_TAS_QUEUE_CAPACITY、Round(不再含雷达工作参数宏;扫描体制宏由 CMake 传入,仅用于版本后缀/构建标识)
│ ├── dot_coh.h / .cpp # TWS 点迹凝聚(含两帧滑窗缓冲)
│ ├── dot_coh_tas.h / .cpp # TAS 点迹凝聚
│ ├── coor_trans.h / .cpp # 极坐标 ↔ 直角坐标转换
@@ -168,7 +169,11 @@
### 4.2 扫描体制
通过 CMake 缓存变量 RADAR_SCAN_MODE 切换,决定编译期扫描体制分支(`parameters.h` 中不再有按体制分组的雷达工作参数宏,参数统一由配置文件提供,见 10);每个「扫描体制 × 构建类型 × 记录模式」组合拥有独立构建目录(见 4.3):
通过 CMake 缓存变量 RADAR_SCAN_MODE 切换构建体制,`CMakeLists.txt` 以 `target_compile_definitions` 定义 `PHASE_SCANNING` / `MECHANICAL_SCANNING` 宏。该体制现在**只决定**:① `parameters.h` 的 `VERSION_INFO`(`V1.5.8.PS` / `V1.5.8.MS` 版本后缀)与 `#pragma message`;② 构建目录与 VS Code 任务命名(`X256_PS` / `X256_MS`)。**TWS 判圈行为不再由构建体制决定**,而由参数配置项 `[radar_params] scan_mode` 在运行时选择(0 相扫 / 1 机扫,见 7.2);参数统一由配置文件提供(见 10)。
> ⚠ **部署一致性要求**:DLL 不校验 `scan_mode` 与构建体制是否一致。若不一致,`version_info` 版本串反映的是构建体制、而实际判圈行为反映配置(不报错)。**机扫部署应同时使用机扫构建(`MECHANICAL_SCANNING`)与 `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` 为相扫取值)。
每个「扫描体制 × 构建类型 × 记录模式」组合拥有独立构建目录(见 4.3):
| 变量值 | 对应宏 | 构建目录 |
|---|---|---|
@@ -419,11 +424,11 @@ classDiagram
| 返回值 | 含义 | 触发条件 |
|---|---|---|
| 0 | 无效数据 | point_type 既非 0 也非 1 |
| 1 | **TWS 满一圈,执行航迹处理** | point_type==0 且判圈条件成立:**相扫**(`PHASE_SCANNING`)当前帧方位波位号 ≤ 上一帧波位号 `last_beam_num`;**机扫**(`MECHANICAL_SCANNING`)当前帧方位波位号 == 0 |
| 1 | **TWS 满一圈,执行航迹处理** | point_type==0 且判圈条件成立:`scan_mode==0`(相扫)时当前帧方位波位号 ≤ 上一帧波位号 `last_beam_num`;`scan_mode==1`(机扫)时当前帧方位波位号 == 0 |
| 2 | **TWS 未满一圈,继续蓄数据** | point_type==0 且上述判圈条件不成立;调用 track_process(model=2) 做滑窗凝聚 |
| 3 | **TAS 处理** | point_type==1;同时记录 TAS_track_idx 与最新时间戳 |
> **判圈条件按体制区分(3e6763c)**:源码用 `#ifdef PHASE_SCANNING` 把两条判据编译期隔离——相扫走「波位号不变大(当前 ≤ 上一帧)即为新一圈」的判据(`last_beam_num` 参与判断,`track_clear_all()` 复位为 INT_MAX,故**相扫首帧即返回 1**);机扫保持 7d5a56f 的「方位波位号 == 0」判据(机扫转台反转时波位号会变小但并未扫完一圈,用波位号比较会误判),此分支下 `last_beam_num` 仍被赋值但不参与判断。因此同一份源码按体制构建出的判圈行为不同,调用方需按实际体制提供对应的波位号序列:相扫要求每圈波位号先增后回到起点、机扫要求每圈均出现 0。
> **判圈由配置项 `scan_mode` 运行时选择**:`data_process.cpp` 不再使用 `#ifdef PHASE_SCANNING` 编译期分支,而是按 `rdp_parameter.scan_mode` 选择两条判据——`scan_mode==0`(相扫)走「波位号不变大(当前 ≤ 上一帧)即为新一圈」(`last_beam_num` 参与判断,`track_clear_all()` 复位为 INT_MAX,故**相扫首帧即返回 1**);`scan_mode==1`(机扫)走 7d5a56f 的「方位波位号 == 0」判据(机扫转台反转时波位号会变小但并未扫完一圈,用波位号比较会误判;此时 `last_beam_num` 仍被更新但不参与判断)。两种模式下 `last_beam_num` 每帧都会更新,仅判满圈时 `circle_id++` 并返回 1。因此同一份 DLL 的判圈行为取决于加载的配置而非构建体制,调用方需保证 `scan_mode` 与实际波位号序列/部署体制一致:相扫要求每圈波位号先增后回到起点、机扫要求每圈均出现 0。
### 7.3 典型调用序列
@@ -455,7 +460,7 @@ flowchart TD
```mermaid
flowchart TD
A["data_preprocess: 点迹入 Data_buffer(度→弧度、高度=Range·sin(Elev)、时间戳缓存)"] --> B["判圈成立(相扫: 波位号 ≤ 上一帧 / 机扫: 波位号 == 0)→ model=1"]
A["data_preprocess: 点迹入 Data_buffer(度→弧度、高度=Range·sin(Elev)、时间戳缓存)"] --> B["判圈成立(由配置 scan_mode 选择:0 相扫: 波位号 ≤ 上一帧 / 1 机扫: 波位号 == 0)→ model=1"]
B --> C["track_process(1)"]
C --> D["dot_coh 两帧滑窗凝聚 → point_recv"]
D --> E["track_asso: IMM 交互 → 点航波门筛选(NN)→ EKF 滤波 → 模型输出"]
@@ -986,7 +991,7 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
| 配置段 | 内容 |
|---|---|
| `[radar_params]` | 雷达工作参数:工作模式、频点、平台高度、系统延迟、TWS/TAS/纯跟踪数据率 |
| `[radar_params]` | 雷达工作参数:工作模式、**扫描模式 `scan_mode`**、频点、平台高度、系统延迟、TWS/TAS/纯跟踪数据率 |
| `[cohesion]` | 点迹凝聚参数:距离/速度/方位门限、有效量程上下限 |
| `[track_associate]` | 航迹关联参数:量测误差 `sigma_*`、关联门限 `associate_threshold`、外推上限、高度平滑窗长 |
| `[track_init]` | 航迹起始参数:起批波门/折角/点数、起批质量门限 L3~L7、起始速度范围 |
@@ -1003,11 +1008,11 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
1. 11 个配置段**全部必填**,且必须是 TOML 表;顶层出现未知配置段直接拒绝;
2. 所有**标量键必填**,类型必须匹配(浮点参数接受整数或浮点,整数参数只接受整数),且不得超出 C++ `float`/`int` 可表示范围;
3. 每个段内只允许登记过的键,**拼错的键按未知参数拒绝**(不会静默忽略);
4. 取值范围校验:如 `radar_work_mode∈[0,2]`、`freq_0_GHz>0`、`data_rate_tws/data_rate_tas>0`、`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`、`data_rate_tws/data_rate_tas>0`、`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 等(完整清单以源码为准);
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`),**当前已加载参数保持不变**(加载过程先写入临时对象,全部成功后才整体赋值)。
> 兼容性提示:改造前 `TRACK_DIE_ROUND_TAS`、`MAX_EXTRAPOLATE_NUM_TAS`、`H_F_WIN_LEN`、`TAS_QUEUE_LENGTH`/`MAX_TAS_NUM` 按扫描体制取不同宏值;现在同一份配置对所有体制生效。`config/config_tmp.toml` 是**相扫**取值,机扫部署需把这 4 项分别配为 `track_die_round_tas=96`、`extrapolate_max_tas=48`、`height_smooth_win=3`、`tas_track_num_max=1`(其余参数两体制相同)。注意「相扫/机扫判圈逻辑」不是配置项,仍由编译期 `PHASE_SCANNING` / `MECHANICAL_SCANNING` 区分(见 7.2)。
> 兼容性提示:改造前 `TRACK_DIE_ROUND_TAS`、`MAX_EXTRAPOLATE_NUM_TAS`、`H_F_WIN_LEN`、`TAS_QUEUE_LENGTH`/`MAX_TAS_NUM` 按扫描体制取不同宏值;现在同一份配置对所有体制生效。`config/config_tmp.toml` 是**相扫**取值(`scan_mode=0` + 下列 4 项相扫值),机扫部署需配为 `scan_mode=1`、`track_die_round_tas=96`、`extrapolate_max_tas=48`、`height_smooth_win=3`、`tas_track_num_max=1`(其余参数两体制相同)。**判圈逻辑由配置项 `scan_mode` 决定**(0 相扫 / 1 机扫,见 7.2),不再由编译期 `PHASE_SCANNING` / `MECHANICAL_SCANNING` 区分;构建体制只决定版本后缀与构建目录/产物命名,两者应保持一致(见 4.2)。
### 10.2 参数表(`RDP_parameter` 字段 ↔ TOML 键 ↔ 样例值)
@@ -1016,6 +1021,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);与构建体制解耦,部署时应与构建体制保持一致(见 4.2) |
| radar_params | `freq_0_GHz` | 9.2 | 载波频点(GHz,盲速计算基准;原 `FREQ0`) |
| radar_params | `radar_height` | 0 | 雷达平台高度(m,输出 z 叠加;原 `Height`) |
| radar_params | `radar_system_delay` | 0 | 系统延迟(s,输出位置按 `x + vx·delay` 补偿;原 `Sys_delay`) |
@@ -1093,6 +1099,7 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
| `V_MAX` / `V_MIN` | `track_init_velocity_max/min` | 航迹头关联速度范围 |
| `Model1_Q_fast/slow`、`Model2_Q_*`、`Model3_Q_*` | `model_1/2/3_Q_fast/slow` | Singer 模型过程噪声 |
| `R_TAS_max/min`、`V_TAS_max/min`、`TAS_Height_1~5`、`cfar_th`、`north_angle`、`Beam_num` | 无 | 实现未使用,新结构体已排除(自动 TAS 逻辑保持停用) |
| —(新增配置项,无旧字段对应) | `scan_mode` | 扫描模式 0 相扫 / 1 机扫,替代原 `data_process.cpp` 的编译期 `PHASE_SCANNING`/`MECHANICAL_SCANNING` 判圈分支(见 7.2) |
**(b)旧 `parameters.h` 宏**
@@ -1117,7 +1124,8 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
| `MAX_TAS_NUM` | `tas_track_num_max` | 最大同时跟踪 TAS 目标数 |
| `TAS_QUEUE_LENGTH` | 编译期常量 `RDP_TAS_QUEUE_CAPACITY`(30,见 10.4) | 队列容量仍为编译期常量,运行期上限用 `tas_track_num_max` |
| 硬编码 `Tracking_beam->type = 1` | `default_track_beam_type` | 跟踪波束类型 |
| `PI`、`MAX_TRACK_NUM`、`UNCONF_TARGET`、版本/日志/记录宏、`Round` | 保留不变 | 见 10.4 |
| `UNCONF_TARGET` | 无(宏已删除) | 未确认目标类型语义常量;起批处 `Target_Type` 直接写 0,语义不变 |
| `PI`、`MAX_TRACK_NUM`、版本/日志/记录宏、`Round` | 保留不变 | 见 10.4 |
### 10.4 编译期常量(parameters.h 保留宏)
@@ -1127,7 +1135,6 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|---|---|---|
| `MAX_TRACK_NUM` | 500 | 输出航迹数组 `Track[500][10]` 的固定容量(宿主接口维度) |
| `RDP_TAS_QUEUE_CAPACITY` | 30 | TAS 跟踪队列容量上限;运行期配置项 `tas_track_num_max` 不得超过该值 |
| `UNCONF_TARGET` | 0 | 未确认目标类型(`Track::Target_Type` 的缺省语义值) |
| `PI` | 3.1415926f | 圆周率常量 |
| `MAJOR_VERSION` / `MINOR_VERSION` / `PATCH_VERSION` | 1 / 5 / 8 | 版本号(拼装为 `VERSION_STRING`,见 7.1) |
| `VERSION_INFO` / `VERSION_STRING` | `PS`/`MS`、`V1.5.8.PS`/`V1.5.8.MS` | 扫描体制后缀与完整版本串(由 `GetB()` 写入 `version_info`) |
@@ -1149,6 +1156,8 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
| RDP_RECORD_DROP_LOG_INTERVAL | 1024 | 队列丢弃日志限频:每累计丢弃该行数提示一次 |
| rdp_record::Stats / stats()(非宏) | — | 运行统计结构体(定义于 `rdp_record.h`,任意时刻线程安全读取、`Shutdown()` 时自动打印):`enqueued_rows`/`dropped_rows`/`written_rows`/`transactions`/`write_errors`/`queue_peak_bytes`/`queue_peak_rows` |
> **构建体制宏(不在 parameters.h 中定义)**:`PHASE_SCANNING` / `MECHANICAL_SCANNING` 由 CMake 缓存变量 `RADAR_SCAN_MODE` 经 `target_compile_definitions` 传入,仅用于 `parameters.h` 的 `VERSION_INFO`(`V1.5.8.PS` / `V1.5.8.MS`)与 `#pragma message`,以及构建目录/任务命名;**不参与 `data_process.cpp` 判圈**(判圈由配置项 `scan_mode` 决定,见 7.2)。源码中已无「按体制编译的判圈分支」。
---
## 11. 已知问题与限制
@@ -1185,6 +1194,7 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
- **起批质量门限取的是临时航迹「末点」质量**:`tmp_track_to_trust_track()` 用 `(*Iter)[L-1].quality` 与按长度取的门限比较,而临时航迹质量只在 L=3 时写过所有点、L>3 时只更新末点,因此门限表实际是针对「最新一点的质量」,不是整条航迹的平均质量。
- **质量长度项含整数除法**:`1 − Valid_point_sum/Point_sum` 中两操作数均为 `int`,先做整数除法截断再乘 0.5,`Valid_point_sum/Point_sum` 的精度损失最大约 1/Point_sum;对点数很多的航迹影响可忽略,但精确复现公式时需注意。
- **数据记录未采用关联信息裁剪与记录策略(P0-a / P2,V1.5.8 优化时明确不做)**:⑥ 关联信息仍按「每个候选一行」写入(单圈 ≈ 点迹数 × 航迹数),未裁剪为只记录取中候选,也未做按容量/时长切库与旧库清理;因此高航迹密度场景下判圈帧仍有可观记录开销(200 目标/150 点压测 p99 ≈ 13~24 ms),记录库也可能很大(60 圈约 1.06 GB)。属本轮刻意取舍,评价实时性时需区分普通帧(p99 ≈ 0.1 ms)与判圈帧。
- **`scan_mode` 与构建体制不校验一致性(参数配置方式改造)**:DLL 不检查配置项 `scan_mode` 与编译期 `PHASE_SCANNING`/`MECHANICAL_SCANNING` 是否一致;两者不一致时不会报错,`version_info`(PS/MS)反映构建体制、实际判圈行为反映配置,存在版本串与实际行为不符的风险。部署时应保证「构建体制 = 配置 `scan_mode` = 实际雷达体制」三者一致(机扫需 `scan_mode=1` 且 4 项数值按机扫取值,见 4.2)。
### 11.3 未启用功能
@@ -1217,7 +1227,7 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
| 提交 | 内容 |
|---|---|
| 工作区(本次改造,未提交) | **参数配置方式改造: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`,宏与旧字段按映射等价替换;`parameters.h` 仅保留 PI、版本/日志/记录宏、`MAX_TRACK_NUM`、`RDP_TAS_QUEUE_CAPACITY`、`UNCONF_TARGET`、`Round`;`track_index_mangement` 航迹号表改按 `track_index_max` 分配,TAS 队列容量用 `RDP_TAS_QUEUE_CAPACITY`、运行期上限用 `tas_track_num_max`,波束类型用 `default_track_beam_type`。验证(Lead 实测,2026-10-27):8 配置构建成功且 0 warning 0 error;Release REC_OFF DLL 331,776 字节、导出表 31 项(新增 `parameters_reload`,旧参数接口与 `RadarPara` 符号消失);加载器单测 229 项断言、公开接口运行期测试(8 配置各 29 项断言)全部通过;62 个结构体成员 ↔ 62 个加载器键 ↔ 62 个 TOML 键一一对应。详见 CHANGELOG `[Unreleased]` |
| 工作区(本次改造,未提交) | **参数配置方式改造: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` 运行时选择(行为逐分支等价),`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 配置重建成功且 0 warning 0 error;Release REC_OFF DLL 331,776 字节(Debug REC_ON 4,694,016 字节,与 scan_mode 改动前一致)、导出表 31 项(新增 `parameters_reload`,旧参数接口与 `RadarPara` 符号消失);加载器单测 233 项断言、公开接口运行期测试(8 配置各 38 项断言,含判圈运行时切换)全部通过;`RDP_parameter` 成员 / 加载器键 / TOML 键均为 63 个,11 个配置段不变。详见 CHANGELOG `[Unreleased]` |
| 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 圈无实点才消亡 |
@@ -1283,7 +1293,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 | 修改需求说明:**雷达参数配置方式改造**(删除 `RadarPara`/旧参数接口、新增 `parameters_reload(const char*)`、TOML 配置文件 → `RDP_parameter`)——已按该说明实现(见 10);此前同名的数据记录调试功能与日志文件输出需求亦已实现,分别见 docs/data_record_debug.md 与 10.4 |
| config/config_tmp.toml | 参数配置样例(TOML,11 个配置段、62 个键与 `RDP_parameter` 成员一一对应,样例为相扫取值;机扫差异项见 10.1 兼容性提示)——参数表见 10.2 |
| config/config_tmp.toml | 参数配置样例(TOML,11 个配置段、63 个键与 `RDP_parameter` 成员一一对应,样例为相扫取值(`scan_mode=0`);机扫差异项见 10.1 兼容性提示)——参数表见 10.2 |
| 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) |