Signed-off-by: Yang Jianchao <yangjianchao999@126.com>
This commit is contained in:
@@ -0,0 +1,496 @@
|
||||
#include "data_process.h"
|
||||
#include "memory.h"
|
||||
#include <qmath.h>
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
/*******************************************************************************/
|
||||
/*******************************************************************************/
|
||||
/************************************用户接口函数*******************************/
|
||||
/*******************************************************************************/
|
||||
/*******************************************************************************/
|
||||
|
||||
|
||||
//数据预处理
|
||||
int Data_Process::data_preprocess(struct DataRev Data_Input[150])
|
||||
{
|
||||
beam_count=beam_count+1; //3波束计数
|
||||
|
||||
//取波束1数据 存入缓存 暂不处理
|
||||
if(beam_count%3==1)
|
||||
{
|
||||
beam_index[0]=Data_Input[0].Beam_index;
|
||||
data_num_1=Data_Input[0].Point_Sum;
|
||||
TAS_track_idx = Data_Input[0].TAS_track_index;
|
||||
for (int i=0; i<data_num_1;i++)
|
||||
{
|
||||
PointRecv Data_buffer_temp;
|
||||
Data_buffer_temp.Amplitude=Data_Input[i].Amplitude;
|
||||
Data_buffer_temp.Azimuth=Data_Input[i].Azimuth/180*PI;
|
||||
Data_buffer_temp.beam_index = Data_Input[i].Beam_index;
|
||||
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.Freq_index = Data_Input[i].Freq_index;
|
||||
Data_buffer_temp.PRF_index = Data_Input[i].PRI;
|
||||
Data_buffer_temp.Range = Data_Input[i].Range;
|
||||
Data_buffer_temp.Height= Data_Input[i].Range*sin(Data_Input[i].Elevation/180*PI);
|
||||
Data_buffer_temp.Use_Flag = 0;
|
||||
Data_buffer_temp.Velocity = Data_Input[i].Velocity;
|
||||
|
||||
Data_buffer.push_back(Data_buffer_temp);
|
||||
}
|
||||
|
||||
|
||||
memset(&Data_Input[0],0,150*sizeof(DataRev));
|
||||
return 0;
|
||||
}
|
||||
|
||||
//取波束2数据 存入缓存 暂不处理
|
||||
if(beam_count%3==2)
|
||||
{
|
||||
beam_index[1]=Data_Input[0].Beam_index;
|
||||
data_num_2=Data_Input[0].Point_Sum;
|
||||
TAS_track_idx = Data_Input[0].TAS_track_index;
|
||||
for (int i=0;i<data_num_2;i++)
|
||||
{
|
||||
PointRecv Data_buffer_temp;
|
||||
Data_buffer_temp.Amplitude=Data_Input[i].Amplitude;
|
||||
Data_buffer_temp.Azimuth=Data_Input[i].Azimuth/180*PI;
|
||||
Data_buffer_temp.beam_index = Data_Input[i].Beam_index;
|
||||
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.Freq_index = Data_Input[i].Freq_index;
|
||||
Data_buffer_temp.PRF_index = Data_Input[i].PRI;
|
||||
Data_buffer_temp.Range = Data_Input[i].Range;
|
||||
Data_buffer_temp.Height= Data_Input[i].Range*sin(Data_Input[i].Elevation/180*PI);
|
||||
Data_buffer_temp.Use_Flag = 0;
|
||||
Data_buffer_temp.Velocity = Data_Input[i].Velocity;
|
||||
|
||||
Data_buffer.push_back(Data_buffer_temp);
|
||||
}
|
||||
|
||||
|
||||
memset(&Data_Input[0],0,150*sizeof(DataRev));
|
||||
return 0;
|
||||
}
|
||||
|
||||
//取波束3数据 存入缓存 开始处理
|
||||
if(beam_count%3==0)
|
||||
{
|
||||
beam_index[2]=Data_Input[0].Beam_index;
|
||||
data_num_3=Data_Input[0].Point_Sum;
|
||||
TAS_track_idx = Data_Input[0].TAS_track_index;
|
||||
for (int i=0;i<data_num_3;i++)
|
||||
{
|
||||
PointRecv Data_buffer_temp;
|
||||
Data_buffer_temp.Amplitude=Data_Input[i].Amplitude;
|
||||
Data_buffer_temp.Azimuth=Data_Input[i].Azimuth/180*PI;
|
||||
Data_buffer_temp.beam_index = Data_Input[i].Beam_index;
|
||||
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.Freq_index = Data_Input[i].Freq_index;
|
||||
Data_buffer_temp.PRF_index = Data_Input[i].PRI;
|
||||
Data_buffer_temp.Range = Data_Input[i].Range;
|
||||
Data_buffer_temp.Height= Data_Input[i].Range*sin(Data_Input[i].Elevation/180*PI);
|
||||
Data_buffer_temp.Use_Flag = 0;
|
||||
Data_buffer_temp.Velocity = Data_Input[i].Velocity;
|
||||
|
||||
Data_buffer.push_back(Data_buffer_temp);
|
||||
}
|
||||
|
||||
memset(&Data_Input[0],0,150*sizeof(DataRev));
|
||||
|
||||
if(beam_index[0]==600 || beam_index[1]==600 || beam_index[2]==600 )
|
||||
{
|
||||
return 2; //TAS
|
||||
}
|
||||
else
|
||||
{
|
||||
return 1; //TWS
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//数据处理
|
||||
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==1)
|
||||
{
|
||||
*Trust_track_num_Output=0; //航迹更新数
|
||||
*Track_die_num_Output=0; //航迹消亡数目
|
||||
|
||||
dot_coh.dot_coh_process(&Data_buffer,beam_index,&point_recv,Work_Parameter); //点迹凝聚
|
||||
|
||||
QVector<PointRecv>().swap(Data_buffer);//凝聚完毕 清除Data_buffer
|
||||
|
||||
if (beam_index[0] == DOT_SECTION_1+2 )
|
||||
{
|
||||
//波束1
|
||||
// 点迹区1、9 关联航迹区9 , 消亡航迹区9, 起始点迹区8
|
||||
track_asso.track_asso_process(&point_recv[1-1],
|
||||
&point_recv[9-1],
|
||||
&trust_track[9-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter
|
||||
);
|
||||
|
||||
track_die.track_die_process( &trust_track[9-1],
|
||||
Track_die_Index_Output,
|
||||
Track_die_num_Output);
|
||||
|
||||
track_init.track_init_process_logic( &point_recv[8-1],
|
||||
&trust_track,
|
||||
&temp_track[8-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter);
|
||||
|
||||
//波束2
|
||||
// 点迹区3、4 关联航迹区3 , 消亡航迹区3, 起始点迹区2
|
||||
track_asso.track_asso_process(&point_recv[3-1],
|
||||
&point_recv[4-1],
|
||||
&trust_track[3-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter
|
||||
);//航迹关联
|
||||
|
||||
track_die.track_die_process( &trust_track[3-1],
|
||||
Track_die_Index_Output,
|
||||
Track_die_num_Output);
|
||||
|
||||
|
||||
|
||||
track_init.track_init_process_logic( &point_recv[2-1],
|
||||
&trust_track,
|
||||
&temp_track[2-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter);
|
||||
|
||||
//波束3
|
||||
// 点迹区6、7 关联航迹区6 , 消亡航迹区6, 起始点迹区5
|
||||
track_asso.track_asso_process(&point_recv[6-1],
|
||||
&point_recv[7-1],
|
||||
&trust_track[6-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter
|
||||
);//航迹关联
|
||||
|
||||
track_die.track_die_process( &trust_track[6-1],
|
||||
Track_die_Index_Output,
|
||||
Track_die_num_Output);
|
||||
|
||||
track_init.track_init_process_logic( &point_recv[5-1],
|
||||
&trust_track,
|
||||
&temp_track[5-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter);
|
||||
|
||||
|
||||
Track_section_sort();
|
||||
}
|
||||
if (beam_index[0] == DOT_SECTION_2+2 )
|
||||
{
|
||||
//波束1
|
||||
// 点迹区1、2 关联航迹区1 , 消亡航迹区1, 起始点迹区9
|
||||
track_asso.track_asso_process(&point_recv[1-1],
|
||||
&point_recv[2-1],
|
||||
&trust_track[1-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter
|
||||
);
|
||||
|
||||
track_die.track_die_process( &trust_track[1-1],
|
||||
Track_die_Index_Output,
|
||||
Track_die_num_Output);
|
||||
|
||||
track_init.track_init_process_logic( &point_recv[9-1],
|
||||
&trust_track,
|
||||
&temp_track[9-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter);
|
||||
|
||||
//波束2
|
||||
// 点迹区4、5 关联航迹区4 , 消亡航迹区4, 起始点迹区3
|
||||
|
||||
|
||||
track_asso.track_asso_process(&point_recv[4-1],
|
||||
&point_recv[5-1],
|
||||
&trust_track[4-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter
|
||||
);
|
||||
|
||||
track_die.track_die_process( &trust_track[4-1],
|
||||
Track_die_Index_Output,
|
||||
Track_die_num_Output);
|
||||
|
||||
|
||||
track_init.track_init_process_logic( &point_recv[3-1],
|
||||
&trust_track,
|
||||
&temp_track[3-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter);
|
||||
//波束3
|
||||
// 点迹区7、8 关联航迹区7 , 消亡航迹区7, 起始点迹区6
|
||||
track_asso.track_asso_process(&point_recv[7-1],
|
||||
&point_recv[8-1],
|
||||
&trust_track[7-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter
|
||||
);
|
||||
|
||||
track_die.track_die_process( &trust_track[7-1],
|
||||
Track_die_Index_Output,
|
||||
Track_die_num_Output);
|
||||
|
||||
track_init.track_init_process_logic( &point_recv[6-1],
|
||||
&trust_track,
|
||||
&temp_track[6-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter);
|
||||
Track_section_sort();
|
||||
}
|
||||
if (beam_index[0] == 1 )
|
||||
{
|
||||
//波束1
|
||||
// 点迹区2、3 关联航迹区2 , 消亡航迹区2, 起始点迹区1
|
||||
track_asso.track_asso_process(&point_recv[2-1],
|
||||
&point_recv[3-1],
|
||||
&trust_track[2-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter
|
||||
);
|
||||
|
||||
track_die.track_die_process( &trust_track[2-1],
|
||||
Track_die_Index_Output,
|
||||
Track_die_num_Output);
|
||||
|
||||
|
||||
track_init.track_init_process_logic( &point_recv[1-1],
|
||||
&trust_track,
|
||||
&temp_track[1-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter);
|
||||
|
||||
|
||||
|
||||
//波束2
|
||||
// 点迹区5、6 关联航迹区5, 消亡航迹区5, 起始点迹区4
|
||||
track_asso.track_asso_process(&point_recv[5-1],
|
||||
&point_recv[6-1],
|
||||
&trust_track[5-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter
|
||||
);
|
||||
|
||||
track_die.track_die_process( &trust_track[5-1],
|
||||
Track_die_Index_Output,
|
||||
Track_die_num_Output);
|
||||
|
||||
track_init.track_init_process_logic( &point_recv[4-1],
|
||||
&trust_track,
|
||||
&temp_track[4-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter);
|
||||
|
||||
//波束3
|
||||
// 点迹区8、9 关联航迹区8 , 消亡航迹区8, 起始点迹区7
|
||||
track_asso.track_asso_process(&point_recv[8-1],
|
||||
&point_recv[9-1],
|
||||
&trust_track[8-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter
|
||||
);
|
||||
|
||||
track_die.track_die_process( &trust_track[8-1],
|
||||
Track_die_Index_Output,
|
||||
Track_die_num_Output);
|
||||
|
||||
track_init.track_init_process_logic( &point_recv[7-1],
|
||||
&trust_track,
|
||||
&temp_track[7-1],
|
||||
Trust_Track_Output,
|
||||
Trust_track_num_Output,
|
||||
Work_Parameter);
|
||||
Track_section_sort();
|
||||
}
|
||||
}
|
||||
|
||||
//TAS处理
|
||||
else if (model==2)
|
||||
{
|
||||
*Trust_track_num_Output=0; //航迹更新数
|
||||
*Track_die_num_Output=0; //航迹消亡数目
|
||||
dot_coh_tas.dot_coh_tas_process(&Data_buffer,&point_recv_tas); //凝聚
|
||||
QVector<PointRecv>().swap(Data_buffer);//凝聚完毕 清除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);
|
||||
|
||||
QVector<PointRecv>().swap(point_recv_tas);//关联完毕 清空point_recv_tas
|
||||
|
||||
Track_section_sort();
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//波束控制
|
||||
void Data_Process::Beam_Ctrl(struct TrackingBeam *Tracking_beam,
|
||||
struct Track Trust_Track_Output[][10],
|
||||
int *Trust_track_num_Output)
|
||||
{
|
||||
if(beam_count%3==0)
|
||||
{
|
||||
tas_ctrl.tas_ctrl_process(&trust_track,Tracking_beam, Trust_Track_Output, Trust_track_num_Output,Work_Parameter);
|
||||
}
|
||||
else
|
||||
{
|
||||
Tracking_beam->open_flag=0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//数据处理参数初始化
|
||||
int Data_Process::track_process_parameters_initial(struct RadarPara Radar_Parameter)
|
||||
{
|
||||
//变量初始化
|
||||
Beam_num=Radar_Parameter.Beam_num; //雷达波位数
|
||||
beam_count=0; //波位计数
|
||||
memset(beam_index,0,3*sizeof(int)); //三个波位号
|
||||
|
||||
|
||||
//工作参数设置
|
||||
memcpy(&Work_Parameter, &Radar_Parameter, sizeof(RadarPara));
|
||||
|
||||
|
||||
//初始化容器
|
||||
for (int i=0;i<DOT_SECTION_NUM;i++)
|
||||
point_recv.push_back(QVector <PointRecv> ());
|
||||
|
||||
for (int i=0;i<TRACK_SECTION_NUM;i++)
|
||||
trust_track.push_back(QVector <Trust_Track> ());
|
||||
|
||||
for (int i=0;i<DOT_SECTION_NUM;i++)
|
||||
temp_track.push_back(QVector<QVector<Temp_track>> () );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//数据处理参数修改
|
||||
int Data_Process::track_process_parameters_modify(struct RadarPara Radar_Parameter)
|
||||
{
|
||||
memcpy(&Work_Parameter, &Radar_Parameter, sizeof(RadarPara));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//手动航迹删除函数
|
||||
int Data_Process:: track_delete(int delete_track_num, //手动删除的航迹数目
|
||||
int delete_track_index[]) //手动删除的航迹号
|
||||
{
|
||||
for (int i=0;i<delete_track_num ;i++)
|
||||
{
|
||||
for (int j=0;j<trust_track.size();j++)
|
||||
for(int k=0;k<trust_track[j].size();k++)
|
||||
{
|
||||
if(trust_track[j][k].Track_Index == delete_track_index[i])
|
||||
{
|
||||
|
||||
trust_track[j][k].manual_delete_flag=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//手动转TAS跟踪函数
|
||||
int Data_Process:: tracking_start(int track_index) //需要手动转入TAS跟踪的航迹号
|
||||
{
|
||||
|
||||
for ( int i=0; i<trust_track.size();i++)
|
||||
for (int j=0;j<trust_track[i].size();j++)
|
||||
{
|
||||
if(trust_track[i][j].Track_Index==track_index)
|
||||
{
|
||||
trust_track[i][j].manual_tracking_flag = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//手动打跟踪波束
|
||||
int Data_Process::tracking_point(float Azimuth)//方位角
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Data_Process::Track_section_sort()
|
||||
{
|
||||
for(int i=0;i<trust_track.size();i++)
|
||||
for(int j=0;j<trust_track[i].size(); )
|
||||
{
|
||||
if (trust_track[i][j].Track_section_idx!=i+1)
|
||||
{
|
||||
trust_track[trust_track[i][j].Track_section_idx-1].push_back(trust_track[i][j]);
|
||||
trust_track[i].erase(trust_track[i].begin()+j);
|
||||
}
|
||||
else
|
||||
{
|
||||
j++;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user