Files
Share_Li/generate_radar_data.py
2025-12-05 03:06:40 +00:00

77 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import random
def generate_comparison_data(num_points=10):
# ================= 1. 初始状态与运动趋势 (真值配置) =================
# 距离 (km): 模拟目标从 12.5km 处靠近 (参考文件中远距离测试)
start_dist = 12.500
dist_speed = -0.020 # 负数表示靠近 (每点移动20米)
# 方位 (度): 模拟目标在 145度 方向缓慢右移
start_az = 145.20
az_speed = 0.05 # 缓慢变化
# 俯仰 (度): 模拟低空飞行,角度很小
start_el = 0.45
el_speed = 0.002 # 几乎平飞
# ================= 2. 雷达测量误差 (噪声配置) =================
# 参考依据文件中的RMS指标 (方位<=0.3度, 距离<=15m)
# 这里的 sigma 是标准差,决定了测量值的抖动幅度
sigma_az = 0.12 # 方位抖动 (度)
sigma_el = 0.15 # 俯仰抖动 (度)
sigma_dist = 0.008 # 距离抖动 (km), 0.008km = 8米
# ================= 生成逻辑 =================
# 容器
truth_az, truth_el, truth_dist = [], [], []
meas_az, meas_el, meas_dist = [], [], []
current_d = start_dist
current_a = start_az
current_e = start_el
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}")
# --- 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)
# 存入测量值列表
meas_dist.append(f"{m_d:.3f}")
meas_az.append(f"{m_a:.2f}")
meas_el.append(f"{m_e:.2f}")
# 更新下一步的基准位置
current_d += dist_speed
current_a += az_speed
current_e += el_speed
# ================= 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))
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")
if __name__ == "__main__":
generate_comparison_data()