更新:1、增加航迹指纹计算,TAS控制命令下发航迹指纹,不再下发批号,实现TAS正常回放;
Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
@@ -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()
|
||||
{
|
||||
|
||||
|
||||
Reference in New Issue
Block a user