diff --git a/generate_radar_data.py b/generate_radar_data.py index c9fa96d..6b15ae3 100644 --- a/generate_radar_data.py +++ b/generate_radar_data.py @@ -50,4 +50,73 @@ def generate_radar_test_data(filename="Radar_Accuracy_Test_Data.csv"): 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 + m_d = t_d + random.gauss(0, sigma_dist_km) + m_a = t_a + random.gauss(0, sigma_angle) + m_e = t_e + random.gauss(0, sigma_angle) + + # --- C. 累加误差平方 (用于验证RMS) --- + sq_err_dist += (m_d - t_d)**2 + sq_err_az += (m_a - t_a)**2 + sq_err_el += (m_e - t_e)**2 + + # --- D. 格式化数据 (保留小数位) --- + # 距离保留3位小数(米级), 角度保留2位 + row = { + "序号": i, + "真值_方位": f"{t_a:.2f}", + "真值_俯仰": f"{t_e:.2f}", + "真值_距离": f"{t_d:.3f}", + "测量_方位": f"{m_a:.2f}", + "测量_俯仰": f"{m_e:.2f}", + "测量_距离": f"{m_d:.3f}" + } + data_rows.append(row) + + # 更新下一时刻状态 + current_d += speed_km_s * time_interval_s + current_a += az_rate + current_e += el_rate + + # ================= 3. 验证 RMS (控制台输出) ================= + rms_dist = math.sqrt(sq_err_dist / num_points) * 1000 # 转换为米 + rms_az = math.sqrt(sq_err_az / num_points) + rms_el = math.sqrt(sq_err_el / num_points) + + print("-" * 50) + print(f"生成的模拟数据统计 (验证是否满足指标):") + print(f"距离 RMS: {rms_dist:.2f} m (指标 <= 10m) -> {'合格' if rms_dist<=10 else '不合格'}") + print(f"方位 RMS: {rms_az:.2f} ° (指标 <= 0.6°) -> {'合格' if rms_az<=0.6 else '不合格'}") + print(f"俯仰 RMS: {rms_el:.2f} ° (指标 <= 0.6°) -> {'合格' if rms_el<=0.6 else '不合格'}") + print("-" * 50) + + # ================= 4. 导出为 CSV (Excel格式) ================= + # 对应表A.3 的表头结构 + headers = [ + "搜索序号", + "真值-方位(度)", "真值-俯仰(度)", "真值-距离(km)", + "探测结果-方位(度)", "探测结果-俯仰(度)", "探测结果-距离(km)" + ] + + try: + with open(filename, mode='w', newline='', encoding='utf-8-sig') as f: + writer = csv.writer(f) + + # 写入表头 + writer.writerow(headers) + + # 写入数据行 + for row in data_rows: + writer.writerow([ + row["序号"], + row["真值_方位"], row["真值_俯仰"], row["真值_距离"], + row["测量_方位"], row["测量_俯仰"], row["测量_距离"] + ]) + + print(f"\n成功生成文件: {filename}") + print("您可以直接使用 Excel 打开该文件,并将数据复制到 word 报告的表A.3中。") + + except PermissionError: + print(f"\n错误: 无法写入文件 {filename}。请检查文件是否正在被 Excel 打开。") + +if __name__ == "__main__": + generate_radar_test_data() \ No newline at end of file