ThreatSourceLibaray/docs/project/mmw_snr_averaging_improvements.md

5.5 KiB
Raw Blame History

毫米波制导系统SNR平均化改进

问题背景

在之前的测试中发现,当毫米波制导系统的视场角(FOV)为45度时目标检测非常困难但当减少到15度时成功率显著提高。通过分析发现主要问题在于

  1. SNR阈值过于严格锁定SNR阈值为-10dB而实际测试中SNR为-20.71dB
  2. Swerling RCS模型波动影响RCS从19.95 dBsm降到2.39 dBsm造成SNR大幅波动
  3. 锁定模式不稳定由于RCS波动系统频繁在Lock和Search模式间切换

改进方案

1. SNR阈值调整

修改前:

LockSNRThreshold = -10.0  # 锁定信噪比阈值 (分贝)

修改后:

LockSNRThreshold = -15.0  # 锁定信噪比阈值 (分贝) - 放宽阈值提高稳定性

2. FOV视场角优化

修改前:

FieldOfViewAngle = 15.0   # 视场角 (度)

修改后:

FieldOfViewAngle = 30.0   # 视场角 (度) - 扩大搜索范围提高目标捕获率

优化理由:

  • 覆盖范围扩大4倍大幅提高目标捕获能力
  • 减少因初始制导交接误差导致的目标遗漏
  • 更符合实际毫米波制导头的典型设计参数
  • 提高系统对目标机动的适应性

3. 波束宽度精度优化

修改前:

SearchBeamWidth = 5.0     # 搜索波束宽度 (度)
TrackBeamWidth = 4.0      # 跟踪波束宽度 (度)
LockBeamWidth = 3.0       # 锁定波束宽度 (度)

修改后:

SearchBeamWidth = 5.0     # 搜索波束宽度 (度)
TrackBeamWidth = 3.0      # 跟踪波束宽度 (度) - 提高跟踪精度
LockBeamWidth = 2.0       # 锁定波束宽度 (度) - 提高锁定精度

优化效果:

  • 跟踪精度提升25%4°→3°
  • 锁定精度提升33%3°→2°
  • 符合实际毫米波雷达3°-6°波束宽度范围
  • 与30°FOV形成合理的精度梯度6倍、10倍、15倍覆盖

4. SNR滑动平均机制

MillimeterWaveGuidanceSystem.cs中添加了SNR历史队列和平均化计算

/// <summary>
/// Lock模式的SNR历史队列用于计算平均SNR
/// </summary>
private readonly Queue<double> lockSnrHistory = new();

/// <summary>
/// Track模式的探测历史滑动窗口大小
/// </summary>
private const int TRACK_DETECTION_WINDOW_SIZE = 8;

/// <summary>
/// Lock模式SNR滑动窗口大小
/// </summary>
private const int LOCK_SNR_WINDOW_SIZE = 8;

/// <summary>
/// Track模式切换到Lock模式的成功率阈值
/// </summary>
private const double SUCCESS_RATE_THRESHOLD = 0.5;

/// <summary>
/// 计算Lock模式的平均SNR
/// </summary>
private double CalculateAverageLockSnr()
{
    return lockSnrHistory.Count > 0 ? lockSnrHistory.Average() : double.MinValue;
}

5. Lock模式逻辑优化

修改前: 使用瞬时SNR进行判断

bool currentFrameSuccessForLock = IsTargetInBeam(missileDirection, targetDirection, config.LockBeamWidth) 
    && localSnrDb >= config.LockSNRThreshold;

修改后: 使用平均SNR进行判断

// 添加SNR到历史队列
lockSnrHistory.Enqueue(localSnrDb);
while (lockSnrHistory.Count > LOCK_SNR_WINDOW_SIZE) lockSnrHistory.Dequeue();

// 计算平均SNR
double averageSnr = CalculateAverageLockSnr();

// 使用平均SNR进行判断如果历史数据不足则使用瞬时SNR
double snrForDecision = lockSnrHistory.Count >= LOCK_SNR_WINDOW_SIZE ? averageSnr : localSnrDb;
bool currentFrameSuccessForLock = IsTargetInBeam(missileDirection, targetDirection, config.LockBeamWidth) 
    && snrForDecision >= config.LockSNRThreshold;

6. 增强调试输出

添加了RCS波动的详细调试信息

Debug.WriteLine($"[MMW_GUIDANCE] 目标 {target.Id}: 原始RCS: {rcsDbSm:F2} dBsm ({rcsLinear:F4} m²).");
double rcsDbSmAfterSwerling = 10.0 * Math.Log10(rcsLinear);
double rcsVariationDb = rcsDbSmAfterSwerling - rcsDbSm;
Debug.WriteLine($"[MMW_GUIDANCE] 目标 {target.Id}: Swerling后RCS: {rcsDbSmAfterSwerling:F2} dBsm ({rcsLinear:F4} m²), 波动: {rcsVariationDb:+F2} dB.");

技术原理

Swerling RCS模型影响

Swerling模型模拟了真实环境中目标RCS的随机波动

  • Swerling I/II:慢速波动,适用于复杂目标
  • Swerling III/IV:快速波动,适用于简单目标

RCS波动直接影响SNR计算

SNR = P_t * G_t * G_r * λ² * σ / ((4π)³ * R⁴ * k * T * B * F * L)

其中σ为RCS其波动会导致SNR相应波动。

滑动平均的优势

  1. 降低噪声影响:通过多帧平均减少瞬时波动
  2. 提高稳定性避免因单帧SNR下降而丢失目标
  3. 保持响应性8帧窗口在稳定性和响应性间取得平衡

配置文件更新

所有相关配置文件已更新:

  • ThreatSource/data/missiles/mmw/mmw_001.toml
  • ThreatSource/data/missiles/mmw/mmw_001.json
  • ThreatSource/data/missiles/composite/cg_001.toml

预期效果

  1. 锁定稳定性提升通过SNR平均化减少因RCS波动导致的模式切换
  2. 检测范围扩大放宽SNR阈值允许在更远距离或更恶劣条件下锁定目标
  3. 系统鲁棒性增强更好地应对Swerling模型的RCS波动

测试验证

创建了专门的测试类MillimeterWaveGuidanceSnrAveragingTests来验证:

  • SNR阈值设置正确性
  • 滑动平均机制的有效性
  • 锁定稳定性的改善

总结

通过SNR阈值调整和滑动平均机制的引入毫米波制导系统在面对Swerling RCS模型波动时具有更好的稳定性和鲁棒性。这些改进特别适用于复杂电磁环境下的目标跟踪和锁定任务。