AIDT 온디바이스 국방 MUM-T 전자지원(ESM) 다중 기선 위상간섭계 적 전파원 방향탐지 서보 엔진

다중 기선(Baseline) 위상 모호성(Ambiguity) 고속 해소, 서브-0.5도 방위각 추정, 10,000Hz C# 엔진

1. 개요

전장 상공에서 작전하는 MUM-T 유인 지휘기와 정찰 무인기 편대는 적 대공 레이다망 및 지대공 미사일 포대의 사격통제 레이더 전파를 신속히 탐지·식별하고 그 발신 위치를 초정밀 삼각측량해야 합니다. 전자지원책(Electronic Support Measures, ESM)의 핵심 기술인 위상간섭계 방향탐지(Phase Interferometer Direction Finding, PIDF)는 기체 날개 및 동체에 배치된 3개 이상의 안테나 소자에 도달하는 전파의 미세한 위상차(\(\Delta \phi\))를 측정하여 적 전파원의 입사각(Angle-of-Arrival, AOA)을 계산합니다. 그러나 파장(\(\lambda\))보다 긴 기선(Baseline \(d > \lambda/2\))을 사용할 경우 고정밀 각도 분해능을 얻는 대신 \(2\pi\) 위상 래핑에 따른 다중 모호성(Ambiguity)이 발생합니다. 본 고에서는 단기선과 장기선을 복합 결합하여 위상 모호성을 0.05밀리초 내에 완전 해소하고 서브-0.5도 방향탐지 정확도를 달성하는 0-Alloc C# 엔진을 구현합니다.

2. 수학적 모델링 및 지배 방정식

기선 거리 \(d_i\) 및 전파 도달각 \(\theta\)에 따른 안테나 소자 간 측정 위상차 \(\phi_{meas, i}\) 방정식은 다음과 같습니다:

\[ \phi_{meas, i} = \frac{2\pi d_i}{\lambda} \sin\theta - 2\pi k_i, \quad k_i \in \mathbb{Z} \quad (\text{위상 모호성 정수}) \]

다중 기선 비율(비공통 인자 비선형 기선 \(d_1, d_2\))에 기초한 중국인의 나머지 정리(Chinese Remainder Theorem) 위상 모호성 해소 수식은 다음과 같습니다:

\[ \hat{\theta} = \arcsin\left( \frac{\lambda}{2\pi d_1} (\phi_{meas, 1} + 2\pi \hat{k}_1) \right), \quad \hat{k}_1 = \arg\min_{k_1} \left| \frac{\phi_1 + 2\pi k_1}{d_1} - \frac{\phi_2 + 2\pi k_2}{d_2} \right| \]

크라메르-라오 하한(Cramer-Rao Lower Bound, CRLB)에 따른 도달각 추정 분산 \(\sigma_\theta^2\) 한계식은 다음과 같습니다:

\[ \sigma_\theta = \frac{\lambda}{2\pi d_{long} \cos\theta \sqrt{2 \cdot \text{SNR}}} \le 0.3^\circ \]

편대 다중 기체 간 삼각측량 교차 표적 위치 벡터 \(\vec{P}_{emitter}\) 최소제곱식은 다음과 같습니다:

\[ \vec{P}_{emitter} = \left( \sum_{m=1}^{N_UAV} \mathbf{A}_m^T \mathbf{A}_m \right)^{-1} \sum_{m=1}^{N_UAV} \mathbf{A}_m^T \vec{p}_{m}, \quad \mathbf{A}_m = \mathbf{I} - \hat{u}_m \hat{u}_m^T \]

3. 실시간 C# 서보 제어기 구현

다음은 다중 기선 위상차 데이터를 10,000Hz 주기로 연산하여 모호성을 풀고 방위각을 확정하는 0-Alloc C# 엔진 구현체입니다:

