@@ -1,9 +1,9 @@
|
||||
# 雷达数据处理 DLL(data_process_class_dll)
|
||||
|
||||
> X256 雷达数据处理动态链接库:将雷达输出的原始点迹(TWS/TAS)处理为稳定可靠的目标航迹,并给出 TAS 跟踪波束控制指令。
|
||||
> 仓库 simianzhen256-v1.5.5-ms-vscode(目录名沿用旧版本,当前代码版本为 **V1.5.10**;已由 Qt/qmake 工程迁移为 VS Code + CMake 工程,编译器为 MSVC 2022 / v143,C++17,x64 目标)。
|
||||
> 仓库 simianzhen256-v1.5.5-ms-vscode(目录名沿用旧版本,当前代码版本为 **V1.5.11**;已由 Qt/qmake 工程迁移为 VS Code + CMake 工程,编译器为 MSVC 2022 / v143,C++17,x64 目标)。
|
||||
>
|
||||
> 版本号由 `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.h` 的 `MAJOR_VERSION` / `MINOR_VERSION` / `PATCH_VERSION`(当前 1.5.11)与 `VERSION_INFO`(`"GENERIC"`——机扫/相扫版本已合并为同一份 DLL,无体制后缀)拼装为 `VERSION_STRING`(`V1.5.11.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)。
|
||||
|
||||
@@ -63,12 +63,12 @@
|
||||
- **3 模型 IMM 滤波**:三个 Singer 模型(低/中/高过程噪声),量测为「距离-方位-径向速度」三维的 EKF,多普勒残差按盲速折叠,似然用 3×3 新息协方差。
|
||||
- **最近邻数据关联**:三模型统计距离波门 `associate_threshold = 4`(配置项 `[track_associate] associate_threshold`,等效 d < 4,TWS 另按航迹距离分段收紧模型 3 波门),再叠加高度门限(≤1000 m 150 m / 2000 m 200 m / 3000 m 250 m / 5000 m 300 m,更远不约束)与 TWS 弦距-位移距离门限。ΔT ≤ 0(点迹时间戳不晚于航迹时间)的候选不更新航迹状态、仅消费该点迹(标记已使用),避免其继续起批而生成虚假 TWS 航迹。关联输出的航迹同时给出**靠近/远离方向标志**:按航迹 IMM 融合速度矢量与「雷达→目标」位置矢量的夹角判定——`acos((-x·cos(Direction_Angle) − y·sin(Direction_Angle)) / r) < π/2` 置 1(靠近),否则 0(远离),等价于「滤波速度的径向分量指向雷达」,不再使用受多普勒模糊影响的实测径向速度 `vr_point`;TWS、TAS 两通道一致(见 9.6)。
|
||||
- **重点目标与外推上限**:`primary_target_add` / `primary_target_cancel` 可按批号手动标记/取消重点目标,重点航迹的消亡轮数放宽到 `track_die_round_pramary`(默认 10);未关联航迹的外推圈数受限(TWS ≤ `extrapolate_max`=3,TAS 由 `extrapolate_max_tas` 控制,样例配置为相扫 5 / 机扫需配 48),超限后停止外推。**输出航迹只包含本圈有更新的航迹**(`Track_Update_Flag` 门控),宿主不能再用输出行数推断航迹总数(见 9.9)。
|
||||
- **航迹质量(V1.5.8)**:归一化航迹质量(0~1,内部)贯穿起始→关联→外推三阶段——临时航迹每延长一点按「统计距离 + SNR」重算,关联实点后按「统计距离 + SNR + 有效点占比」加权并指数平滑,未关联期间按未更新时长二次衰减;起批需达到**按长度分级**的最低质量,输出航迹给 0~100 的 `Quality` 字段;**普通 TWS 航迹的消亡改由质量决定**(`Quality < 0.3`),重点航迹与 TAS 航迹仍按外推圈数(见 9.11)。
|
||||
- **航迹质量(V1.5.8)**:归一化航迹质量(0~1,内部)贯穿起始→关联→外推三阶段——临时航迹每延长一点按「统计距离 + SNR」重算,关联实点后按「统计距离 + SNR + 有效点占比」加权并指数平滑,未关联期间按未更新时长二次衰减;起批需达到**按长度分级**的最低质量,输出航迹给 0~100 的 `Quality` 字段;普通 TWS 航迹默认按质量消亡(`Quality < track_die_quality`),**可用配置项 `track_die_quality_enable` 切换为按圈数消亡**(V1.5.11);重点航迹与 TAS 航迹仍按外推圈数(见 9.9、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/` 下现提供 **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)。
|
||||
- **TAS 波束控制**:手动转 TAS 目标入队(队列容量为编译期常量 `RDP_TAS_QUEUE_CAPACITY`、运行期上限与遍历上界均为配置项 `tas_track_num_max`),按最新时间戳外推输出跟踪波束(距离/方位/俯仰/**航迹指纹**);俯仰输出取 `max(计算俯仰, tas_beam_pitch_min)`,可用配置项设下限避免波束打到地面(V1.5.10)。**自动 TAS 跟踪(V1.5.11)**:`auto_tas_enable=1` 时,合速度落在 `[auto_tas_velocity_min, auto_tas_velocity_max]`(m/s)内的航迹会自动入队(无需 `tracking_start`),样例仅 `Ku2304_PS` 启用(700~900 m/s),其余设备默认关闭(见 9.10)。
|
||||
- **航迹指纹(V1.5.9,V1.5.11 调整口径)**:起批时生成 16 bit `Track_fingerprint`(量化 + splitmix64 混合 + 折叠);**V1.5.11 起取样点为临时航迹首点,且不再使用距离/方位**,只用 `vr`/`RCS`/`CPI_time`(避免外部修正 r/azi 导致指纹变化)。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 概率奇异保护等已修复项。
|
||||
@@ -86,7 +86,7 @@
|
||||
├── CHANGELOG.md # 变更日志(Keep a Changelog 格式,按 git 提交记录维护)
|
||||
├── README.md # 本文件:项目说明(架构、接口、流程、算法、参数)
|
||||
├── requirements.md # 需求说明:日志组件 rdp_log 改为使用 spdlog(日志同时输出标准输出与日志文件、RDP_LOG_* 级别宏、SPDLOG_ACTIVE_LEVEL 编译期控制)——已按该说明实现
|
||||
├── config/ # 参数配置文件目录(共 8 份 TOML,键名与 struct RDP_parameter 成员一致)
|
||||
├── config/ # 参数配置文件目录(共 8 份 TOML,11 个配置段、69 个键,键名与 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)
|
||||
@@ -94,7 +94,7 @@
|
||||
│ ├── 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 即不限制)
|
||||
│ └── Ku2304_PS.toml # Ku2304 相扫(16.5 GHz、频点步进 0.05 GHz、单跟踪、俯仰下限 -90 不限制、**启用自动 TAS 700~900 m/s**、消亡圈数 25/50/50)
|
||||
├── archived_docs/ # 过期文档留档(仅作历史参考;接口与流程以本 README 与 docs/ 专项说明为准)
|
||||
│ ├── BUG_REPORT.md # 全量逻辑 BUG 分析报告(P0~P3,37 项)
|
||||
│ └── BUG_FIX_REPORT.md # BUG 修复报告(修复明细 + 编译验证结果)
|
||||
@@ -370,8 +370,8 @@ classDiagram
|
||||
| Track_Asso | TWS 点航关联 + IMM 滤波:模型交互 → 门限筛选(NN)→ 各模型 EKF → 概率更新 → 模型输出(只输出 `Track_Update_Flag==1` 的航迹);未关联航迹按上限外推;高度平滑;按滤波速度矢量写 `Flag_Direction`;ΔT≤0(乱序/重复时间戳)的候选取出后不更新滤波、不刷新航迹,仅消费该点迹 |
|
||||
| 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:出队时置 `Track_Mode=0` 并输出完整航迹更新)、跟踪波束预测输出(tas_beam_output:数据率门控 + 队内选择最早 CPI 目标 + 俯仰下限 `tas_beam_pitch_min`)、调度时刻记录(last_track_time);队列遍历上界为配置项 `tas_track_num_max` |
|
||||
| Track_Die / Track_Die_Tas | 可靠航迹消亡:TWS 普通航迹的判据由配置项 `track_die_quality_enable` 选择——1(默认)按质量 `Quality < track_die_quality`、0 按圈数 `Extrapolate_round > track_die_round`;TWS 重点航迹按未关联轮数(`track_die_round_pramary`)、TAS 按未关联轮数(`track_die_round_tas`),或手动删除标志置位时输出消亡批号并删除 |
|
||||
| TAS_Ctrl | TAS 波束控制:目标入队(tas_target_add:**手动 `manual_tracking_flag==1` 或自动 `tas_auto_start()` 通过速度区间判定**,V1.5.11)、失效/手动取消目标出队(tas_target_del:以 `Track_Mode==1 && manual_untracking_flag!=1` 判定在队,出队时置 `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 | 极坐标 ↔ 直角坐标转换 |
|
||||
@@ -398,9 +398,9 @@ classDiagram
|
||||
|
||||
| 结构体 | 用途 | 关键字段 |
|
||||
|---|---|---|
|
||||
| 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,模块直接访问) |
|
||||
| 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_die_quality_enable`(V1.5.11:1=按质量 / 0=按圈数)**)、航迹质量参数(`track_quality_*`)、航迹批号(`track_index_max`)、波束调度(`default_track_beam_type`/`tas_track_num_max`/`tas_beam_pitch_min`/**`auto_tas_enable` / `auto_tas_velocity_min` / `auto_tas_velocity_max`(自动 TAS,V1.5.11)**)、singer 模型参数(`model_*_Q_*`)、两个屏蔽区(各 30 组距离/方位区间);与 TOML 配置段/键一一对应(共 69 键,见 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、实虚点标志、手动删除 `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] |
|
||||
| Trust_Track | 可靠航迹(IMM 全状态) | 航迹号、**航迹指纹 `Track_fingerprint`(16 bit,V1.5.9 新增;V1.5.11 起按临时航迹首点计算且不含距离/方位,只用 `vr`/`RCS`/`CPI_time`;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 |
|
||||
@@ -509,7 +509,7 @@ flowchart TD
|
||||
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);被用户取消跟踪的目标(`manual_untracking_flag=1`)不再按指纹重新置 TAS 模式(V1.5.10)。
|
||||
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)。**自动 TAS 目标(V1.5.11)**不经过输入帧置位:Beam_Ctrl 入队时按 `auto_tas_enable` + 合速度区间筛选,入队后与本流程图相同。
|
||||
|
||||
### 8.3 航迹起始流程(逻辑法)
|
||||
|
||||
@@ -921,23 +921,23 @@ $$
|
||||
|
||||
#### 消亡(track_die.cpp / track_die_tas.cpp)
|
||||
|
||||
**TWS 普通航迹自 V1.5.8 起改为按航迹质量消亡**(`Quality < track_die_quality`,默认 0.3),其余通道仍按外推圈数(判据 `Extrapolate_round > 阈值`,50e0b5c 起由 `>=` 改为 `>`),满足其一即消亡:
|
||||
**TWS 普通航迹的消亡判据由配置项 `track_die_quality_enable` 选择**(V1.5.11):**1(默认)= 按航迹质量**(`Quality < track_die_quality`,样例 0.3);**0 = 按外推圈数**(`Extrapolate_round > track_die_round`,样例 6)。其余通道固定按外推圈数(判据 `Extrapolate_round > 阈值`,50e0b5c 起由 `>=` 改为 `>`),满足其一即消亡:
|
||||
|
||||
| 通道 | 条件 |
|
||||
|---|---|
|
||||
| TWS 普通航迹 | Track_Mode==0 且 primary_target_flag==0 且 **Quality < track_die_quality(样例 0.3)**(V1.5.8,782bff5) |
|
||||
| TWS 普通航迹 | Track_Mode==0 且 primary_target_flag==0 且(`track_die_quality_enable==1` → **Quality < track_die_quality(样例 0.3)**;`==0` → **Extrapolate_round > track_die_round(样例 6)**) |
|
||||
| TWS 重点航迹 | Track_Mode==0 且 primary_target_flag==1 且 Extrapolate_round > track_die_round_pramary(样例 10) |
|
||||
| TAS 航迹 | Track_Mode==1 且 Extrapolate_round > track_die_round_tas(样例配置为相扫 20;机扫需配 96) |
|
||||
| 任意航迹 | manual_delete_flag==1(手动删除标记,不区分通道) |
|
||||
|
||||
消亡批号写入 Track_die_Index_Output 并删除本地航迹。重点航迹实际连续 11 圈无实点关联才消亡(TAS 相扫 21 圈 / 机扫 97 圈,因 `Extrapolate_round` 每圈未关联只自增 1;相扫 TAS 阈值于 5d105d2 由 10 提高到 20);普通 TWS 航迹的存活时长改为由质量衰减速度决定——未关联时间越长衰减越快,`Quality` 降到 `track_die_quality` 以下即消亡,不再有固定圈数上限(`track_die_round`(原 6 圈)仍可配置但已不被引用,见 10.2)。`track_process()` 中的调用顺序为 `track_asso → track_die → track_init`(data_process.cpp),即消亡先于航迹起始执行。
|
||||
消亡批号写入 Track_die_Index_Output 并删除本地航迹。重点航迹实际连续 11 圈无实点关联才消亡(TAS 相扫 21 圈 / 机扫 97 圈,因 `Extrapolate_round` 每圈未关联只自增 1;相扫 TAS 阈值于 5d105d2 由 10 提高到 20);质量模式下普通 TWS 航迹的存活时长由质量衰减速度决定(不再是固定圈数),圈数模式下为 `track_die_round`+1 圈后消亡。各设备配置当前均为 `track_die_quality_enable = 1`,`track_die_round` 仅作备用值(X1024 两份配 5、Ku2304 配 25、其余 6)。`track_process()` 中的调用顺序为 `track_asso → track_die → track_init`(data_process.cpp),即消亡先于航迹起始执行。
|
||||
|
||||
> 重点目标标记(`primary_target_add` / `primary_target_cancel`)在 TWS 上决定「按质量消亡(普通)」还是「按 10 圈轮数消亡(重点)」,不改变关联、滤波、波束控制等其他环节,也不体现在输出航迹字段中。
|
||||
|
||||
### 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,并输出一次航迹更新(V1.5.10 起该行不再叠加 `radar_system_delay` 补偿)。
|
||||
- **出队**:队列中目标在航迹表中不存在、或不再处于手动 TAS 状态(`manual_tracking_flag≠1`)时清除;**目标仍存在时出队会置 `Track_Mode=0` 并输出一整套完整航迹更新行**(V1.5.10,覆盖用户手动取消跟踪的场景;若目标已消亡则只清队列项、不再输出)。(自动转 TAS / 自动退出的 tas_auto_start/tas_auto_end 逻辑全部注释停用——只支持手动。)
|
||||
- **入队条件**(手动 / 自动两种,V1.5.11):**手动**——`manual_tracking_flag==1`;**自动**——`auto_tas_enable==1` 且航迹合速度落在 `[auto_tas_velocity_min, auto_tas_velocity_max]`(m/s,`tas_auto_start()` 判定,距离/高度形参当前不参与)。两种情况都还要求 `Track_Mode==0`、队列未满(队列遍历上界为配置项 `tas_track_num_max`,样例为相扫 4;机扫/单跟踪配 1,上限 `RDP_TAS_QUEUE_CAPACITY`=30)、不在 TAS 禁止区内;原注释中的「关联点数 ≥2」约束未启用。入队即置 `Track_Mode=1`、以航迹时间初始化 last_track_time,并输出一次航迹更新(V1.5.10 起该行不再叠加 `radar_system_delay` 补偿)。
|
||||
- **出队**:队列中目标在航迹表中不存在、或「`Track_Mode==1` 但 `manual_untracking_flag==1`」(用户已取消跟踪)时清除;**目标仍存在时出队会置 `Track_Mode=0` 并输出一整套完整航迹更新行**(V1.5.10,覆盖用户手动取消跟踪的场景;若目标已消亡则只清队列项、不再输出)。出队在队判定于 V1.5.11 由 `manual_tracking_flag==1` 改为 `manual_untracking_flag!=1`,因此**自动 TAS 目标(无手动标志)不会再被误判为已取消而立即出队**。`tas_auto_start()` 仅按速度区间判定,不区分距离/高度;自动 TAS 退出仍只有「用户 `tracking_stop`」与「目标消亡」两种途径。
|
||||
- **波束输出**:在 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:
|
||||
|
||||
$$
|
||||
@@ -951,6 +951,8 @@ $$
|
||||
> **入队/出队当圈的输出(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 双写落到日志文件。
|
||||
>
|
||||
> **TAS 波束调试日志(V1.5.11)**:`tas_beam_output()` 每次输出波束时打印一条 `RDP_LOG_DEBUG`(`TAS <Track_Index-航迹指纹>: range/azi/elev`),Release 默认级别(INFO)下不输出,需要时用 `RDP_LOG_LEVEL=DEBUG` 构建。
|
||||
|
||||
> e0bf227 修正:数据率门控原先同时要求「距上次波束输出」与「航迹时间 T_track 距最新时间戳」都超过 `data_rate_tas`,第二个条件与「选 CPI 最早目标」的语义冲突(航迹时间越早反倒越容易被抑制),会漏掉本应输出的波束;现已只保留前者。
|
||||
|
||||
@@ -958,7 +960,7 @@ $$
|
||||
|
||||
### 9.11 航迹质量(V1.5.8,1ae0cf2 / d9a7bd0 / 4b70b24 / 782bff5)
|
||||
|
||||
内部质量 `Quality` 为 **0~1** 的归一化值(`Temp_track::quality`、`Trust_Track::Quality`),输出时乘 `track_quality_max`(配置项,100)折算为 **0~100** 写入 `Track.Quality`。它贯穿「临时航迹 → 起批 → 关联 → 外推 → 消亡」全过程,是普通 TWS 航迹**自动**消亡的唯一依据。
|
||||
内部质量 `Quality` 为 **0~1** 的归一化值(`Temp_track::quality`、`Trust_Track::Quality`),输出时乘 `track_quality_max`(配置项,100)折算为 **0~100** 写入 `Track.Quality`。它贯穿「临时航迹 → 起批 → 关联 → 外推 → 消亡」全过程,是普通 TWS 航迹消亡的判据之一(`track_die_quality_enable==1` 时生效,见 9.9)。
|
||||
|
||||
**三个公共分量**
|
||||
|
||||
@@ -999,22 +1001,24 @@ $$
|
||||
>
|
||||
> 已知局限(详见 11.2):TAS 通道不维护质量;`track_quality_min`、`track_die_quality_pramary`、`track_die_round` 当前可配置但未参与计算;起批质量门限按**临时航迹长度**取值,而实际起批只用末点质量。
|
||||
|
||||
### 9.12 航迹指纹(V1.5.9,0f3da99)
|
||||
### 9.12 航迹指纹(V1.5.9,V1.5.11 调整口径)
|
||||
|
||||
**目的**:航迹批号(`Track_Index`,1~500)在航迹消亡后会被复用,TAS 控制命令若只带批号,回放/重连后可能指向另一条航迹。为此在起批时为目标生成一个由目标特征决定的 **16 bit 指纹**,TAS 的输入与输出均改用指纹。
|
||||
|
||||
**生成**(`track_init.cpp::computeFingerprint()`,在 `tmp_track_to_trust_track()` 起批时对**末点**计算):
|
||||
**生成**(`track_init.cpp::computeFingerprint()`,在 `tmp_track_to_trust_track()` 起批时计算;**V1.5.11 起取临时航迹首点,且距离/方位固定传 0**):
|
||||
|
||||
```cpp
|
||||
uint64_t h = kSeed; // 固定种子 0x243F6A8885A308D3
|
||||
h = mix64(h ^ quantize(r, 100.0)); // 距离:0.01 m
|
||||
h = mix64(h ^ quantize(azi, 1000.0)); // 方位:0.001°
|
||||
h = mix64(h ^ quantize(0, 100.0)); // 距离:固定 0(V1.5.11 起不参与)
|
||||
h = mix64(h ^ quantize(0, 1000.0)); // 方位:固定 0(V1.5.11 起不参与)
|
||||
h = mix64(h ^ quantize(vr, 100.0)); // 径向速度:0.01 m/s
|
||||
h = mix64(h ^ quantize(RCS, 10.0)); // RCS:0.1 dBsm
|
||||
h = mix64(h ^ (uint64_t)CPI_time); // CPI 时间:毫秒整数
|
||||
fingerprint = fold16(h); // 折叠为 uint16
|
||||
```
|
||||
|
||||
- 取样点:**临时航迹首点**(`Track_to_start[i][0]`,V1.5.11 起;此前为末点);
|
||||
- 距离/方位不再参与(V1.5.11):这两个量可能被外部修正值改写,纳入后同一目标两次计算的指纹会不一致;仍参与的是首点的 `vr` / `RCS` / `CPI_time`;
|
||||
- `quantize`:半舍入远离零(`std::round`),NaN / ±Inf 映射为固定常量,结果钳位到 ±9e18 以防止转 `int64` 溢出;
|
||||
- `mix64`:splitmix64 混合(`x^=x>>30; x*=0xBF58476D1CE4E5B9; x^=x>>27; x*=0x94D049BB133111EB; x^=x>>31`),使输入微小变化雪崩扩散;
|
||||
- `fold16`:把 64 bit 的高 32、16 位异或折叠到低 16 位(`h^=h>>32; h^=h>>16;`),充分使用熵后取 `uint16_t`。
|
||||
@@ -1025,7 +1029,7 @@ fingerprint = fold16(h); // 折叠为 uint16
|
||||
- **输入**:`data_preprocess()` 的 TAS 分支把 `DataRev::TAS_track_index` 解释为指纹存入 `TAS_track_fingerprint`;`track_process(model=3)` 遍历航迹表寻找 `Track_fingerprint` 相同的航迹,命中后置 `manual_tracking_flag=1`、`Track_Mode=1` 再走 TAS 关联/外推;未命中则该帧无对应航迹(不处理);
|
||||
- **队列内部**:`Tracking_Target::Index` 仍存 `Track_Index`,即**队列与内部处理仍按批号**,只有跨 DLL 边界的数据用指纹(见 8.2)。
|
||||
|
||||
> 指纹是 **16 bit**(0~65535),理论上存在碰撞(同一时刻航迹数远小于 65536,实际概率低);指纹不含高度/批号,同一目标在两次独立起批时(例如消亡后重新起批)指纹可能不同。记录表 `RdpRecTrustTrack` 目前**未包含** `Track_fingerprint` 字段(见 docs/data_record_debug.md 第 7 节)。
|
||||
> 指纹是 **16 bit**(0~65535),理论上存在碰撞(同一时刻航迹数远小于 65536,实际概率低);**V1.5.11 起指纹只由 `vr`/`RCS`/`CPI_time` 决定**,因此「同一帧起批、速度/RCS/CPI 时间相同」的两条航迹会得到相同指纹(旧口径含距离方位,碰撞面更小)。指纹不含高度/批号,同一目标在两次独立起批时(例如消亡后重新起批)指纹可能不同。记录表 `RdpRecTrustTrack` 目前**未包含** `Track_fingerprint` 字段(见 docs/data_record_debug.md 第 7 节)。
|
||||
|
||||
---
|
||||
|
||||
@@ -1065,7 +1069,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`、**`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` 目前只要求键存在且为浮点,未做范围校验**;
|
||||
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、**`track_die_quality_enable∈{0,1}`**、质量门限∈[0,1]、质量衰减系数≤0、`track_index_max∈[1, MAX_TRACK_NUM]`、`tas_track_num_max∈[0, RDP_TAS_QUEUE_CAPACITY]`、**`auto_tas_velocity_max ≥ auto_tas_velocity_min`**、Singer 模型 Q>0 等(完整清单以源码为准);**`tas_beam_pitch_min` 只要求键存在且为浮点、`auto_tas_velocity_min ≥ 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_ERROR` 打印到日志),**当前已加载参数保持不变**(加载过程先写入临时对象,全部成功后才整体赋值)。
|
||||
|
||||
@@ -1105,9 +1109,10 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
||||
| track_init | `track_init_quality_L3`~`L7` | 0.7 / 0.6 / 0.5 / 0.4 / 0.3 | 按临时航迹长度 3/4/5/6/≥7 的起批最低质量(原 `TRACK_START_QUALITY_L3~L7`) |
|
||||
| track_init | `track_init_velocity_min` | 1 | 航迹头关联速度下限(m/s;原 `V_MIN`,校验 < 上限) |
|
||||
| track_init | `track_init_velocity_max` | 50 | 航迹头关联速度上限(m/s;原 `V_MAX`) |
|
||||
| track_die | `track_die_round` | 6 | 普通 TWS 消亡圈数(V1.5.8 起改按质量消亡,**当前未被引用**,保留) |
|
||||
| track_die | `track_die_round` | 6 | 普通 TWS 消亡圈数(`track_die_quality_enable==0` 时生效;X1024 两份配 5、Ku2304 配 25) |
|
||||
| track_die | `track_die_round_pramary` | 10 | 重点航迹消亡圈数(原 `TRACK_DIE_ROUND_PRIMARY`) |
|
||||
| track_die | `track_die_round_tas` | 20 | TAS 航迹消亡圈数(原 `TRACK_DIE_ROUND_TAS`;机扫需配 96) |
|
||||
| track_die | `track_die_quality_enable` | 1 | **消批方式开关(V1.5.11 新增)**:1=非重点 TWS 航迹按质量消批(`Quality < track_die_quality`);0=改按圈数消批(`Extrapolate_round > track_die_round`);校验仅允许 0/1 |
|
||||
| track_die | `track_die_quality` | 0.3 | TWS 普通航迹质量消亡门限(原 `TRACK_DIE_QUALITY`) |
|
||||
| track_die | `track_die_quality_pramary` | 0.3 | 重点航迹质量门限(保留,当前未参与计算) |
|
||||
| track_quality | `track_quality_max` | 100 | 质量折算上限(输出 `Track.Quality` = 内部质量 × 该值) |
|
||||
@@ -1122,6 +1127,9 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
||||
| beam_control | `default_track_beam_type` | 1 | 跟踪波束 `TrackingBeam.type` 取值(原硬编码 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(等价不限制);加载器**未做范围校验** |
|
||||
| beam_control | `auto_tas_enable` | 0(**Ku2304 配 1**) | **自动 TAS 使能(V1.5.11 新增)**:0=关闭(仅手动转跟踪);1=合速度在 `[auto_tas_velocity_min, auto_tas_velocity_max]` 内的航迹自动入队(见 9.10) |
|
||||
| beam_control | `auto_tas_velocity_min` | 0.0(**Ku2304 配 700**) | 自动 TAS 合速度下限(m/s);加载器只校验与上限的大小关系,`≥0` 校验被注释停用 |
|
||||
| beam_control | `auto_tas_velocity_max` | 0.0(**Ku2304 配 900**) | 自动 TAS 合速度上限(m/s),须 ≥ 下限 |
|
||||
| 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 档 |
|
||||
@@ -1256,7 +1264,9 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
||||
- **质量长度项含整数除法**:`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` 与实际雷达体制/波位号序列是否一致(不报错);机扫部署须把 `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,V1.5.11 口径)**:指纹为 **16 bit**(0~65535),由目标特征生成,因此 ① 理论上存在碰撞(同帧命中多条航迹时 `track_process(model=3)` 取遍历到的第一条);**V1.5.11 起只由首点的 `vr`/`RCS`/`CPI_time` 决定(不含距离/方位),同帧起批且这三项相同的航迹必得同一指纹**,碰撞面比旧口径大;② 同一目标消亡后重新起批,因首点测量与 CPI 时间不同,指纹通常不同(跨起批不保证稳定);③ 指纹只用于跨 DLL 边界,**批号仍是内部主键**,`tracking_start/tracking_stop` 等手动接口仍按批号;④ 字段名 `TAS_track_index` 未改名而语义已变为指纹,对接时不要按旧含义当批号使用(见 9.12)。
|
||||
- **自动 TAS 只按速度判定(V1.5.11)**:`tas_auto_start(v, r, h)` 只使用合速度 `v`,距离与高度形参未参与;且加载器对 `auto_tas_velocity_min` 的 `≥0` 校验以注释形式停用,配置成负值也不会报错。自动 TAS 目标入队后与手动目标走同一套关联/波束逻辑,退出只有 `tracking_stop` 与目标消亡两条途径(无自动退出条件)。
|
||||
- **消批方式开关的边界(V1.5.11)**:`track_die_quality_enable` 只切换**非重点 TWS 航迹**的消批判据;重点 TWS 与 TAS 航迹始终按圈数消亡。设 0 时 `track_die_round` 才生效(判据 `>`,即 `track_die_round`+1 圈未关联才消亡),各设备配置当前均为 1,`track_die_round` 属备用值。
|
||||
- **指纹未入记录表(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`。
|
||||
@@ -1267,7 +1277,7 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
||||
- direct_tracking_process(引导跟踪)、tracking_point(手动打波束)为**空实现**;Track_Init_Direct_Tracking::track_init_process_logic 同样为空。
|
||||
- track_asso_direct_tracking.cpp **未加入 CMake 源列表**(与旧 .pro 一致)。
|
||||
- TAS **自动**开启/退出逻辑(tas_auto_start/tas_auto_end)注释停用,仅支持手动 tracking_start/tracking_stop。
|
||||
- 新结构体 `RDP_parameter` 已排除旧 `RadarPara` 中实现未使用的字段(`R_TAS_max/min`、`V_TAS_max/min`、`TAS_Height_1~5`、`cfar_th`、`north_angle`、`Beam_num`;其中前两组用于已停用的 TAS 自动开启/退出逻辑),这些功能仍保持停用(见 10.3)。
|
||||
- 新结构体 `RDP_parameter` 已排除旧 `RadarPara` 中实现未使用的字段(`R_TAS_max/min`、`V_TAS_max/min`、`TAS_Height_1~5`、`cfar_th`、`north_angle`、`Beam_num`)。其中 `R_TAS_*`/`V_TAS_*`/`TAS_Height_*` 原属**按距离/速度/高度阈值的 TAS 自动开启/退出逻辑**:自动**退出**仍停用,自动**开启**自 V1.5.11 起改由 `[beam_control] auto_tas_enable` + 速度区间实现(不使用上述距离/高度字段,见 9.10)。
|
||||
- build/output/ 下为早期打包导出物,其 data_process_class_dll.h 时间戳仍为 32 位 int,与当前 64 位接口不一致,勿作为对接依据。
|
||||
- **数据记录调试功能默认只在 Debug 启用**:CMake 选项 `RDP_DATA_RECORD` 的 AUTO 默认值为「Debug 启用、Release 关闭」,交付/Release 构建下记录模块(`rdp_record.cpp`、`sqlite3.c`)不参与编译、所有记录宏为空操作(导出符号与依赖均无变化);如需在 Release 构建中临时排查可显式 `-DRDP_DATA_RECORD=ON`,但正式交付应保持 AUTO/OFF(见 docs/data_record_debug.md)。记录点中的字段错误只在启用记录功能的构建中才会被检查(关闭时宏丢弃实参)。
|
||||
- **记录表的三个观察**:① 可靠航迹表 `RdpRecTrustTrack` 在输出分支内写库,而该分支入口已把 `Track_Update_Flag` 清零(`track_asso.cpp` / `track_asso_tas.cpp` 均先置 0 再输出),因此表中的 `Track_Update_Flag` 恒为 0,判断「本圈是否更新」应改用该表是否出现对应 `track_id`/`circle_id` 的记录;② `Trust_Track` 的极坐标量快照 `Range`/`Azimuth`/`Elevation`/`Velocity` 只在航迹当圈有输出时回填,长期未输出(外推超限)的航迹在表中该项为 0 或旧值;③ TAS 关联信息行中 `R`/`VT` 为占位 0、`thd_r` 恒为 true、`track_index` 存的是 TAS 目标批号(TWS 行才是航迹表下标),跨通道分析时不要按 TWS 语义解读。
|
||||
@@ -1287,13 +1297,17 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
||||
|
||||
## 12. 版本历史
|
||||
|
||||
当前代码版本:**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]`。
|
||||
当前代码版本:**V1.5.11**(`parameters.h` 的 `PATCH_VERSION` = 11、`VERSION_INFO` = `"GENERIC"`,版本串 `V1.5.11.GENERIC`——机扫/相扫已合并为同一份构建,无体制后缀;`PATCH_VERSION` 10→11 的改动**尚未提交**,工作区生效)。版本号自 1.5.6 起可运行时读取(`version_info`,见 7.1)。中间状态 b4aed8a 曾把版本号置为 7,但未单独发布/记录。**1.5.10 之后的全部改动已随 [1.5.11] 归档**(自动 TAS 跟踪、消批方式可配置、TAS 取消/出队与 TWS 外推修复、航迹指纹口径调整),详见 CHANGELOG `[1.5.11]`。
|
||||
|
||||
近期提交(git log --oneline,新→旧;仅列代码改动,纯文档提交略):
|
||||
|
||||
| 提交 | 内容 |
|
||||
|---|---|
|
||||
| 工作区(版本号 1.5.10,未提交) | `parameters.h` 的 `PATCH_VERSION` 9→10(`VERSION_STRING` 变为 `V1.5.10.GENERIC`);无功能改动 |
|
||||
| 工作区(版本号 1.5.11,未提交) | `parameters.h` 的 `PATCH_VERSION` 10→11(`VERSION_STRING` 变为 `V1.5.11.GENERIC`);无功能改动 |
|
||||
| c3d5b8f | 航迹指纹计算不再使用距离、方位(改为传入 `0, 0`),避免外部修正 r/azi 导致指纹不一致 |
|
||||
| 4449312 | ① 修复取消 TAS 的出队条件(改判 `manual_untracking_flag!=1`,自动 TAS 不再被误出队);② 修复 TWS 错误外推 TAS 航迹(外推条件改按 `Track_Mode==0`);③ 修复非重点航迹按圈数消批的判据方向(`<`→`>`);④ 指纹改用临时航迹首点;⑤ 增加 TAS 波束 `RDP_LOG_DEBUG` 日志 |
|
||||
| 2c0d2c2 | 增加配置项 `track_die_quality_enable`:非重点 TWS 航迹可按质量(1,默认)或按圈数(0)消批;8 份配置补该键并调整 `track_die_round` 备用值 |
|
||||
| 06e62e5 | 增加自动 TAS 跟踪(`[beam_control]`:`auto_tas_enable` / `auto_tas_velocity_min` / `auto_tas_velocity_max`),仅 Ku2304 启用(700~900 m/s);Ku2304 配置更新 `data_rate_tws`/`sigma_*`/消亡圈数 |
|
||||
| 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) |
|
||||
@@ -1372,7 +1386,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/*.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 兼容性提示 |
|
||||
| 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 个配置段、**69 个键**与 `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) |
|
||||
|
||||
Reference in New Issue
Block a user