+6
-2
@@ -18,6 +18,7 @@
|
||||
- **有界队列与丢弃计数(数据记录性能优化)**:队列上限 `RDP_RECORD_QUEUE_CAP_BYTES`(默认 64 MB)与 `RDP_RECORD_QUEUE_MAX_BATCHES`(默认 4096 批),写线程跟不上时整批丢弃并累计 `dropped_rows`,日志按 `RDP_RECORD_DROP_LOG_INTERVAL`(默认每 1024 行)限频提示;处理线程不因记录阻塞。
|
||||
- **记录参数宏(数据记录性能优化)**:`parameters.h` 新增可调宏(均以 `#ifndef` 保护,可用编译选项覆盖):`RDP_RECORD_QUEUE_CAP_BYTES`、`RDP_RECORD_QUEUE_MAX_BATCHES`、`RDP_RECORD_WRITE_BATCH_ROWS`、`RDP_RECORD_WRITE_MAX_WAIT_MS`、`RDP_RECORD_ASSO_CHUNK_ROWS`(默认 131072)、`RDP_RECORD_SQLITE_CACHE_KB`、`RDP_RECORD_SQLITE_BUSY_TIMEOUT_MS`、`RDP_RECORD_SQLITE_WAL`、`RDP_RECORD_MAX_CONSECUTIVE_ERRORS`(默认 10)、`RDP_RECORD_DROP_LOG_INTERVAL`。
|
||||
- **记录健壮性与重连(数据记录性能优化)**:写失败每表只提示一次并永久跳过该表,连续错误达到 `RDP_RECORD_MAX_CONSECUTIVE_ERRORS` 次全局熔断并丢弃队列;`Shutdown()` 改为「停止入队 → 排空队列与 pending → 打印 stats → `wal_checkpoint(TRUNCATE)` → 关库」;支持 `Destroy()` → `GetB()` 重连重新建库(同一秒文件名冲突时追加 `_1`/`_2` 后缀)。
|
||||
- **航迹质量信息入库(1ffb287)**:`RdpRecTempTrack` 新增 `quality`(临时航迹质量);`RdpRecTrustTrack` 新增 `Quality`(可靠航迹质量)、`Unupdated_time`(未更新累计毫秒)、`Point_sum`(累计点数)、`Valid_point_sum`(累计实点关联次数),`rdp_record.cpp` 注册顺序同步——质量纳入调试可查范围,可直接用 SQL 分析「起批质量 / 关联后质量变化 / 未关联衰减」。
|
||||
- 文档:全面更新 `docs/data_record_debug.md`(异步运行期行为、接口与宏一览、新增记录点四步配方、6 张表记录点清单、已知限制、验证参考)与 `README.md` 相关章节(2、3、4.3、5.2、7.1、10.1、11.2、11.3、12、13 节)。
|
||||
|
||||
### Changed
|
||||
@@ -31,10 +32,13 @@
|
||||
- **记录线程模型与 Shutdown 语义(数据记录性能优化)**:由「处理线程单连接 + 互斥锁串行同步写」改为「处理线程只入队 + 独立写线程承担实体构造与全部写库」;`RDP_RECORD`/`RDP_RECORD_BATCH` 保留为遗留同步接口(在调用线程直接写库、会阻塞,仅供测试/特殊场景);`Shutdown()` 会**排空**队列与 pending 后再关库,并在关库前打印统计。
|
||||
- **未改变记录语义(数据记录性能优化)**:不采用 P0-a(关联信息裁剪)与 P2(记录策略/轮转),⑥ 仍按每个候选一行写入;跨表写入顺序仍不保证、各表内顺序保持;`REC_OFF` 构建零影响与优化前一致。
|
||||
- **本次优化的验证(可复查)**:8 种配置(PS/MS × Release/Debug × REC_OFF/REC_ON)0 warning 0 error;dup 场景 6 圈/200 目标/每帧 150 点 REC_ON vs REC_OFF:普通帧每帧新增 p99 ≈ 0.09~0.11 ms(≤1 ms 阈值内)、判圈帧 `track` 新增中位 ≈ 2.9~4.1 ms(压测 p99 ≈ 13~24 ms,因未采用 P0-a,属压测上限),受控 50 目标/50 点场景判圈帧新增中位约 3 ms、最大 5.96 ms;记录行数与改动前完全一致(`RdpRecPoint` 90,000 / `RdpRecPointCohesionTWS` 4,170 / `RdpRecAssoInfo` 211,584 / `RdpRecTempTrack` 8,330 / `RdpRecTrustTrack` 304,合计 314,388),`integrity_check=ok`、DDL 无 `AUTOINCREMENT`、`journal_mode=wal`、id 严格递增、`dropped_rows=0`;60 圈长跑 9,987,370 行、`dropped_rows=0`、`write_errors=0`、队列峰值约 19.8 MB、DB 约 1.06 GB;故障注入(记录目录不可建时 `Init` 静默失败、驱动正常;小队列测试构建丢弃 314,388 行且计数正确)与 `Destroy()`→`GetB()` 重连(两个独立 db 均正常写入)测试通过。原始日志与验收脚本位于 git 忽略的 `build/analysis/verify/`。
|
||||
- **相扫 TAS 航迹消亡圈数放宽(5d105d2,`parameters.h`)**:`TRACK_DIE_ROUND_TAS` 由 10 调整为 **20**(仅相扫;机扫保持 96)。因判据为 `Extrapolate_round > 阈值`,相扫 TAS 航迹实际由「连续 11 圈无实点关联消亡」放宽为「连续 21 圈」才消亡,便于 TAS 目标在短时丢点后重新关联。
|
||||
- **TAS 高度平滑窗口加长(6284f3f)**:`track_asso_tas.cpp::track_hight_update()` 的分段偏移由 `H_F_WIN_LEN + {2,3,4,6}` 改为 `H_F_WIN_LEN + {6,8,10,12}`;同时相扫 `H_F_WIN_LEN` 由 3 调整为 **6**(机扫仍为 3)。合并效果:相扫 TAS 窗口 12/14/16/18 点、机扫 TAS 窗口 9/11/13/15 点(原为 5/6/7/9);TWS 仍用 `H_F_WIN_LEN + {2,3,4,6}`,相扫因此由 5/6/7/9 变为 **8/9/10/12**、机扫保持 5/6/7/9。
|
||||
|
||||
### Fixed
|
||||
|
||||
- 无。
|
||||
- 修正文档中 TAS 航迹消亡圈数与高度平滑窗口的过期数值(本次文档更新):README 2/5.2/9.7/9.9/10.1 节与 `docs/data_process_flow_report.md` 4.6、6.1、9.1 节按 5d105d2、6284f3f 同步为「相扫 TAS 20 圈 / 机扫 96」、「相扫 H_F_WIN_LEN=6、TAS 偏移 +6/+8/+10/+12」。
|
||||
- 修正 `docs/data_record_debug.md` 中「质量字段尚未加入记录实体」的过期描述(本次文档更新,对应 1ffb287):字段速查与记录点说明补齐 `quality` / `Quality` / `Unupdated_time` / `Point_sum` / `Valid_point_sum`。
|
||||
|
||||
### Removed
|
||||
|
||||
@@ -57,7 +61,7 @@
|
||||
|
||||
### 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` 中定义),普通航迹的存活时长改由质量衰减速度决定。
|
||||
- **普通 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;相扫阈值其后于 5d105d2 调整为 20)消亡。因此 `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)。
|
||||
|
||||
Reference in New Issue
Block a user