1、更新文档;

Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
2026-10-20 11:22:33 +08:00
parent 3a9b1c4924
commit 332f270b46
5 changed files with 218 additions and 71 deletions
+35 -2
View File
@@ -15,6 +15,39 @@
### Removed
## [1.5.8] - 2026-10-20
> 本次发布把 [1.5.6] 之后、文档未及同步的全部改动一并归档(提交 5cb67cc … 3088ce4)。
> 说明:中间代码状态 b4aed8a 曾把 `PATCH_VERSION` 提升为 7,但该版本未单独发布/记录,故本区块按 1.5.8 汇总;
> 版本号宏位于 `parameters.h`,本次最终为 **1.5.8**(3088ce4「更新版本号至V1.5.8」)。
### Added
- **航迹质量(Track Quality)(1ae0cf2 / d9a7bd0 / 4b70b24 / 782bff5)**:新增归一化的航迹质量体系(0~1),并在三处维护——① **临时航迹阶段**(`track_init.cpp::point_temp_track_asso()`)每延长一个点即重算质量:`d_tmp = exp(−d)`(`d` 为末点统计距离)、`snr_tmp = 1/(1+exp(−(SNR−16)/1.2))`,按 `TRACK_QUALITY_D_WEIGHT`(0.5) 与 `TRACK_QUALITY_SNR_WEIGHT`(0.3) 归一化加权;长度恰为 3 时对三个点取平均 SNR 并写满 3 点,长度 > 3 时只对末点做指数平滑(`前值×0.8 + 新值×0.2`);② **关联更新**(`track_asso.cpp::model_filter()`)在 IMM/EKF 更新后按 `d`(`exp(−d_min)`)、点迹 SNR 与「有效点数/有效点占比」三项加权(权重 0.5/0.3/0.2)得即时质量,再与历史质量指数平滑;③ **外推递减**(见 Changed)。质量在起批时随临时航迹末点带入可靠航迹,并作为普通 TWS 航迹的消亡依据。
- **航迹质量对外输出(1ae0cf2)**:`Track` 结构体在 `Amplitude` 之后新增 `float Quality`(航迹质量),输出时按 `Quality × TRACK_QUALITY_MAX`(×100)折算为 **0~100**;TWS 关联/外推输出(`track_asso.cpp`)与起批历史点输出(`track_init.cpp`)均已写入。⚠ 该字段插在结构体中部,**宿主必须用同一版本头文件重新编译**。
- **起批质量门限(d9a7bd0)**:`track_init.cpp::tmp_track_to_trust_track()` 的起批条件在「长度 3~10 点 + 不在起批屏蔽区」之外新增**按长度分级的最低质量**——3 点 ≥0.7、4 点 ≥0.6、5 点 ≥0.5、6 点 ≥0.4、7 点及以上 ≥0.3(`TRACK_START_QUALITY_L3~L7`),质量不达标的本圈不起批、留在临时航迹表继续积累。
- **TAS 航迹与关联信息入库(5cb67cc)**:TAS 通道补齐数据记录——`track_asso_tas.cpp::model_output()` 在写出航迹后回填 `Trust_Track::Range/Azimuth/Elevation/Velocity` 并逐条记录到 `RdpRecTrustTrack`(记录范围由「仅 TWS」扩展为 TWS + TAS,两通道共用一张表);`model_filter()` 把原来的局部 `asso_info` 替换为统一的 `Asso_Info`,填充 `point_id`/`track_id`/`circle_id`/`delta_T`/`delta_h` 与门限量,并在「未通过门限的候选」「被取中候选及其余候选」两处写入 `RdpRecAssoInfo`。
- `Asso_Info` / `RdpRecAssoInfo` 新增 `tas_flag` 字段(5cb67cc,`struct.h`、`rdp_record_entity.h`、`rdp_record.cpp` 注册同步):取点迹的 `point_type`,用于在同一张关联信息表中区分 TWS(0)与 TAS(1)来源。
- `Trust_Track` 新增质量相关状态(1ae0cf2 / 4b70b24,`struct.h`):`Quality`(归一化航迹质量)、`Point_sum`(本条航迹累计点数,含外推圈)、`Valid_point_sum`(累计关联到实点的次数)、`Unupdated_time`(连续未关联实点的累计毫秒数);`Temp_track` 新增 `quality`。
### Changed
- **普通 TWS 航迹的消亡条件改为按航迹质量(782bff5,`track_die.cpp`)**:`Track_Mode==0 && primary_target_flag==0` 的航迹不再按外推圈数消亡,改为 `Quality < TRACK_DIE_QUALITY`(0.3)即消亡;**重点航迹仍按 `Extrapolate_round > TRACK_DIE_ROUND_PRIMARY`(10)**、**TAS 航迹仍按 `Extrapolate_round > TRACK_DIE_ROUND_TAS`**(相扫 10 / 机扫 96)消亡。因此 `TRACK_DIE_ROUND`(6)在 TWS 普通航迹上已不再被引用(宏仍在 `parameters.h` 中定义),普通航迹的存活时长改由质量衰减速度决定。
- 航迹质量递减策略两度调整并最终定为「按未更新时间二次衰减」(4b70b24、782bff5,`track_asso.cpp`):先由「按外推圈数线性递减」改为「按 `Unupdated_time` 线性递减」,再改为按未更新时长的二次函数累计——记 `t = Unupdated_time/1000`(秒),每次执行 `Quality += f(t_new) − f(t_old)`,其中 `f(t) = TRACK_QUALITY_DECREASE_COEFF_O2·t² + TRACK_QUALITY_DECREASE_COEFF_O1·t`(**系数取负值** −0.0008 / −0.0025),即未关联时间越长、每圈衰减越快,结果钳位到 ≥0。
- 外推的 ΔT 计算移到外推上限判断之外(4b70b24):未关联航迹的 `delta_T` 统一按 `work_mode` 取 `DATA_RATE_SHORT/MIDDLE/FAR` 计算,不再只在上限内计算,使 `Extrapolate_round` 超限后(不再预测、不再输出)仍能累计 `Unupdated_time` 并继续降低质量,直至触发质量消亡——这是「质量消亡取代圈数消亡」能够生效的前提。
- **扫描一圈完成判据按扫描体制区分(3e6763c,`data_process.cpp::data_preprocess()`)**:相扫(`PHASE_SCANNING`)恢复「前后两帧方位波位号比较」——当前帧 `Beam_index_aiz <= last_beam_num` 判为一圈完成返回 1,否则返回 2;机扫(`MECHANICAL_SCANNING`)保持 7d5a56f 起的「方位波位号 == 0」。两分支以 `#ifdef PHASE_SCANNING` 编译期隔离,`last_beam_num` 在相扫分支重新参与判断(初值 INT_MAX,故相扫首帧即返回 1)。
- TWS 外推时间差恢复为按数据率取固定值(56b5449 → b4aed8a,`track_asso.cpp::model_filter()`):56b5449 曾改为按 `latest_timestamp − T_track` 实时计算并对 `ΔT ≤ 0` 跳过,b4aed8a 回调为按 `work_mode` 取固定数据率(避免 TAS 工作时同步外推出 TWS 航迹);`track_asso_process()`/`model_filter()` 新增的 `latest_timestamp` 形参保留但当前不参与 ΔT 计算(实时计算代码以注释保留)。
- 临时航迹记录时机前移(e982804,`track_init.cpp::track_init_process_logic()`):`RdpRecTempTrack` 的写入由函数末尾(消亡之后)移到**转为可靠航迹之前**(清空点迹之后、`tmp_track_to_trust_track()` 之前),避免本圈起批的临时航迹被转走后在记录中丢失当前帧的临时航迹数据。
### Fixed
- 修正文档中「TWS 以方位波位号 == 0 判满圈」的过期描述(本次文档更新):判圈自 3e6763c 起按体制区分,相扫已恢复比较前后波位号并重新使用 `last_beam_num`;同步更正 README 2、7.2、8.1 节与 `docs/data_process_flow_report.md` 2.2 节、`docs/track_init_readme.md` 1.2 节。
- 修正文档中记录点覆盖范围的过期描述(本次文档更新):`RdpRecTrustTrack` / `RdpRecAssoInfo` 已覆盖 TWS + TAS 两通道(此前写作「仅 TWS」),临时航迹记录点位置已前移。
### Removed
- 无。
## [1.5.6] - 2026-10-08
> 本次发布把上一轮「工作区(未提交)」条目整体归档,并补充 a4f32e4 / c3c7e66 / b227ae1 三次提交的改动。
@@ -24,7 +57,7 @@
- **新增版本号输出(b227ae1)**:`parameters.h` 新增版本宏组——`MAJOR_VERSION` / `MINOR_VERSION` / `PATCH_VERSION`(当前 1 / 5 / 6)、扫描体制后缀 `VERSION_INFO`(相扫 `PS` / 机扫 `MS`)以及拼装宏 `VERSION_STRING`(`STRINGIFY` 两级宏展开,输出形如 `V1.5.6.PS`)。`Data_process_class_dll` 基类新增公开成员 `const char* version_info`,`Data_Process_Factory::GetB()` 创建实例后赋值为 `VERSION_STRING`;宿主可在拿到实例指针后直接读取该字段上报/核对 DLL 版本。
- **数据记录表扩充为 6 张在用表(7 个实体定义)(a4f32e4 / c3c7e66 / b227ae1)**:记录实体由「2 个示例」扩展为覆盖主要中间数据的 6 张在用表——`RdpRecPoint`(TWS/TAS 输入点迹,用 `point_type` 区分,逐点写入)、`RdpRecPointCohesionTWS` / `RdpRecPointCohesionTAS`(凝聚后点迹,分别写入)、`RdpRecTempTrack`(临时航迹,`track_init_process_logic()` 末尾在消亡临时航迹之后逐点写入)、`RdpRecTrustTrack`(可靠航迹,TWS 输出循环内按本圈更新航迹逐条写入)、`RdpRecAssoInfo`(点航关联信息,TWS 关联的候选/取中/删表三处写入)。原示例实体 `RdpRecTrackOut`(本圈输出航迹)与其在 `track_process()` 中的批量记录点已整体注释停用(实体定义保留注释,故 `rdp_record_entity.h` 中共 7 个实体定义),改由 `RdpRecTrustTrack` 记录内部真实航迹。
- **点迹/航迹记录新增 ID 与圈次维度(c3c7e66、b227ae1)**:`Data_Process` 新增自增成员 `point_id` / `frame_id` / `circle_id`(`data_process.h`)——每接收一帧 `frame_id` 自增;每个点迹 `point_id` 自增并随 `PointRecv` 落库;`circle_id` 在 TWS 满一圈(`Beam_index_aiz == 0`)、TAS 每帧处理结束时自增,写入该圈/帧的所有点迹。内部结构同步新增标识字段:`PointRecv` 增 `circle_id`;`Temp_track` 增 `temp_track_id` / `point_id` / `circle_id`(`Track_Init` 新增自增成员 `temp_track_id`);`Trust_Track` 增 `track_id` / `point_id` / `circle_id`(起批时取自临时航迹末点,关联成功时刷新为被关联点迹的 ID)。据此可把点迹、凝聚点迹、临时航迹、可靠航迹、关联信息按 `point_id` / `track_id` / `circle_id` 串成一条完整链路。
- **点迹/航迹记录新增 ID 与圈次维度(c3c7e66、b227ae1)**:`Data_Process` 新增自增成员 `point_id` / `frame_id` / `circle_id`(`data_process.h`)——每接收一帧 `frame_id` 自增;每个点迹 `point_id` 自增并随 `PointRecv` 落库;`circle_id` 在 TWS 满一圈、TAS 每帧处理结束时自增(TWS 判圈条件其后于 3e6763c 改为按体制区分),写入该圈/帧的所有点迹。内部结构同步新增标识字段:`PointRecv` 增 `circle_id`;`Temp_track` 增 `temp_track_id` / `point_id` / `circle_id`(`Track_Init` 新增自增成员 `temp_track_id`);`Trust_Track` 增 `track_id` / `point_id` / `circle_id`(起批时取自临时航迹末点,关联成功时刷新为被关联点迹的 ID)。据此可把点迹、凝聚点迹、临时航迹、可靠航迹、关联信息按 `point_id` / `track_id` / `circle_id` 串成一条完整链路。
- **新增 `Asso_Info` 关联信息结构体(b227ae1)**:原 `Track_Asso::model_filter()` 内定义的局部结构体 `asso_info` 提升为 `struct.h` 中的全局 `Asso_Info`,在原有 `d1/d2/d3/d_min/point_index/track_index` 基础上补充 `point_id` / `track_id` / `circle_id`、门限相关量(`delta_T` / `delta_h` / `R` / `VT`、三个布尔量 `thd_d` / `thd_h` / `thd_r`)以及「本候选是否被最近邻取中」标志 `min_d_flag`,使关联信息可被完整记录与分析。
- **可靠航迹补充极坐标量快照(b227ae1)**:`Trust_Track` 新增 `Range` / `Azimuth` / `Elevation` / `Velocity` 四个字段,在 TWS 输出环节由本圈写入输出结构的距离/方位/俯仰/合速度回填(`Velocity` 取 `Range_V`,即 IMM 融合速度的模),供记录表落库;注意它们只在航迹当圈**有输出**时被刷新。
- 新增 CHANGELOG.md,采用 Keep a Changelog 格式记录项目变更历史。
@@ -83,7 +116,7 @@
- 输出航迹改为「只输出本圈有更新的航迹」(50e0b5c):TWS `track_asso_process()` 与 TAS `track_asso_process_tas()` 的输出循环新增 `Track_Update_Flag == 1` 门控,输出后立即清零;该标志在关联到实点或外推成功时置 1。此前每个 TWS 周期都会把航迹表中的全部可靠航迹各输出一行(`Point_Sum = 1`),宿主不能再据输出行数推断航迹总数(当圈新起批的航迹仍由 `track_init` 的输出路径直接写入)。
- TWS 未关联航迹外推增加圈数上限(50e0b5c,`track_asso.cpp::model_filter()`):仅当 `Extrapolate_round <= MAX_EXTRAPOLATE_NUM`(=3)时按 `DATA_RATE_SHORT/MIDDLE/FAR` 预测一帧、推进航迹时间并置 `Track_Update_Flag = 1`;超过上限后不再推进位置与时间,只累加 `Extrapolate_round`、置 `point_flag = 0` 与 `Track_Update_Flag = 0`(该航迹此后不再输出,位置冻结在最后一次预测处),直到重新关联到实点才恢复。避免长时间未关联的航迹被反复外推到远处。
- TAS 未关联航迹外推同样增加上限(50e0b5c,`track_asso_tas.cpp`),但判定方向与 TWS 相反:`Extrapolate_round >= MAX_EXTRAPOLATE_NUM_TAS`(相扫 5 / 机扫 48)时才做预测、推进航迹时间并输出,未达该轮数时只累加 `Extrapolate_round` 且不输出(位置与航迹时间停在最后一次关联处),达到上限后才恢复逐帧外推输出(见 README 11.2 的观察)。
- 航迹消亡圈数与判据调整(50e0b5c,`parameters.h`、`track_die.cpp`、`track_die_tas.cpp`):`TRACK_DIE_ROUND` 由 4 调整为 6(两体制),新增重点航迹专用 `TRACK_DIE_ROUND_PRIMARY = 10`,`TRACK_DIE_ROUND_TAS` 相扫由 5 调整为 10(机扫保持 96);消亡判据由 `Extrapolate_round >= 阈值` 改为 `> 阈值`,并把 `manual_delete_flag == 1` 与轮数条件合并为统一的 `die_flag` 判定,TWS 侧按 `primary_target_flag` 在 6 / 10 之间二选一。因每圈未关联只自增 1,普通 TWS 航迹实际连续 7 圈无实点关联才消亡(重点航迹 11 圈,TAS 相扫 11 圈 / 机扫 97 圈)。
- 航迹消亡圈数与判据调整(50e0b5c,`parameters.h`、`track_die.cpp`、`track_die_tas.cpp`):`TRACK_DIE_ROUND` 由 4 调整为 6(两体制),新增重点航迹专用 `TRACK_DIE_ROUND_PRIMARY = 10`,`TRACK_DIE_ROUND_TAS` 相扫由 5 调整为 10(机扫保持 96);消亡判据由 `Extrapolate_round >= 阈值` 改为 `> 阈值`,并把 `manual_delete_flag == 1` 与轮数条件合并为统一的 `die_flag` 判定,TWS 侧按 `primary_target_flag` 在 6 / 10 之间二选一。因每圈未关联只自增 1,普通 TWS 航迹实际连续 7 圈无实点关联才消亡(重点航迹 11 圈,TAS 相扫 11 圈 / 机扫 97 圈)。(普通 TWS 航迹的该判据于 1.5.8 改为质量消亡,见 1.5.8 区块。)
- 「靠近/远离」方向标志 `Flag_Direction` 改为按滤波速度矢量判定(fc49707 引入、42b598e 调整,`track_asso.cpp` 与 `track_asso_tas.cpp` 同步):不再使用受多普勒速度模糊影响、符号可能取反的实测径向速度(原 `Flag_Direction = vr_point > 0 ? 1 : 0`),改为用航迹 IMM 融合状态的速度方向角 `Direction_Angle = atan2(X[4], X[1])` 与位置矢量判定:`acos((-x·cos(Direction_Angle) − y·sin(Direction_Angle)) / r) < π/2` 时置 1(靠近),否则 0(远离),其中 `x`/`y` 为经 `Sys_delay` 补偿后的位置、`r` 为其模。该判据等价于「滤波速度矢量的径向分量指向雷达(径向接近)即判为靠近」;中间版本曾按合速度归一化并把门限取为 π/4(45° 锥角),42b598e 去掉归一化并把门限放宽到 π/2(90°)。
- 手动操作接口遍历命中目标后立即 `break`(fc49707,`data_process.cpp`):`primary_target_add` / `primary_target_cancel` / `tracking_start` / `tracking_stop` 在写入标志后退出循环,不再继续扫描整张航迹表(批号唯一,结果等价)。
- `requirements.md` 由 `archived_docs/` 移回仓库根目录(工作区改动,文件内容未变):README 目录结构(第 3 节)与参考文档表(第 13 节)中的引用路径同步改回 `requirements.md`。