diff --git a/data_process_class_dll/data_process.cpp b/data_process_class_dll/data_process.cpp index afd26c3..7291b41 100644 --- a/data_process_class_dll/data_process.cpp +++ b/data_process_class_dll/data_process.cpp @@ -15,8 +15,8 @@ using namespace std; //数据预处理 int Data_Process::data_preprocess(struct DataRev Data_Input[150]) { + // 更新当前系统时间 latest_timestamp = Data_Input[0].CPI_time; - //qDebug() << "latest_timestamp: " <().swap(Data_buffer_tas);//凝聚完毕 清除Data_buffer diff --git a/data_process_class_dll/data_process_class_dll.h b/data_process_class_dll/data_process_class_dll.h index d4b09bc..8b8a775 100644 --- a/data_process_class_dll/data_process_class_dll.h +++ b/data_process_class_dll/data_process_class_dll.h @@ -18,6 +18,7 @@ struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT DataRev float RCS; //目标RCS float Encoder_value; //码盘值 int CPI_time; //CPI时间 该波位无点迹输入时也需要给出当前时间 + int GNSS_time; //GNSS时间 int Beam_index_azi_0; //上一个cpi波位 int Beam_index_aiz; //方位波位号(0-24) 该波位无输入点迹时 也需要给出当前波位 int Beam_index_elev; //俯仰波位号(0-13) @@ -74,9 +75,10 @@ struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT Track float track_snr; //信噪比 float track_rcs; //rcs - int pitch_num; // 俯仰波位号 - float speed_dim[129]; // 目标的十字星数据,目标点速度维129个点 - float range_dim[8]; // 目标的十字星数据,目标点距离维8个点 + int pitch_num; // 俯仰波位号 + int GNSS_time; //GNSS时间 + float speed_dim[129]; // 目标的十字星数据,目标点速度维129个点 + float range_dim[8]; // 目标的十字星数据,目标点距离维8个点 }; diff --git a/data_process_class_dll/parameters.h b/data_process_class_dll/parameters.h index 788f94a..861ed53 100644 --- a/data_process_class_dll/parameters.h +++ b/data_process_class_dll/parameters.h @@ -27,50 +27,11 @@ #define FREQ19 16.8 #define FREQ20 16.8 +//#define MECHANICAL_SCANNING +#define PHASE_SCANNING -//波位 -//#define BEAM_NUM 54 - -//#define BEAM_WIDTH 6.666 - -////一个点迹区包含波位 -//#define DOT_SECTION_NUM 9 -//#define BEAM_NUM_DOT_SECTION 6 - - -//#define DOT_SECTION_1 5 -//#define DOT_SECTION_2 11 -//#define DOT_SECTION_3 17 -//#define DOT_SECTION_4 23 -//#define DOT_SECTION_5 29 -//#define DOT_SECTION_6 35 -//#define DOT_SECTION_7 41 -//#define DOT_SECTION_8 47 -//#define DOT_SECTION_9 53 - - -//航迹区划分 -//#define TRACK_SECTION_NUM 9 -//#define TRACK_SECTION_WIDTH 40 - -//#define TRACK_SECTION_1_START 13.2 -//#define TRACK_SECTION_2_START 53.2 -//#define TRACK_SECTION_3_START 93.2 -//#define TRACK_SECTION_4_START 133.2 -//#define TRACK_SECTION_5_START 173.2 -//#define TRACK_SECTION_6_START 213.2 -//#define TRACK_SECTION_7_START 253.2 -//#define TRACK_SECTION_8_START 293.2 -//#define TRACK_SECTION_9_START 333.2 - - +#ifdef MECHANICAL_SCANNING /******************************数据处理参数**************************************/ - -//#define DATA_RATE_SHORT 1 //三种不同模式下的 数据率 -//#define DATA_RATE_MIDDLE 1 -//#define DATA_RATE_FAR 1 - -//#define DATA_RATE_TAS 0.046875 #define DATA_RATE_TAS 0.0625 #define SIGMA_R 10.0 //测量误差 @@ -84,7 +45,52 @@ #define MAX_BEAM_NUM 100 //最大TWS波位数 +#define MAX_TRACK_NUM 500 +#define MAX_TRACK_INDEX 500 //最大航迹批号 +#define ASSOCIATE_THRESHOLD_MIN 1 +#define ASSOCIATE_THRESHOLD_MID 3 //关联波门 +#define ASSOCIATE_THRESHOLD_MAX 10 + +#define R_MIN 100 +#define R_MAX 100000 + +#define TRACK_START_THRESHOLD 8 //起航波门 3 越大越容易起批 +#define ALPHA_START 60 //起航夹角 120 越大越容易起批 + +#define TRACK_DIE_ROUND 4 // 航迹消亡时间 +#define TRACK_DIE_ROUND_TAS 96 // + +#define ASSO_THORD 3 + +#define H_F_WIN_LEN 3 + +#define TAS_QUEUE_LENGTH 1 //Tas调用的cpi数 +#define MAX_TAS_NUM 1 + +#define T_TAS_PRED DATA_RATE_TAS + +#define UNCONF_TARGET 0 + +#define DIRECT_TRACKING_QUEUE_LENGTH 10 + +#endif + +#ifdef PHASE_SCANNING + +/******************************数据处理参数**************************************/ +#define DATA_RATE_TAS 0.3 + +#define SIGMA_R 10.0 //测量误差 +#define SIGMA_A 0.02 +#define SIGMA_E 0.2 +#define SIGMA_V 2.0 + +#define DOT_COH_RANGE 80 //点迹凝聚 +#define DOT_COH_V 2 +#define DOT_COH_AZI 6 + +#define MAX_BEAM_NUM 100 //最大TWS波位数 #define MAX_TRACK_NUM 500 #define MAX_TRACK_INDEX 500 //最大航迹批号 @@ -102,28 +108,24 @@ #define ALPHA_START 60 //起航夹角 120 越大越容易起批 #define TRACK_DIE_ROUND 4 // 航迹消亡时间 -#define TRACK_DIE_ROUND_TAS 96 // +#define TRACK_DIE_ROUND_TAS 5 #define ASSO_THORD 3 - #define H_F_WIN_LEN 3 - -#define TAS_QUEUE_LENGTH 1 //Tas调用的cpi数 -#define MAX_TAS_NUM 1 -//#define T_TAS_PRED 0.046875 -#define T_TAS_PRED DATA_RATE_TAS +#define TAS_QUEUE_LENGTH 4 //Tas调用的cpi数 +#define MAX_TAS_NUM 4 +#define T_TAS_PRED 0.7 #define UNCONF_TARGET 0 #define DIRECT_TRACKING_QUEUE_LENGTH 10 +#endif #define Round(x) (((x) > 0) \ ? (((int)((x) + 0.5) > (int)(x)) ? ((int)(x) + 1) : ((int)(x))) \ : (((int)((x) - 0.5) < (int)(x)) ? ((int)(x) - 1) : ((int)(x)))) - - #endif // PARAMETERS_H diff --git a/data_process_class_dll/struct.h b/data_process_class_dll/struct.h index 8f3491d..0161209 100644 --- a/data_process_class_dll/struct.h +++ b/data_process_class_dll/struct.h @@ -17,6 +17,7 @@ struct PointRecv double snr; //信噪比 double RCS; //目标RCS int CPI_Time; //CPI时间 + int GNSS_time; //GNSS时间 int Point_index; //点迹号 1~50 int Point_Sum; //点迹总数 int Use_Flag; //点迹使用标志 1使用 0未使用 @@ -41,6 +42,7 @@ struct Trust_Track double Height; //高度 int T_track; //航迹时间 + int GNSS_time; //GNSS时间 int Track_Sum; //航迹总数 int Point_Index; //该航迹上的第几个点 @@ -107,6 +109,7 @@ struct Temp_track double RCS; //RCS double Amp; //幅度 int T; //时间戳 + int GNSS_time; //GNSS时间戳 double d; //关联上的点的d diff --git a/data_process_class_dll/tas_ctrl.cpp b/data_process_class_dll/tas_ctrl.cpp index e86b79a..3adb586 100644 --- a/data_process_class_dll/tas_ctrl.cpp +++ b/data_process_class_dll/tas_ctrl.cpp @@ -30,17 +30,14 @@ void TAS_Ctrl::tas_ctrl_process(QVector *trust_track, tas_target_del(trust_track, Trust_Track_Output, Trust_track_num_Output,Work_Parameter); tas_beam_output(trust_track,Tracking_beam,latest_timestamp); -// //跟踪队列移位 -// struct Tracking_Target tas_target_tmp; -// memcpy(&tas_target_tmp, &tas_target_queue[TAS_QUEUE_LENGTH-1], sizeof(Tracking_Target)); -// for (int i=TAS_QUEUE_LENGTH-1;i>0;i--) -// { -// memcpy(&tas_target_queue[i],&tas_target_queue[i-1],sizeof(Tracking_Target)); -// } -// memcpy(&tas_target_queue[0], &tas_target_tmp, sizeof(Tracking_Target)); - - - + //跟踪队列移位 + struct Tracking_Target tas_target_tmp; + memcpy(&tas_target_tmp, &tas_target_queue[TAS_QUEUE_LENGTH-1], sizeof(Tracking_Target)); + for (int i=TAS_QUEUE_LENGTH-1;i>0;i--) + { + memcpy(&tas_target_queue[i],&tas_target_queue[i-1],sizeof(Tracking_Target)); + } + memcpy(&tas_target_queue[0], &tas_target_tmp, sizeof(Tracking_Target)); }; diff --git a/data_process_class_dll/track_asso.cpp b/data_process_class_dll/track_asso.cpp index 59a4245..6f93948 100644 --- a/data_process_class_dll/track_asso.cpp +++ b/data_process_class_dll/track_asso.cpp @@ -96,6 +96,7 @@ int Track_Asso:: track_asso_process(QVector *point_recv Trust_Track_Output[*Trust_track_num_Output-1][0].Track_Mode=(*trust_track)[i].Track_Mode; Trust_Track_Output[*Trust_track_num_Output-1][0].track_time=(*trust_track)[i].T_track/1000.0; + 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=(*trust_track)[i].Height+Work_Parameter.Height; @@ -524,14 +525,16 @@ void Track_Asso:: model_filter(QVector *trust_track,struct RadarP // d_h = 1; //计算俯仰门限 - bool d_p = false; + bool d_p = true; - double p_track = atan2(h_track, r_track); //航迹俯仰 - double p_point = asin(h_point/point_process[loop_of_point].Range); //点迹俯仰 +// double p_track = atan2(h_track, r_track); //航迹俯仰 +// double p_point = asin(h_point/point_process[loop_of_point].Range); //点迹俯仰 - if(abs(p_track - p_point)*180/PI <= 5){ - d_p = true; - } +// if( (r_track > 3000 && abs(p_track - p_point)*180/PI <= 7) || \ +// (r_track > 1000 && r_track <= 3000 && abs(p_track - p_point)*180/PI <= 5) || \ +// (r_track <= 1000 && abs(p_track - p_point)*180/PI <= 10)){ +// d_p = true; +// } //计算距离门限,R=航迹点与量测点的距离,VT=航向速度乘以扫描时间差 double& t_x0 = (*trust_track)[loop_of_track].X[0]; @@ -683,7 +686,7 @@ void Track_Asso:: model_filter(QVector *trust_track,struct RadarP //更新航迹时间 (*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; //更新关联上的点迹信息 @@ -793,6 +796,7 @@ void Track_Asso:: model_filter(QVector *trust_track,struct RadarP (*trust_track)[i].T_track = (*trust_track)[i].T_track+delta_T*1000.0; //更新航迹时间 + (*trust_track)[i].GNSS_time = (*trust_track)[i].GNSS_time+delta_T*1000.0; //更新航迹时间 (*trust_track)[i].Extrapolate_round =(*trust_track)[i].Extrapolate_round+1; //连续未用实点更新时间 (*trust_track)[i].point_flag=0; //虚点 } diff --git a/data_process_class_dll/track_asso_tas.cpp b/data_process_class_dll/track_asso_tas.cpp index 88f2b81..49eaf98 100644 --- a/data_process_class_dll/track_asso_tas.cpp +++ b/data_process_class_dll/track_asso_tas.cpp @@ -59,6 +59,7 @@ int tas_track_idx Trust_Track_Output[*Trust_track_num_Output-1][0].Amplitude = (*trust_track)[i].Amplitude; Trust_Track_Output[*Trust_track_num_Output-1][0].Track_Mode=(*trust_track)[i].Track_Mode; Trust_Track_Output[*Trust_track_num_Output-1][0].track_time=(*trust_track)[i].T_track/1000.0; + 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=(*trust_track)[i].Height+Work_Parameter.Height; @@ -466,6 +467,7 @@ void Track_Asso_Tas::model_filter( QVector *trust //更新航迹时间 (*trust_track)[i].T_track = point_process[point_index-1].CPI_Time; + (*trust_track)[i].GNSS_time = point_process[point_index-1].GNSS_time; @@ -517,6 +519,7 @@ void Track_Asso_Tas::model_filter( QVector *trust memcpy((*trust_track)[i].P3,P3_pred,6*6*sizeof(double)); (*trust_track)[i].T_track = (*trust_track)[i].T_track+delta_T*1000.0; //更新航迹时间 + (*trust_track)[i].GNSS_time = (*trust_track)[i].GNSS_time+delta_T*1000.0; //更新航迹时间 (*trust_track)[i].point_flag=0; //虚点 (*trust_track)[i].Extrapolate_round =(*trust_track)[i].Extrapolate_round+1; } diff --git a/data_process_class_dll/track_init.cpp b/data_process_class_dll/track_init.cpp index 5eed4d5..6e5c43a 100644 --- a/data_process_class_dll/track_init.cpp +++ b/data_process_class_dll/track_init.cpp @@ -99,6 +99,7 @@ int Track_Init::track_init_process_logic( QVector *p temp_track_tmp.X[2]=point_process[i].Range*sin(point_process[i].Azimuth); temp_track_tmp.X[3]=0; temp_track_tmp.T = point_process[i].CPI_Time; + temp_track_tmp.GNSS_time = point_process[i].GNSS_time; temp_track_tmp.buff_round = 1; // temp_track_tmp.Temp_track_section_idx = floor(point_process[i].beam_index/BEAM_NUM_DOT_SECTION)+1; temp_track->push_back( QVector ()); @@ -273,6 +274,7 @@ void Track_Init::point_temp_track_asso(QVector > *temp_t asso_track_info_tmp.height = point_process[asso_info[i].point_idx-1].Height; asso_track_info_tmp.Amp = point_process[asso_info[i].point_idx-1].Amplitude; asso_track_info_tmp.T = point_process[asso_info[i].point_idx-1].CPI_Time; + asso_track_info_tmp.GNSS_time = point_process[asso_info[i].point_idx-1].GNSS_time; asso_track_info_tmp.vr = point_process[asso_info[i].point_idx-1].Velocity; asso_track_info_tmp.snr = point_process[asso_info[i].point_idx-1].snr; asso_track_info_tmp.RCS = point_process[asso_info[i].point_idx-1].RCS; @@ -464,6 +466,7 @@ void Track_Init::point_track_head_asso( QVector > *temp_ asso_track_info_tmp.snr = point_process[asso_info[i].point_idx-1].snr; asso_track_info_tmp.RCS = point_process[asso_info[i].point_idx-1].RCS; asso_track_info_tmp.T = point_process[asso_info[i].point_idx-1].CPI_Time; + asso_track_info_tmp.GNSS_time = point_process[asso_info[i].point_idx-1].GNSS_time; asso_track_info_tmp.pitch_num = point_process[asso_info[i].point_idx-1].pitch_num; std::memcpy(asso_track_info_tmp.speed_dim, point_process[asso_info[i].point_idx-1].speed_dim, sizeof(asso_track_info_tmp.speed_dim)); std::memcpy(asso_track_info_tmp.range_dim, point_process[asso_info[i].point_idx-1].range_dim, sizeof(asso_track_info_tmp.range_dim)); @@ -643,6 +646,7 @@ void Track_Init::tmp_track_to_trust_track(QVector *trust_track, std::memcpy(trust_track_tmp.speed_dim, Track_to_start[i][L-1].speed_dim, sizeof(trust_track_tmp.speed_dim)); 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].T; + trust_track_tmp.GNSS_time = Track_to_start[i][L-1].GNSS_time; trust_track_tmp.point_flag=1; //实点 trust_track_tmp.Track_Mode=0; //跟踪模式 TWS 0 trust_track_tmp.Target_Type=UNCONF_TARGET; @@ -701,6 +705,7 @@ void Track_Init::tmp_track_to_trust_track(QVector *trust_track, Trust_Track_Output[*Trust_track_num_Output-1][j].track_time=(Track_to_start[i][j].T)/1000.0; + Trust_Track_Output[*Trust_track_num_Output-1][j].GNSS_time=Track_to_start[i][j].GNSS_time; Trust_Track_Output[*Trust_track_num_Output-1][j].x=Track_to_start[i][j].X[0]; Trust_Track_Output[*Trust_track_num_Output-1][j].v_x=Track_to_start[i][j].X[1];