diff --git a/ThreatSource/data/missiles/terminal_sensitive/tsm_001.toml b/ThreatSource/data/missiles/terminal_sensitive/tsm_001.toml
index 68c3b29..3569b81 100644
--- a/ThreatSource/data/missiles/terminal_sensitive/tsm_001.toml
+++ b/ThreatSource/data/missiles/terminal_sensitive/tsm_001.toml
@@ -22,10 +22,10 @@ SelfDestructHeight = 0.0 # 自毁高度 (米)
[SubmunitionProperties] # 子弹药属性
Type = "TerminalSensitiveSubmunition" # 属性中的类型
-MaxSpeed = 2000.0 # 最大速度 (米/秒)
+MaxSpeed = 3000.0 # 最大速度 (米/秒)
MaxFlightTime = 60.0 # 最大飞行时间 (秒)
MaxFlightDistance = 2000.0 # 最大飞行距离 (米)
-MaxAcceleration = 500.0 # 最大加速度 (米/秒^2)
+MaxAcceleration = 2000.0 # 最大加速度 (米/秒^2)
ProportionalNavigationCoefficient = 4.0 # 比例导引系数
LaunchAcceleration = 0.0 # 发射加速度 (米/秒^2)
MaxEngineBurnTime = 0.0 # 最大发动机燃烧时间 (秒)
@@ -35,20 +35,21 @@ HitProbability = 0.9 # 命中概率
SelfDestructHeight = 20.0 # 自毁高度 (米)
[SubmunitionConfig] # 子弹药配置
-SeparationSpeed = 600.0 # 分离速度 (米/秒)
+SeparationSpeed = 750.0 # 分离速度 (米/秒)
SeparationHeight = 1000.0 # 分离高度 (米)
SeparationDistance = 1000.0 # 分离距离 (米)
SubmunitionSeparationAngle = 35.0 # 子弹药分离角度 (度)
SeparationRange = 10.0 # 分离散布范围 (米)
-DecelerationAcceleration = 150.0 # 减速加速度 (米/秒^2)
-DecelerationEndSpeed = 200.0 # 减速结束速度 (米/秒)
-ParachuteDeploymentHeight = 400.0 # 开伞高度 (米)
-ParachuteDeceleration = 110.0 # 降落伞减速度 (米/秒^2)
-StableScanHeight = 200.0 # 稳定扫描高度 (米)
+DecelerationHeight = 400.0 # 减速高度 (米)
+DecelerationAcceleration = 1500.0 # 减速加速度 (米/秒^2)
+DecelerationEndSpeed = 50.0 # 减速结束速度 (米/秒)
+ParachuteDeploymentHeight = 200.0 # 开伞高度 (米)
+ParachuteDeceleration = 40.0 # 降落伞减速度 (米/秒^2)
+StableScanHeight = 173.2 # 稳定扫描高度 (米),斜距 200 米
VerticalDeclineSpeed = 10.0 # 垂直下降速度 (米/秒)
SpiralRotationSpeed = 1440.0 # 螺旋旋转速度 (度/秒)
ScanAngle = 30.0 # 扫描角度 (度)
-TargetDetectionDistance = 150.0 # 目标探测距离 (米)
+TargetDetectionDistance = 130.0 # 目标探测距离 (米),斜距 150 米
SelfDestructHeight = 20.0 # (子弹药)自毁高度 (米)
AttackSpeed = 1000.0 # 攻击速度 (米/秒)
TotalProcessingTime = 15.0 # 整体处理时间 (秒),用于目标位置预测
@@ -56,14 +57,14 @@ TotalProcessingTime = 15.0 # 整体处理时间 (秒),用于目
[SubmunitionConfig.InfraredDetectorConfig] # 子弹药红外探测器配置
MaxDetectionRange = 1000.0 # 最大探测距离 (米)
Band = "Medium" # 工作波段 (例如: "Short", "Medium", "Long")
-FieldOfView = 2.0 # 视场角 (度)
+FieldOfView = 3.0 # 视场角 (度)
DetectionRadiationIntensityThreshold = 50.0 # 探测辐射强度阈值 (瓦特/球面度)
JammingResistanceThreshold = 1.0e-4 # 干扰抗性阈值 (瓦特)
[SubmunitionConfig.RadiometerConfig] # 子弹药辐射计配置
MaxDetectionRange = 1000.0 # 最大探测距离 (米)
Band = "Band8" # 工作波段 (例如: "Band3", "Band8", "Band35", "Band94")
-ScanFieldOfView = 2.0 # 扫描视场角 (度)
+ScanFieldOfView = 3.0 # 扫描视场角 (度)
JammingResistanceThreshold = 1.0e-4 # 干扰抗性阈值 (瓦特)
[SubmunitionConfig.AltimeterConfig] # 子弹药高度计配置
diff --git a/ThreatSource/src/MIssile/TerminalSensitiveMissile.cs b/ThreatSource/src/MIssile/TerminalSensitiveMissile.cs
index f240ec0..8108a8f 100644
--- a/ThreatSource/src/MIssile/TerminalSensitiveMissile.cs
+++ b/ThreatSource/src/MIssile/TerminalSensitiveMissile.cs
@@ -202,15 +202,6 @@ namespace ThreatSource.Missile
///
private void PerformSeparation()
{
- // 获取母弹当前的方向向量
- Vector3D currentDirection = KState.Orientation.ToVector();
-
- // 计算水平方向(保持母弹的水平方向分量)
- Vector3D horizontalDirection = new Vector3D(currentDirection.X, 0, currentDirection.Z).Normalize();
-
- // 计算分离角度(弧度)
- double separationAngleRad = submunitionConfig.SubmunitionSeparationAngle * Math.PI / 180.0;
-
// 获取风速
Vector3D windVec = Vector3D.Zero;
var weather = SimulationManager.CurrentWeather;
diff --git a/ThreatSource/src/MIssile/TerminalSensitiveSubmunition.cs b/ThreatSource/src/MIssile/TerminalSensitiveSubmunition.cs
index 53a35be..71211a5 100644
--- a/ThreatSource/src/MIssile/TerminalSensitiveSubmunition.cs
+++ b/ThreatSource/src/MIssile/TerminalSensitiveSubmunition.cs
@@ -279,15 +279,27 @@ namespace ThreatSource.Missile
/// 时间步长,单位:秒
///
/// 分离阶段处理:
- /// - 只表示分离动作,不进行任何物理计算
- /// - 分离阶段结束,进入减速阶段
+ /// - 激活毫米波测高雷达
+ /// - 检查高度计数据有效,且高度是否小于等于减速高度
+ /// - 如果是,则进入减速阶段
+ /// - 否则,继续惯性飞行
///
private void UpdateSeparationStage(double deltaTime)
{
- // 分离阶段只表示分离行为,不进行任何物理计算
+ if(!altimeter.IsActive)
+ {
+ // 激活毫米波测高雷达
+ altimeter.Activate();
+ altimeter.Update(deltaTime);
+ }
- // 分离阶段结束,进入减速阶段
- currentSubmunitionStage = SubmunitionStage.Deceleration;
+ // 检查高度计数据有效,且高度是否小于等于减速高度
+ AltimeterSensorData altimeterData = (AltimeterSensorData)altimeter.GetSensorData();
+ if(altimeterData.IsValid && altimeterData.Altitude <= config.DecelerationHeight)
+ {
+ // 如果是,则进入减速阶段
+ currentSubmunitionStage = SubmunitionStage.Deceleration;
+ }
}
///
@@ -304,13 +316,6 @@ namespace ThreatSource.Missile
///
private void UpdateDecelerationStage(double deltaTime)
{
- if(!altimeter.IsActive)
- {
- // 激活毫米波测高雷达
- altimeter.Activate();
- altimeter.Update(deltaTime);
- }
-
if (KState.Speed > config.DecelerationEndSpeed)
{
// 减速减旋,速度减小
@@ -324,7 +329,7 @@ namespace ThreatSource.Missile
{
// 如果是,则进入降落伞打开阶段
currentSubmunitionStage = SubmunitionStage.ParachuteDeployment;
- }
+ }
}
///
@@ -342,12 +347,17 @@ namespace ThreatSource.Missile
///
private void UpdateParachuteDeploymentStage(double deltaTime)
{
- // 如果速度大于降落伞减速速度,则降落伞减速
- if (KState.Speed > config.VerticalDeclineSpeed)
+ // 如果垂直速度分量大于垂直下降速度,则降落伞减速
+ if (Math.Abs(KState.Velocity.Y) > config.VerticalDeclineSpeed)
{
Vector3D deceleration = -KState.Velocity.Normalize() * config.ParachuteDeceleration;
KState.Velocity += deceleration * deltaTime;
}
+ else
+ {
+ // 如果垂直速度分量小于等于垂直下降速度,则改为匀速垂直下降
+ KState.Velocity = new Vector3D(0, -config.VerticalDeclineSpeed, 0);
+ }
AltimeterSensorData altimeterData = (AltimeterSensorData)altimeter.GetSensorData();
// 检查高度计数据有效,且高度是否小于等于稳定扫描高度
diff --git a/ThreatSource/src/Simulation/SimulationConfig.cs b/ThreatSource/src/Simulation/SimulationConfig.cs
index 3106573..0b5e400 100644
--- a/ThreatSource/src/Simulation/SimulationConfig.cs
+++ b/ThreatSource/src/Simulation/SimulationConfig.cs
@@ -830,6 +830,16 @@ namespace ThreatSource.Simulation
#endregion
#region 减速阶段参数
+
+ ///
+ /// 减速阶段减速高度,单位:米
+ ///
+ ///
+ /// 定义了减速阶段的减速高度
+ /// 默认值为400米
+ ///
+ public double DecelerationHeight { get; set; } = 400.0;
+
///
/// 减速阶段的减速加速度,单位:米/秒²
///
diff --git a/docs/project/theory.md b/docs/project/theory.md
index b665d21..7616654 100644
--- a/docs/project/theory.md
+++ b/docs/project/theory.md
@@ -323,7 +323,7 @@ iii. coeff_c = DeltaPos.MagnitudeSquared()
-## 坦克、装甲车和直升机的RCS统计模型选择与其运动特性、结构复杂度及雷达观测条件密切相关,以下是具体分析:
+# 坦克、装甲车和直升机的RCS统计模型选择与其运动特性、结构复杂度及雷达观测条件密切相关,以下是具体分析:
一、坦克与装甲车
适用模型:Swerling I/III型或对数正态分布
运动特性
@@ -361,3 +361,22 @@ Swerling II/IV、混合分布
坦克的倾斜装甲可能引发极化敏感性,需结合交叉极化模型修正。直升机旋翼的谐振效应在低频段(L波段)可能增强RCS起伏幅度。
通过结合目标运动特性与散射机理,可更精准地选择RCS统计模型,为雷达探测算法设计提供理论支撑。
+# 末敏弹子弹各阶段切换参数
+子弹运动状态随机:10%,因为伞的影响
+
+1. 分离阶段
+ 分离速度=母弹速度(1000m/s)
+2. 减速阶段
+ 减速高度:400 米
+ 减速时间:
+ 末端速度:30~50m/s
+3. 伞降阶段
+ 起始高度:
+ 减速时间:1秒
+ 末端速度:10m/s
+4. 稳态扫描
+ 起始高度:30 度角斜距 200 米
+ 下降速度:10m/s
+5. 攻击阶段
+ 起始高度:30 度角斜距 120 米
+ 攻击速度:2000~3000m/s
\ No newline at end of file
diff --git a/tools/ComprehensiveMissileSimulator.cs b/tools/ComprehensiveMissileSimulator.cs
index 926e3a7..64a1584 100644
--- a/tools/ComprehensiveMissileSimulator.cs
+++ b/tools/ComprehensiveMissileSimulator.cs
@@ -342,7 +342,7 @@ namespace ThreatSource.Tools.MissileSimulation
{
Position = new Vector3D(3000, 1, 20),
Orientation = new Orientation(Math.PI/2, 0.0, 0.0),
- Speed = 700
+ Speed = 950
};
string missileId = "TSM_1";
@@ -490,156 +490,6 @@ namespace ThreatSource.Tools.MissileSimulation
Console.WriteLine($"注册红外测角仪 {infraredTrackerId}");
}
- ///
- /// 添加各类型干扰器
- ///
- private void AddJammers()
- {
- // 添加激光干扰器 - 指向指示器
- var laserJammerParams = new KinematicState
- {
- Position = new Vector3D(0, 0, 0),
- Orientation = CalculateOrientationToEntity(indicators["LD_1"]), // 朝向激光指示器
- Speed = 0.0
- };
- string laserJammerId = "LaserJammer_Designator";
- var laserJammer = _threatSourceFactory.CreateJammer(laserJammerId, "laser_blocking", laserJammerParams, "Tank_1");
- if (laserJammer is BaseJammer jammer4)
- {
- simulationManager.RegisterEntity(laserJammerId, laserJammer);
- jammers[laserJammerId] = jammer4;
- Console.WriteLine($"注册激光干扰器(指向指示器) {laserJammerId}");
- }
-
- // 添加激光干扰器 - 指向导弹
- laserJammerParams = new KinematicState
- {
- Position = new Vector3D(0, 0, 0),
- Orientation = CalculateOrientationToEntity(missiles["LSGM_1"]), // 朝向激光半主动导弹
- Speed = 0.0
- };
- laserJammerId = "LaserJammer_Missile";
- laserJammer = _threatSourceFactory.CreateJammer(laserJammerId, "laser_blocking", laserJammerParams, "Tank_1");
- if (laserJammer is BaseJammer jammer5)
- {
- simulationManager.RegisterEntity(laserJammerId, laserJammer);
- jammers[laserJammerId] = jammer5;
- Console.WriteLine($"注册激光干扰器(指向导弹) {laserJammerId}");
- }
-
- // 添加红外干扰器 - 指向指示器
- var irJammerParams = new KinematicState
- {
- Position = new Vector3D(0, 0, 0),
- Orientation = CalculateOrientationToEntity(indicators["IT_1"]), // 朝向红外指示器
- Speed = 0.0
- };
- string irJammerId = "InfraredJammer_Designator";
- var irJammer = _threatSourceFactory.CreateJammer(irJammerId, "infrared_blocking", irJammerParams, "Tank_1");
- if (irJammer is BaseJammer jammer6)
- {
- simulationManager.RegisterEntity(irJammerId, irJammer);
- jammers[irJammerId] = jammer6;
- Console.WriteLine($"注册红外干扰器(指向指示器) {irJammerId}");
- }
-
- // 添加红外干扰器 - 指向导弹
- irJammerParams = new KinematicState
- {
- Position = new Vector3D(0, 0, 0),
- Orientation = CalculateOrientationToEntity(missiles["ITGM_1"]), // 朝向红外成像导弹
- Speed = 0.0
- };
- irJammerId = "InfraredJammer_Missile";
- irJammer = _threatSourceFactory.CreateJammer(irJammerId, "infrared_blocking", irJammerParams, "Tank_1");
- if (irJammer is BaseJammer jammer7)
- {
- simulationManager.RegisterEntity(irJammerId, irJammer);
- jammers[irJammerId] = jammer7;
- Console.WriteLine($"注册红外干扰器(指向导弹) {irJammerId}");
- }
-
- // 添加毫米波干扰器 - 指向导弹
- var mmwJammerParams = new KinematicState
- {
- Position = new Vector3D(0, 0, 0),
- Orientation = CalculateOrientationToEntity(missiles["MMWG_1"]), // 朝向毫米波导弹
- Speed = 0.0
- };
- string mmwJammerId = "MillimeterWaveJammer_Missile";
- var mmwJammer = _threatSourceFactory.CreateJammer(mmwJammerId, "mmw_blocking", mmwJammerParams, "Tank_1");
- if (mmwJammer is BaseJammer jammer8)
- {
- simulationManager.RegisterEntity(mmwJammerId, mmwJammer);
- jammers[mmwJammerId] = jammer8;
- Console.WriteLine($"注册毫米波干扰器(指向导弹) {mmwJammerId}");
- }
-
- // 添加激光干扰器 - 指向子弹药
- laserJammerParams = new KinematicState
- {
- Position = new Vector3D(0, 0, 0),
- Orientation = new Orientation(0, Math.PI/2, 0), // 朝向垂直向上
- Speed = 0.0
- };
- laserJammerId = "LaserJammer_Submunition";
- laserJammer = _threatSourceFactory.CreateJammer(laserJammerId, "laser_top_blocking", laserJammerParams, "Tank_1");
- if (laserJammer is BaseJammer jammer9)
- {
- simulationManager.RegisterEntity(laserJammerId, laserJammer);
- jammers[laserJammerId] = jammer9;
- Console.WriteLine($"注册激光干扰器(垂直向上) {laserJammerId}");
- }
-
- // 添加红外干扰器 - 指向子弹药
- irJammerParams = new KinematicState
- {
- Position = new Vector3D(0, 0, 0),
- Orientation = new Orientation(0, Math.PI/2, 0), // 朝向垂直向上
- Speed = 0.0
- };
- irJammerId = "InfraredJammer_Submunition";
- irJammer = _threatSourceFactory.CreateJammer(irJammerId, "infrared_top_blocking", irJammerParams, "Tank_1");
- if (irJammer is BaseJammer jammer10)
- {
- simulationManager.RegisterEntity(irJammerId, irJammer);
- jammers[irJammerId] = jammer10;
- Console.WriteLine($"注册红外干扰器(垂直向上) {irJammerId}");
- }
-
- // 添加毫米波干扰器 - 指向子弹药
- mmwJammerParams = new KinematicState
- {
- Position = new Vector3D(0, 0, 0),
- Orientation = new Orientation(0, Math.PI/2, 0), // 朝向垂直向上
- Speed = 0.0
- };
- mmwJammerId = "MillimeterWaveJammer_Submunition";
- mmwJammer = _threatSourceFactory.CreateJammer(mmwJammerId, "mmw_top_blocking", mmwJammerParams, "Tank_1");
- if (mmwJammer is BaseJammer jammer11)
- {
- simulationManager.RegisterEntity(mmwJammerId, mmwJammer);
- jammers[mmwJammerId] = jammer11;
- Console.WriteLine($"注册毫米波干扰器(垂直向上) {mmwJammerId}");
- }
-
- // 添加毫米波补偿干扰器 - 指向导弹
- mmwJammerParams = new KinematicState
- {
- Position = new Vector3D(0, 0, 0),
- Orientation = new Orientation(0, Math.PI/2, 0), // 朝向垂直向上
- Speed = 0.0
- };
- string mmwCompensationJammerId = "MillimeterWaveCompensationJammer_Submunition";
- var mmwCompensationJammer = _threatSourceFactory.CreateJammer(mmwCompensationJammerId, "mmw_compensation", mmwJammerParams, "Tank_1");
- if (mmwCompensationJammer is BaseJammer jammer12)
- {
- simulationManager.RegisterEntity(mmwCompensationJammerId, mmwCompensationJammer);
- jammers[mmwCompensationJammerId] = jammer12;
- Console.WriteLine($"注册毫米波补偿干扰器(垂直向上) {mmwCompensationJammerId}");
- }
- }
-
///
/// 计算朝向实体的方向
///