增加版本管理 0.2.1,修改部分文档

This commit is contained in:
Tian jianyong 2025-02-14 09:49:47 +08:00
parent 955be5cf97
commit 635a34c843
10 changed files with 156 additions and 198 deletions

40
CHANGELOG.md Normal file
View File

@ -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
### 基础功能
- 基础导弹运动学模型
- 飞行阶段控制
- 基本制导功能

View File

@ -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
/// </remarks>
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;
}

View File

@ -71,30 +71,30 @@ namespace ThreatSource.Simulation
}
/// <summary>
/// 激光波束制导仪配置类,用于设置激光波束制导系统的参数
/// 激光驾束仪配置类,用于设置激光驾束仪的参数
/// </summary>
/// <remarks>
/// 该类定义了波束制导系统的关键参数:
/// 该类定义了激光驾束仪的关键参数:
/// - 设备标识
/// - 发射位置
/// - 激光功率
/// - 控制场尺寸
/// - 最大制导距离
/// 这些参数决定了波束制导系统的性能和工作范围
/// 这些参数决定了激光驾束仪的性能和工作范围
/// </remarks>
public class LaserBeamRiderConfig
{
/// <summary>
/// 获取或设置激光波束制导仪的唯一标识符
/// 获取或设置激光驾束仪的唯一标识符
/// </summary>
/// <remarks>
/// 在仿真系统中必须唯一
/// 用于标识和查找特定的波束制导
/// 用于标识和查找特定的驾束
/// </remarks>
public string Id { get; set; }
/// <summary>
/// 获取或设置波束制导仪的初始位置
/// 获取或设置驾束仪的初始位置
/// </summary>
/// <remarks>
/// 使用三维向量表示空间位置
@ -125,12 +125,12 @@ namespace ThreatSource.Simulation
/// </summary>
/// <remarks>
/// 单位:米
/// 定义了波束制导系统的最大有效工作距离
/// 定义了驾束仪的最大有效工作距离
/// </remarks>
public double MaxGuidanceDistance { get; set; }
/// <summary>
/// 初始化激光波束制导仪配置的新实例
/// 初始化激光驾束仪配置的新实例
/// </summary>
/// <remarks>
/// 设置默认值:

1
VERSION Normal file
View File

@ -0,0 +1 @@
0.2.1

View File

@ -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度

View File

@ -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. 与视场角的关系:
- 视场角影响首次探测高度
- 探测高度越高,两圈之间的高度差越大
- 因此视场角间接影响了径向误差的大小

View File

@ -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
调整参数后的运行记录

View File

@ -1,23 +0,0 @@
using System;
using System.Collections.Generic;
using System.Numerics;
public class MissileSimulator
{
private List<TerminalSensitiveSubmunition> missiles = new List<TerminalSensitiveSubmunition>();
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);
}
}

View File

@ -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 - 退出程序");
}
}
}

View File

@ -15,7 +15,7 @@ namespace ThreatSource.Tools
private readonly List<TerminalSensitiveSubmunition> missiles;
private readonly List<SimulationElement> targets;
private bool isRunning;
private readonly double timeStep = 0.001; // 时间步长,单位:秒
private readonly double timeStep = 0.0025; // 时间步长,单位:秒
/// <summary>
/// 初始化导弹模拟器