From 1ae0cf2512b3c741fc2dd60e65cc9fdceb417867 Mon Sep 17 00:00:00 2001 From: waiwaylee Date: Mon, 19 Oct 2026 15:03:00 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=88=AA=E8=BF=B9=E8=B4=A8=E9=87=8F=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E8=BE=93=E5=87=BA=EF=BC=9B=202=E3=80=81=E8=88=AA?= =?UTF-8?q?=E8=BF=B9=E8=B5=B7=E5=A7=8B=E6=97=B6=E8=AE=A1=E7=AE=97=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E8=88=AA=E8=BF=B9=E8=B4=A8=E9=87=8F=EF=BC=9B=203?= =?UTF-8?q?=E3=80=81=E8=88=AA=E8=BF=B9=E5=85=B3=E8=81=94=E6=97=B6=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E8=88=AA=E8=BF=B9=E8=B4=A8=E9=87=8F=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.h | 1 + data_process_class_dll/parameters.h | 17 +++++- data_process_class_dll/struct.h | 13 +++-- data_process_class_dll/track_asso.cpp | 18 ++++++- data_process_class_dll/track_init.cpp | 54 +++++++++++++++---- 5 files changed, 86 insertions(+), 17 deletions(-) diff --git a/data_process_class_dll/data_process_class_dll.h b/data_process_class_dll/data_process_class_dll.h index 6847416..f8b3a4e 100644 --- a/data_process_class_dll/data_process_class_dll.h +++ b/data_process_class_dll/data_process_class_dll.h @@ -51,6 +51,7 @@ struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT Track float Elevation; //俯仰 float Range_V; //速度 float Amplitude; //幅度 + float Quality; //航迹质量 int Track_Index; //航迹号 int Point_Sum; //本条航迹更新点的数目 int Flag_Direction; //方向标志1靠近/0远离 diff --git a/data_process_class_dll/parameters.h b/data_process_class_dll/parameters.h index b6e56a7..7251442 100644 --- a/data_process_class_dll/parameters.h +++ b/data_process_class_dll/parameters.h @@ -49,8 +49,21 @@ //#define MECHANICAL_SCANNING //#define PHASE_SCANNING +/******************************通用数据处理参数**************************************/ +//航迹质量管理参数 +#define TRACK_QUALITY_MAX 100 +#define TRACK_QUALITY_MIN 0 +#define TRACK_QUALITY_D_WEIGHT 0.5 +#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_START_QUALITY 0.5 + #ifdef MECHANICAL_SCANNING -/******************************数据处理参数**************************************/ +/******************************机扫数据处理参数**************************************/ // #define DATA_RATE_TAS 0.0625 #define SIGMA_R 10.0 //测量误差 @@ -101,7 +114,7 @@ #ifdef PHASE_SCANNING -/******************************数据处理参数**************************************/ +/******************************相扫数据处理参数**************************************/ // #define DATA_RATE_TAS 0.3 #define SIGMA_R 10.0 //测量误差 diff --git a/data_process_class_dll/struct.h b/data_process_class_dll/struct.h index f1f91b6..b2fd65b 100644 --- a/data_process_class_dll/struct.h +++ b/data_process_class_dll/struct.h @@ -46,17 +46,21 @@ struct Trust_Track int Track_Index; //航迹号 double Range; //距离 - double Azimuth; //方位 - double Elevation; //俯仰 + double Azimuth; //方位 + double Elevation; //俯仰 double Velocity; //航向速度 double Amplitude; //幅度 double Height; //高度 + double RCS; //RCS + double Quality; //航迹质量 - long long T_track; //航迹时间 + long long T_track; //航迹时间 long long GNSS_time; //GNSS时间 int Track_Sum; //航迹总数 int Point_Index; //该航迹上的第几个点 + int Point_sum; //本条航迹更新点的数目 + int Valid_point_sum; //本条航迹有效点的数目 int Track_Mode; //跟踪模式 int Track_Update_Flag; //航迹更新标志 1已更新/0未更新 @@ -87,8 +91,6 @@ struct Trust_Track float amp_asv_point; //关联上的点迹信息(归一化幅度) float prn_fftn_point; //点迹速度维FFT点数 - double RCS; - int pitch_num; // 俯仰波位号 float speed_dim[129]; // 目标的十字星数据,目标点速度维129个点 float range_dim[8]; // 目标的十字星数据,目标点距离维8个点 @@ -122,6 +124,7 @@ struct Temp_track double SNR; //信噪比 double RCS; //RCS double amplitude; //幅度 + double quality; //航迹质量 long long CPI_time; //时间戳 long long GNSS_time; //GNSS时间戳 diff --git a/data_process_class_dll/track_asso.cpp b/data_process_class_dll/track_asso.cpp index 2deab69..d7001f4 100644 --- a/data_process_class_dll/track_asso.cpp +++ b/data_process_class_dll/track_asso.cpp @@ -100,6 +100,7 @@ int Track_Asso:: track_asso_process(std::vector *point_ Trust_Track_Output[*Trust_track_num_Output-1][0].GNSS_time=(*trust_track)[i].GNSS_time; Trust_Track_Output[*Trust_track_num_Output-1][0].Flag_Point = (*trust_track)[i].point_flag; Trust_Track_Output[*Trust_track_num_Output-1][0].z=static_cast((*trust_track)[i].Height+Work_Parameter.Height); + Trust_Track_Output[*Trust_track_num_Output-1][0].Quality = static_cast((*trust_track)[i].Quality * TRACK_QUALITY_MAX); double Direction_Angle; Direction_Angle=atan2((*trust_track)[i].X[4], (*trust_track)[i].X[1]); @@ -656,6 +657,14 @@ void Track_Asso:: model_filter(std::vector *trust_track,struct Ra (*trust_track)[track_index-1].P3[ii][jj]=P3_filter[ii][jj]; } + //计算航迹质量 + double d_tmp = exp(-associated_info[min_index-1].d_min); + double snr_tmp = 1/(1+exp(-(point_process[point_index-1].SNR - 16) / 1.2)); + double len_tmp = 1/(1+exp(-((*trust_track)[track_index-1].Valid_point_sum - 4) / 1.2)) * 0.5 + (1 - (*trust_track)[track_index-1].Valid_point_sum / (*trust_track)[track_index-1].Point_sum) * 0.5; + double tq_tmp = TRACK_QUALITY_D_WEIGHT * d_tmp + TRACK_QUALITY_SNR_WEIGHT * snr_tmp + TRACK_QUALITY_LEN_WEIGHT * len_tmp; + + (*trust_track)[track_index-1].Quality = (*trust_track)[track_index-1].Quality * TRACK_QUALITY_ITER_COEFF + tq_tmp * (1 - TRACK_QUALITY_ITER_COEFF); + //更新航迹时间 (*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; @@ -688,6 +697,8 @@ void Track_Asso:: model_filter(std::vector *trust_track,struct Ra (*trust_track)[track_index-1].point_flag=1; //实点 (*trust_track)[track_index-1].associate_point_number = (*trust_track)[track_index-1].associate_point_number+1; //关联点数+1 (*trust_track)[track_index-1].Track_Update_Flag = 1; //航迹更新标志 + (*trust_track)[track_index-1].Point_sum = (*trust_track)[track_index-1].Point_sum + 1; + (*trust_track)[track_index-1].Valid_point_sum = (*trust_track)[track_index-1].Valid_point_sum + 1; } //删除associated_info中关联上的航迹 点迹信息 @@ -778,6 +789,7 @@ void Track_Asso:: model_filter(std::vector *trust_track,struct Ra memcpy((*trust_track)[i].P2,P2_pred,6*6*sizeof(double)); memcpy((*trust_track)[i].P3,P3_pred,6*6*sizeof(double)); + (*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].Extrapolate_round =(*trust_track)[i].Extrapolate_round+1; //连续未用实点更新时间 @@ -788,9 +800,13 @@ void Track_Asso:: model_filter(std::vector *trust_track,struct Ra (*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].Quality < 0.0 ? 0.0 : (*trust_track)[i].Quality; + (*trust_track)[i].Point_sum = (*trust_track)[i].Point_sum + 1; } } - } void Track_Asso:: model_output(std::vector *trust_track) diff --git a/data_process_class_dll/track_init.cpp b/data_process_class_dll/track_init.cpp index 9733374..59ca8d8 100644 --- a/data_process_class_dll/track_init.cpp +++ b/data_process_class_dll/track_init.cpp @@ -452,16 +452,48 @@ void Track_Init::tmp_track_to_trust_track(std::vector *trust_tra double range=(*Iter)[L-1].r; double azi=(*Iter)[L-1].azi/PI*180; - //(已停用)1km以内,SNR小于20dB的临时航迹不转为可靠航迹 - // bool snr_flag = true; - // for(int p_idx = 0; p_idx < L; p_idx++){ - // if((*Iter)[p_idx].r < 1000 && (*Iter)[p_idx].snr < 20){ - // snr_flag = false; - // break; - // } - // } + //计算航迹初始质量 + double average_snr = 0; + for(int i=0;i=Work_Parameter.track_start_point_num)&& track_init_prohibit(range,azi,Work_Parameter)==0) //按长度查找TRUST_TRACK_POINT + //航迹起批条件判断 + bool track_init_flag = true; + + //航迹长度大于10点,不起批 + if(L > 10){ + track_init_flag = false; + } + + //航迹长度小于起始点数,不起批 + if(L < Work_Parameter.track_start_point_num){ + track_init_flag = false; + } + + //航迹起批禁止区域判断 + if(track_init_prohibit(range,azi,Work_Parameter)!=0) + { + track_init_flag = false; + } + + //TODO: 航迹质量起批条件判断 + + + //TODO: 杂波密度判断 + + if(track_init_flag) { //加入Track_to_start中 Track_to_start.push_back(std::vector ()); @@ -576,6 +608,9 @@ void Track_Init::tmp_track_to_trust_track(std::vector *trust_tra trust_track_tmp.associate_point_number = 0; trust_track_tmp.manual_tracking_flag = 0; trust_track_tmp.point_type = 0; + trust_track_tmp.Quality = Track_to_start[i][L-1].quality; + trust_track_tmp.Point_sum = L; + trust_track_tmp.Valid_point_sum = L; trust_track_tmp.u[0]=0.3333; trust_track_tmp.u[1]=0.3333; trust_track_tmp.u[2]=0.3333; @@ -612,6 +647,7 @@ void Track_Init::tmp_track_to_trust_track(std::vector *trust_tra Trust_Track_Output[*Trust_track_num_Output-1][j].Amplitude=static_cast(Track_to_start[i][j].amplitude); Trust_Track_Output[*Trust_track_num_Output-1][j].track_snr = static_cast(Track_to_start[i][j].SNR); Trust_Track_Output[*Trust_track_num_Output-1][j].track_rcs = static_cast(Track_to_start[i][j].RCS); + Trust_Track_Output[*Trust_track_num_Output-1][j].Quality = static_cast(Track_to_start[i][j].quality * TRACK_QUALITY_MAX); Trust_Track_Output[*Trust_track_num_Output-1][j].pitch_num = Track_to_start[i][j].pitch_num; From d9a7bd0ee14d2493031c1fb4aedcb505eb529069 Mon Sep 17 00:00:00 2001 From: waiwaylee Date: Mon, 19 Oct 2026 16:09:37 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=B0=83=E6=95=B4=E4=B8=B4=E6=97=B6=E8=88=AA?= =?UTF-8?q?=E8=BF=B9=E8=B4=A8=E9=87=8F=E8=AF=84=E4=BC=B0=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=9B=202=E3=80=81=E8=88=AA=E8=BF=B9=E8=B5=B7=E5=A7=8B?= =?UTF-8?q?=E6=97=B6=E5=A2=9E=E5=8A=A0=E8=88=AA=E8=BF=B9=E8=B4=A8=E9=87=8F?= =?UTF-8?q?=E9=97=A8=E9=99=90=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 | 6 +- data_process_class_dll/track_init.cpp | 102 +++++++++++++++++++++----- 2 files changed, 89 insertions(+), 19 deletions(-) diff --git a/data_process_class_dll/parameters.h b/data_process_class_dll/parameters.h index 7251442..8f95bb1 100644 --- a/data_process_class_dll/parameters.h +++ b/data_process_class_dll/parameters.h @@ -60,7 +60,11 @@ #define TRACK_QUALITY_DECREASE_COEFF 0.01 //航迹起批质量条件 -#define TRACK_START_QUALITY 0.5 +#define TRACK_START_QUALITY_L3 0.7 +#define TRACK_START_QUALITY_L4 0.6 +#define TRACK_START_QUALITY_L5 0.5 +#define TRACK_START_QUALITY_L6 0.4 +#define TRACK_START_QUALITY_L7 0.3 #ifdef MECHANICAL_SCANNING /******************************机扫数据处理参数**************************************/ diff --git a/data_process_class_dll/track_init.cpp b/data_process_class_dll/track_init.cpp index 59ca8d8..690dfe1 100644 --- a/data_process_class_dll/track_init.cpp +++ b/data_process_class_dll/track_init.cpp @@ -254,6 +254,40 @@ void Track_Init::point_temp_track_asso(std::vector > memcpy(asso_track_info_tmp.X, X, 4*sizeof(double)); memcpy(asso_track_info_tmp.P, P, 4*4*sizeof(double)); (*temp_track)[(*temp_track).size()-1].push_back(asso_track_info_tmp); + + //计算航迹质量 + auto& temp_track_ref = (*temp_track)[(*temp_track).size()-1]; + L = static_cast(temp_track_ref.size()); + + double snr_tmp = 0; + double d_tmp = 0; + double quality_tmp = 0; + + d_tmp = exp(-temp_track_ref[L-1].d); + + if(L == 3){ + double average_snr = 0; + for(int i=0;i *trust_tra int L=static_cast((*Iter).size()); double range=(*Iter)[L-1].r; double azi=(*Iter)[L-1].azi/PI*180; + double quality = (*Iter)[L-1].quality; - //计算航迹初始质量 - double average_snr = 0; - for(int i=0;i *trust_tra track_init_flag = false; } - //TODO: 航迹质量起批条件判断 - + //航迹质量起批条件判断 + switch(L){ + case 3: + if(quality < TRACK_START_QUALITY_L3){ + track_init_flag = false; + } + break; + case 4: + if(quality < TRACK_START_QUALITY_L4){ + track_init_flag = false; + } + break; + case 5: + if(quality < TRACK_START_QUALITY_L5){ + track_init_flag = false; + } + break; + case 6: + if(quality < TRACK_START_QUALITY_L6){ + track_init_flag = false; + } + break; + case 7: + if(quality < TRACK_START_QUALITY_L7){ + track_init_flag = false; + } + break; + default: + if(quality < TRACK_START_QUALITY_L7){ + track_init_flag = false; + } + break; + } //TODO: 杂波密度判断 From 4b70b245150a7e9552fbeccff4e2a9565a892510 Mon Sep 17 00:00:00 2001 From: waiwaylee Date: Tue, 20 Oct 2026 09:55:17 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=88=AA=E8=BF=B9=E8=B4=A8=E9=87=8F=E4=B8=8B?= =?UTF-8?q?=E9=99=8D=E7=AD=96=E7=95=A5=EF=BC=8C=E6=94=B9=E4=B8=BA=E6=8C=89?= =?UTF-8?q?=E7=82=B9=E8=BF=B9=E6=9C=AA=E6=9B=B4=E6=96=B0=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E8=AE=A1=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; From 782bff5e8e2b25690d2d102a4e39b9c28ae1fe7b Mon Sep 17 00:00:00 2001 From: waiwaylee Date: Tue, 20 Oct 2026 10:47:05 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=88=AA=E8=BF=B9=E8=B4=A8=E9=87=8F=E4=B8=8B?= =?UTF-8?q?=E9=99=8D=E9=80=BB=E8=BE=91=EF=BC=9B=202=E3=80=81=E6=99=AE?= =?UTF-8?q?=E9=80=9A=E8=88=AA=E8=BF=B9=E6=B6=88=E4=BA=A1=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E7=94=B1=E8=88=AA=E8=BF=B9=E8=B4=A8=E9=87=8F?= =?UTF-8?q?=E7=A1=AE=E5=AE=9A=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 | 16 ++++------------ data_process_class_dll/track_asso.cpp | 9 ++++++--- data_process_class_dll/track_die.cpp | 2 +- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/data_process_class_dll/parameters.h b/data_process_class_dll/parameters.h index f0eabb3..1dd035c 100644 --- a/data_process_class_dll/parameters.h +++ b/data_process_class_dll/parameters.h @@ -57,7 +57,8 @@ #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.005 +#define TRACK_QUALITY_DECREASE_COEFF_O2 -0.0008 +#define TRACK_QUALITY_DECREASE_COEFF_O1 -0.0025 //航迹起批质量条件 #define TRACK_START_QUALITY_L3 0.7 @@ -67,17 +68,8 @@ #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 +#define TRACK_DIE_QUALITY 0.3 +#define TRACK_DIE_QUALITY_PRAMARY 0.3 #ifdef MECHANICAL_SCANNING /******************************机扫数据处理参数**************************************/ diff --git a/data_process_class_dll/track_asso.cpp b/data_process_class_dll/track_asso.cpp index 587cb14..9f83f48 100644 --- a/data_process_class_dll/track_asso.cpp +++ b/data_process_class_dll/track_asso.cpp @@ -793,21 +793,24 @@ 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].Unupdated_time / 1000.0 * TRACK_QUALITY_DECREASE_COEFF; + double t = (*trust_track)[i].Unupdated_time / 1000.0; + (*trust_track)[i].Quality -= t * t * TRACK_QUALITY_DECREASE_COEFF_O2 + t * TRACK_QUALITY_DECREASE_COEFF_O1; + (*trust_track)[i].Unupdated_time += static_cast(delta_T*1000.0); + t = (*trust_track)[i].Unupdated_time / 1000.0; + (*trust_track)[i].Quality += t * t * TRACK_QUALITY_DECREASE_COEFF_O2 + t * TRACK_QUALITY_DECREASE_COEFF_O1; (*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 5e893fe..26e33c1 100644 --- a/data_process_class_dll/track_die.cpp +++ b/data_process_class_dll/track_die.cpp @@ -23,7 +23,7 @@ void Track_Die::track_die_process( std::vector *trust_track, } //非重点航迹自动消亡 - if((*Iter).Track_Mode == 0 && (*Iter).primary_target_flag == 0 && (*Iter).Extrapolate_round > TRACK_DIE_ROUND) + if((*Iter).Track_Mode == 0 && (*Iter).primary_target_flag == 0 && (*Iter).Quality < TRACK_DIE_QUALITY) { die_flag = true; }