1. 개요
차세대 6G 서브-테라헤르츠 무선 통신 및 초고분해능 분자 회전 분광학에서 0.1~3.0THz 대역의 연속파(Continuous-Wave, CW) 신호를 정밀 합성하는 가장 유력한 방법은 저온성장 갈륨비소(LT-GaAs) 또는 InGaAs 광혼합기(Photomixer)에 두 대의 근적외선 분포궤환(DFB) 레이저 다이오드 빔을 결합 입사시키는 광헤테로다인 비트 방식입니다. 두 레이저의 광학 주파수 차이(\(\Delta f = f_1 - f_2\))에 해당하는 비트 광전류가 포토믹서의 안테나를 통해 테라헤르츠 전자파로 방사됩니다. 그러나 자유 주행(Free-running) 반도체 레이저의 고유 위상 잡음과 열적 파장 표류는 테라헤르츠 비트 선폭을 수십 MHz 이상으로 넓히므로, 광섬유 광주파수 빗(Optical Frequency Comb, OFC) 기준 신호와 헤테로다인 비트 신호를 검출하여 DFB 레이저 주입 전류를 서브-마이크로암페어 단위로 고속 변조해야 합니다. 본 고에서는 10,000Hz 주기로 위상차를 디지털 적분하여 헤르츠 수준의 선폭으로 고정하는 0-Alloc C# 엔진을 구현합니다.
2. 수학적 모델링 및 지배 방정식
두 연속파 레이저 간섭에 의한 포토믹서 광전류 밀도 및 비트 주파수 방정식은 다음과 같습니다:
광혼합기 안테나 방출 THz 전력 및 광반송자 수명(\(\tau_{rec} \approx 0.5\text{ ps}\)) 저역통과 감쇠식은 다음과 같습니다:
광주파수 빗(OFC) 모드와의 광학 헤테로다인 위상 편차 적분식은 다음과 같습니다:
DFB 레이저 광학 위상 제어를 위한 초고속 주입 전류 서보 제어식은 다음과 같습니다:
3. 실시간 C# 서보 제어기 구현
다음은 RF 위상 검출기(Phase Detector) 출력과 THz 검출 파워 데이터를 10,000Hz 주기로 분석하여 레이저 전류 컨트롤러를 구동하는 0-Alloc C# 엔진 구현체입니다:
using System;
using System.Runtime.CompilerServices;
namespace ZeliDesk.Stem.TerahertzPhotomixer
{
public readonly ref struct PhotomixerSensorFrame
{
public readonly double TargetThzFrequencyGhz;
public readonly double MeasuredBeatFrequencyGhz;
public readonly double PhaseDetectorOutputVolts;
public readonly double DetectedThzPowerMicroWatts;
public readonly double LaserDiodeCurrentMilliAmps;
public PhotomixerSensorFrame(
double targetThzFrequencyGhz,
double measuredBeatFrequencyGhz,
double phaseDetectorOutputVolts,
double detectedThzPowerMicroWatts,
double laserDiodeCurrentMilliAmps)
{
TargetThzFrequencyGhz = targetThzFrequencyGhz;
MeasuredBeatFrequencyGhz = measuredBeatFrequencyGhz;
PhaseDetectorOutputVolts = phaseDetectorOutputVolts;
DetectedThzPowerMicroWatts = detectedThzPowerMicroWatts;
LaserDiodeCurrentMilliAmps = laserDiodeCurrentMilliAmps;
}
}
public ref struct PhotomixerControlCommand
{
public double LaserCurrentTrimMicroAmps;
public double FrequencyErrorMhz;
public double FilteredPhaseErrorRad;
public bool IsPhaseLocked;
public bool IsThzPowerAdequate;
}
public ref struct CwThzPhotomixerPhaseLockServoEngine
{
private const double CurrentTuningMhzPerUa = 0.5; // 0.5 MHz / uA
private const double MinPowerMicroWatts = 0.5;
private readonly double _kp;
private readonly double _ki;
private readonly double _kd;
private readonly double _dt;
private double _phaseIntegral;
private double _prevPhaseVolts;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public CwThzPhotomixerPhaseLockServoEngine(double kp, double ki, double kd, double dt)
{
_kp = kp;
_ki = ki;
_kd = kd;
_dt = dt;
_phaseIntegral = 0.0;
_prevPhaseVolts = 0.0;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void ComputePhaseLock(in PhotomixerSensorFrame frame, out PhotomixerControlCommand cmd)
{
cmd = default;
double freqErrMhz = (frame.TargetThzFrequencyGhz - frame.MeasuredBeatFrequencyGhz) * 1000.0;
double phaseVolts = frame.PhaseDetectorOutputVolts;
_phaseIntegral += phaseVolts * _dt;
_phaseIntegral = Math.Clamp(_phaseIntegral, -20.0, 20.0);
double dPhase = (phaseVolts - _prevPhaseVolts) / _dt;
_prevPhaseVolts = phaseVolts;
// Current trim in microAmps
double currentTrim = (_kp * phaseVolts) + (_ki * _phaseIntegral) + (_kd * dPhase);
currentTrim = Math.Clamp(currentTrim, -100.0, 100.0);
// Phase error in radians (approx 1.5 rad / volt)
double phaseRad = phaseVolts * 1.5;
cmd.LaserCurrentTrimMicroAmps = currentTrim;
cmd.FrequencyErrorMhz = freqErrMhz;
cmd.FilteredPhaseErrorRad = phaseRad;
cmd.IsPhaseLocked = Math.Abs(freqErrMhz) <= 0.05 && Math.Abs(phaseRad) <= 0.1;
cmd.IsThzPowerAdequate = frame.DetectedThzPowerMicroWatts >= MinPowerMicroWatts;
}
}
}
4. 교육 및 실무 적용 방안
- 한국방송통신대학교 전파공학/광전자학: 테라헤르츠 포토믹싱 이론, 광주파수 빗 위상 고정 루프(OPLL) 및 초고주파 분광 교구.
- 6G 서브-THz 통신 및 비파괴 계측 연구소: 300GHz 대역 고정밀 연속파 신호원 위상 잠금 및 반송파 발생기 제어기 탑재.