#include "data_process.h" #include "rdp_log.h" #include "rdp_record.h" #include "rdp_record_entity.h" #include #include #include #include using namespace std; /*******************************************************************************/ /*******************************************************************************/ /************************************用户接口函数*******************************/ /*******************************************************************************/ /*******************************************************************************/ //数据预处理 int Data_Process::data_preprocess(struct DataRev Data_Input[150]) { // 更新当前系统时间 latest_timestamp = Data_Input[0].CPI_time; frame_id++; //数据存入缓存区域 Data_buffer if(Data_Input[0].point_type == 0) //tws数据 { data_num=min(Data_Input[0].Point_Sum, 150); //std::cout << "TARGET azi beam idx:" < MAX_TRACK_NUM) //防御:输出行数理论上不应超过航迹容量(见 README 11.2 BUG-08) { track_num = MAX_TRACK_NUM; } std::vector recs; recs.reserve(static_cast(track_num)); for (int i = 0; i < track_num; ++i) { const struct Track &t = Trust_Track_Output[i][0]; //每行第 0 列为该航迹的主记录 recs.push_back(RdpRecTrackOut{0, t.Track_Index, t.Track_Mode, t.Point_Sum, t.Flag_Point, t.Flag_Direction, t.GNSS_time, t.track_time, t.x, t.y, t.z, t.v_x, t.v_y, t.v_z, t.Range, t.Azimuth, t.Elevation, t.Range_V, t.track_snr, t.track_rcs}); } RDP_RECORD_BATCH(recs); } #endif //数据处理 int Data_Process::track_process(struct Track Trust_Track_Output[MAX_TRACK_NUM][10], int *Trust_track_num_Output, int Track_die_Index_Output[], int *Track_die_num_Output, int model) { //TWS处理 if(model==2) { dot_coh.dot_coh_process_buff(&Data_buffer,&point_recv,Work_Parameter); std::vector().swap(Data_buffer); } if(model==1) { *Trust_track_num_Output=0; //航迹更新数 *Track_die_num_Output=0; //航迹消亡数目 track_asso.track_asso_process(&point_recv, &trust_track, Trust_Track_Output, Trust_track_num_Output, Work_Parameter ); track_die.track_die_process( &trust_track, Track_die_Index_Output, Track_die_num_Output); track_init.track_init_process_logic( &point_recv, &trust_track, &temp_track, Trust_Track_Output, Trust_track_num_Output, Work_Parameter); } // TAS处理 if(model==3) { *Trust_track_num_Output=0; //航迹更新数 *Track_die_num_Output=0; //航迹消亡数目 dot_coh_tas.dot_coh_tas_process(&Data_buffer_tas,&point_recv_tas); //点迹凝聚 std::vector().swap(Data_buffer_tas);//凝聚完毕 清除Data_buffer track_asso_tas.track_asso_process_tas(&point_recv_tas, //点迹文件 &trust_track, //航迹文件 Trust_Track_Output, //更新航迹信息 Trust_track_num_Output, //更新航迹数 Work_Parameter, //工作参数 TAS_track_idx, latest_timestamp //最新时间戳 ); std::vector().swap(point_recv_tas); //清除 point_recv_tas track_die_tas.track_die_process_tas( &trust_track, Track_die_Index_Output, Track_die_num_Output); //std::cout << "Extrapolate_round :" << trust_track[TAS_track_idx].Extrapolate_round; } //数据记录示例②:本圈输出的航迹(仅 TWS/TAS 处理帧有输出;记录功能关闭时不产生任何代码) #ifdef RDP_RECORD_ENABLE if (model == 1 || model == 3) { rdp_record_output_tracks(Trust_Track_Output, *Trust_track_num_Output); } #endif return 1; } //波束控制 void Data_Process::Beam_Ctrl(struct TrackingBeam *Tracking_beam, struct Track Trust_Track_Output[][10], int *Trust_track_num_Output) { tas_ctrl.tas_ctrl_process(&trust_track,Tracking_beam, Trust_Track_Output, Trust_track_num_Output,Work_Parameter, latest_timestamp); } //数据处理参数初始化 int Data_Process::track_process_parameters_initial(struct RadarPara Radar_Parameter) { //工作参数设置 if (Radar_Parameter.track_start_point_num < 3 || Radar_Parameter.track_start_point_num > 9) return -1; memcpy(&Work_Parameter, &Radar_Parameter, sizeof(RadarPara)); return 0; } //数据处理参数修改 int Data_Process::track_process_parameters_modify(struct RadarPara Radar_Parameter) { if (Radar_Parameter.track_start_point_num < 3 || Radar_Parameter.track_start_point_num > 9) return -1; memcpy(&Work_Parameter, &Radar_Parameter, sizeof(RadarPara)); return 0; } //航迹清空函数 int Data_Process::track_clear_all(void) { //清空可靠航迹 Data_buffer.clear(); Data_buffer_tas.clear(); point_recv.clear(); point_recv_tas.clear(); trust_track.clear(); temp_track.clear(); // 同步清理内部缓存和状态,避免重连后输出幽灵航迹/幽灵波束 dot_coh.reset(); track_asso.reset(); track_asso_tas.reset(); track_init.reset(); tas_ctrl.reset(); last_beam_num = INT_MAX; return 0; } //手动航迹删除函数 int Data_Process:: track_delete(int delete_track_num, //手动删除的航迹数目 int delete_track_index[]) //手动删除的航迹号 { for (int i=0;i