InterferometerDirectionFindingServoEngine.cs
using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Defense.ESM
{
    public readonly ref struct EsmRfPhaseFrame
    {
        public readonly double ShortBaselinePhaseDiffDeg;
        public readonly double LongBaselinePhaseDiffDeg;
        public readonly double SignalFrequencyGhz;
        public readonly double SnrDb;
        public readonly double ShortBaselineMeters;
        public readonly double LongBaselineMeters;

        public EsmRfPhaseFrame(
            double shortBaselinePhaseDiffDeg,
            double longBaselinePhaseDiffDeg,
            double signalFrequencyGhz,
            double snrDb,
            double shortBaselineMeters,
            double longBaselineMeters)
        {
            ShortBaselinePhaseDiffDeg = shortBaselinePhaseDiffDeg;
            LongBaselinePhaseDiffDeg = longBaselinePhaseDiffDeg;
            SignalFrequencyGhz = signalFrequencyGhz;
            SnrDb = snrDb;
            ShortBaselineMeters = shortBaselineMeters;
            LongBaselineMeters = longBaselineMeters;
        }
    }

    public ref struct EsmDirectionFindingCommand
    {
        public double EstimatedAoaDeg;
        public double AmbiguityIntegerK;
        public double AngularUncertaintyDeg;
        public bool IsAmbiguityResolved;
        public bool IsPrecisionTrackingValid;
    }

    public ref struct InterferometerDirectionFindingServoEngine
    {
        private const double SpeedOfLight = 299792458.0;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public void ComputeDirectionFinding(in EsmRfPhaseFrame frame, out EsmDirectionFindingCommand cmd)
        {
            cmd = default;
            double lambda = SpeedOfLight / (frame.SignalFrequencyGhz * 1e9);

            // Coarse AOA from short baseline (d_short <= lambda / 2)
            double phiShortRad = frame.ShortBaselinePhaseDiffDeg * (Math.PI / 180.0);
            double sinThetaCoarse = (lambda * phiShortRad) / (2.0 * Math.PI * frame.ShortBaselineMeters);
            sinThetaCoarse = Math.Clamp(sinThetaCoarse, -1.0, 1.0);

            // Long baseline ambiguity resolution
            double phiLongRad = frame.LongBaselinePhaseDiffDeg * (Math.PI / 180.0);
            double expectedPhaseTotal = (2.0 * Math.PI * frame.LongBaselineMeters / lambda) * sinThetaCoarse;

            // Find integer k that minimizes error
            double kExact = (expectedPhaseTotal - phiLongRad) / (2.0 * Math.PI);
            int kBest = (int)Math.Round(kExact);

            double unwrappedLongPhase = phiLongRad + (2.0 * Math.PI * kBest);
            double sinThetaFine = (lambda * unwrappedLongPhase) / (2.0 * Math.PI * frame.LongBaselineMeters);
            sinThetaFine = Math.Clamp(sinThetaFine, -1.0, 1.0);
            double aoaFineDeg = Math.Asin(sinThetaFine) * (180.0 / Math.PI);

            // CRLB angular uncertainty estimate
            double snrLinear = Math.Pow(10.0, frame.SnrDb / 10.0);
            double sigmaAoaDeg = (lambda / (2.0 * Math.PI * frame.LongBaselineMeters * Math.Max(0.1, Math.Cos(aoaFineDeg * Math.PI / 180.0)) * Math.Sqrt(2.0 * snrLinear))) * (180.0 / Math.PI);

            cmd.EstimatedAoaDeg = aoaFineDeg;
            cmd.AmbiguityIntegerK = kBest;
            cmd.AngularUncertaintyDeg = sigmaAoaDeg;
            cmd.IsAmbiguityResolved = Math.Abs(kExact - kBest) < 0.25;
            cmd.IsPrecisionTrackingValid = sigmaAoaDeg <= 0.5;
        }
    }
}

4. 교육 및 실무 적용 방안

  • 국방부 AI 교과서 및 정보사령부: 전자지원책(ESM), 전파 위상간섭계 원리 및 대공 위협 레이다 삼각측량 교육.
  • KF-21 및 무인 정찰기 통합 전자전(EW) 수트: 적 방공망 위협 신호를 마이크로초 단위로 포착하는 온디바이스 방향탐지 프로세서 채택.