#include "dot_coh.h" #include #include"memory.h" #include using namespace std; int Dot_Coh::dot_coh_process(QVector *data_input, QVector *point_recv, struct RadarPara Work_Parameter) { if(data_input->size()>1) { for (unsigned int loop_of_point=0; loop_of_pointsize()-1;loop_of_point++ ) { if( (*data_input)[loop_of_point].Use_Flag!=1) { float point_0_R=(*data_input)[loop_of_point].Range; float point_0_V=(*data_input)[loop_of_point].Velocity; float point_0_F=(*data_input)[loop_of_point].Azimuth; float point_0_A=(*data_input)[loop_of_point].Amplitude; for (unsigned int i=loop_of_point+1;isize();i++) { if((*data_input)[loop_of_point].Use_Flag!=1) { float point_1_R=(*data_input)[i].Range; float point_1_V=(*data_input)[i].Velocity; float point_1_F=(*data_input)[i].Azimuth; float point_1_A=(*data_input)[i].Amplitude; //凝聚条件: 距离、方位接近 if(Work_Parameter.work_mode == 0) { if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && fabs(point_0_F-point_1_F) <=DOT_COH_AZI/180.0*PI && fabs(point_0_V-point_1_V)<=DOT_COH_V)// && point_0_A = point_1_A)// { (*data_input)[i].Use_Flag=1; } } else { float delta_F = fabs(point_0_F-point_1_F)<2*PI-fabs(point_0_F-point_1_F) ? fabs(point_0_F-point_1_F) :2*PI-fabs(point_0_F-point_1_F); if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI )// && point_0_A = point_1_A)// { (*data_input)[i].Use_Flag=1; } } } } } } } //删除凝聚点 和 量程范围外点 QVector ::iterator Iter; for (Iter=data_input->begin(); Iter!=data_input->end();) { if((*Iter).Use_Flag==1 || (*Iter).Range R_MAX ) { data_input->erase(Iter); Iter=data_input->begin(); } else { Iter++; } } for (int i=0;isize();i++) //data_buffer_2 ---> point_recv { (*point_recv).push_back((*data_input)[i]); } return 0; } int Dot_Coh::dot_coh_process_buff( QVector *data_input, //输入的点迹 QVector *point_recv, //输出点迹 struct RadarPara Work_Parameter //工作参数 ) { //1. data_input与data_input_buff进行凝聚 //1.1 data_input、data_input_buff中的数据放在一起 QVector data_tmp; for (int i=0;isize();i++) { data_tmp.push_back((*data_input)[i]); data_tmp[data_tmp.size()-1].point_section_asso = 2; } //1.2 把data_input、data_input_buff清空 QVector().swap(data_input_buff); QVector().swap(*data_input); //1.3 对data_tmp进行凝聚 if(data_tmp.size()>1) { for (unsigned int loop_of_point=0; loop_of_point= point_1_A)// { data_tmp[i].Use_Flag=1; } } else { float delta_F = fabs(point_0_F-point_1_F)<2*PI-fabs(point_0_F-point_1_F) ? fabs(point_0_F-point_1_F) :2*PI-fabs(point_0_F-point_1_F); if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI )// && point_0_A = point_1_A)// { data_tmp[i].Use_Flag=1; } } } } } } } //1.4 删除凝聚点 和 量程范围外点 QVector ::iterator Iter; for (Iter=data_tmp.begin(); Iter!=data_tmp.end();) { if((*Iter).Use_Flag==1 || (*Iter).Range R_MAX ) { data_tmp.erase(Iter); Iter=data_tmp.begin(); } else { Iter++; } } //1.5 将data_tmp中凝聚后的点再分到 data_input_buff和data_input中 for (int i=0;i().swap(data_tmp); //2.data_input_buff数据输出给point_recv for (int i=0;i().swap(data_input_buff); //3.data_input数据输出给data_input_buff for (int i=0;isize();i++) { data_input_buff.push_back((*data_input)[i]); } return 0; } Dot_Coh::Dot_Coh(void) { }