2022 개정 교육과정 연계 온디바이스 전파천문학·시공간관측 STEM 시리즈 #78

초장축 전파간섭계(VLBI) 블랙홀 사건지평선 간섭 가시도(Visibility) 보정 서보 엔진

230GHz 대기 난류 위상 요동 극복 및 0-Alloc C# 수소 메이저 원자시계 기선(Baseline) 지연 추종 제어 루프

핵심 연구 개요 및 교과 연계

인류 최초로 초대질량 블랙홀 $M87^*$ 및 은하 중심 $Sgr\text{ }A^*$의 그림자를 포착한 사건지평선 망원경(Event Horizon Telescope, EHT)은 전 지구적 규모의 초장축 전파간섭계(VLBI, Very Long Baseline Interferometry) 기술에 기반합니다. $1.3\text{ mm}$ ($230\text{ GHz}$) 초고주파 전파 신호는 기저선 길이가 수천 km에 달할 때 지구 대류권 내 수증기 요동과 전리층 전자 밀도 변화로 인해 극심한 위상 노이즈(Phase Jitter)를 겪게 되며, 이는 간섭 줄무늬(Fringe) 가시도(Visibility)를 붕괴시킵니다.

본 백서는 2022 개정 물리학 II (파동의 중첩과 간섭, 간섭계의 분해능과 회절 한계), 지구과학 II (전파천문학과 대기의 창, 대류권 및 전리층의 물리적 특성), 미적분 (반-시터트-제르니케 반전 푸리에 변환 및 복소 가시도 적분), 그리고 정보 (C# 13 0-Alloc 스택 연산)를 융합하여, 삼각 폐쇄 위상(Closure Phase) 기법을 온디바이스 스택 메모리 내에서 1,000Hz로 복원하는 실시간 기선 위상 보정 서보 엔진을 구축합니다.

1. 반-시터트-제르니케(Van Cittert-Zernike) 정리 및 폐쇄 위상 불변량

천구 표면의 전파 강도 분포 $I(l, m)$와 두 망원경 사이의 기선 벡터 $(u, v)$에 의해 측정되는 복소 간섭 가시도 $V(u, v)$는 2차원 푸리에 변환 관계를 만족합니다:

$$V(u, v) = \iint_{-\infty}^{\infty} I(l, m) \exp\left[-2\pi i (u l + v m)\right] dl dm$$

각 망원경 $i, j$ 사이에서 측정되는 관측 가시도 $\tilde{V}_{ij}(t)$는 각 관측소의 대기 위상 오차 $\phi_i(t), \phi_j(t)$와 수소 메이저 시계 지연 $\tau_{clock}$에 의해 오염됩니다:

$$\tilde{V}_{ij}(t) = G_i(t) G_j^*(t) V_{ij}(t) = |g_i||g_j| e^{i (\phi_i - \phi_j)} V_{ij}(t)$$

3개 관측소 $(1, 2, 3)$의 비스펙트럼(Bispectrum)을 취하면 사이트별 대기 위상 오차가 완전 상쇄되는 폐쇄 위상(Closure Phase, $\Psi_{123}$)이 보존됩니다:

$$\Psi_{123} = \arg\left(\tilde{V}_{12} \tilde{V}_{23} \tilde{V}_{31}\right) = \arg\left(V_{12} V_{23} V_{31}\right)$$

온디바이스 서보 루프는 삼중 폐쇄 위상을 0-Alloc 연산으로 실시간 추적하여 기선 지연선(Delay Line) 보정 명령을 출력합니다.

2. 0-Alloc C# 스택 기반 VLBI 간섭 줄무늬 추종 서보

나노초 시계 지연과 대기 굴절률 변화를 스택 메모리 내에서 폐루프로 제어하는 ref struct 엔진입니다.

using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.RadioAstronomy
{
    public readonly ref struct BaselineFringeTelemetry
    {
        public readonly double VisibilityReal;
        public readonly double VisibilityImag;
        public readonly double BaselineLengthKm;
        public readonly double WaterVaporRadiometerTauSec;
        public readonly double HydrogenMaserDriftNs;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public BaselineFringeTelemetry(double real, double imag, double lengthKm, double wvrTau, double clockDriftNs)
        {
            VisibilityReal = real;
            VisibilityImag = imag;
            BaselineLengthKm = lengthKm;
            WaterVaporRadiometerTauSec = wvrTau;
            HydrogenMaserDriftNs = clockDriftNs;
        }
    }

    public readonly ref struct VlbiDelayCorrectionResult
    {
        public readonly double FringeAmplitude;
        public readonly double PhaseResidualRad;
        public readonly double DelayLineAdjustmentPicoseconds;
        public readonly bool IsFringeLocked;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public VlbiDelayCorrectionResult(double amp, double phaseRes, double delayAdjPs, bool isLocked)
        {
            FringeAmplitude = amp;
            PhaseResidualRad = phaseRes;
            DelayLineAdjustmentPicoseconds = delayAdjPs;
            IsFringeLocked = isLocked;
        }
    }

    public ref struct VlbiFringeTrackingServo
    {
        private readonly double _targetFrequencyHz;
        private readonly double _kpDelay;
        private readonly double _kiDelay;
        private double _integratedDelayErrorPs;
        private double _prevPhaseRad;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public VlbiFringeTrackingServo(double targetFreqHz, double kp, double ki)
        {
            _targetFrequencyHz = targetFreqHz;
            _kpDelay = kp;
            _kiDelay = ki;
            _integratedDelayErrorPs = 0.0;
            _prevPhaseRad = 0.0;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public VlbiDelayCorrectionResult Step(in BaselineFringeTelemetry telemetry, double dt)
        {
            // 1. 복소 가시도 진폭 및 위상 연산
            double real = telemetry.VisibilityReal;
            double imag = telemetry.VisibilityImag;
            double amplitude = Math.Sqrt(real * real + imag * imag);
            double currentPhase = Math.Atan2(imag, real);

            // 2. 수증기 복사계 및 원자시계 결합 위상 잔차 산출
            double phaseError = currentPhase;
            double unwrappedDelta = phaseError - _prevPhaseRad;
            if (unwrappedDelta > Math.PI) unwrappedDelta -= 2.0 * Math.PI;
            else if (unwrappedDelta < -Math.PI) unwrappedDelta += 2.0 * Math.PI;
            _prevPhaseRad = currentPhase;

            // 3. 주파수(230GHz) 기반 위상-지연(Delay) 시간 변환 (tau = phi / (2 * pi * f))
            double delayErrorPs = (phaseError / (2.0 * Math.PI * _targetFrequencyHz)) * 1e12;

            // 4. 대기 수증기 및 시계 드리프트 피드포워드 가산
            delayErrorPs += telemetry.WaterVaporRadiometerTauSec * 1e12 + telemetry.HydrogenMaserDriftNs * 1000.0;

            // 5. PI 지연선 서보 출력
            _integratedDelayErrorPs += delayErrorPs * dt;
            double delayAdjustmentPs = _kpDelay * delayErrorPs + _kiDelay * _integratedDelayErrorPs;

            bool isLocked = amplitude > 0.15 && Math.Abs(phaseError) < 0.25;

            return new VlbiDelayCorrectionResult(amplitude, phaseError, delayAdjustmentPs, isLocked);
        }
    }
}

3. 교육적 가치 및 중고교 실험 시뮬레이션 적용

2022 개정 교육과정 연계 수업 가이드

  • 물리학 II [파동과 물질파]: 영(Young)의 이중 슬릿 간섭 원리가 전 지구 망원경 기선 간섭계로 확장되는 기하학적 경로차 및 간섭 무늬 형성을 직접 시뮬레이션.
  • 지구과학 II [우주 탐사와 천체 관측]: 블랙홀의 광자구(Photon Sphere)와 사건의 지평선 크기($R_s = 2GM/c^2$)를 천문학적 각크기($\sim 40\,\mu\text{as}$)로 환산하고 필요한 간섭계 기선 길이 계산.
  • 정보 [실시간 제어 알고리즘]: 대기 요동으로 무작위 흩어지는 위상 신호로부터 수학적 불변량(폐쇄 위상)을 추출하여 이미지를 복원하는 디지털 신호 처리 실습.