diff --git a/generate_radar_data.py b/generate_radar_data.py index 095b1af..1f32056 100644 --- a/generate_radar_data.py +++ b/generate_radar_data.py @@ -1,67 +1,77 @@ import random -def generate_radar_data(num_points=10): - # ================= 配置区域 (可根据需要修改) ================= +def generate_comparison_data(num_points=10): + # ================= 1. 初始状态与运动趋势 (真值配置) ================= + # 距离 (km): 模拟目标从 12.5km 处靠近 (参考文件中远距离测试) + start_dist = 12.500 + dist_speed = -0.020 # 负数表示靠近 (每点移动20米) - # 1. 距离 (km) 设置: 模拟目标从 3.5km 处开始远离 - start_dist = 3.520 - dist_trend = 0.015 # 每次采样距离增加约 15米 (模拟速度) - dist_noise = 0.005 # 距离测量噪声 (±5m) + # 方位 (度): 模拟目标在 145度 方向缓慢右移 + start_az = 145.20 + az_speed = 0.05 # 缓慢变化 + + # 俯仰 (度): 模拟低空飞行,角度很小 + start_el = 0.45 + el_speed = 0.002 # 几乎平飞 - # 2. 方位 (度) 设置: 模拟目标在 45度 方向缓慢移动 - start_az = 45.20 - az_trend = 0.15 # 方位角每次变化 - az_noise = 0.04 # 方位角抖动 (±0.04度) + # ================= 2. 雷达测量误差 (噪声配置) ================= + # 参考依据:文件中的RMS指标 (方位<=0.3度, 距离<=15m) + # 这里的 sigma 是标准差,决定了测量值的抖动幅度 + sigma_az = 0.12 # 方位抖动 (度) + sigma_el = 0.15 # 俯仰抖动 (度) + sigma_dist = 0.008 # 距离抖动 (km), 0.008km = 8米 - # 3. 俯仰 (度) 设置: 模拟低空目标 (如无人机),高度基本保持 - start_el = 2.50 - el_trend = 0.01 # 俯仰角变化很小 - el_noise = 0.05 # 俯仰角抖动 + # ================= 生成逻辑 ================= + + # 容器 + truth_az, truth_el, truth_dist = [], [], [] + meas_az, meas_el, meas_dist = [], [], [] - # =========================================================== + current_d = start_dist + current_a = start_az + current_e = start_el - # 生成数据容器 - az_data = [] - el_data = [] - dist_data = [] - - current_dist = start_dist - current_az = start_az - current_el = start_el - - for i in range(num_points): - # 生成带噪声的距离 (保留3位小数, km) - d_val = current_dist + random.gauss(0, dist_noise) - dist_data.append(f"{d_val:.3f}") + 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) - # 生成带噪声的方位 (保留2位小数, 度) - az_val = current_az + random.gauss(0, az_noise) - az_data.append(f"{az_val:.2f}") + # 存入真值列表 (保留格式) + truth_dist.append(f"{t_d:.3f}") + truth_az.append(f"{t_a:.2f}") + truth_el.append(f"{t_e:.2f}") - # 生成带噪声的俯仰 (保留2位小数, 度) - el_val = current_el + random.gauss(0, el_noise) - el_data.append(f"{el_val:.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) - # 更新下一时刻的基准值 (加上趋势) - current_dist += dist_trend - current_az += az_trend - current_el += el_trend + # 存入测量值列表 + meas_dist.append(f"{m_d:.3f}") + meas_az.append(f"{m_a:.2f}") + meas_el.append(f"{m_e:.2f}") - # ================= 输出打印 (Tab分隔,方便复制) ================= - print("-" * 30) - print("生成结果 (复制下方内容到 Word 表格):") - print("-" * 30) - - # 打印方位行 - print("方位(°)\t" + "\t".join(az_data)) - - # 打印俯仰行 - print("俯仰(°)\t" + "\t".join(el_data)) - - # 打印距离行 - print("距离(km)\t" + "\t".join(dist_data)) - print("-" * 30) + # 更新下一步的基准位置 + 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_radar_data() \ No newline at end of file + generate_comparison_data() \ No newline at end of file