增加版本管理 0.2.1,修改部分文档
This commit is contained in:
parent
955be5cf97
commit
635a34c843
40
CHANGELOG.md
Normal file
40
CHANGELOG.md
Normal 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
|
||||
|
||||
### 基础功能
|
||||
|
||||
- 基础导弹运动学模型
|
||||
- 飞行阶段控制
|
||||
- 基本制导功能
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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>
|
||||
/// 设置默认值:
|
||||
|
||||
@ -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度
|
||||
|
||||
54
docs/project/develop_log.md
Normal file
54
docs/project/develop_log.md
Normal 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. 与视场角的关系:
|
||||
- 视场角影响首次探测高度
|
||||
- 探测高度越高,两圈之间的高度差越大
|
||||
- 因此视场角间接影响了径向误差的大小
|
||||
@ -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
|
||||
|
||||
调整参数后的运行记录
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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 - 退出程序");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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>
|
||||
/// 初始化导弹模拟器
|
||||
|
||||
Loading…
Reference in New Issue
Block a user