From 4b70b245150a7e9552fbeccff4e2a9565a892510 Mon Sep 17 00:00:00 2001 From: waiwaylee Date: Tue, 20 Oct 2026 09:55:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9A1=E3=80=81=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=88=AA=E8=BF=B9=E8=B4=A8=E9=87=8F=E4=B8=8B=E9=99=8D?= =?UTF-8?q?=E7=AD=96=E7=95=A5=EF=BC=8C=E6=94=B9=E4=B8=BA=E6=8C=89=E7=82=B9?= =?UTF-8?q?=E8=BF=B9=E6=9C=AA=E6=9B=B4=E6=96=B0=E6=97=B6=E9=97=B4=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: waiwaylee --- data_process_class_dll/parameters.h | 15 +++++++- data_process_class_dll/struct.h | 6 ++-- data_process_class_dll/track_asso.cpp | 49 ++++++++++++++------------- data_process_class_dll/track_die.cpp | 3 ++ data_process_class_dll/track_init.cpp | 1 + 5 files changed, 47 insertions(+), 27 deletions(-) diff --git a/data_process_class_dll/parameters.h b/data_process_class_dll/parameters.h index 8f95bb1..f0eabb3 100644 --- a/data_process_class_dll/parameters.h +++ b/data_process_class_dll/parameters.h @@ -57,7 +57,7 @@ #define TRACK_QUALITY_SNR_WEIGHT 0.3 #define TRACK_QUALITY_LEN_WEIGHT 0.2 #define TRACK_QUALITY_ITER_COEFF 0.8 -#define TRACK_QUALITY_DECREASE_COEFF 0.01 +#define TRACK_QUALITY_DECREASE_COEFF 0.005 //航迹起批质量条件 #define TRACK_START_QUALITY_L3 0.7 @@ -66,6 +66,19 @@ #define TRACK_START_QUALITY_L6 0.4 #define TRACK_START_QUALITY_L7 0.3 +//航迹消批质量条件 +#define TRACK_DIE_QUALITY_E4 0.3 +#define TRACK_DIE_QUALITY_E5 0.4 +#define TRACK_DIE_QUALITY_E6 0.5 +#define TRACK_DIE_QUALITY_E7 0.6 +#define TRACK_DIE_QUALITY_E8 0.7 + +#define TRACK_DIE_QUALITY_PRAMARY_E6 0.3 +#define TRACK_DIE_QUALITY_PRAMARY_E7 0.4 +#define TRACK_DIE_QUALITY_PRAMARY_E8 0.5 +#define TRACK_DIE_QUALITY_PRAMARY_E9 0.6 +#define TRACK_DIE_QUALITY_PRAMARY_E10 0.7 + #ifdef MECHANICAL_SCANNING /******************************机扫数据处理参数**************************************/ // #define DATA_RATE_TAS 0.0625 diff --git a/data_process_class_dll/struct.h b/data_process_class_dll/struct.h index b2fd65b..3c47d04 100644 --- a/data_process_class_dll/struct.h +++ b/data_process_class_dll/struct.h @@ -54,13 +54,15 @@ struct Trust_Track double RCS; //RCS double Quality; //航迹质量 - long long T_track; //航迹时间 + long long T_track; //航迹时间(CPI时间) long long GNSS_time; //GNSS时间 + long long Unupdated_time; //航迹未更新时间 int Track_Sum; //航迹总数 int Point_Index; //该航迹上的第几个点 int Point_sum; //本条航迹更新点的数目 int Valid_point_sum; //本条航迹有效点的数目 + int associate_point_number; //关联的点数 int Track_Mode; //跟踪模式 int Track_Update_Flag; //航迹更新标志 1已更新/0未更新 @@ -71,8 +73,6 @@ struct Trust_Track int manual_delete_flag; //手动航迹删除 int manual_tracking_flag; //手动TAS - int associate_point_number; //关联的点数 - int primary_target_flag; //重点目标标记 int Target_Type; //目标类型 搜索目标 低空目标 地面目标 diff --git a/data_process_class_dll/track_asso.cpp b/data_process_class_dll/track_asso.cpp index d7001f4..587cb14 100644 --- a/data_process_class_dll/track_asso.cpp +++ b/data_process_class_dll/track_asso.cpp @@ -668,6 +668,7 @@ void Track_Asso:: model_filter(std::vector *trust_track,struct Ra //更新航迹时间 (*trust_track)[track_index-1].T_track = point_process[point_index-1].CPI_time; (*trust_track)[track_index-1].GNSS_time = point_process[point_index-1].GNSS_time; + (*trust_track)[track_index-1].Unupdated_time = 0; //更新关联上的点迹信息 (*trust_track)[track_index-1].point_id = point_process[point_index-1].point_id; @@ -737,31 +738,32 @@ void Track_Asso:: model_filter(std::vector *trust_track,struct Ra { if((*trust_track)[i].point_flag == 0 && (*trust_track)[i].manual_tracking_flag == 0) //未关联上点迹的航迹进行外推 { + double delta_T = 0; + // double delta_T = (latest_timestamp - (*trust_track)[i].T_track)/1000.0; + // if (delta_T <= 0) + // continue; + + if(Work_Parameter.work_mode == 0) + { + delta_T = Work_Parameter.DATA_RATE_SHORT; + } + else if(Work_Parameter.work_mode == 1) + { + delta_T = Work_Parameter.DATA_RATE_MIDDLE; + } + else if(Work_Parameter.work_mode == 2) + { + delta_T = Work_Parameter.DATA_RATE_FAR; + } + else + { + delta_T = Work_Parameter.DATA_RATE_SHORT; + } + //外推点数未到上限,则继续外推,否则不外推 if((*trust_track)[i].Extrapolate_round <= MAX_EXTRAPOLATE_NUM) { double v_track = sqrt(pow((*trust_track)[i].X[1],2)+pow((*trust_track)[i].X[4],2)); - double delta_T = 0; - // double delta_T = (latest_timestamp - (*trust_track)[i].T_track)/1000.0; - // if (delta_T <= 0) - // continue; - - if(Work_Parameter.work_mode == 0) - { - delta_T = Work_Parameter.DATA_RATE_SHORT; - } - else if(Work_Parameter.work_mode == 1) - { - delta_T = Work_Parameter.DATA_RATE_MIDDLE; - } - else if(Work_Parameter.work_mode == 2) - { - delta_T = Work_Parameter.DATA_RATE_FAR; - } - else - { - delta_T = Work_Parameter.DATA_RATE_SHORT; - } double F[6][6], Q1[6][6], Q2[6][6], Q3[6][6]; IMM_F_Q_gen( v_track, delta_T, F, Q1, Q2, Q3,Work_Parameter); @@ -776,7 +778,6 @@ void Track_Asso:: model_filter(std::vector *trust_track,struct Ra memcpy(P3,(*trust_track)[i].P3,6*6*sizeof(double)); //外推 - double X1_pred[6],X2_pred[6],X3_pred[6],P1_pred[6][6],P2_pred[6][6],P3_pred[6][6]; kalman Kalman; Kalman.kalman_pred(F, Q1, X1, P1, X1_pred, P1_pred); @@ -792,17 +793,19 @@ void Track_Asso:: model_filter(std::vector *trust_track,struct Ra (*trust_track)[i].circle_id++; (*trust_track)[i].T_track = static_cast((*trust_track)[i].T_track+delta_T*1000.0); //更新航迹时间 (*trust_track)[i].GNSS_time = static_cast((*trust_track)[i].GNSS_time+delta_T*1000.0); //更新航迹时间 + (*trust_track)[i].Unupdated_time += static_cast(delta_T*1000.0); (*trust_track)[i].Extrapolate_round =(*trust_track)[i].Extrapolate_round+1; //连续未用实点更新时间 (*trust_track)[i].point_flag=0; //虚点 (*trust_track)[i].Track_Update_Flag = 1; //航迹更新标志 }else{ (*trust_track)[i].Extrapolate_round =(*trust_track)[i].Extrapolate_round+1; //连续未用实点更新时间 + (*trust_track)[i].Unupdated_time += static_cast(delta_T*1000.0); (*trust_track)[i].point_flag=0; //虚点 (*trust_track)[i].Track_Update_Flag = 0; //航迹更新标志 } //航迹质量递减 - (*trust_track)[i].Quality -= (*trust_track)[i].Extrapolate_round * TRACK_QUALITY_DECREASE_COEFF; + (*trust_track)[i].Quality -= (*trust_track)[i].Unupdated_time / 1000.0 * TRACK_QUALITY_DECREASE_COEFF; (*trust_track)[i].Quality = (*trust_track)[i].Quality < 0.0 ? 0.0 : (*trust_track)[i].Quality; (*trust_track)[i].Point_sum = (*trust_track)[i].Point_sum + 1; } diff --git a/data_process_class_dll/track_die.cpp b/data_process_class_dll/track_die.cpp index a68a1f7..5e893fe 100644 --- a/data_process_class_dll/track_die.cpp +++ b/data_process_class_dll/track_die.cpp @@ -16,16 +16,19 @@ void Track_Die::track_die_process( std::vector *trust_track, { bool die_flag = false; + //手动删除 if((*Iter).manual_delete_flag == 1) { die_flag = true; } + //非重点航迹自动消亡 if((*Iter).Track_Mode == 0 && (*Iter).primary_target_flag == 0 && (*Iter).Extrapolate_round > TRACK_DIE_ROUND) { die_flag = true; } + //重点航迹自动消亡 if((*Iter).Track_Mode == 0 && (*Iter).primary_target_flag == 1 && (*Iter).Extrapolate_round > TRACK_DIE_ROUND_PRIMARY) { die_flag = true; diff --git a/data_process_class_dll/track_init.cpp b/data_process_class_dll/track_init.cpp index 690dfe1..1d0bb3f 100644 --- a/data_process_class_dll/track_init.cpp +++ b/data_process_class_dll/track_init.cpp @@ -663,6 +663,7 @@ void Track_Init::tmp_track_to_trust_track(std::vector *trust_tra std::memcpy(trust_track_tmp.range_dim, Track_to_start[i][L-1].range_dim, sizeof(trust_track_tmp.range_dim)); trust_track_tmp.T_track = Track_to_start[i][L-1].CPI_time; trust_track_tmp.GNSS_time = Track_to_start[i][L-1].GNSS_time; + trust_track_tmp.Unupdated_time = 0; trust_track_tmp.point_flag=1; //实点 trust_track_tmp.Track_Mode=0; //跟踪模式 TWS 0 trust_track_tmp.Target_Type=UNCONF_TARGET;