更新:机扫和相扫程序合并,通过宏定义配置切换

Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
2026-07-31 10:52:53 +08:00
parent 06d45f5917
commit 8636179bdf
8 changed files with 94 additions and 76 deletions
+6 -4
View File
@@ -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: " <<Data_Input[0].CPI_time;
//数据存入缓存区域 Data_buffer
if(Data_Input[0].point_type == 0) //tws数据
@@ -31,6 +31,7 @@ int Data_Process::data_preprocess(struct DataRev Data_Input[150])
Data_buffer_temp.snr = Data_Input[i].Snr;
Data_buffer_temp.RCS = Data_Input[i].RCS;
Data_buffer_temp.CPI_Time = Data_Input[i].CPI_time;
Data_buffer_temp.GNSS_time = Data_Input[i].GNSS_time;
Data_buffer_temp.Freq_index = Data_Input[i].Freq_index;
Data_buffer_temp.PRF_index = Data_Input[i].PRI;
Data_buffer_temp.Range = Data_Input[i].Range;
@@ -45,7 +46,7 @@ int Data_Process::data_preprocess(struct DataRev Data_Input[150])
Data_buffer.push_back(Data_buffer_temp);
qDebug() << "AZI: " <<Data_Input[i].Azimuth << "Encoder_value: " <<Data_Input[i].Encoder_value;
//qDebug() << "AZI: " <<Data_Input[i].Azimuth << "Encoder_value: " <<Data_Input[i].Encoder_value;
}
if(Data_Input[0].Beam_index_aiz < last_beam_num) //TWS
{
@@ -63,7 +64,7 @@ int Data_Process::data_preprocess(struct DataRev Data_Input[150])
else if(Data_Input[0].point_type == 1) //tas数据
{
// qDebug() << "TAS TARGET :" <<Data_Input[0].TAS_track_index;
qDebug() << "TAS POINT :" <<Data_Input[0].Point_Sum;
//qDebug() << "TAS POINT :" <<Data_Input[0].Point_Sum;
data_num=Data_Input[0].Point_Sum;
TAS_track_idx = Data_Input[0].TAS_track_index;
@@ -75,6 +76,7 @@ int Data_Process::data_preprocess(struct DataRev Data_Input[150])
Data_buffer_temp.snr = Data_Input[i].Snr;
Data_buffer_temp.RCS = Data_Input[i].RCS;
Data_buffer_temp.CPI_Time = Data_Input[i].CPI_time;
Data_buffer_temp.GNSS_time = Data_Input[i].GNSS_time;
Data_buffer_temp.Freq_index = Data_Input[i].Freq_index;
Data_buffer_temp.PRF_index = Data_Input[i].PRI;
Data_buffer_temp.Range = Data_Input[i].Range;
@@ -168,7 +170,7 @@ int model)
// {
// qDebug() << "point_recv_tas :" <<point_recv_tas[0].Azimuth/PI*180<<" "<<point_recv_tas[0].Range;
// }
qDebug() << "TAS process :" << TAS_track_idx << "p a r:"<<point_recv_tas[0].Point_Sum<<" " <<point_recv_tas[0].Azimuth/PI*180<<" "<<point_recv_tas[0].Range;
//qDebug() << "TAS process :" << TAS_track_idx << "p a r:"<<point_recv_tas[0].Point_Sum<<" " <<point_recv_tas[0].Azimuth/PI*180<<" "<<point_recv_tas[0].Range;
QVector<PointRecv>().swap(Data_buffer_tas);//凝聚完毕 清除Data_buffer
@@ -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
@@ -75,6 +76,7 @@ struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT Track
float track_rcs; //rcs
int pitch_num; // 俯仰波位号
int GNSS_time; //GNSS时间
float speed_dim[129]; // 目标的十字星数据,目标点速度维129个点
float range_dim[8]; // 目标的十字星数据,目标点距离维8个点
};
+53 -51
View File
@@ -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
+3
View File
@@ -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
+8 -11
View File
@@ -30,17 +30,14 @@ void TAS_Ctrl::tas_ctrl_process(QVector<Trust_Track> *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));
};
+11 -7
View File
@@ -96,6 +96,7 @@ int Track_Asso:: track_asso_process(QVector<PointRecv> *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> *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> *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> *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; //虚点
}
@@ -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_Track> *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_Track> *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;
}
+5
View File
@@ -99,6 +99,7 @@ int Track_Init::track_init_process_logic( QVector <PointRecv> *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 <Temp_track> ());
@@ -273,6 +274,7 @@ void Track_Init::point_temp_track_asso(QVector <QVector<Temp_track>> *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 <QVector<Temp_track>> *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> *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,
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];