Files
waiwaylee 604f1585f6 更新:1、TAS航迹不关联时间戳更早的TWS点迹,但标记点迹已使用,避免生成TWS航迹;
2、调整目录结构,将过期的文档都放到archived_docs文件夹中留档;

Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
2026-09-12 10:01:15 +08:00

8.7 KiB
Raw Permalink Blame History

Bug 修复报告

根据 BUG_REPORT.md 中的“是否修复”指示,本次完成了所有标记为“按建议修改/按建议修复”的项;标记为“暂不修复/暂不修改/暂不处理”的项保持原样未改动。


修复状态汇总

编号 标题 指示 状态
BUG-01 基类无虚析构函数 暂不修复 未修改
BUG-02 Hight_smooth 无限增长 暂不修复 未修改
BUG-03 工厂单例非线程安全 暂不修复 未修改
BUG-04 TAS Point_Sum 未限幅 按建议修复 已修复
BUG-05 Track_to_start.size()-1 下溢 按建议修复 已修复
BUG-06 track_start_point_num 未校验 按建议修复 已修复
BUG-07 禁止区域个数未限制 暂不修复 未修改
BUG-08 消亡航迹输出无容量检查 暂不修改 未修改
BUG-09 Beam_Ctrl 输出计数越界风险 按建议修改 已修复
BUG-10 航迹号数组下标未校验 按建议修改 已修复
BUG-11 TAS model_filter 未初始化变量 按建议修改 已修复
BUG-12 tas_beam_output 未初始化变量 按建议修改 已修复
BUG-13 Work_Parameter 未初始化 暂不修复 未修改
BUG-14 lastest_index 未初始化 按建议修改 已修复
BUG-15 TWS delta_T<=0 仍关联 按建议修改 已修复
BUG-16 TAS 无 delta_T>0 检查 按建议修改 已修复
BUG-17 TAS 外推负时间差 按建议修改 已修复
BUG-18 卡尔曼时间差除零 暂不修改 未修改
BUG-19 Bind_speed prt=0 除零 按建议修改 已修复
BUG-20 门限重复平方 暂不修改 未修改
BUG-21 近程模型 3 门限整数除法 按建议修改 已修复
BUG-22 EKF/凝聚方位角未环绕 按建议修改 已修复
BUG-23 IMM 概率零分母/奇异矩阵 按建议修改 已修复
BUG-24 EKF 似然只取 2x2 S 按建议修改 已修复
BUG-25 TWS 处理 TAS 航迹 暂不处理 未修改
BUG-26 输出航向角使用 atan 按建议修改 已修复
BUG-27 asin(height/range) 未保护 按建议修改 已修复
BUG-28 track_clear_all 清理不彻底 按建议修改 已修复
BUG-29 tracking_stop 队列延迟 暂不修改 未修改
BUG-30 work_mode 注释不一致 注释有误 已修复注释
BUG-31 tracking_point/引导跟踪空实现 注释明确 已加注释
BUG-32 凝聚内层未跳过已用点 按建议修改 已修复
BUG-33 起批 delta_T 未校验 暂不修改 未修改
BUG-34 tmp_track_die 空向量越界 按建议修改 已修复
BUG-35 航迹号 500 不复用 按建议修改 已修复
BUG-36 TAS 波束关闭字段未清 暂不修改 未修改
BUG-37 局部结构体未完整初始化 按建议修改 已修复

已修复项明细

BUG-04

  • 文件:data_process.cpp
  • 修改:TAS 分支 data_num = min(max(Point_Sum,0), 150),避免 Point_Sum > 150 时越界读取输入数组。

BUG-05

  • 文件:track_init.cpp
  • 修改:重复航迹去重循环改为 for (size_t i = 0; i + 1 < Track_to_start.size(); ++i),避免空容器时 size()-1 下溢。

BUG-06

  • 文件:data_process.cpptrack_init.cpptrack_init_direct_tracking.cpp
  • 修改:
    • track_process_parameters_initial/modify 校验 3 <= track_start_point_num <= 9,非法参数返回 -1
    • 起批转可靠航迹前增加 Track_to_start.empty() 和每条航迹 size() >= 3 防御。
    • 直接跟踪的 tmp_track_to_trust_track 也增加 L >= 3 保护。

BUG-09

  • 文件:tas_ctrl.cpp
  • 修改:
    • tas_ctrl_process 开始时校验 Trust_track_num_Output 非空并清零。
    • tas_target_add 写入输出数组前检查 *Trust_track_num_Output < MAX_TRACK_NUM

BUG-10

  • 文件:track_index_mangement.cpp
  • 修改:写入 List[] 前校验 Track_Index[1, MAX_TRACK_INDEX]

BUG-11

  • 文件:track_asso_tas.cpp
  • 修改:model_filter 增加 found_tas_track 标记;找不到目标时直接返回,局部变量均初始化。

BUG-12

  • 文件:tas_ctrl.cpp
  • 修改:tas_beam_output 初始化 H_track/X_now/CPI_time,找不到目标时 open_flag=0 并返回。

