Files
radar_data_process/CHANGELOG.md
T
2026-10-26 10:45:25 +08:00

57 KiB
Raw Blame History

Changelog

本项目的所有重要变更记录于此文件。

格式遵循 Keep a Changelog, 版本号遵循 语义化版本(SemVer)。

[Unreleased]

Added

  • 新增 .vscode/scripts/config_paths.bat:按「扫描体制 / 构建类型 / 记录模式」推导并校验构建目录 build/<X256_PS|X256_MS>/<Debug|Release>/<REC_AUTO|REC_OFF|REC_ON>(接受 X256_PS/X256_MS 别名),供所有构建脚本共用。
  • 新增 .vscode/scripts/build_all.bat:对 PHASE_SCANNING 与 MECHANICAL_SCANNING 依次「配置 + 构建」,任一配置失败即中止并返回非 0。
  • 新增 .vscode/scripts/clean_all.bat:删除全部配置的构建输出(含旧版单一构建目录;build/output 打包留档不动)。
  • .vscode/tasks.json 重建为 5 个任务:「清理全部」「配置并构建全部(Release/REC_OFF)」「配置并构建全部(Release/REC_ON)」「配置并构建全部(Debug/REC_OFF)」「配置并构建全部(Debug/REC_ON)」;后 4 个任务内部调用 build_all.bat,分别对两种扫描体制配置并构建,默认构建任务为「配置并构建全部(Release/REC_OFF)」。
  • 数据记录改为异步写线程 + 有界队列(数据记录性能优化,工作区未提交):rdp_record.h 新增 rdp_record::Stats(enqueued_rows/dropped_rows/written_rows/transactions/write_errors/queue_peak_bytes/queue_peak_rows)与 stats(),新增 6 个异步入队接口 WritePoints/WriteCohesionTWS/WriteCohesionTAS/WriteTempTracks/WriteTrustTracks/WriteAssoInfos(参数为源结构体 std::vector 按值、调用点 std::move)及对应宏 RDP_RECORD_POINTS/RDP_RECORD_COHESION_TWS/RDP_RECORD_COHESION_TAS/RDP_RECORD_TEMP_TRACKS/RDP_RECORD_TRUST_TRACKS/RDP_RECORD_ASSO_INFOS;rdp_record.cpp 的 Init() 建库后启动独立写线程(Windows 下 THREAD_PRIORITY_BELOW_NORMAL),处理线程只做「收集源结构体 → 一次入队」,实体构造(数组转文本)与写库全部迁移到写线程。
  • 批量事务与 SQLite 配置(数据记录性能优化):写线程按表累积待提交数据,达到 RDP_RECORD_WRITE_BATCH_ROWS(默认 4096 行)或等待 RDP_RECORD_WRITE_MAX_WAIT_MS(默认 50 ms)后以事务批量提交;SQLite 启用 journal_mode=WAL(失败回退默认 journal)、synchronous=OFF、cache_size=-8192(8 MB)、busy_timeout=2000;建表后读取 sqlite_master 去掉 AUTOINCREMENT 重建为普通 INTEGER PRIMARY KEY(重建失败时回退并告警)。
  • 有界队列与丢弃计数(数据记录性能优化):队列上限 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

  • 构建目录布局由「每个扫描体制一个目录(Release/Debug 共用、重新配置互相覆盖)」改为按完整配置隔离:build/<X256_PS|X256_MS>/<Debug|Release>/<REC_AUTO|REC_OFF|REC_ON>,关闭/开启记录模块的产物可并存、互不覆盖。
  • configure.bat / build.bat / clean.bat 参数由 <build-dir> ... 改为 <PHASE_SCANNING|MECHANICAL_SCANNING> <Debug|Release> [AUTO|ON|OFF],构建目录自动推导;clean.bat 由 cmake --build --target clean 改为删除该配置的构建目录(因此放在配置目录 bin/ 下、CMake 不会重建的 rdp_playback.exe/回放数据会一并删除,需放到 build/output/ 或仓库外)。
  • VS Code 配置同步:settings.json 的 cmake.buildDirectory 改为 ${workspaceFolder}/build/${variant:scanMode}/${buildType}/${variant:recordMode}、compileCommands 指向 build/X256_PS/Debug/REC_ON/compile_commands.json;cmake-variants.yaml 新增 recordMode 变体(REC_AUTO / REC_OFF / REC_ON,映射 RDP_DATA_RECORD);c_cpp_properties.json 的 compileCommands 更新到新目录;launch.json 的 preLaunchTask 改为「配置并构建全部(Debug/REC_ON)」,program/symbolSearchPath 指向 build/X256_PS/Debug/REC_ON/bin。
  • 更新 README(3 节目录结构、4.2~4.4 节构建说明、12 节版本历史、13 节参考文档)与 docs/data_record_debug.md 第 2 节构建示例,同步新的构建目录布局、脚本签名与 5 个任务;requirements.md 更新为本次构建脚本/VS Code 任务调整需求。
  • 本次改动的构建验证:5 个任务全部实际执行(清理全部 → Release/REC_OFF → Release/REC_ON → Debug/REC_OFF → Debug/REC_ON),退出码均为 0;8 种配置(PS/MS × Release/Debug × REC_OFF/REC_ON)构建日志均 0 warning、0 error;每个配置目录均生成 bin/data_process_class_dll.dll、lib/(REC_ON 另有 lib/rdp_record.lib)与 compile_commands.json;编译命令中的宏与配置对应(PS 为 -DPHASE_SCANNING、MS 为 -DMECHANICAL_SCANNING,REC_ON 含 RDP_RECORD_ENABLE);「清理全部」删除 8 个配置目录及旧版单一构建目录而 build/output 未被删除;错误扫描体制/构建类型/记录模式与未配置即构建等非法路径均返回非 0。补充验证:已构建配置再次执行 build_all.bat 为 0 个编译/链接步骤(增量幂等);模拟 MSVC 环境无效时 build_all.bat 在第一个配置即中止(未尝试第二个扫描体制,退出码 1);clean.bat 单配置清理后目录消失且可正常重建。
  • 12 个业务记录点由「同步构造实体写库」改为「帧/圈内收集源结构体 → 一次入队」(数据记录性能优化):data_process.cpp(TWS/TAS 输入点迹)、dot_coh.cpp、dot_coh_tas.cpp、track_init.cpp(临时航迹)、track_asso.cpp(可靠航迹 + 关联信息按 RDP_RECORD_ASSO_CHUNK_ROWS 分块)、track_asso_tas.cpp(同)共 12 处;记录时机、条件与记录行数/表列均保持不变;6 个业务文件删除 #include "rdp_record_entity.h",所有新增代码仍在 #ifdef RDP_RECORD_ENABLE 内,记录关闭构建零代码、零影响。
  • 记录线程模型与 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.090.11 ms(≤1 ms 阈值内)、判圈帧 track 新增中位 ≈ 2.94.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

  • 删除 tasks.json 中原有的 15 个任务(CMake: 配置 X256_PS|X256_MS、CMake: 构建 ...、CMake: 清理 ...、CMake: 配置并构建 ... 等),改为上述 5 个任务。

