Fix了一些干扰测试的 BUG

This commit is contained in:
Tian jianyong 2025-04-10 19:39:00 +08:00
parent 0dc60712c9
commit a7abba5de7
13 changed files with 135 additions and 119 deletions

View File

@ -26,7 +26,7 @@ namespace ThreatSource.Tests.Indicator
{
LaserPower = 1000,
LaserDivergenceAngle = 0.001,
JammingResistanceThreshold = 10000,
JammingResistanceThreshold = 1.0,
LaserWavelength = 1.06
};
@ -42,7 +42,7 @@ namespace ThreatSource.Tests.Indicator
var designatorInitialMotion = new MotionParameters
{
Position = new Vector3D(0, 0, 0),
Position = new Vector3D(0, 100, 0),
Orientation = new Orientation(0, 0, 0),
InitialSpeed = 0
};
@ -106,9 +106,9 @@ namespace ThreatSource.Tests.Indicator
_simulationManager.PublishEvent(new LaserJammingEvent
{
JammingPower = jammingPower,
Wavelength = 1.05,
JammingSourcePosition = new Vector3D(50, 0, 0),
JammingDirection = new Vector3D(-1, 0, 0),
Wavelength = 1.06,
JammingSourcePosition = new Vector3D(0, 10, 0),
JammingDirection = new Vector3D(0, 1, 0),
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise,
SenderId = "jammer1"

View File

@ -75,13 +75,13 @@ namespace ThreatSource.Tests.Jamming
// 创建干扰事件
var jammingEvent = new InfraredJammingEvent
{
JammingPower = 500.0, // 高于阈值
Wavelength = 4, // 中波红外范围
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0), // 指向探测器
JammingAngleRange = Math.PI / 4, // 45度角
JammingPower = 500.0,
Wavelength = 4,
JammingSourcePosition = new Vector3D(10, 10, 0), // 更靠近探测器,且角度更小
JammingDirection = new Vector3D(-0.7071, -0.7071, 0), // 45度角指向探测器
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise,
Duration = null // 持续干扰
Duration = null
};
// Act
@ -147,11 +147,11 @@ namespace ThreatSource.Tests.Jamming
{
JammingPower = 500.0,
Wavelength = 4,
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingSourcePosition = new Vector3D(10, 10, 0),
JammingDirection = new Vector3D(-0.7071, -0.7071, 0),
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise,
Duration = 0.5 // 0.5秒后过期
Duration = 0.5
};
// Act - 应用干扰
@ -180,11 +180,11 @@ namespace ThreatSource.Tests.Jamming
{
JammingPower = 500.0,
Wavelength = 4,
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingSourcePosition = new Vector3D(10, 10, 0),
JammingDirection = new Vector3D(-0.7071, -0.7071, 0),
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise,
Duration = null // 持续干扰
Duration = null
};
// Act - 应用干扰

View File

@ -30,6 +30,7 @@ namespace ThreatSource.Tests.Jamming
var config = new LaserBeamRiderConfig
{
LaserPower = 100,
LaserWavelength = 1.06,
ControlFieldDiameter = 5.0,
MaxGuidanceDistance = 5000,
JammingResistanceThreshold = 0.05 // 设置干扰抗性阈值为50mW
@ -77,7 +78,7 @@ namespace ThreatSource.Tests.Jamming
var jammingEvent = new LaserJammingEvent
{
JammingPower = 2000, // 高功率干扰
Wavelength = 1.05,
Wavelength = 1.06,
JammingSourcePosition = new Vector3D(50, 0, 0),
JammingDirection = new Vector3D(-1, 0, 0), // 指向激光驾束仪
JammingAngleRange = Math.PI / 4, // 45度角
@ -109,7 +110,7 @@ namespace ThreatSource.Tests.Jamming
var jammingEvent = new LaserJammingEvent
{
JammingPower = 2000, // 高功率干扰
Wavelength = 1.05,
Wavelength = 1.06,
JammingSourcePosition = new Vector3D(50, 0, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingAngleRange = Math.PI / 4,
@ -152,7 +153,7 @@ namespace ThreatSource.Tests.Jamming
var jammingEvent = new LaserJammingEvent
{
JammingPower = 2000, // 高功率干扰
Wavelength = 1.05,
Wavelength = 1.06,
JammingSourcePosition = new Vector3D(50, 0, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingAngleRange = Math.PI / 4,
@ -190,7 +191,7 @@ namespace ThreatSource.Tests.Jamming
var jammingEvent = new LaserJammingEvent
{
JammingPower = 2000, // 高功率干扰
Wavelength = 1.05,
Wavelength = 1.06,
JammingSourcePosition = new Vector3D(50, 0, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingAngleRange = Math.PI / 4,
@ -225,7 +226,7 @@ namespace ThreatSource.Tests.Jamming
var jammingEvent = new LaserJammingEvent
{
JammingPower = 2000, // 高功率干扰
Wavelength = 1.05,
Wavelength = 1.06,
JammingSourcePosition = new Vector3D(50, 0, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingAngleRange = Math.PI / 4,

View File

@ -30,8 +30,8 @@ namespace ThreatSource.Tests.Jamming
{
LaserPower = 100,
LaserDivergenceAngle = 0.001,
JammingResistanceThreshold = 0.01, // 设置干扰抗性阈值为10mW适应球面扩散模型
LaserWavelength = 1.06
JammingResistanceThreshold = 0.05, // 干扰阈值50mW
LaserWavelength = 1.06 // 工作波长1.06μm
};
// 初始化激光指示器
@ -76,13 +76,13 @@ namespace ThreatSource.Tests.Jamming
// 创建干扰事件
var jammingEvent = new LaserJammingEvent
{
JammingPower = 2000, // 高于阈值
Wavelength = 1.05,
JammingSourcePosition = new Vector3D(50, 0, 0),
JammingDirection = new Vector3D(-1, 0, 0), // 指向激光指示器
JammingAngleRange = Math.PI / 4, // 45度角
JammingPower = 2000,
Wavelength = 1.06, // 匹配波长1.06μm
JammingSourcePosition = new Vector3D(5, 0, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise,
Duration = null // 持续干扰
Duration = null
};
// Act
@ -105,7 +105,7 @@ namespace ThreatSource.Tests.Jamming
var jammingEvent = new LaserJammingEvent
{
JammingPower = 500, // 角度范围外的干扰
Wavelength = 1.05,
Wavelength = 1.06,
JammingSourcePosition = new Vector3D(0, 50, 0), // 位于上方
JammingDirection = new Vector3D(0, 0, 1), // 指向前方,不是指向指示器
JammingAngleRange = 0.1, // 很小的角度范围
@ -132,7 +132,7 @@ namespace ThreatSource.Tests.Jamming
var jammingEvent = new LaserJammingEvent
{
JammingPower = 10, // 低功率干扰
Wavelength = 1.05,
Wavelength = 1.06,
JammingSourcePosition = new Vector3D(50, 0, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingAngleRange = Math.PI / 4,
@ -181,13 +181,13 @@ namespace ThreatSource.Tests.Jamming
// 创建有限时间的干扰事件
var jammingEvent = new LaserJammingEvent
{
JammingPower = 500, // 有限时间的干扰
Wavelength = 1.05,
JammingSourcePosition = new Vector3D(50, 0, 0),
JammingPower = 500,
Wavelength = 1.06, // 匹配波长1.06μm
JammingSourcePosition = new Vector3D(5, 0, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise,
Duration = 0.5 // 0.5秒后过期
Duration = 0.5
};
// Act - 应用干扰
@ -217,13 +217,13 @@ namespace ThreatSource.Tests.Jamming
// 创建持续干扰事件
var jammingEvent = new LaserJammingEvent
{
JammingPower = 500, // 持续干扰
Wavelength = 1.05,
JammingSourcePosition = new Vector3D(50, 0, 0),
JammingPower = 500,
Wavelength = 1.06, // 匹配波长1.06μm
JammingSourcePosition = new Vector3D(5, 0, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise,
Duration = null // 持续干扰
Duration = null
};
// Act - 应用干扰
@ -253,9 +253,9 @@ namespace ThreatSource.Tests.Jamming
// 创建干扰事件
var jammingEvent = new LaserJammingEvent
{
JammingPower = 500, // 照射禁用测试
Wavelength = 1.05,
JammingSourcePosition = new Vector3D(50, 0, 0),
JammingPower = 500,
Wavelength = 1.06, // 匹配波长1.06μm
JammingSourcePosition = new Vector3D(5, 0, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise
@ -285,7 +285,7 @@ namespace ThreatSource.Tests.Jamming
var matchingJammingEvent = new LaserJammingEvent
{
JammingPower = 2000,
Wavelength = 1.05,
Wavelength = 1.06, // 匹配波长1.06μm
JammingSourcePosition = new Vector3D(50, 0, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingAngleRange = Math.PI / 4,
@ -306,7 +306,7 @@ namespace ThreatSource.Tests.Jamming
var nonMatchingJammingEvent = new LaserJammingEvent
{
JammingPower = 2000,
Wavelength = 1.55,
Wavelength = 1.56,
JammingSourcePosition = new Vector3D(50, 0, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingAngleRange = Math.PI / 4,

View File

@ -73,13 +73,12 @@ namespace ThreatSource.Tests.Jamming
// 创建干扰事件
var jammingEvent = new LaserJammingEvent
{
JammingPower = 500.0, // 高于阈值
Wavelength = 1.064, // 匹配测距仪波长
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0), // 指向测距仪
JammingAngleRange = Math.PI / 4, // 45度角
JammingMode = JammingMode.Noise,
Duration = null // 持续干扰
JammingPower = 500,
Wavelength = 1.06,
JammingSourcePosition = new Vector3D(0, 10, 0),
JammingDirection = new Vector3D(0, -1, 0),
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise
};
// Act
@ -97,8 +96,8 @@ namespace ThreatSource.Tests.Jamming
// 创建角度范围外的干扰事件
var jammingEvent = new LaserJammingEvent
{
JammingPower = 500.0,
Wavelength = 1.064,
JammingPower = 500,
Wavelength = 1.06,
JammingSourcePosition = new Vector3D(0, 150, 0), // 位于上方
JammingDirection = new Vector3D(0, 0, 1), // 指向前方,不是指向测距仪
JammingAngleRange = 0.1, // 很小的角度范围
@ -121,7 +120,7 @@ namespace ThreatSource.Tests.Jamming
var jammingEvent = new LaserJammingEvent
{
JammingPower = 10.0, // 低于阈值
Wavelength = 1.064,
Wavelength = 1.06,
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingAngleRange = Math.PI / 4,
@ -143,13 +142,13 @@ namespace ThreatSource.Tests.Jamming
// 创建有限时间的干扰事件
var jammingEvent = new LaserJammingEvent
{
JammingPower = 500.0,
Wavelength = 1.064,
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingPower = 500,
Wavelength = 1.06,
JammingSourcePosition = new Vector3D(0, 10, 0),
JammingDirection = new Vector3D(0, -1, 0),
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise,
Duration = 0.5 // 0.5秒后过期
Duration = 0.5
};
// Act - 应用干扰
@ -176,13 +175,12 @@ namespace ThreatSource.Tests.Jamming
// 创建持续干扰事件
var jammingEvent = new LaserJammingEvent
{
JammingPower = 500.0,
Wavelength = 1.064,
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingPower = 500,
Wavelength = 1.06,
JammingSourcePosition = new Vector3D(0, 10, 0),
JammingDirection = new Vector3D(0, -1, 0),
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise,
Duration = null // 持续干扰
JammingMode = JammingMode.Noise
};
// Act - 应用干扰
@ -212,10 +210,10 @@ namespace ThreatSource.Tests.Jamming
// 创建干扰事件
var jammingEvent = new LaserJammingEvent
{
JammingPower = 500.0,
Wavelength = 1.064,
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingPower = 500,
Wavelength = 1.06,
JammingSourcePosition = new Vector3D(0, 10, 0),
JammingDirection = new Vector3D(0, 1, 0),
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise
};

View File

@ -73,13 +73,12 @@ namespace ThreatSource.Tests.Jamming
// 创建干扰事件
var jammingEvent = new MillimeterWaveJammingEvent
{
JammingPower = 500.0, // 高于阈值
Wavelength = 3.0, // 3毫米波长
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0), // 指向测高雷达
JammingAngleRange = Math.PI / 4, // 45度角
JammingMode = JammingMode.Noise,
Duration = null // 持续干扰
JammingPower = 500,
Wavelength = 3.0,
JammingSourcePosition = new Vector3D(0, 50, 0),
JammingDirection = new Vector3D(0, -1, 0),
JammingAngleRange = Math.PI / 6,
JammingMode = JammingMode.Noise
};
// Act
@ -167,10 +166,10 @@ namespace ThreatSource.Tests.Jamming
var jammingEvent = new MillimeterWaveJammingEvent
{
JammingPower = 500.0,
Wavelength = 3.0,
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingAngleRange = Math.PI / 4,
Wavelength = 3.0, // 设置为3mm波段的波长
JammingSourcePosition = new Vector3D(0, 120, 0),
JammingDirection = new Vector3D(0, -1, 0),
JammingAngleRange = Math.PI / 6,
JammingMode = JammingMode.Noise,
Duration = 0.5 // 0.5秒后过期
};
@ -200,12 +199,11 @@ namespace ThreatSource.Tests.Jamming
var jammingEvent = new MillimeterWaveJammingEvent
{
JammingPower = 500.0,
Wavelength = 3.0,
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise,
Duration = null // 持续干扰
Wavelength = 3.0, // 设置为3mm波段的波长
JammingSourcePosition = new Vector3D(0, 120, 0),
JammingDirection = new Vector3D(0, -1, 0),
JammingAngleRange = Math.PI / 6,
JammingMode = JammingMode.Noise
};
// Act - 应用干扰
@ -237,9 +235,9 @@ namespace ThreatSource.Tests.Jamming
{
JammingPower = 500.0,
Wavelength = 3.0,
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingAngleRange = Math.PI / 4,
JammingSourcePosition = new Vector3D(0, 120, 0),
JammingDirection = new Vector3D(0, -1, 0),
JammingAngleRange = Math.PI / 6,
JammingMode = JammingMode.Noise
};

View File

@ -75,9 +75,8 @@ namespace ThreatSource.Tests.Jamming
var jammingEvent = new MillimeterWaveJammingEvent
{
JammingPower = 500.0, // 高于阈值
Wavelength = 3.0, // 3毫米波长
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0), // 指向辐射计
JammingSourcePosition = new Vector3D(10, 10, 0),
JammingDirection = new Vector3D(-0.7071, -0.7071, 0), // 45度角指向辐射计
JammingAngleRange = Math.PI / 4, // 45度角
JammingMode = JammingMode.Noise,
Duration = null // 持续干扰
@ -167,13 +166,13 @@ namespace ThreatSource.Tests.Jamming
// 创建有限时间的干扰事件
var jammingEvent = new MillimeterWaveJammingEvent
{
JammingPower = 500.0,
Wavelength = 3.0,
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingPower = 500,
Wavelength = 3.0, // 3mm波段
JammingSourcePosition = new Vector3D(0, 120, 0),
JammingDirection = new Vector3D(0, -1, 0),
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise,
Duration = 0.5 // 0.5秒后过期
Duration = 0.5
};
// Act - 应用干扰
@ -200,13 +199,12 @@ namespace ThreatSource.Tests.Jamming
// 创建持续干扰事件
var jammingEvent = new MillimeterWaveJammingEvent
{
JammingPower = 500.0,
Wavelength = 3.0,
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingPower = 500,
Wavelength = 3.0, // 3mm波段
JammingSourcePosition = new Vector3D(0, 120, 0),
JammingDirection = new Vector3D(0, -1, 0),
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise,
Duration = null // 持续干扰
JammingMode = JammingMode.Noise
};
// Act - 应用干扰
@ -245,10 +243,10 @@ namespace ThreatSource.Tests.Jamming
// 创建干扰事件
var jammingEvent = new MillimeterWaveJammingEvent
{
JammingPower = 500.0,
Wavelength = 3.0,
JammingSourcePosition = new Vector3D(50, 100, 0),
JammingDirection = new Vector3D(-1, 0, 0),
JammingPower = 500,
Wavelength = 3.0, // 3mm波段
JammingSourcePosition = new Vector3D(0, 10, 0),
JammingDirection = new Vector3D(0, -1, 0),
JammingAngleRange = Math.PI / 4,
JammingMode = JammingMode.Noise
};

View File

@ -6,8 +6,8 @@
"type": "LaserDesignator",
"designatorConfig": {
"laserPower": 5000,
"laserDivergenceAngle": 0.0003,
"laserWavelength": 1.06,
"laserDivergenceAngle": 0.0003,
"laserCodeConfig": {
"code": {
"codeType": "PRF",

View File

@ -46,6 +46,17 @@ namespace ThreatSource.Indicator
/// </remarks>
public double LaserPower { get; private set; }
/// <summary>
/// 获取或设置激光波长
/// </summary>
/// <remarks>
/// 单位:微米
/// 影响激光波束的波长特性
/// </remarks>
public double LaserWavelength { get; private set; } = 1.06;
/// <summary>
/// 获取或设置激光发散角
/// </summary>
@ -120,6 +131,7 @@ namespace ThreatSource.Indicator
: base(id, motionParameters, simulationManager)
{
LaserPower = config.LaserPower;
LaserWavelength = config.LaserWavelength;
ControlFieldDiameter = config.ControlFieldDiameter;
LaserDirection = Vector3D.Zero;
MaxGuidanceDistance = config.MaxGuidanceDistance;
@ -249,12 +261,10 @@ namespace ThreatSource.Indicator
Mode = evt.JammingMode,
Duration = evt.Duration
};
// 检查波长匹配(激光特定逻辑)
bool isWavelengthInRange = evt.Wavelength >= 1.0 && evt.Wavelength <= 1.1;
// 使用JammableComponent进行干扰判断
if (isWavelengthInRange)
// 检查波长匹配(激光特定逻辑)
if (evt.Wavelength == LaserWavelength)
{
ApplyJamming(parameters);
Debug.WriteLine($"干扰状态 - IsJammed: {IsJammed}");

View File

@ -85,7 +85,7 @@ namespace ThreatSource.Indicator
/// 指示器工作所需的工作波长
/// 用于波长范围匹配检查
/// </remarks>
public double Wavelength { get; private set; } = 1.06;
public double LaserWavelength { get; private set; } = 1.06;
/// <summary>
/// 初始化激光指示器的新实例
@ -114,7 +114,7 @@ namespace ThreatSource.Indicator
LaserDivergenceAngle = config.LaserDivergenceAngle;
LaserCodeConfig = config.LaserCodeConfig;
JammingThreshold = config.JammingResistanceThreshold;
Wavelength = config.LaserWavelength;
LaserWavelength = config.LaserWavelength;
// 设置干扰阈值并添加支持的干扰类型
InitializeJamming(JammingThreshold, [JammingType.Laser]);
@ -220,12 +220,10 @@ namespace ThreatSource.Indicator
Mode = evt.JammingMode,
Duration = evt.Duration
};
// 检查波长匹配(激光特定逻辑)
bool isWavelengthInRange = evt.Wavelength == Wavelength;
// 使用JammableComponent进行干扰判断
if (isWavelengthInRange)
// 检查波长匹配(激光特定逻辑)
if (evt.Wavelength == LaserWavelength)
{
ApplyJamming(parameters);
Debug.WriteLine($"干扰状态 - IsJammed: {IsJammed}");

View File

@ -227,6 +227,7 @@ namespace ThreatSource.Sensor
{
Debug.WriteLine($"激光测距仪受到干扰,功率:{parameters.Power}瓦特");
sensorData.IsValid = false;
sensorData.Distance = 0; // 在干扰状态下将距离设置为0
}
}
@ -240,6 +241,7 @@ namespace ThreatSource.Sensor
{
Debug.WriteLine("激光测距仪干扰已清除");
sensorData.IsValid = true;
sensorData.Distance = currentDistance;
}
}

View File

@ -230,6 +230,7 @@ namespace ThreatSource.Sensor
{
Debug.WriteLine($"毫米波测高雷达受到干扰,功率:{parameters.Power}瓦特");
sensorData.IsValid = false;
sensorData.Altitude = 0; // 被干扰时将高度值设为0
}
}
@ -243,6 +244,7 @@ namespace ThreatSource.Sensor
{
Debug.WriteLine("毫米波测高雷达干扰已清除");
sensorData.IsValid = true;
sensorData.Altitude = currentAltitude; // 恢复正常的高度测量值
}
}
}

View File

@ -174,6 +174,15 @@ namespace ThreatSource.Simulation
/// </remarks>
public double LaserPower { get; set; } = 0;
/// <summary>
/// 获取或设置激光波长
/// </summary>
/// <remarks>
/// 单位:微米
/// 影响制导波束的波长特性
/// </remarks>
public double LaserWavelength { get; set; } = 1.06;
/// <summary>
/// 获取或设置控制场直径
/// </summary>