From 635a34c843bb991e56521f6ffa70308d2756cc38 Mon Sep 17 00:00:00 2001
From: Tian jianyong <11429339@qq.com>
Date: Fri, 14 Feb 2025 09:49:47 +0800
Subject: [PATCH] =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0=E7=89=88=E6=9C=AC?=
=?UTF-8?q?=E7=AE=A1=E7=90=86=200.2.1=EF=BC=8C=E4=BF=AE=E6=94=B9=E9=83=A8?=
=?UTF-8?q?=E5=88=86=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
CHANGELOG.md | 40 ++++++++
.../MIssile/TerminalSensitiveSubmunition.cs | 13 ++-
.../src/Simulation/SimulationConfig.cs | 16 ++--
VERSION | 1 +
docs/articles/threat-source-spec.md | 94 ++-----------------
docs/project/develop_log.md | 54 +++++++++++
docs/{articles => project}/tunning.md | 36 ++++++-
src/tools/MissileSimulator.cs | 23 -----
src/tools/Program.cs | 75 ---------------
tools/MissileSimulator.cs | 2 +-
10 files changed, 156 insertions(+), 198 deletions(-)
create mode 100644 CHANGELOG.md
create mode 100644 VERSION
create mode 100644 docs/project/develop_log.md
rename docs/{articles => project}/tunning.md (61%)
delete mode 100644 src/tools/MissileSimulator.cs
delete mode 100644 src/tools/Program.cs
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..f6a37a2
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,40 @@
+# 变更日志
+
+所有重要的变更都会记录在这个文件中。
+
+格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/)。
+版本规范基于 [Semantic Versioning](https://semver.org/lang/zh-CN/)。
+
+## [0.2.1] - 2025-01-10
+
+### 功能优化
+
+- 传感器参数优化分析功能
+- 视场角影响分析
+- 径向误差分析
+
+### 参数调整
+
+- 调整传感器视场角为2.5°(折中选择)
+- 记录不同视场角下的探测性能数据
+
+### 问题发现
+
+- 视场角对首次探测高度的影响(10°: 124.01m vs 1°: 93.89m)
+- 第二圈扫描时的固定径向误差问题
+
+## [0.2.0] - 2024-12-20
+
+### 传感器功能
+
+- 多传感器融合系统
+- 螺旋扫描搜索功能
+- 目标探测和识别功能
+
+## [0.1.0] - 2024-11-30
+
+### 基础功能
+
+- 基础导弹运动学模型
+- 飞行阶段控制
+- 基本制导功能
diff --git a/ThreatSource/src/MIssile/TerminalSensitiveSubmunition.cs b/ThreatSource/src/MIssile/TerminalSensitiveSubmunition.cs
index 7e9eff3..192f2e6 100644
--- a/ThreatSource/src/MIssile/TerminalSensitiveSubmunition.cs
+++ b/ThreatSource/src/MIssile/TerminalSensitiveSubmunition.cs
@@ -252,8 +252,8 @@ namespace ThreatSource.Missile
scanDirection = new Vector3D(0, 0, 1).Normalize();
// 初始化传感器
- infraredDetector = new InfraredDetector(this, 500, InfraredBand.Short, 2.5); // 红外探测器,探测距离 500 米,近红外,视场角1度
- radiometer = new MillimeterWaveRadiometer(this, 500, MillimeterWaveBand.Band3, 2.5); // 毫米波辐射计,探测距离500米,工作波段3mm,扫描视场角1度
+ infraredDetector = new InfraredDetector(this, 500, InfraredBand.Short, 1); // 红外探测器,探测距离 500 米,近红外,视场角20度
+ radiometer = new MillimeterWaveRadiometer(this, 500, MillimeterWaveBand.Band3, 1); // 毫米波辐射计,探测距离500米,工作波段3mm,扫描视场角20度
altimeter = new MillimeterWaveAltimeter(this, 1000, MillimeterWaveBand.Band8, 0.5, 25); // 毫米波测高仪,测量精度0.5米
rangefinder = new LaserRangefinder(this, 500, 1.06, 100, 0.5); // 激光测距仪,测量距离500米,波长1.06µm,测量频率100Hz,测量精度0.5米
}
@@ -792,12 +792,15 @@ namespace ThreatSource.Missile
///
public override string GetStatus()
{
+ // 获取目标对象并计算距离
+ SimulationElement target = SimulationManager.GetEntityById(TargetId) as SimulationElement ?? throw new Exception("目标不存在");
+ double distanceToTarget = (target.Position - Position).Magnitude();
+
var status = $"{base.GetStatus()}\n" +
$"运行状态: {currentStage}\n" +
$"扫描角度: {spiralAngle * 180 / Math.PI:F2}°, 弧度值: {spiralAngle:F6}\n" +
- $"目标检测: {lastDetectionTime != null}";
-
- //var status = $"";
+ $"目标检测: {lastDetectionTime != null}\n" +
+ $"目标距离: {distanceToTarget:F2}米";
return status;
}
diff --git a/ThreatSource/src/Simulation/SimulationConfig.cs b/ThreatSource/src/Simulation/SimulationConfig.cs
index 70e587e..248919a 100644
--- a/ThreatSource/src/Simulation/SimulationConfig.cs
+++ b/ThreatSource/src/Simulation/SimulationConfig.cs
@@ -71,30 +71,30 @@ namespace ThreatSource.Simulation
}
///
- /// 激光波束制导仪配置类,用于设置激光波束制导系统的参数
+ /// 激光驾束仪配置类,用于设置激光驾束仪的参数
///
///
- /// 该类定义了波束制导系统的关键参数:
+ /// 该类定义了激光驾束仪的关键参数:
/// - 设备标识
/// - 发射位置
/// - 激光功率
/// - 控制场尺寸
/// - 最大制导距离
- /// 这些参数决定了波束制导系统的性能和工作范围
+ /// 这些参数决定了激光驾束仪的性能和工作范围
///
public class LaserBeamRiderConfig
{
///
- /// 获取或设置激光波束制导仪的唯一标识符
+ /// 获取或设置激光驾束仪的唯一标识符
///
///
/// 在仿真系统中必须唯一
- /// 用于标识和查找特定的波束制导仪
+ /// 用于标识和查找特定的驾束仪
///
public string Id { get; set; }
///
- /// 获取或设置波束制导仪的初始位置
+ /// 获取或设置驾束仪的初始位置
///
///
/// 使用三维向量表示空间位置
@@ -125,12 +125,12 @@ namespace ThreatSource.Simulation
///
///
/// 单位:米
- /// 定义了波束制导系统的最大有效工作距离
+ /// 定义了驾束仪的最大有效工作距离
///
public double MaxGuidanceDistance { get; set; }
///
- /// 初始化激光波束制导仪配置的新实例
+ /// 初始化激光驾束仪配置的新实例
///
///
/// 设置默认值:
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..5a78111
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+0.2.1
\ No newline at end of file
diff --git a/docs/articles/threat-source-spec.md b/docs/articles/threat-source-spec.md
index 937fd46..0850714 100644
--- a/docs/articles/threat-source-spec.md
+++ b/docs/articles/threat-source-spec.md
@@ -370,7 +370,7 @@ graph TB
- 维护照射状态(IsIlluminationOn)
- 发布照射状态事件
- 干扰处理:
- - 计算干扰效果:20*log10(干扰功率) - 20*log10(距离) - 20*log10(4π)
+ - 计算干扰效果:20 * log10(干扰功率) - 20 * log10(距离) - 20 * log10(4π)
- 判断是否超过干扰阈值
- 超过阈值时停止照射
- 事件管理:
@@ -385,19 +385,19 @@ graph TB
- 目标到导弹距离:目标位置到导弹位置的欧氏距离
2. 计算光斑面积
- - 光斑面积计算公式:π *(传播距离* tan(发散角))²
+ - 光斑面积计算公式:π * (传播距离* tan(发散角))²
- 发散角:0.3毫弧度(0.3mrad)
3. 计算目标反射
- 目标处功率密度:入射激光功率/光斑面积
- - 目标反射功率:功率密度 *有效反射面积* 反射系数
+ - 目标反射功率:功率密度 * 有效反射面积 * 反射系数
4. 计算接收功率
- 反射光扩散面积:2π * 目标到导弹距离的平方
- 导弹接收初始功率:反射功率/扩散面积
- 探测器面积:π * (0.1/2)² 平方米
- 功率接收比:min(1, 探测器面积/照射面积)
- - 最终接收功率:初始功率 *功率接收比* 聚焦增益
+ - 最终接收功率:初始功率 * 功率接收比 * 聚焦增益
3. 导弹制导控制算法
- 比例导引控制:
@@ -668,7 +668,7 @@ graph TB
2. 导弹制导控制算法
- 计算瞬时转向速率
- - 应用速率平滑:turnRate = turnRate *(1-0.5) + instantTurnRate* 0.5
+ - 应用速率平滑:turnRate = turnRate * (1-0.5) + instantTurnRate* 0.5
- 计算带提前量的期望方向
- 生成并限制制导加速度
@@ -1026,7 +1026,7 @@ graph TB
- 二次检测确认(0.9个扫描周期)
- 攻击阶段控制:
- 目标跟踪
- - 速度控制(500米/秒)
+ - 速度控制(2000米/秒)
- 撞击点计算
3. 传感器融合算法
@@ -1091,7 +1091,7 @@ graph TB
2. 非制导状态下的运动
- 使用标准运动学方程更新位置和速度:
- - 位置更新:p = p0 + v0*t + 0.5*a*t^2
+ - 位置更新:p = p0 + v0 * t + 0.5 * a * t^2
- 速度更新:v = v0 + a*t
- 考虑重力加速度(9.81 m/s²)
- 保持最后已知速度方向
@@ -1149,7 +1149,7 @@ graph TB
- 计算相对位置:r = predictedTargetPosition - missilePosition
- 计算相对速度:v = targetVelocity - missileVelocity
- 计算视线角速率:LOSRate = (v - (LOS * DotProduct(v, LOS))) / r.Magnitude()
- - 计算制导加速度:CrossProduct(CrossProduct(LOS, LOSRate), missileVelocity.Normalize()) *coefficient* missileVelocity.Magnitude()
+ - 计算制导加速度:CrossProduct(CrossProduct(LOS, LOSRate), missileVelocity.Normalize()) * coefficient * missileVelocity.Magnitude()
- 输出结果:
- 制导加速度向量
- 是否获得有效制导
@@ -1186,7 +1186,7 @@ graph TB
2. 控制算法
- 计算期望飞行方向
- - 平滑处理转向速率:turnRate = turnRate *(1-0.5) + instantTurnRate* 0.5
+ - 平滑处理转向速率:turnRate = turnRate * (1-0.5) + instantTurnRate * 0.5
- 计算带提前量的期望方向
- 生成制导加速度
@@ -1404,80 +1404,6 @@ graph TB
- 外部实体获取验证
- 实体ID验证
-### 5.2 未实现的验证功能
-
-#### 5.2.1 性能指标验证
-
-1. 探测性能验证
- - 最大探测距离测试
- - 视场角范围测试
- - 角度测量精度验证
- - 信噪比计算验证
-
-2. 制导性能验证
- - 静态目标制导精度测试
- - 运动目标制导精度测试
- - 机动目标制导精度测试
- - 响应时间测试
- - 超调量测试
- - 稳定性测试
-
-3. 抗干扰性能验证
- - 电磁干扰抗性测试
- - 光学干扰抗性测试
- - 红外干扰抗性测试
-
-#### 5.2.2 轨迹验证
-
-1. 轨迹记录与分析
- - 轨迹数据采集
- - 轨迹平滑性分析
- - 机动特性分析
- - 能量特性分析
-
-2. 制导特性分析
- - 视线角变化率分析
- - 制导指令特性分析
- - 末段机动特性分析
-
-3. 打击效果分析
- - 脱靶量统计
- - 命中精度评估
- - 毁伤效果评估
-
-#### 5.2.3 复杂环境验证
-
-1. 大气环境影响验证
- - 标准大气条件测试
- - 极端温度条件测试
- - 复杂气象条件测试
-
-2. 电磁环境验证
- - 电磁干扰环境测试
- - 多重反射环境测试
- - 杂波环境测试
-
-3. 光学环境验证
- - 能见度条件测试
- - 背景辐射条件测试
- - 大气透过率测试
-
-#### 5.2.4 分析工具
-
-1. 数据处理工具
- - 数据预处理功能
- - 数据过滤功能
- - 数据融合功能
-
-2. 可视化工具
- - 轨迹显示功能
- - 性能指标显示功能
- - 统计分析显示功能
-
-3. 报告生成工具
- - 测试报告生成功能
- - 性能分析报告功能
- - 问题追踪报告功能
## 6. 仿真接口
@@ -1592,7 +1518,7 @@ graph TB
- 分离距离:1000米
- 分离范围:50米
- 初始速度:200米/秒
- - 攻击速度:500米/秒
+ - 攻击速度:2000米/秒
- 螺旋扫描速度:8π弧度/秒
- 垂直下降速度:10米/秒
- 扫描锥角:30度
diff --git a/docs/project/develop_log.md b/docs/project/develop_log.md
new file mode 100644
index 0000000..8da70ce
--- /dev/null
+++ b/docs/project/develop_log.md
@@ -0,0 +1,54 @@
+# 开发日志
+
+本文档以时间顺序, 记录了开发过程中的重要事件和分析、测试、DEBUG等过程。
+日志格式:
+
+- 日期
+- 事件描述
+- 分析处理
+
+## 2024-01-09 视场角对目标探测高度的影响分析
+
+在测试末敏子弹的目标探测功能时,发现视场角大小对首次探测高度有显著影响:
+
+1. 视场角为 10° 时:
+ - 首次探测高度:124.01米
+ - 扫描角度:224.64°
+
+2. 视场角为 1° 时:
+ - 首次探测高度:93.89米
+ - 扫描角度:224.64°
+
+分析结论:
+
+- 视场角越大,探测范围越大,可以在更高的高度发现目标
+- 视场角越小,探测范围越小,需要更接近目标才能发现
+- 两种情况下扫描角度相同(224.64°),说明目标的相对方位是一致的
+- 高度差约30米,这个差异完全符合视场角的物理特性
+
+这个发现对于系统设计有重要启示:
+
+1. 视场角的选择需要权衡探测距离和精度
+2. 在仿真中需要考虑视场角对探测时机的影响
+3. 视场角属于固有误差,无法简单通过算法消除
+
+## 2024-01-09 第二圈发射的径向误差分析
+
+在分析末敏弹的打击精度时,发现当末敏弹进行第二圈螺旋扫描时会产生固定的径向误差:
+
+1. 误差特征:
+ - 表现为固定的径向偏差
+ - 与目标的相对方位无关
+ - 在不同仿真条件下保持稳定
+
+2. 误差原因分析:
+ - 末敏弹在第一圈扫描时记录首次探测角度
+ - 第二圈扫描到相同角度时触发攻击
+ - 由于末敏弹持续下降,第二圈时的高度低于第一圈
+ - 高度差导致了固定的径向误差
+ - 下降速度 10m/s, 扫描周期 0.25s, 高度差 2.5m,产生的径向误差是 1.44m
+
+3. 与视场角的关系:
+ - 视场角影响首次探测高度
+ - 探测高度越高,两圈之间的高度差越大
+ - 因此视场角间接影响了径向误差的大小
diff --git a/docs/articles/tunning.md b/docs/project/tunning.md
similarity index 61%
rename from docs/articles/tunning.md
rename to docs/project/tunning.md
index 53ca1e1..ac2d712 100644
--- a/docs/articles/tunning.md
+++ b/docs/project/tunning.md
@@ -1,6 +1,38 @@
-# 导弹弹参数调整
+# 导弹参数调整
-## 末敏弹参数调整
+## 末敏弹运行记录(v0.2.1)
+
+时间:2025-01-10 10:00:00
+版本:v0.2.1
+
+| 精度 | 角度误差 | 仿真步长 | 视场角 |
+| ------ | -------- | -------- | ------ |
+| 2.25米 | -1.08 度 | 0.0005秒 | 0.5度 |
+| 2.20米 | -0.36 度 | 0.001秒 | 1度 |
+| 3.10米 | +1.8 度 | 0.0025秒 | 1度 |
+| 2.20米 | -0.36 度 | 0.001秒 | 2度 |
+| 3.10米 | +1.8 度 | 0.0025秒 | 2度 |
+| 9.24米 | -0.36 度 | 0.001秒 | 5度 |
+| 9.65米 | -1.8 度 | 0.005秒 | 5度 |
+| 11.14米 | +5.4 度 | 0.01秒 | 5度 |
+| 15.04米 | -0.36 度 | 0.001秒 | 10度 |
+| 15.07米 | -2.8 度 | 0.005秒 | 10度 |
+| 15.62米 | +5.4 度 | 0.01秒 | 10度 |
+| 15.04米 | +0.36 度 | 0.001秒 | 15度 |
+
+从结果看,仿真步长越小,精度越高,角度误差越小,视场角越大,精度越差。
+
+比较合理的参数是:
+
+- 仿真步长:0.001秒
+- 视场角:2度
+- 精度:2.2米
+- 角度误差:-0.36度
+
+## 末敏弹运行记录(v0.2.0)
+
+时间:2025-01-09 10:00:00
+版本:v0.2.0
调整参数后的运行记录
diff --git a/src/tools/MissileSimulator.cs b/src/tools/MissileSimulator.cs
deleted file mode 100644
index b5c1d68..0000000
--- a/src/tools/MissileSimulator.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Numerics;
-
-public class MissileSimulator
-{
- private List missiles = new List();
- private SimulationManager simulationManager;
- private double InitialHeight;
-
- public void LaunchMissile(Vector3 target)
- {
- var missile = new TerminalSensitiveSubmunition
- {
- Position = new Vector3(target.X, target.Y, InitialHeight),
- Velocity = new Vector3(0, 0, 0),
- Target = target
- };
-
- missiles.Add(missile);
- simulationManager.AddElement(missile);
- }
-}
\ No newline at end of file
diff --git a/src/tools/Program.cs b/src/tools/Program.cs
deleted file mode 100644
index 45ff55b..0000000
--- a/src/tools/Program.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-using ThreatSource.Utils;
-using ThreatSource.Jamming;
-
-namespace ThreatSource.Tools
-{
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("末敏子弹模拟程序启动...");
- var simulator = new MissileSimulator();
-
- // 添加目标
- var targetId = simulator.AddTarget(new Vector3D(100, 0, 100));
-
- // 发射导弹
- simulator.LaunchMissile(targetId, new Vector3D(100, 400, 100));
-
- // 启动模拟线程
- var simulationThread = new Thread(simulator.Start);
- simulationThread.Start();
-
- // 等待用户输入命令
- while (true)
- {
- Console.WriteLine("\n请输入命令(help查看帮助):");
- var command = Console.ReadLine()?.ToLower();
-
- switch (command)
- {
- case "help":
- ShowHelp();
- break;
- case "ir":
- simulator.ApplyJamming(JammingType.Infrared, 100, 5, new Vector3D(0, 0, 0));
- break;
- case "mw":
- simulator.ApplyJamming(JammingType.MillimeterWave, 200, 5, new Vector3D(0, 0, 0));
- break;
- case "laser":
- simulator.ApplyJamming(JammingType.Laser, 150, 5, new Vector3D(0, 0, 0));
- break;
- case "clear ir":
- simulator.ClearJamming(JammingType.Infrared);
- break;
- case "clear mw":
- simulator.ClearJamming(JammingType.MillimeterWave);
- break;
- case "clear laser":
- simulator.ClearJamming(JammingType.Laser);
- break;
- case "exit":
- simulator.Stop();
- return;
- default:
- Console.WriteLine("未知命令,请输入help查看帮助");
- break;
- }
- }
- }
-
- static void ShowHelp()
- {
- Console.WriteLine("可用命令:");
- Console.WriteLine(" help - 显示帮助信息");
- Console.WriteLine(" ir - 应用红外干扰");
- Console.WriteLine(" mw - 应用毫米波干扰");
- Console.WriteLine(" laser - 应用激光干扰");
- Console.WriteLine(" clear ir - 清除红外干扰");
- Console.WriteLine(" clear mw - 清除毫米波干扰");
- Console.WriteLine(" clear laser - 清除激光干扰");
- Console.WriteLine(" exit - 退出程序");
- }
- }
-}
\ No newline at end of file
diff --git a/tools/MissileSimulator.cs b/tools/MissileSimulator.cs
index c2e03cb..ff7adb9 100644
--- a/tools/MissileSimulator.cs
+++ b/tools/MissileSimulator.cs
@@ -15,7 +15,7 @@ namespace ThreatSource.Tools
private readonly List missiles;
private readonly List targets;
private bool isRunning;
- private readonly double timeStep = 0.001; // 时间步长,单位:秒
+ private readonly double timeStep = 0.0025; // 时间步长,单位:秒
///
/// 初始化导弹模拟器