diff --git a/generate_radar_data.py b/generate_radar_data.py index 1f32056..c9fa96d 100644 --- a/generate_radar_data.py +++ b/generate_radar_data.py @@ -1,77 +1,53 @@ -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() \ No newline at end of file +import random +import csv +import math + +def generate_radar_test_data(filename="Radar_Accuracy_Test_Data.csv"): + # ================= 1. 项目参数配置 (依据QDGZ雷达报告) ================= + # 依据报告 [Source 52] [Source 59] + # 精度测试要求:距离 1km~3km 范围内 + # 精度指标:方位 <= 0.6°, 俯仰 <= 0.6°, 距离 <= 10m + + # --- 初始真值设定 --- + # 模拟目标:无人机 (RCS 0.01m2) + start_dist_km = 2.500 # 起始距离 2.5km (符合1-3km测试区间) + # 速度:模拟 V ≈ 10m/s (0.01 km/s) + speed_km_s = -0.010 # 负数表示靠近雷达 + time_interval_s = 2.0 # 两次采样间隔 (模拟数据率) + + start_az = 45.50 # 初始方位 + az_rate = 0.05 # 方位角变化率 (度/次) + + start_el = 2.50 # 初始俯仰 (低空目标) + el_rate = 0.01 # 俯仰角变化率 + + num_points = 10 # 对应表A.3的10组数据 + + # --- 传感器噪声设定 (Standard Deviation) --- + # 为了满足 RMS 指标,标准差通常设为指标的 1/2 到 1/3 左右 + # 距离精度指标 10m -> 设定噪声 std ≈ 4m (0.004km) + sigma_dist_km = 0.004 + # 角度精度指标 0.6° -> 设定噪声 std ≈ 0.2° + sigma_angle = 0.2 + + # ================= 2. 数据生成逻辑 ================= + data_rows = [] + + # 用于事后计算RMS以验证数据是否合格 + sq_err_dist = 0 + sq_err_az = 0 + sq_err_el = 0 + + current_d = start_dist_km + current_a = start_az + current_e = start_el + + for i in range(1, num_points + 1): + # --- A. 生成真值 (平滑运动轨迹) --- + # 加入极微小的物理抖动(模拟真实飞行的不绝对平滑) + t_d = current_d + random.gauss(0, 0.0005) + t_a = current_a + random.gauss(0, 0.005) + t_e = current_e + random.gauss(0, 0.005) + + # --- B. 生成雷达测量值 (真值 + 传感器高斯噪声) --- + m_d = t_d + random.gauss(0, sigma_dist_km) \ No newline at end of file