1. 개요
단일 광자 분광학, 양자 키 분배(QKD), 공초점 형광 수명 이미징 현미경(FLIM)의 핵심 광검출기인 단일 광자 눈사태 다이오드(Single-Photon Avalanche Diode, SPAD)는 항복 전압(Breakdown Voltage, \(V_b\)) 이상의 과전압(Excess Bias Voltage, \(V_{ex}\))에서 동작하는 가이거 모드(Geiger Mode)를 활용합니다. 단 하나의 입사 광자에 의해서도 나노초 미만의 속도로 수 밀리암페어의 거대한 전자-정공 애벌랜치 전류가 자발적으로 유도됩니다. 그러나 이 전류를 즉각 차단하지 않으면 소자가 열 폭주로 파괴되며, 트랩에 포획된 전하가 뒤늦게 방출되어 가짜 광자 신호를 만드는 애프터펄싱(Afterpulsing)과 불감 시간(Dead Time) 동안의 계수 손실이 발생합니다. 본 고에서는 1나노초 이내에 애벌랜치를 강제 소광(Active Quenching)하고 바이어스 전압을 복원하는 동시에 10,000Hz 주기로 타이밍 지터를 보정하는 0-Alloc C# 엔진을 구현합니다.
2. 수학적 모델링 및 지배 방정식
광자 검출 확률(Photon Detection Probability, PDP)과 과전압 \(V_{ex} = V_{bias} - V_b(T)\) 사이의 비선형 포화 방정식은 다음과 같습니다:
애벌랜치 전류 성장 시간 \(t_{av}\) 및 능동 소광 회로(AQC)의 임계 켄칭 지연 시간 부등식은 다음과 같습니다:
트랩 전하 방출에 따른 애프터펄싱 확률 \(P_{ap}\) 및 불감 시간 \(\tau_{dead}\)의 지수 감쇠 모델은 다음과 같습니다:
시간 상관 단일 광자 계수(TCSPC) 장비의 지터 분산 \(\sigma_{jitter}^2\) 보정 수식은 다음과 같습니다:
3. 실시간 C# 서보 제어기 구현
다음은 SPAD 소자의 온도 드리프트를 추종하여 과전압을 미세 조정하고 켄칭 타이밍을 최적화하는 0-Alloc C# 서보 엔진 구현체입니다:
using System;
using System.Runtime.CompilerServices;
namespace ZeliDesk.Stem.SinglePhoton
{
public readonly ref struct SpadSensorFrame
{
public readonly double AmbientDieTemperatureC;
public readonly double MeasuredBreakdownVoltageV;
public readonly double TargetExcessBiasV;
public readonly double DarkCountRateHz;
public readonly double MeasuredTimingJitterPs;
public SpadSensorFrame(
double ambientDieTemperatureC,
double measuredBreakdownVoltageV,
double targetExcessBiasV,
double darkCountRateHz,
double measuredTimingJitterPs)
{
AmbientDieTemperatureC = ambientDieTemperatureC;
MeasuredBreakdownVoltageV = measuredBreakdownVoltageV;
TargetExcessBiasV = targetExcessBiasV;
DarkCountRateHz = darkCountRateHz;
MeasuredTimingJitterPs = measuredTimingJitterPs;
}
}
public ref struct SpadControlCommand
{
public double AppliedBiasVoltageV;
public double ProgrammableDeadTimeNs;
public double QuenchPulseThresholdMv;
public double EstimatedPdpPercent;
public bool IsSub15psJitterMaintained;
}
public ref struct SpadActiveQuenchingServoEngine
{
private readonly double _tempCoeffVPerC;
private readonly double _baseBreakdownV;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public SpadActiveQuenchingServoEngine(double tempCoeffVPerC, double baseBreakdownV)
{
_tempCoeffVPerC = tempCoeffVPerC;
_baseBreakdownV = baseBreakdownV;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void ComputeQuenchServo(in SpadSensorFrame frame, out SpadControlCommand cmd)
{
cmd = default;
// Temperature-compensated breakdown voltage: Vb(T) = Vb0 + beta * (T - 25)
double vbT = _baseBreakdownV + _tempCoeffVPerC * (frame.AmbientDieTemperatureC - 25.0);
double vBias = vbT + frame.TargetExcessBiasV;
// Adjust dead time adaptively to keep afterpulsing low if DCR rises
double deadTimeNs = 20.0;
if (frame.DarkCountRateHz > 500.0)
{
deadTimeNs += (frame.DarkCountRateHz - 500.0) * 0.05;
}
deadTimeNs = Math.Clamp(deadTimeNs, 10.0, 100.0);
// Theoretical PDP approx: 1 - exp(-0.4 * Vex)
double pdp = (1.0 - Math.Exp(-0.35 * frame.TargetExcessBiasV)) * 100.0;
cmd.AppliedBiasVoltageV = vBias;
cmd.ProgrammableDeadTimeNs = deadTimeNs;
cmd.QuenchPulseThresholdMv = 150.0; // 150mV comparator
cmd.EstimatedPdpPercent = pdp;
cmd.IsSub15psJitterMaintained = frame.MeasuredTimingJitterPs <= 15.0;
}
}
}
4. 교육 및 실무 적용 방안
- 한국방송통신대학교 AI 교구: 단일 광자 양자 역학, 가이거 모드 통계학, 광검출기 잡음 공학 가상 실험.
- 국가 양자암호통신(QKD) 시험망 및 라이다(LiDAR): 서브-10ps 극초단 시간 분해능을 요구하는 양자 중계기 단일 광자 검출기 채택.