1. 개요
시계외 장거리 공대공 미사일(Beyond-Visual-Range Air-to-Air Missile, BVRAAM)은 원거리 적기를 요격하기 위해 100km 이상의 거리를 비행합니다. 전통적인 단일 펄스 고체 로켓 모터는 발사 초기에 모든 추진제를 소진한 후 긴 관성 활공(Coasting) 단계에 돌입하므로, 종말 회피 기동을 시도하는 고기동 적기와의 교전 시 잔여 속도와 조종 에너지가 고갈되어 격추 확률이 급감합니다. 이에 대응하여 고체 추진제를 열간 격벽(Thermal Barrier)으로 분리한 이중 펄스 로켓 모터(Dual-Pulse Solid Rocket Motor)는 1차 펄스로 초기 가속 및 고고도 순항 궤적에 진입한 후 활공하다가, 종말 요격 단계에서 2차 펄스를 적시에 점화함으로써 잔여 기동성(Kinetic Energy)을 폭발적으로 회복합니다. 본 고에서는 표적의 잔여 거리, 폐쇄 속도, 고도 및 적 회피 기동 강도를 10,000Hz 주기로 융합 분석하여 최적 2차 펄스 점화 명령을 하달하는 0-Alloc C# 서보 엔진을 구현합니다.
2. 수학적 모델링 및 지배 방정식
미사일의 3차원 점질량 비행 동역학 및 잔여 에너지(비에너지, Specific Energy) \(E_s\) 방정식은 다음과 같습니다:
종말 유도 단계 비탈출 영역(No-Escape Zone, NEZ) 요구 잔여 속도 \(V_{term}^{req}\) 및 표적 도달 시간 \(t_{go}\) 수식은 다음과 같습니다:
최적 2차 펄스 점화 인덱스 \(J_{ignite}(t)\) 및 점화 결정 부등식은 다음과 같습니다:
2차 펄스 연소 중 열응력 한계 조건 부등식은 다음과 같습니다:
3. 실시간 C# 서보 제어기 구현
다음은 교전 기하와 미사일 잔여 에너지를 10,000Hz 초고속 루프로 모니터링하여 2차 펄스 점화 밸브를 발화시키는 0-Alloc C# 엔진 구현체입니다:
using System;
using System.Runtime.CompilerServices;
namespace ZeliDesk.Defense.BVRAAM
{
public readonly ref struct BvraamKinematicsFrame
{
public readonly double SlantRangeMeters;
public readonly double ClosingVelocityMps;
public readonly double MissileSpeedMach;
public readonly double AltitudeMeters;
public readonly double TargetLateralAccelG;
public readonly bool HasFirstPulseBurnedOut;
public readonly bool HasSecondPulseIgnited;
public BvraamKinematicsFrame(
double slantRangeMeters,
double closingVelocityMps,
double missileSpeedMach,
double altitudeMeters,
double targetLateralAccelG,
bool hasFirstPulseBurnedOut,
bool hasSecondPulseIgnited)
{
SlantRangeMeters = slantRangeMeters;
ClosingVelocityMps = closingVelocityMps;
MissileSpeedMach = missileSpeedMach;
AltitudeMeters = altitudeMeters;
TargetLateralAccelG = targetLateralAccelG;
HasFirstPulseBurnedOut = hasFirstPulseBurnedOut;
HasSecondPulseIgnited = hasSecondPulseIgnited;
}
}
public ref struct DualPulseControlCommand
{
public double TimeToGoSeconds;
public double SpecificEnergyKm;
public double IgnitionReadinessIndex;
public bool FireSecondPulseIgnition;
public bool IsTargetInNoEscapeZone;
}
public ref struct DualPulseIgnitionServoEngine
{
private readonly double _pulse2BurnDurationSec;
private readonly double _pulse2RangeThresholdMeters;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public DualPulseIgnitionServoEngine(double pulse2BurnDurationSec, double pulse2RangeThresholdMeters)
{
_pulse2BurnDurationSec = pulse2BurnDurationSec;
_pulse2RangeThresholdMeters = pulse2RangeThresholdMeters;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void EvaluateIgnitionTrigger(in BvraamKinematicsFrame frame, out DualPulseControlCommand cmd)
{
cmd = default;
double vc = Math.Max(100.0, frame.ClosingVelocityMps);
double tgo = frame.SlantRangeMeters / vc;
// Specific Energy: Es = h + v^2 / 2g (km)
double vMps = frame.MissileSpeedMach * 340.0;
double esKm = (frame.AltitudeMeters + (vMps * vMps) / 19.62) * 1e-3;
// Ignition readiness calculation
double rangeRatio = Math.Clamp(1.0 - (frame.SlantRangeMeters / _pulse2RangeThresholdMeters), 0.0, 1.0);
double timeRatio = Math.Clamp(_pulse2BurnDurationSec / Math.Max(0.1, tgo), 0.0, 2.0);
double maneuverFactor = Math.Clamp(frame.TargetLateralAccelG / 9.0, 0.0, 1.0);
double index = 0.5 * rangeRatio + 0.3 * timeRatio + 0.2 * maneuverFactor;
bool canIgnite = frame.HasFirstPulseBurnedOut && !frame.HasSecondPulseIgnited;
bool trigger = canIgnite && (index >= 0.85 || tgo <= (_pulse2BurnDurationSec * 1.2));
bool nez = frame.SlantRangeMeters <= 25000.0 && (frame.MissileSpeedMach >= 3.5 || trigger);
cmd.TimeToGoSeconds = tgo;
cmd.SpecificEnergyKm = esKm;
cmd.IgnitionReadinessIndex = index;
cmd.FireSecondPulseIgnition = trigger;
cmd.IsTargetInNoEscapeZone = nez;
}
}
}
4. 교육 및 실무 적용 방안
- 국방부 AI 교과서 및 공군 작전사령부: 공대공 미사일 에너지 관리, 이중 펄스 추진 제어 및 NEZ 요격 전술 시뮬레이션.
- 차세대 국산 장거리 공대공 미사일 체계: KF-21 탑재 국산 BVRAAM의 종말 요격 기동성 극대화를 위한 온디바이스 점화 판단 알고리즘.