更新:1、增加航迹质量信息输出;
2、航迹起始时计算初始航迹质量; 3、航迹关联时更新航迹质量; Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
@@ -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远离
|
||||
|
||||
@@ -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 //测量误差
|
||||
|
||||
@@ -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时间戳
|
||||
|
||||
|
||||
@@ -100,6 +100,7 @@ int Track_Asso:: track_asso_process(std::vector<PointRecv> *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<float>((*trust_track)[i].Height+Work_Parameter.Height);
|
||||
Trust_Track_Output[*Trust_track_num_Output-1][0].Quality = static_cast<float>((*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> *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> *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> *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<long long>((*trust_track)[i].T_track+delta_T*1000.0); //更新航迹时间
|
||||
(*trust_track)[i].GNSS_time = static_cast<long long>((*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> *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> *trust_track)
|
||||
|
||||
@@ -452,16 +452,48 @@ void Track_Init::tmp_track_to_trust_track(std::vector<Trust_Track> *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<L;i++)
|
||||
{
|
||||
average_snr += (*Iter)[i].SNR;
|
||||
}
|
||||
average_snr /= L;
|
||||
double snr_tmp = 1/(1+exp(-(average_snr - 16) / 1.2));
|
||||
double &d = (*Iter)[L-1].d;
|
||||
double d_tmp = exp(-d);
|
||||
double quality_tmp = d_tmp * TRACK_QUALITY_D_WEIGHT + snr_tmp * TRACK_QUALITY_SNR_WEIGHT;
|
||||
quality_tmp /= (TRACK_QUALITY_D_WEIGHT + TRACK_QUALITY_SNR_WEIGHT);
|
||||
for(int i=0;i<L;i++)
|
||||
{
|
||||
(*Iter)[i].quality = quality_tmp;
|
||||
}
|
||||
|
||||
if( (L <=10 && L>=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 <Temp_track> ());
|
||||
@@ -576,6 +608,9 @@ void Track_Init::tmp_track_to_trust_track(std::vector<Trust_Track> *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_Track> *trust_tra
|
||||
Trust_Track_Output[*Trust_track_num_Output-1][j].Amplitude=static_cast<float>(Track_to_start[i][j].amplitude);
|
||||
Trust_Track_Output[*Trust_track_num_Output-1][j].track_snr = static_cast<float>(Track_to_start[i][j].SNR);
|
||||
Trust_Track_Output[*Trust_track_num_Output-1][j].track_rcs = static_cast<float>(Track_to_start[i][j].RCS);
|
||||
Trust_Track_Output[*Trust_track_num_Output-1][j].Quality = static_cast<float>(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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user