BUG-14

  • 文件:track_index_mangement.h
  • 修改:lastest_index 声明时初始化为 0

BUG-15

  • 文件:track_asso.cpp
  • 修改:TWS 关联中 delta_T <= 0 时从候选列表移除该无效配对并 continue,不再标记点迹已使用、不刷新航迹状态。

BUG-16

  • 文件:track_asso_tas.cpp
  • 修改:TAS 关联点循环中 delta_T <= 0 时跳过该点。

BUG-17

  • 文件:track_asso_tas.cpp
  • 修改:TAS 外推时 delta_T <= 0 直接跳过,避免航迹时间回退和负时间预测。

BUG-19

  • 文件:kalman.cppdata_process_class_dll.h
  • 修改:Bind_speedprt <= 0freq <= 0 返回安全非零值;接口注释改为“PRI 不允许为 0”。

BUG-21

  • 文件:track_asso.cpp
  • 修改:近程门限中 /1000/100 改为浮点除法,避免整数除零恒不成立;保留 d*d 比较方式(未修改 BUG-20)。

BUG-22

  • 文件:kalman.cppdot_coh.cppdot_coh_tas.cpp
  • 修改:
    • 新增 wrapAnglePi()EKF 各残差计算后对方位角分量做 [-π,π] 环绕。
    • 点迹凝聚 work_mode==0 分支和 TAS 凝聚统一使用最小角度差 delta_F

BUG-23

  • 文件:track_asso.cpptrack_asso_tas.cpptrack_asso_direct_tracking.cpp
  • 修改:
    • IMM 交互中 c[0..2] 为 0/负时钳位到 1e-12
    • 模型概率更新增加分母保护,分母异常时保持上一拍概率。
    • 似然计算对 det_S <= 0 返回 0,避免 NaN。

BUG-24

  • 文件:kalman.hkalman.cpptrack_asso.cpptrack_asso_tas.cpptrack_asso_direct_tracking.cpp
  • 修改:
    • kalman_filter_EKFS_filter[2][2] 改为 [3][3]
    • 调用侧使用 Matrix3f 和 3x3 行列式,似然归一化改为 1/sqrt(pow(2*PI,3)*detS)

BUG-26

  • 文件:track_asso.cpptrack_asso_tas.cpptrack_asso_direct_tracking.cpp
  • 修改:航向角改用 atan2(X[4], X[1]) 并归一化到 [0,2π)

BUG-27

  • 文件:track_asso_tas.cpptrack_asso_direct_tracking.cpptrack_init.cpp
  • 修改:计算 asin 前对 height/range 做定义域钳位,range <= 0 时按 0 处理。

BUG-28

  • 文件:data_process.cppdot_coh.h/cpptrack_asso.h/cpptrack_asso_tas.h/cpptrack_init.h/cpptas_ctrl.h/cpptrack_index_mangement.h/cpp
  • 修改:
    • Dot_CohTrack_AssoTrack_Asso_TasTrack_InitTAS_CtrlTrack_Ind_Mangement 增加 reset()
    • track_clear_all() 调用上述 reset,并恢复 last_beam_num = INT_MAX
    • 直接跟踪相关类也补充了 reset()

BUG-30

  • 文件:data_process_class_dll.h
  • 修改:work_mode 注释由“0进程 1中程 3远程”改为“0进程 1中程 2远程”。

BUG-31

  • 文件:data_process_class_dll.hdata_process.cpptrack_init_direct_tracking.cpp
  • 修改:在 direct_tracking_processtracking_point、直接跟踪入口处注释明确“当前接口未启用,保留空实现”。

BUG-32

  • 文件:dot_coh.cppdot_coh_tas.cpp
  • 修改:内层凝聚比较增加对 iUse_Flag 的检查,已使用点不再参与凝聚。

BUG-34

  • 文件:track_init.cpptrack_init_direct_tracking.cpp
  • 修改:tmp_track_die 先判断 n <= 0,空向量直接删除。

BUG-35

  • 文件:track_index_mangement.cpp
  • 修改:两处回绕循环由 i < MAX_TRACK_INDEX 改为 i <= MAX_TRACK_INDEX,使 500 号可复用。

BUG-37

  • 文件:track_init.cpptrack_init_direct_tracking.cpp
  • 修改:Temp_trackTrust_Track 局部变量改为 = {} 值初始化,避免未初始化字段。

编译与运行验证

使用 MSVC 2013 (Visual Studio 12) x86 实际编译:

配置 结果
X256_PS Release 编译链接通过
X256_MS Release 编译链接通过
X256_PS Debug 编译链接通过
MSVC /W4 Release 编译通过,未再出现 C4700/C4701 未初始化变量告警

另编写临时宿主程序验证 DLL

  • 初始化 RadarPara,调用 track_process_parameters_initial 成功。
  • 调用 track_process,返回 1,输出计数正常。
  • 工厂创建/销毁流程正常。

说明:当前构建仍会输出原有代码的 C4244 转换告警、C4018 有符号/无符号比较告警、C4819 编码告警,均非本次修复引入,不影响链接和运行。