更新:1、增加航迹指纹计算,TAS控制命令下发航迹指纹,不再下发批号,实现TAS正常回放;

Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
2026-10-29 14:24:00 +08:00
parent 24ce1e6dbf
commit 0f3da9994c
6 changed files with 72 additions and 25 deletions
+48 -17
View File
@@ -484,23 +484,6 @@ void Track_Init::tmp_track_to_trust_track(std::vector<Trust_Track> *trust_tra
double azi=(*Iter)[L-1].azi/PI*180;
double quality = (*Iter)[L-1].quality;
// //计算航迹初始质量
// 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 * rdp_parameter.track_quality_d_weight + snr_tmp * rdp_parameter.track_quality_snr_weight;
// quality_tmp /= (rdp_parameter.track_quality_d_weight + rdp_parameter.track_quality_snr_weight);
// for(int i=0;i<L;i++)
// {
// (*Iter)[i].quality = quality_tmp;
// }
//航迹起批条件判断
bool track_init_flag = true;
@@ -648,6 +631,9 @@ void Track_Init::tmp_track_to_trust_track(std::vector<Trust_Track> *trust_tra
Trust_Track trust_track_tmp = {};
memcpy(trust_track_tmp.X, X, 6*sizeof(double));
memcpy(trust_track_tmp.P, P, 6*6*sizeof(double));
//计算航迹指纹
trust_track_tmp.Track_fingerprint = computeFingerprint(Track_to_start[i][L-1].r, Track_to_start[i][L-1].azi, Track_to_start[i][L-1].vr, Track_to_start[i][L-1].RCS, Track_to_start[i][L-1].CPI_time);
trust_track_tmp.track_id = Track_to_start[i][L-1].temp_track_id;
trust_track_tmp.point_id = Track_to_start[i][L-1].point_id;
@@ -794,6 +780,51 @@ int Track_Init::track_init_prohibit(double r, double azi)
}
uint64_t Track_Init::mix64(uint64_t x) {
x ^= x >> 30; x *= 0xBF58476D1CE4E5B9ULL;
x ^= x >> 27; x *= 0x94D049BB133111EBULL;
x ^= x >> 31;
return x;
}
uint64_t Track_Init::quantize(double v, double scale) {
if (std::isnan(v)) return 0x9E3779B97F4A7C15ULL;
if (std::isinf(v))
return v > 0 ? 0x2C08A6D5E3F1B907ULL : 0xD5E3F1B9072C08A6ULL;
double q = std::round(v * scale); // half away from zero
constexpr double kLim = 9.0e18; // < 2^63,避免转 int64 溢出
if (q > kLim) q = kLim;
if (q < -kLim) q = -kLim;
return static_cast<uint64_t>(static_cast<int64_t>(q));
}
uint64_t Track_Init::bits_of(double v) {
if (std::isnan(v)) return 0x7FF8000000000000ULL;
if (v == 0.0) return 0ULL;
uint64_t b;
std::memcpy(&b, &v, sizeof(b));
return b;
}
uint16_t Track_Init::fold16(uint64_t h) {
h ^= h >> 32;
h ^= h >> 16;
return static_cast<uint16_t>(h);
}
uint16_t Track_Init::computeFingerprint(double r, double azi, double vr, double RCS,
long long CPI_time)
{
uint64_t h = kSeed;
h = mix64(h ^ quantize(r, 100.0)); // 距离:保留 0.01 m
h = mix64(h ^ quantize(azi, 1000.0)); // 方位:保留 0.001°
h = mix64(h ^ quantize(vr, 100.0)); // 径向速度:保留 0.01 m/s
h = mix64(h ^ quantize(RCS, 10.0)); // RCS:保留 0.1 dBsm
h = mix64(h ^ static_cast<uint64_t>(CPI_time));
return fold16(h);
}
Track_Init::Track_Init()
{