2025-12-05 02:55:26 +00:00
|
|
|
|
import random
|
|
|
|
|
|
|
2025-12-05 03:06:40 +00:00
|
|
|
|
def generate_comparison_data(num_points=10):
|
|
|
|
|
|
# ================= 1. 初始状态与运动趋势 (真值配置) =================
|
|
|
|
|
|
# 距离 (km): 模拟目标从 12.5km 处靠近 (参考文件中远距离测试)
|
|
|
|
|
|
start_dist = 12.500
|
|
|
|
|
|
dist_speed = -0.020 # 负数表示靠近 (每点移动20米)
|
2025-12-05 02:55:26 +00:00
|
|
|
|
|
2025-12-05 03:06:40 +00:00
|
|
|
|
# 方位 (度): 模拟目标在 145度 方向缓慢右移
|
|
|
|
|
|
start_az = 145.20
|
|
|
|
|
|
az_speed = 0.05 # 缓慢变化
|
|
|
|
|
|
|
|
|
|
|
|
# 俯仰 (度): 模拟低空飞行,角度很小
|
|
|
|
|
|
start_el = 0.45
|
|
|
|
|
|
el_speed = 0.002 # 几乎平飞
|
2025-12-05 02:55:26 +00:00
|
|
|
|
|
2025-12-05 03:06:40 +00:00
|
|
|
|
# ================= 2. 雷达测量误差 (噪声配置) =================
|
|
|
|
|
|
# 参考依据:文件中的RMS指标 (方位<=0.3度, 距离<=15m)
|
|
|
|
|
|
# 这里的 sigma 是标准差,决定了测量值的抖动幅度
|
|
|
|
|
|
sigma_az = 0.12 # 方位抖动 (度)
|
|
|
|
|
|
sigma_el = 0.15 # 俯仰抖动 (度)
|
|
|
|
|
|
sigma_dist = 0.008 # 距离抖动 (km), 0.008km = 8米
|
2025-12-05 02:55:26 +00:00
|
|
|
|
|
2025-12-05 03:06:40 +00:00
|
|
|
|
# ================= 生成逻辑 =================
|
|
|
|
|
|
|
|
|
|
|
|
# 容器
|
|
|
|
|
|
truth_az, truth_el, truth_dist = [], [], []
|
|
|
|
|
|
meas_az, meas_el, meas_dist = [], [], []
|
2025-12-05 02:55:26 +00:00
|
|
|
|
|
2025-12-05 03:06:40 +00:00
|
|
|
|
current_d = start_dist
|
|
|
|
|
|
current_a = start_az
|
|
|
|
|
|
current_e = start_el
|
2025-12-05 02:55:26 +00:00
|
|
|
|
|
2025-12-05 03:06:40 +00:00
|
|
|
|
for _ in range(num_points):
|
|
|
|
|
|
# --- A. 生成真值 (平滑运动 + 极微小物理抖动) ---
|
|
|
|
|
|
t_d = current_d + random.gauss(0, 0.001)
|
|
|
|
|
|
t_a = current_a + random.gauss(0, 0.01)
|
|
|
|
|
|
t_e = current_e + random.gauss(0, 0.005)
|
|
|
|
|
|
|
|
|
|
|
|
# 存入真值列表 (保留格式)
|
|
|
|
|
|
truth_dist.append(f"{t_d:.3f}")
|
|
|
|
|
|
truth_az.append(f"{t_a:.2f}")
|
|
|
|
|
|
truth_el.append(f"{t_e:.2f}")
|
2025-12-05 02:55:26 +00:00
|
|
|
|
|
2025-12-05 03:06:40 +00:00
|
|
|
|
# --- B. 生成测量值 (真值 + 传感器噪声) ---
|
|
|
|
|
|
m_d = t_d + random.gauss(0, sigma_dist)
|
|
|
|
|
|
m_a = t_a + random.gauss(0, sigma_az)
|
|
|
|
|
|
m_e = t_e + random.gauss(0, sigma_el)
|
2025-12-05 02:55:26 +00:00
|
|
|
|
|
2025-12-05 03:06:40 +00:00
|
|
|
|
# 存入测量值列表
|
|
|
|
|
|
meas_dist.append(f"{m_d:.3f}")
|
|
|
|
|
|
meas_az.append(f"{m_a:.2f}")
|
|
|
|
|
|
meas_el.append(f"{m_e:.2f}")
|
2025-12-05 02:55:26 +00:00
|
|
|
|
|
2025-12-05 03:06:40 +00:00
|
|
|
|
# 更新下一步的基准位置
|
|
|
|
|
|
current_d += dist_speed
|
|
|
|
|
|
current_a += az_speed
|
|
|
|
|
|
current_e += el_speed
|
2025-12-05 02:55:26 +00:00
|
|
|
|
|
2025-12-05 03:06:40 +00:00
|
|
|
|
# ================= 3. 格式化输出 (方便复制) =================
|
|
|
|
|
|
print("\n" + "="*40)
|
|
|
|
|
|
print("【第一部分:真值数据 (Truth)】")
|
|
|
|
|
|
print("="*40)
|
|
|
|
|
|
print("方位(°)\t" + "\t".join(truth_az))
|
|
|
|
|
|
print("俯仰(°)\t" + "\t".join(truth_el))
|
|
|
|
|
|
print("距离(km)\t" + "\t".join(truth_dist))
|
2025-12-05 02:55:26 +00:00
|
|
|
|
|
2025-12-05 03:06:40 +00:00
|
|
|
|
print("\n" + "="*40)
|
|
|
|
|
|
print("【第二部分:测量结果 (Measured)】")
|
|
|
|
|
|
print("="*40)
|
|
|
|
|
|
print("方位(°)\t" + "\t".join(meas_az))
|
|
|
|
|
|
print("俯仰(°)\t" + "\t".join(meas_el))
|
|
|
|
|
|
print("距离(km)\t" + "\t".join(meas_dist))
|
|
|
|
|
|
print("="*40 + "\n")
|
2025-12-05 02:55:26 +00:00
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2025-12-05 03:06:40 +00:00
|
|
|
|
generate_comparison_data()
|