[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;相扫阈值其后于 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)。
  • 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 三次提交的改动。 版本号宏位于 parameters.h(MAJOR_VERSION / MINOR_VERSION / PATCH_VERSION),当前为 1.5.6。

Added

  • 新增版本号输出(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 满一圈、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 格式记录项目变更历史。
  • RadarPara 结构体新增 DATA_RATE_TAS(TAS 模式数据率)字段,由 DLL 调用者通过 track_process_parameters_initial() 输入(b3e2f52)。
  • Tracking_Target 新增 last_track_time 字段,记录各 TAS 目标最近一次波束输出时间(f438ac5)。
  • 新增 requirements.md,说明 TAS 波束控制逻辑的修改背景与约定(b3e2f52)。
  • 更新 README.md:目录结构补充 CHANGELOG.md / requirements.md;版本历史表补充 93d3924、b3e2f52、e729c5b、f438ac5 提交记录。
  • 新增日志文件输出功能:parameters.h 增加 RDP_LOG_ENABLE 开关(定义时启用;当前源码中该宏为注释状态,即默认不重定向、日志输出到控制台)与 RDP_LOG_DIR 目录宏(.\\rdp_logs\\);新增 rdp_log.h/.cpp 日志模块,首次 Data_Process_Factory::GetB() 时按 RDP_LOG_ENABLE 决定是否用 rdbuf() 将 std::cout 重定向到 .\rdp_logs\ 下按日期+时间命名的日志文件(rdp_YYYYMMDD_HHMMSS.log,目录不存在自动创建),Destroy() 销毁实例时恢复 std::cout 并关闭文件;开关注释关闭时不重定向、日志仍输出到标准输出;日志文件在 CMakeLists.txt 的 SOURCES 中注册。
  • 新增 RDP_LOG 日志输出宏(rdp_log.h):自动在每条日志前附加 [时间戳][代码文件:行号] 信息后再输出到标准输出(重定向开启时随之写入日志文件),供后续新增日志统一使用。
  • 更新 README.md(604f158、d6cdbc0):目录结构补充 archived_docs/ 归档目录;9.6 节改写 TWS 关联 ΔT≤0 的处理说明;功能特性、模块职责、已知问题与参考文档的文档引用路径同步指向 archived_docs/;版本历史表补充 604f158、d6cdbc0 提交记录。
  • TWS 关联新增高度门限(e0bf227,track_asso.cpp):原实现中分距离段的高度门限代码块整体为注释状态、d_h 恒为 1(等于不生效),现改为独立判定 thd_h = |h_track − h_point| 与航迹距离分段比较后再参与关联(分段值见 Changed),与 TAS 通道的高度门限取值一致。
  • 关联门限判定重构为三个显式布尔量(e0bf227):track_asso.cpp 与 track_asso_tas.cpp 的 model_filter() 原先把统计距离、高度、距离三类判据混写在一个长 if 条件里(高度门限在 TWS 侧整体被注释),现分别计算 thd_d(统计距离门限,按距离分段)、thd_h(高度门限)、thd_r(TWS 距离门限)后再以 thd_d && thd_h && thd_r(TAS 为 thd_d && thd_h)判定候选,逻辑等价性更易核对;TWS 侧同时移除了 manual_tracking_flag==0 的注释残留代码块与其缩进。
  • 更新 README.md(e0bf227):目录结构(第 3 节)删除已移除的 docs/data_process_flow_report.html 并补充 design_docs/ 留档目录(被 .gitignore 忽略);2、9.6、9.10、10.1、11.1、12、13 节按源码同步 ASSO_THORD = 4(关联波门等效 d < 4、TWS 分段比例门限 16/1000 与 16/100)、TWS/TAS 高度门限的分段取值、thd_d/thd_h/thd_r 三类门限判定结构、TAS 波束数据率门控与 e0bf227 提交记录;13 节参考文档表删除已不存在的 HTML 行。
  • 同步 docs/data_process_flow_report.md(e0bf227):4.2 节波门由「统计距离 + 距离 + 恒通过的俯仰门限」改为「统计距离 thd_d + 高度 thd_h + 距离 thd_r」并给出 TWS 高度门限分段表,7 节 TAS 高度门限 2000~3000 m 段由 200 m 更正为 250 m;7.2 节判据与 9.1 节参数表按源码更新(ASSO_THORD = 4、d² < 16);8.2 节改为单条件数据率门控并在选中目标后按 CPI 时间计算外推步长。
  • 输出航迹补充「靠近/远离」方向标志 Flag_Direction(f249fdc):TWS 关联输出(track_asso.cpp)与 TAS 关联输出(track_asso_tas.cpp)在写入 vr_point 后追加 Flag_Direction = vr_point > 0 ? 1 : 0,即径向速度为正判为靠近(1)、为零或负判为远离(0)。该字段此前已在 data_process_class_dll.h 的 Track 结构体中声明(注释「方向标志 1 靠近/0 远离」)但从未被赋值,宿主读到的是未初始化/旧值。
  • 新增三份流程与专项文档(f249fdc):docs/data_process_flow_report.md(数据处理流程与关键逻辑说明:总体数据流、前处理与判圈、凝聚、TWS/TAS 关联与滤波、航迹起始、外推消亡与航迹号管理、TAS 波束控制、参数脉络与关键约定)、docs/data_process_flow_report.html(同内容的 HTML 渲染版)、docs/track_init_readme.md(航迹起始 Track Init 详细逻辑说明:分阶段流程、起始条件汇总、参数调参、输出字段映射、已知风险与代码索引)。
  • 更新 README.md(7d5a56f、f249fdc):目录结构新增 docs/ 目录;2、7.2、8.1 节满圈判据改为「方位波位号 == 0」并说明 last_beam_num 不再参与判断;8.3、9.3 节改写点-航迹头关联判据与起批输出历史点数;9.6 节补充方向标志输出与点迹消费说明;2、10.1 节 RDP_LOG_ENABLE 说明改为当前实际状态(注释停用、默认不重定向);11.4 节新增航迹起始未修复观察;版本历史表补充 7d5a56f、f249fdc,参考文档表补充 docs/ 三份文档。
  • 新增手动重点目标接口(50e0b5c):data_process_class_dll.h 增加 primary_target_add(int track_index)(将指定批号转为重点目标)与 primary_target_cancel(int track_index)(取消重点目标)两个虚接口(基类为空实现、返回 0),Data_Process 中按批号把 Trust_Track::primary_target_flag 置 1 / 清 0;重点航迹的消亡改用独立阈值 TRACK_DIE_ROUND_PRIMARY(= 10,两体制相同),普通航迹仍用 TRACK_DIE_ROUND。
  • 新增未关联航迹的外推圈数上限宏(50e0b5c,parameters.h):MAX_EXTRAPOLATE_NUM = 3(TWS 通道,两体制相同)、MAX_EXTRAPOLATE_NUM_TAS(TAS 通道,相扫 5 / 机扫 48)。
  • 输入/输出结构新增「归一化幅度」与「速度维 FFT 点数」相关字段(e8c56f9):DataRev 增加 amp_asv(目标归一化幅度 dB)与 prn_fftn(速度维 FFT 点数);Track 增加 amp_asv_point / prn_fftn_point;内部 PointRecv、Trust_Track 同步增加对应字段,track_asso.cpp 在关联实点时写入航迹、TWS 输出航迹时写回输出结构。⚠ 当时输入侧未打通(该描述后于本次发布更正为「已打通」,见 Changed 末条):data_preprocess() 未把 DataRev.amp_asv / DataRev.prn_fftn 拷入内部 PointRecv;TAS 通道至今未涉及这两个字段,TAS 输出中它们仍无有效数据来源(详见 README 11.2)。
  • 更新 README.md(本次文档更新):2 节补充重点目标/外推上限/输出门控与结构体字段扩展;3 节把 requirements.md 移回仓库根目录;5.2、6.1、6.2、7.1、8.1、8.2、9.6、9.9、10.1、11.1、11.2、12、13 节按源码同步 Flag_Direction 新判据、外推圈数上限、消亡圈数(普通 6 / 重点 10 / TAS 相扫 10、机扫 96)、Track_Update_Flag 输出门控、新增字段与结构体布局变更提示;12 节版本历史补充 50e0b5c、fc49707、42b598e、e8c56f9 四条记录。
  • 同步 docs/data_process_flow_report.md 与 docs/track_init_readme.md(本次文档更新):前者更新总体数据流表(⑥ 外推/消亡)、4.7 外推、6.1 消亡条件、7.2 TAS 外推门控、9.1 参数表与第 10 节观察;后者更新第 14 节 Flag_Direction 判据并补充 amp_asv_point / prn_fftn_point 两个未赋值字段。
  • 新增数据记录调试功能(可选编译):新增 rdp_record.h(rdp_record::Init()/Shutdown()/db_path() 与 RDP_RECORD/RDP_RECORD_BATCH 记录点宏;功能关闭时宏展开为 ((void)0)、实参不求值,头文件不含任何第三方依赖)、rdp_record_entity.h(记录实体=数据表定义区,含 2 个示例实体与 RDP_RECORD_DECLARE 实例化声明宏)、rdp_record.cpp(实体注册区:YLT_REFL + RDP_RECORD_DEFINE;pimpl 隔离 ormpp/SQLite;首次写入自动 CREATE TABLE IF NOT EXISTS;单条写入与 std::vector 批量事务写入;建表/插入失败每个实体只提示一次并降级为空操作;内部互斥锁串行化单连接)。data_process_class_dll.cpp 的 Data_Process_Factory::GetB()/Destroy() 分别调用 rdp_record::Init()/Shutdown()(关闭时为空实现),parameters.h 新增记录目录宏 RDP_RECORD_DB_DIR(.\rdp_records\),.gitignore 增加 rdp_records/。(实体定义区当时的「2 个示例实体」已扩展为 7 个,见本版 Added 首条。)
  • 新增 2 个示例记录点(data_process.cpp,字段为示例可按需增删):① data_preprocess() 的 TWS 分支逐点写入表 RdpRecPointTws(输入点迹字段:CPI/GNSS 时间 ms、方位/俯仰波位、PRF/频点、点迹号/总数、距离/方位/俯仰/速度/幅度/SNR/RCS 等,当前实体为 22 个字段);② track_process() 的 TWS/TAS 处理帧结束后批量写入表 RdpRecTrackOut(输出航迹 20 个字段,两种模式共用一张表并用 track_mode 区分;每行取输出数组 [i][0],行数超过 MAX_TRACK_NUM 时钳位)。⚠ 这两个实体名已随 a4f32e4 / b227ae1 演进:输入点迹表更名并扩展为 RdpRecPoint(TWS/TAS 共用、增 point_id/frame_id/circle_id),输出航迹示例整体停用、改由 RdpRecTrustTrack 记录内部航迹(详见本版 Added 首条的 6 张在用表清单)。
  • 内置第三方源码 third_party/ormpp/(按上游原样保存,含 UPSTREAM.md 记录来源与升级方式):ormpp 0.2.0(commit acf23989…,Apache-2.0)+ 随其内置的 iguana 1.0.5、frozen 与 SQLite 3.49.1 amalgamation(公有领域),并保留两份 LICENSE 文件(与上游 git blob 逐字节一致)。
  • 新增 docs/data_record_debug.md(数据记录调试功能专项说明):开关与构建(RDP_DATA_RECORD 取值、configure.bat 第 4 参数、记录模块以 C++20 独立编译与 C 编译器要求、关闭时零代码保证)、运行期行为(记录库目录与文件名、synchronous=OFF 取舍、Init/Shutdown 时机、失败降级、单连接 + 互斥锁与线程模型)、记录实体(表)约定(全局命名空间、结构体名即表名、首列 int64_t id 自增主键、类型映射表、禁止数组字段及原因)、新增记录点四步配方(含 RDP_RECORD_DECLARE → YLT_REFL + RDP_RECORD_DEFINE → 记录点写法 → 自动建表,以及「忘记注册报 LNK2019」自检点)、当时的 2 个示例记录点(现已扩展为 6 张在用表 + 1 个停用实体,见本版 Added 首条)、Python/DB Browser 查询示例与已知限制。
  • 更新 README.md(本次文档更新):2 节新增「数据记录调试功能(可选编译)」特性条目;3 节目录结构补充 third_party/ormpp/、rdp_record.h/.cpp、rdp_record_entity.h、docs/data_record_debug.md、rdp_records/ 并更新 requirements.md 说明;4.1 节环境要求补充内置依赖与 C 编译器;4.3 节补充 RDP_DATA_RECORD 与 configure.bat 第 4 参数用法;4.4 节产物补充 rdp_record.lib;4.5 节新增「第三方库告警例外(仅记录功能启用时)」;5.2 节模块职责新增 rdp_record 行;10.1 节编译期宏新增 RDP_RECORD_ENABLE / RDP_RECORD_DB_DIR;11.3 节补充「记录功能默认只在 Debug 启用」;12 节版本历史新增本次工作区条目;13 节参考文档新增 docs/data_record_debug.md 与 third_party/ormpp/UPSTREAM.md、更新 requirements.md 行。

Changed

以下条目为上一轮「工作区(未提交)」状态的改动,随本次 1.5.6 发布一并归档(内容未改写)。

  • TAS 波束控制改为按固定数据率调度:Beam_Ctrl() 仅当目标满足 1 / DATA_RATE_TAS 秒的数据率间隔(相对航迹时间 T_track 与上次波束输出 last_track_time)时才输出 TAS 跟踪波束,使 TAS 目标数据率不再随波束时间(Beam_Ctrl 调用频率)变化。
  • CMakeLists.txt 新增缓存变量 RDP_DATA_RECORD(AUTO/ON/OFF,AUTO = Debug 启用 / Release 关闭;多配置生成器下 AUTO 直接 FATAL_ERROR 要求显式取值)与可选静态库 rdp_record:该目标以 CXX_STANDARD 20 独立编译(ormpp 要求 CMAKE_CXX_STANDARD 20,而内置 Eigen 3.3.7 在 /std:c++20 下会因 std::result_of 被 MSVC 移除而编译失败,故雷达处理代码保持 C++17)、经 enable_language(C) 编译内置 sqlite3 amalgamation(sqlite3.c 以源文件级 /w 单独降级第三方告警)、RDP_RECORD_ENABLE 与 ORMPP_ENABLE_SQLITE3 经 PUBLIC 传递给 DLL 并将静态库链接进 DLL;关闭时不添加任何目标、SOURCES 列表保持不变(Release 零痕迹的关键)。配置阶段打印启用/关闭状态。
  • parameters.h 新增记录库目录宏 RDP_RECORD_DB_DIR(.\rdp_records\,相对宿主进程当前工作目录,目录不存在时自动创建)与开关说明注释:记录开关由构建系统定义 RDP_RECORD_ENABLE,不提供手工开关宏(避免 Release 误开)。
  • configure.bat 新增可选第 4 参数 AUTO|ON|OFF(缺省 AUTO,即 CMake 侧默认值)并作为 -DRDP_DATA_RECORD 传入,回显新增 record 行;脚本仍保持纯 ASCII 编码。
  • .gitignore 增加 rdp_records/(数据记录库输出目录)。
  • requirements.md 内容更新为数据记录调试功能需求(结构体经 ormpp 映射写入 SQLite、Release 版可屏蔽、数据分类入不同表、宏记录点、便于快速新增结构体、不使用异步写入),本功能框架已按该说明实现。
  • 本次改动的编译与运行验证:X256_PS/X256_MS × Release(记录关闭)/Debug(记录启用)四种配置均 0 warning、0 error;Release 产物的导出表与依赖表与改动前逐行一致、DLL 体积不变(PS 178,688 / MS 178,176 字节)、构建树中无记录模块目标文件、二进制内无 sqlite 字样;Debug(AUTO→启用)下 DLL 产物为 3,611,648 字节并额外生成 rdp_record.lib;运行时用临时校验程序(不提交)配合 Python sqlite3 验证:建库成功、一实体一表、单条与批量(事务)写入行数与取值正确、id 自增、PRAGMA integrity_check = ok、无 -journal/-wal 残留;记录目录无法创建时 DLL 接口照常返回、仅打印一次错误、后续写入静默忽略。
  • TAS 波束输出目标改为队列内调度:不再固定取队首,而是遍历 TAS 队列,选择满足数据率门控且 CPI 时间最早的目标输出;原每次 Beam_Ctrl 末尾的整队循环移位(队列轮转)已停用(代码注释保留)。
  • 数据率门控统一使用运行时参数 Work_Parameter.DATA_RATE_TAS(由 DLL 调用者经 track_process_parameters_initial() 输入,需为 >0 的有效值);parameters.h 中 DATA_RATE_TAS 编译期宏(相扫 0.3 / 机扫 0.0625)已注释停用,引导跟踪外推同步改用运行时参数。
  • 编译时以 #pragma message 提示当前启用的扫描体制宏(MECHANICAL_SCANNING / PHASE_SCANNING)。
  • 频点宏由 FREQ0~FREQ20(16.8 GHz)精简为单个 FREQ0,取值改为 9.2 GHz(e729c5b)。
  • MSVC 编译选项按编译器版本条件追加 /utf-8(VS2015 及以上);MSVC 2013 不支持该选项,改用源码文件带 BOM 的 UTF-8 编码解决 C4819。
  • 存量调试输出收敛为告警级 RDP_LOG 日志(1521592):track_asso.cpp / track_asso_tas.cpp 的 model_filter() 在 ΔT ≤ 0(乱序/重复时间戳)分支新增告警日志(含航迹/点迹/时间差信息,其中 track_asso.cpp 侧后于 604f158 注释停用);tas_ctrl.cpp 中 TAS 波束最早目标调度的 printf 调试输出移除,data_process.cpp 手动删除与 track_die_tas.cpp TAS 目标消亡的 std::cout 调试输出注释停用。重定向开启时上述日志随 std::cout 一并写入日志文件。
  • RadarPara.DATA_RATE_TAS 单位由 Hz(1/s)改为 s(秒)(1521592):tas_beam_output() 的 TAS 波束输出门控由 1 / DATA_RATE_TAS 秒改为直接按 DATA_RATE_TAS 秒比较,data_process_class_dll.h 字段注释同步更新;调用者改按「波束输出间隔(秒)」输入该参数(原 0.3 Hz 的含义不再适用,需按新单位换算后传入)。
  • requirements.md 内容更新为「雷达数据处理项目修改说明」(1521592):现描述日志文件输出功能需求(rdbuf() 重定向、日志开关宏、日期+时间命名日志、前缀日志宏,附参考示例)。
  • TWS 点航关联中 ΔT ≤ 0(点迹 CPI 时间不晚于航迹时间,如 TAS 航迹遇上时间戳更早的 TWS 点迹、或重复时间戳)的候选不再被剔除(604f158):此类候选仍参与最近邻最小 d 的比较与选取,但不执行 IMM/EKF 更新、不刷新航迹时间与新鲜度(T_track、Extrapolate_round、point_flag、associate_point_number 均保持原值,该航迹仍按未关联航迹外推),同时把该点迹标记为已使用(Use_Flag=1)消费掉,使其无法再参与航迹起始,避免由此生成虚假 TWS 航迹;track_asso.cpp 中 ΔT≤0 的 RDP_LOG 告警日志随之注释停用(track_asso_tas.cpp 中同名告警日志仍启用)。
  • 过期文档归档(604f158):BUG_REPORT.md、BUG_FIX_REPORT.md、requirements.md 由仓库根目录移入 archived_docs/ 留档,仓库内对它们的引用路径同步改为 archived_docs/...。
  • 扫描一圈完成判据改为「方位波位号 == 0」(7d5a56f):原判据「当前方位波位号 < 上一帧波位号」在机扫模式下遇到转台反转时波位号会变小但并未扫完一圈,造成误判;现 data_preprocess() 仅在 Data_Input[0].Beam_index_aiz == 0 时返回 1(TWS 满一圈,执行航迹处理),否则返回 2(继续蓄数据,只做滑窗凝聚)。原判据代码注释保留,last_beam_num 仍被赋值但不再参与判断。调用方需保证点迹的方位波位号按 0~Beam_num-1 编号且每圈必然出现 0。
  • 点迹-航迹头关联判据改为统一速度区间并增加多普勒-几何一致性约束(7d5a56f,track_init.cpp):原先按扫描体制与距离分段收紧速度门限的分支(近程 r≥1000 全速 / r<1000 半速,中远程 r≥2000 全速 / r<2000 取 1/2~1/3 速)整体注释停用,改为 dis ≤ V_MAX·ΔT 且 dis ≥ V_MIN·ΔT,同时要求 vr_point·v_track_head > 0,并新增 dis ≥ |vr_point|·ΔT 与 dis ≥ |v_track_head|·ΔT 两条约束——切向高速目标在 ΔT 内的实际位移远小于 |vr|·ΔT,据此被排除,用于限制由切向高速点迹起批出的短航迹。其中 vmax 的近程/中远程分支取值相同,均取 Work_Parameter.V_MAX。
  • 同步 docs/ 内两份专项文档(本次文档更新):docs/data_process_flow_report.md 附录与 docs/track_init_readme.md 第 12.1 节的「与 README 的差异」说明改为「差异已按结论同步到 README」并保留更新前的旧表述作为改动缘由;其中「起始输入过滤」一行更正为「上游 track_asso_process() 已删除 Use_Flag==1 的点迹 + track_init 入口再次剔除」,「初始化用点」一行更正为「取下标 track_start_point_num-3 ~ -1,航迹更长时不是真正的末三点」;docs/track_init_readme.md 第 15 节第 2 条相应更正(track_init.cpp L505 的 L 覆盖为 track_start_point_num,第 L 个点之后的尾部点既不参与初始化也不输出),第 14 节补充说明 Flag_Direction 仅由关联输出路径赋值、起批输出不写该字段。
  • 关联波门 ASSO_THORD 由 3 调大至 4(e0bf227,parameters.h 相扫/机扫两组宏同步):判据写作 d*d < ASSO_THORD*ASSO_THORD,而 d 本身已是马氏距离平方,等效门限由 d < 3 放宽为 d < 4(TWS 分距离段的比例门限随之由 9/1000、9/100 变为 16/1000、16/100),配合高度门限判定提高机动目标的关联概率;调参时仍需注意这一层「二次方」语义(BUG-20 有意保留)。
  • TWS 与 TAS 关联的高度门限统一为同一组按航迹距离分段的取值(e0bf227):r_track ≤ 1000 m 时 |h_track − h_point| ≤ 150 m、1000~2000 m 时 ≤ 200 m、2000~3000 m 时 ≤ 250 m、3000~5000 m 时 ≤ 300 m、> 5000 m 不约束。其中 TWS 侧为该门限首次生效(原代码块被注释),TAS 侧 2000~3000 m 段由 200 m 放宽到 250 m。
  • TAS 波束输出的数据率门控条件修正(e0bf227,tas_ctrl.cpp::tas_beam_output()):原判据同时要求「距上次波束输出超过 DATA_RATE_TAS」与「航迹时间 T_track 与最新时间戳之差超过 DATA_RATE_TAS」,后者与「选取 CPI 时间最早目标」的语义冲突,会额外抑制本可输出的目标;现仅保留 delta_T_last_track = (latest_timestamp − last_track_time)/1000 > DATA_RATE_TAS 一条门控,delta_T 改为在选中该目标后按 (latest_timestamp − CPI_time)/1000 计算并用于外推,使 TAS 目标输出间隔严格跟随数据率。
  • 输出航迹改为「只输出本圈有更新的航迹」(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 圈)。(普通 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。
  • 构建工具链升级:编译器由 Microsoft Visual C++ 2013(Visual Studio 12,_MSC_VER 1800,x86)升级为 Microsoft Visual C++ 2022(v143 工具集,_MSC_VER 1944,cl 19.44.35228,x64),C++ 标准由 C++11 提升为 C++17。CMakeLists.txt 的 cmake_minimum_required 由 3.10 提升到 3.21(VS2022 生成器自 3.21 起支持),新增 CMAKE_CXX_STANDARD 17(含 CMAKE_CXX_STANDARD_REQUIRED ON)与「必须使用 MSVC 2022(_MSC_VER >= 1930)」的配置期强校验(不满足直接 FATAL_ERROR),并在配置阶段打印实际编译器路径、_MSC_VER 与所选 C++ 标准。
  • CMakeLists.txt 编译选项调整:/utf-8 由「MSVC >= 1900 条件追加」改为对 MSVC 无条件启用;新增 /Zc:__cplusplus(MSVC 默认把 __cplusplus 报为 199711L,加该选项后正确报 201703L,使依赖该宏判断的第三方库——内置 Eigen 3.3.7——走标准分支);显式追加 /W3(CMake 3.15 起策略 CMP0092 不再把 /W3 放入 CMAKE_CXX_FLAGS,显式恢复以保持原有警告级别);/Zc:wchar_t、/FS 与 Release 专用的 /Zc:strictStrings 保持不变。
  • 全部构建脚本改为 MSVC 2022:新增 .vscode/scripts/msvc_env.bat(定位 VS2022 工具集与 cl.exe、校验路径存在后调用 vcvarsall.bat x64,可用 VS2022_DIR / MSVC_TOOLSET_VERSION / MSVC_HOST_ARCH / MSVC_TARGET_ARCH 环境变量覆盖默认值),configure.bat / build.bat / clean.bat 统一改为调用该脚本并显式传入 -DCMAKE_CXX_COMPILER;四个脚本一律保持纯 ASCII 编码(cmd.exe 按 OEM 代码页解析 .bat,中文注释会破坏其解析)。
  • configure.bat 新增「旧工具集构建树自动清理」:构建目录存在 CMakeCache.txt 但缺少 .msvc_toolset 标记(或标记与当前工具集版本不一致)时,先整体删除该目录再重新配置。原因是 MSVC 2013 的 CMake 缓存与目标文件不能跨编译器复用——nmake 仅按时间戳判断,会把旧目标文件当作最新而跳过重编译,导致新旧工具集目标文件混链。
  • VS Code 工程配置同步为 MSVC 2022 x64 + C++17:settings.json 的 cmake.environment 改为 VS2022 v143 x64 与 Windows SDK 10.0.26100.0 的 PATH/INCLUDE/LIB,新增 cmake.configureArgs 固定 cl.exe 路径,C_Cpp.default.cppStandard 改为 c++17 并新增 C_Cpp.default.intelliSenseMode;c_cpp_properties.json 的 compilerPath 指向新 cl.exe、intelliSenseMode 改为 windows-msvc-x64、配置名改为「X256_PS/X256_MS (MSVC2022 x64)」;cmake-variants.yaml 与 tasks.json 的变体/任务描述同步为 MSVC2022 x64。
  • 产物架构由 x86 变为 x64(AMD64):宿主程序必须为 64 位、并使用同一版本头文件重新编译后才能加载新 DLL(rdp_playback.exe 回放工具同样需升级为 x64 版本)。
  • TWS 关联中 ΔT 判定的分支结构理顺(b227ae1,track_asso.cpp::model_filter()):原写法为 if (delta_T <= 0) { 空分支 } else { IMM/EKF 更新 },现改为 if (delta_T > 0) { 置 min_d_flag、IMM/EKF 更新 },行为与原来等价(ΔT > 0 才做滤波更新,ΔT ≤ 0 仍只消费点迹),但空分支被移除、可读性提高;原 ΔT≤0 的告警日志注释块一并删除。
  • 记录点由「输出结构」改为「内部结构」(b227ae1):data_process.cpp 中按输出数组批量记录航迹的辅助函数 rdp_record_output_tracks() 与 RDP_RECORD_BATCH 调用整体移除,改在 track_asso.cpp 的输出循环内对内部 Trust_Track 逐条 RDP_RECORD(RdpRecTrustTrack(...))——记录的是航迹的完整内部状态(含 IMM 的 X/P/X1~X3/P2/P3/u),不再受输出数组容量与列映射的限制;范围仍限于本圈有输出(Track_Update_Flag==1)的航迹,且仅 TWS 通道。
  • Temp_track 字段命名规范化(c3c7e66,struct.h):snr → SNR、Amp → amplitude、T → CPI_time、Temp_track_section_idx → temp_track_section_idx,并新增 temp_track_id / point_id / circle_id / pitch_num;track_init.cpp、track_init_direct_tracking.cpp 中的引用同步更名(含注释停用代码)。
  • 输入点迹的两个「新字段」已打通(实际始于 a4f32e4 的 data_process.cpp 改写,本次发布确认并更正文档):data_preprocess() 现已把 DataRev.amp_asv / DataRev.prn_fftn 拷入内部 PointRecv(TWS 与 TAS 两条分支均赋值),并随 RdpRecPoint 落库;此前 README/CHANGELOG 记录的「输入侧未打通、输出字段无有效数据来源」已不成立(TAS 关联/输出路径仍未写回 Track 的这两个字段,见 11.2)。

Fixed

  • 修正文档中「data_preprocess() 未搬入 amp_asv / prn_fftn」的过期描述(本次文档更新):README 11.2、docs/data_process_flow_report.md、docs/track_init_readme.md 三处同步更正为「已搬入」,并保留「TAS 输出路径未写回」这一仍然成立的部分。
  • 修复 MSVC /W3 下全部 C4819 / C4018 / C4244 编译警告:源码文件改为带 BOM 的 UTF-8 编码;signed/unsigned 不匹配处改用 size_t 循环变量或显式 static_cast<int> 比较;double/float、__int64/double 等窄化转换改为 static_cast 显式转换,保持原有计算逻辑不变(涉及 data_process.cpp、dot_coh.cpp、dot_coh_tas.cpp、tas_ctrl.cpp、track_asso.cpp、track_asso_tas.cpp、track_init.cpp、track_init_direct_tracking.cpp、track_index_mangement.cpp 等)。
  • 修复 TAS_Ctrl::tas_beam_output() 把航迹向量下标 earliest_track_idx 误赋给 Tracking_beam->TAS_track_index 的问题(1521592):现输出实际航迹号 (*trust_track)[earliest_track_idx].Track_Index,避免跟踪波束批号与目标不符。
  • 修正 README.md(第 2、5.2、8.1、8.3、9.3、13 节)与 docs/data_process_flow_report.md(第 0、1、6.1~6.4 节、附录)中航迹起始的步骤顺序描述(纯文档勘误,无代码改动):两份文档原写作「航迹头(1 点)→ 点-航迹头关联(2 点)→ 点-临时航迹关联(≥3 点)→ 起批」,与 track_init.cpp(L49-126)每圈的实际执行顺序相反;现更正为「① 点迹先与 ≥2 点临时航迹关联(延长已有临时航迹)→ ② 再与 1 点航迹头关联(两点卡尔曼初始化出 2 点临时航迹)→ ③ 两个阶段都结束后统一删除被消费(Use_Flag==1)的点迹、剩余点迹逐条转为新航迹头 → ④ 长度达标的临时航迹经三点卡尔曼初始化转为可靠航迹」,并同步修正流程图与状态机;另补充两点此前的描述缺失:两个关联阶段互不排斥(航迹头阶段不检查临时航迹阶段留下的 Use_Flag,同一点迹可同时延长一条临时航迹并开启一条 2 点临时航迹)、两类关联都不做一对一分配(同一条临时航迹可被同圈多个点延长)。
  • 修复速度模糊时「向站/背站」判断有误的问题(fc49707、42b598e):Flag_Direction 不再由受多普勒模糊影响、符号可能取反的实测径向速度 vr_point 决定,改为按航迹滤波速度矢量与雷达视线的几何关系判定(判据见 Changed),TWS、TAS 两通道行为一致。
  • 修复升级到 MSVC 2022 后在 /W3 下新增报出的 17 处 C4267(size_t → int 窄化,可能丢失数据)告警:track_asso.cpp(7 处)、track_init.cpp(5 处)、track_init_direct_tracking.cpp(4 处)、track_asso_tas.cpp(1 处)、tas_ctrl.cpp(1 处)按项目既有约定改为 static_cast<int>(...) 显式转换,不改变任何计算逻辑、对外接口与结构体布局;被编辑的源文件均已恢复「带 BOM 的 UTF-8」编码,与仓库其余文件保持一致。修复后 X256_PS/X256_MS × Release/Debug 四种配置均为 0 warning、0 error。

Removed

  • 删除已注释停用的无用代码残留(d6cdbc0):data_process.cpp 中 TWS/TAS 分支的 std::cout 调试输出注释块,以及 dot_coh.cpp 中早期「1 km 以内 SNR < 20 dB 点迹过滤」的注释代码块。仅清理注释,不改变任何运行逻辑。
  • 删除 docs/data_process_flow_report.html(e0bf227):该 HTML 渲染版与 docs/data_process_flow_report.md 内容重复且已明显滞后,保留价值不足;同内容的 HTML 已在 git 忽略的 design_docs/ 内另行留档。README 目录结构、参考文档表与版本历史表中指向该文件的条目同步移除。
  • 删除 track_asso.cpp TWS 输出循环中已注释停用的 manual_tracking_flag == 0 过滤代码块(fc49707):该过滤从未生效,删除后 TWS 输出仍会把手动转 TAS(Track_Mode==1)的航迹一并输出(BUG-25 未修复,见 README 11.2)。

[1.5.5] - 2026-08-27

初始版本记录:汇总仓库现有功能与自 2022 年以来的主要变更(依据 git 提交历史与 README.md 整理)。

Added

  • TWS/TAS 双通道雷达数据处理:输入点迹预处理、两帧滑窗点迹凝聚、逻辑法航迹起始(3~9 点起批,含屏蔽区)、IMM + EKF 航迹滤波、最近邻点航关联、航迹外推/消亡/航迹号管理、TAS 波束控制输出。
  • 支持相扫(X256_PS)与机扫(X256_MS)两种扫描体制,通过 RADAR_SCAN_MODE / 编译宏配置切换。
  • 适配四面阵机扫跟踪模式;机扫跟踪时增加高度门限判断。
  • 输入点迹、输出航迹的 CPI 时间与 GNSS 时间改为 64 位整型(毫秒)。
  • 增加航迹清空功能,解决重连时大量航迹乱窜的问题。
  • TWS 输出增加高度平滑处理。
  • TWS 点航关联增加俯仰门限与点航距离门限,限制大幅度跳变或突跳到远距离的点迹关联。
  • 航迹起始增加屏蔽区域。
  • 新增 README.md、BUG_REPORT.md、BUG_FIX_REPORT.md 等文档。

Changed

  • 工程由 Qt/qmake 迁移为 VS Code + CMake 构建,编译器保持 MSVC 2013 x86 不变。
  • 机扫与相扫程序合并,通过宏定义配置切换。
  • TAS 航迹外推时间间隔改为按波束时间计算。
  • 扫描一圈完成的判断逻辑改为用“波位号变小”判断。
  • 点迹凝聚角度约束放宽至 4 度;凝聚条件按近程/中程模式区分。
  • 去掉自动转 TAS 功能,仅支持手动转 TAS。
  • 去掉 1 km 以内航迹起批的 20 dB 信噪比门限。
  • 统一代码缩进格式。

Fixed

  • 修复若干逻辑 BUG(数组越界/下溢、局部变量未初始化、时间差无效、方位角 ±π 环绕、IMM 概率奇异、输出数组容量越界等),明细见 archived_docs/BUG_FIX_REPORT.md。
  • 修复 TAS 外推时间差可能为无效值的问题。
  • 修复航迹起始时未输出跟踪类型、可靠航迹手动转跟踪标志未清零的问题。
  • 修复量测噪声协方差矩阵 R 赋值错误、数据预处理波位号判断规则、点迹数量上限、雅可比矩阵取值、起批负索引等问题。

Removed

  • 移除 requirements.md(93d3924 移除,后于 b3e2f52 重新加入并改为 TAS 波束控制说明)、CLAUDE.md、Makefile 系列、Qt 工程用户文件、内置 Eigen 3.3.7 冗余文件及「航迹点迹区分区说明」等不必要文件。