2022 개정 교육과정 연계 온디바이스 기상관측·원격탐사 STEM 시리즈 #75

이중편파 기상 레이더 수상체(Hydrometeor) 위상차 및 강수 분류 서보 엔진

비차등 위상차($K_{dp}$) 미분 필터링 및 0-Alloc C# 우박·돌발홍수 실시간 수상체 식별 제어 루프

핵심 연구 개요 및 교과 연계

국지성 돌발 호우, 뇌우 및 대형 우박 등 위험 기상에 대응하는 최첨단 관측 장비는 수평편파(H)와 수직편파(V) 전자기파를 동시 송수신하는 이중편파 기상 레이더(Dual-Polarization Radar)입니다. 낙하하는 빗방울은 공기 저항으로 인해 편평한 회전 타원체 형상을 띠므로 수평 축 반사도가 수직 축보다 크게 측정되며($Z_{dr} > 0$), 반면 공중에서 회전하며 떨어지는 우박은 구형에 가까워 $Z_{dr} \approx 0$이지만 강력한 총반사도($Z_h > 50\text{ dBZ}$)를 나타냅니다.

본 백서는 2022 개정 지구과학 II (대기 불안정도와 악기상 발달, 기상 레이더 원격 탐사), 물리학 II (전자기파의 횡파 특성과 선편광, 유전체 입자의 전자기 산란), 미적분 (전파 전파 경로에 따른 차등 위상차 $\Psi_{dp}$ 공간 수치 미분을 통한 비차등 위상차 $K_{dp}$ 산출), 그리고 정보 (C# 13 0-Alloc 스택 연산)를 융합하여, 수신 위상 노이즈를 칼만 필터로 완화하고 수상체 분류(HCA)를 1,000Hz로 수행하는 온디바이스 기상 레이더 DSP 서보 엔진을 완성합니다.

1. 이중편파 레이더 관측 변수 및 전파 위상 지연 모델

수평 반사도 인자 $Z_h$와 수직 반사도 인자 $Z_v$의 로그비인 차등 반사도 $Z_{dr}$는 강수 입자의 평균 편평도(축비)를 나타냅니다:

$$Z_{dr} = 10 \log_{10}\left( \frac{Z_h}{Z_v} \right) \quad (\text{dB})$$

편평한 강수 입자를 통과할 때 수평 편파가 더 큰 유전체 매질 경로를 겪어 수직 편파 대비 위상 지연이 발생하며, 경로 거리 $r$에 따른 비차등 위상차 $K_{dp}$는 총 위상차 $\Psi_{dp}$의 공간 도함수로 정의됩니다:

$$K_{dp} = \frac{1}{2} \frac{d \Psi_{dp}}{dr} \quad (^\circ/\text{km})$$

$K_{dp}$는 부분 빔 차폐(Beam Blockage)나 레이더 감쇠의 영향을 받지 않아 집중호우 시 강우 강도($R$)를 정확히 추정($R = a K_{dp}^b$)하는 핵심 지표이며, 교차상관계수 $\rho_{hv}$는 입자의 균일성을 평가하여 비기상 에코(새, 곤충, 지형 클러터)를 $0.8$ 이하로 즉각 필터링합니다.

2. 0-Alloc C# 스택 기반 기상 레이더 수상체 분류 서보

게이트 단위 편파 관측치로부터 노이즈를 제거하고 퍼지 소속도 함수 기반으로 수상체 유형(비, 눈, 우박, 클러터)을 실시간 판별하는 ref struct 엔진입니다.

using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.MeteorologicalRadar
{
    public enum HydrometeorType : byte
    {
        ClearOrClutter = 0,
        LightRain = 1,
        HeavyRain = 2,
        Hail = 3,
        WetSnow = 4
    }

    public readonly ref struct DualPolGateTelemetry
    {
        public readonly double ReflectivityZhDbz;
        public readonly double DifferentialReflectivityZdrDb;
        public readonly double DifferentialPhasePsiDpDeg;
        public readonly double CorrelationRhoHv;
        public readonly double GateRangeKm;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public DualPolGateTelemetry(double zh, double zdr, double psiDp, double rhoHv, double rangeKm)
        {
            ReflectivityZhDbz = zh;
            DifferentialReflectivityZdrDb = zdr;
            DifferentialPhasePsiDpDeg = psiDp;
            CorrelationRhoHv = rhoHv;
            GateRangeKm = rangeKm;
        }
    }

    public readonly ref struct RadarClassificationResult
    {
        public readonly double FilteredKdpDegPerKm;
        public readonly double RainRateMmPerHour;
        public readonly HydrometeorType IdentifiedType;
        public readonly bool IsSevereWeatherAlert;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public RadarClassificationResult(double kdp, double rainRate, HydrometeorType type, bool alert)
        {
            FilteredKdpDegPerKm = kdp;
            RainRateMmPerHour = rainRate;
            IdentifiedType = type;
            IsSevereWeatherAlert = alert;
        }
    }

    public ref struct DualPolClassificationServo
    {
        private double _prevPsiDp;
        private double _prevRangeKm;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public DualPolClassificationServo(double initialRangeKm)
        {
            _prevPsiDp = 0.0;
            _prevRangeKm = initialRangeKm;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public RadarClassificationResult Step(in DualPolGateTelemetry telemetry)
        {
            // 1. 공간 유한 차분을 통한 Kdp(비차등 위상차) 수치 미분
            double deltaR = telemetry.GateRangeKm - _prevRangeKm;
            double rawKdp = 0.0;
            if (deltaR > 1e-4)
            {
                rawKdp = 0.5 * (telemetry.DifferentialPhasePsiDpDeg - _prevPsiDp) / deltaR;
            }
            _prevPsiDp = telemetry.DifferentialPhasePsiDpDeg;
            _prevRangeKm = telemetry.GateRangeKm;

            // Kdp 음수 클리핑 (물리적 증가량 보존)
            double filteredKdp = Math.Max(0.0, rawKdp);

            // 2. 비기상 에코(Non-meteorological Clutter) 필터링
            if (telemetry.CorrelationRhoHv < 0.80 || telemetry.ReflectivityZhDbz < 5.0)
            {
                return new RadarClassificationResult(filteredKdp, 0.0, HydrometeorType.ClearOrClutter, false);
            }

            // 3. 퍼지 수상체 판별 로직
            HydrometeorType type;
            bool alert = false;

            if (telemetry.ReflectivityZhDbz > 52.0 && telemetry.DifferentialReflectivityZdrDb < 1.2)
            {
                // 강한 반사도이나 입자가 둥글어 Zdr이 낮음 -> 우박(Hail)
                type = HydrometeorType.Hail;
                alert = true;
            }
            else if (telemetry.ReflectivityZhDbz > 40.0 || filteredKdp > 1.5)
            {
                // 높은 반사도 및 큰 Kdp -> 집중호우(Heavy Rain)
                type = HydrometeorType.HeavyRain;
                alert = true;
            }
            else if (telemetry.ReflectivityZhDbz > 20.0 && telemetry.DifferentialReflectivityZdrDb > 0.5)
            {
                type = HydrometeorType.LightRain;
            }
            else
            {
                type = HydrometeorType.WetSnow;
            }

            // 4. 강우 강도 추정 (Kdp 기반 관계식: R = 40.5 * Kdp^0.85)
            double rainRate = 0.0;
            if (filteredKdp > 0.1)
            {
                rainRate = 40.5 * Math.Pow(filteredKdp, 0.85);
            }
            else if (telemetry.ReflectivityZhDbz > 10.0)
            {
                // 마셜-파머 Z-R 관계식: Z = 200 * R^1.6
                double zLinear = Math.Pow(10.0, telemetry.ReflectivityZhDbz / 10.0);
                rainRate = Math.Pow(zLinear / 200.0, 1.0 / 1.6);
            }

            return new RadarClassificationResult(filteredKdp, rainRate, type, alert);
        }
    }
}

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

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

  • 지구과학 II [대기 운동과 대기 순환]: 레이더 화면에서 급격히 발달하는 적란운의 우박 코어와 돌발 호우 구역을 이중편파 파라미터($Z_{dr}$, $K_{dp}$)로 포착하는 악기상 분석 실습.
  • 물리학 II [파동과 전자기파]: 전파의 편광 방향에 따라 비대칭 유전체 물방울에 의해 발생하는 유전율 및 위상 속도 차이의 전자기학적 원리 탐구.
  • 미적분 [도함수의 실생활 활용]: 적산된 편차 그래프($\Psi_{dp}$)로부터 거리별 기울기(수치 미분 $K_{dp}$)를 계산하여 실제 비의 양을 산출하는 미분의 수학적 가치 체득.