更新:1、使用VS code+cmake重新编译,编译器保持不变;

2、修复若干逻辑bug,具体参考BUG_FIX_REPORT.md

Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
2026-08-18 11:26:19 +08:00
parent 60ad5c136f
commit 01d28e0d28
49 changed files with 1452 additions and 957 deletions
+27 -39
View File
@@ -1,12 +1,11 @@
#include "dot_coh.h"
#include <qmath.h>
#include"memory.h"
#include <QVector>
#include <cmath>
#include <cstring>
#include <vector>
using namespace std;
int Dot_Coh::dot_coh_process(QVector <PointRecv> *data_input,
QVector <PointRecv> *point_recv,
int Dot_Coh::dot_coh_process(std::vector <PointRecv> *data_input,
std::vector <PointRecv> *point_recv,
struct RadarPara Work_Parameter)
{
@@ -23,7 +22,7 @@ int Dot_Coh::dot_coh_process(QVector <PointRecv> *data_input,
float point_0_A=(*data_input)[loop_of_point].Amplitude;
for (unsigned int i=loop_of_point+1;i<data_input->size();i++)
{
if((*data_input)[loop_of_point].Use_Flag!=1)
if((*data_input)[loop_of_point].Use_Flag!=1 && (*data_input)[i].Use_Flag!=1)
{
float point_1_R=(*data_input)[i].Range;
float point_1_V=(*data_input)[i].Velocity;
@@ -33,7 +32,8 @@ int Dot_Coh::dot_coh_process(QVector <PointRecv> *data_input,
//凝聚条件: 距离、方位接近
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)//
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 && fabs(point_0_V-point_1_V)<=DOT_COH_V)//
&& point_0_A <point_1_A )//
{
point_0_R=(*data_input)[i].Range;
@@ -42,7 +42,7 @@ int Dot_Coh::dot_coh_process(QVector <PointRecv> *data_input,
point_0_F=(*data_input)[i].Azimuth;
(*data_input)[loop_of_point].Use_Flag=1;
}
else 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)//
else if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_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;
@@ -66,8 +66,6 @@ int Dot_Coh::dot_coh_process(QVector <PointRecv> *data_input,
(*data_input)[i].Use_Flag=1;
}
}
}
}
@@ -76,7 +74,7 @@ int Dot_Coh::dot_coh_process(QVector <PointRecv> *data_input,
}
//删除凝聚点 和 量程范围外点
QVector <PointRecv>::iterator Iter;
std::vector <PointRecv>::iterator Iter;
for (Iter=data_input->begin(); Iter!=data_input->end();)
{
if((*Iter).Use_Flag==1 || (*Iter).Range <R_MIN || (*Iter).Range > R_MAX )
@@ -98,21 +96,16 @@ int Dot_Coh::dot_coh_process(QVector <PointRecv> *data_input,
return 0;
}
int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input, //输入的点迹
QVector <PointRecv> *point_recv, //输出点迹
int Dot_Coh::dot_coh_process_buff( std::vector <PointRecv> *data_input, //输入的点迹
std::vector <PointRecv> *point_recv, //输出点迹
struct RadarPara Work_Parameter //工作参数
)
{
//1. data_input与data_input_buff进行凝聚
//1.1 data_input、data_input_buff中的数据放在一起
QVector <PointRecv> data_tmp;
std::vector <PointRecv> data_tmp;
for (int i=0;i<data_input_buff.size();i++)
{
data_tmp.push_back(data_input_buff[i]);
@@ -120,7 +113,6 @@ int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input,
}
for (int i=0;i<data_input->size();i++)
{
data_tmp.push_back((*data_input)[i]);
@@ -137,9 +129,8 @@ int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input,
//1.2 把data_input、data_input_buff清空
QVector<PointRecv>().swap(data_input_buff);
QVector<PointRecv>().swap(*data_input);
std::vector<PointRecv>().swap(data_input_buff);
std::vector<PointRecv>().swap(*data_input);
//1.3 对data_tmp进行凝聚
if(data_tmp.size()>1)
@@ -155,7 +146,7 @@ int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input,
float point_0_A=data_tmp[loop_of_point].Amplitude;
for (unsigned int i=loop_of_point+1;i<data_tmp.size();i++)
{
if(data_tmp[loop_of_point].Use_Flag!=1)
if(data_tmp[loop_of_point].Use_Flag!=1 && data_tmp[i].Use_Flag!=1)
{
float point_1_R=data_tmp[i].Range;
float point_1_V=data_tmp[i].Velocity;
@@ -165,7 +156,8 @@ int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input,
//凝聚条件: 距离、方位接近
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)//
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 && fabs(point_0_V-point_1_V)<=DOT_COH_V)//
&& point_0_A <point_1_A )//
{
point_0_R=data_tmp[i].Range;
@@ -174,7 +166,7 @@ int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input,
point_0_F=data_tmp[i].Azimuth;
data_tmp[loop_of_point].Use_Flag=1;
}
else 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)//
else if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI && fabs(point_0_V-point_1_V)<=DOT_COH_V)//
&& point_0_A >= point_1_A)//
{
data_tmp[i].Use_Flag=1;
@@ -206,7 +198,7 @@ int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input,
}
//1.4 删除凝聚点 和 量程范围外点
QVector <PointRecv>::iterator Iter;
std::vector <PointRecv>::iterator Iter;
for (Iter=data_tmp.begin(); Iter!=data_tmp.end();)
{
if((*Iter).Use_Flag==1 || (*Iter).Range <R_MIN || (*Iter).Range > R_MAX )
@@ -233,9 +225,7 @@ int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input,
(*data_input).push_back(data_tmp[i]);
}
}
QVector<PointRecv>().swap(data_tmp);
std::vector<PointRecv>().swap(data_tmp);
//2.data_input_buff数据输出给point_recv
@@ -244,8 +234,7 @@ int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input,
(*point_recv).push_back(data_input_buff[i]);
}
QVector<PointRecv>().swap(data_input_buff);
std::vector<PointRecv>().swap(data_input_buff);
//3.data_input数据输出给data_input_buff
for (int i=0;i<data_input->size();i++)
@@ -253,16 +242,15 @@ int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input,
data_input_buff.push_back((*data_input)[i]);
}
return 0;
}
Dot_Coh::Dot_Coh(void)
{
}
void Dot_Coh::reset()
{
data_input_buff.clear();
}