Files
radar_data_process/CHANGELOG.md
T
waiwaylee 50e0b5cb74 更新:1、增加手动设置重点目标的功能;
2、调整航迹关联时外推圈数限制,不过多外推;
3、调整航迹消批条件,重点航迹消批圈数提高;
4、更新文档;

Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
2026-09-23 09:35:13 +08:00

17 KiB
Raw Blame History

Changelog

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

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

[Unreleased]

Added

  • 新增 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/ 三份文档。

Changed

  • TAS 波束控制改为按固定数据率调度:Beam_Ctrl() 仅当目标满足 1 / DATA_RATE_TAS 秒的数据率间隔(相对航迹时间 T_track 与上次波束输出 last_track_time)时才输出 TAS 跟踪波束,使 TAS 目标数据率不再随波束时间(Beam_Ctrl 调用频率)变化。
  • 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 目标输出间隔严格跟随数据率。

Fixed

  • 修复 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 点临时航迹)、两类关联都不做一对一分配(同一条临时航迹可被同圈多个点延长)。

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 目录结构、参考文档表与版本历史表中指向该文件的条目同步移除。

[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 冗余文件及「航迹点迹区分区说明」等不必要文件。