1. 개요
표면 플라즈몬 공명(SPR, Surface Plasmon Resonance)은 고굴절률 프리즘 바닥면에 증착된 50nm 금(Au) 박막과 유전체(유체) 계면에서 발생하는 표면 플라즈몬 폴라리톤(SPP) 전자 집단 진동파를 감쇠 전반사(ATR, Attenuated Total Reflection) 방식으로 결합시키는 광학 바이오센싱 기법입니다. 특정 입사각에서 입사광의 파수와 SPP의 파수가 정합될 때 전반사광 에너지가 금속 표면으로 완전히 흡수되어 반사율이 급락하는 '공명각 딥(Resonance Dip)'이 형성됩니다. 금 박막 표면에 항원-항체 또는 DNA가 결합하여 굴절률이 변하면 공명각이 이동하므로, 본 고에서는 무게중심(Centroid) 다항식 추적으로 굴절률을 10,000Hz 주기로 실시간 계측하는 0-Alloc C# 서보 엔진을 구현합니다.
2. 수학적 모델링 및 지배 방정식
프리즘 내부 p-편광 입사광의 계면 평행 파수 \(k_{x, prism}\)와 금 박막/유전체 계면의 SPP 고유 분산 관계식은 다음과 같습니다:
여기서 \(n_p\)는 프리즘 굴절률, \(\epsilon_m = \epsilon_r + i\epsilon_i\)는 드루드-로렌츠 모델로 기술되는 금의 복소 유전율, \(\epsilon_d = n_d^2\)는 유전체 유체의 유전율입니다. 위상 정합 조건(\(k_{x, prism} = \text{Re}(k_{spp})\))을 만족하는 공명각 \(\theta_{res}\)는 다음과 같습니다:
유전체 표면의 바이오 물질 부착으로 인한 미세 굴절률 변화 \(\Delta n_d\)에 따른 공명각의 선형 이동량은 다음과 같이 유도됩니다:
3. 실시간 피드백 제어 아키텍처
4. 고성능 0-Alloc C# 서보 엔진 구현
GC 오버헤드 없이 10,000Hz 루프로 SPR 공명각 딥을 추적하는 초고속 C# 클래스입니다:
using System;
using System.Runtime.CompilerServices;
namespace ZeliDesk.Stem.SurfacePlasmonResonance
{
public readonly record struct SprConfig(
double PrismRefractiveIndex, // 프리즘 굴절률 np (예: 1.515 BK7)
double GoldDielectricReal, // 금 유전율 실수부 eps_r (예: -16.0 @ 670nm)
double LaserWavelengthNm, // 레이저 파장 (예: 670.0 nm)
double AngleScanRangeDeg // 각도 스캔 범위 (예: 40.0 ~ 75.0 deg)
);
public ref struct SprServoState
{
public double ResonanceAngleDeg;
public double SampleRefractiveIndex;
public double MinimumReflectivity;
public double MolecularAdsorptionIndex;
public bool IsResonanceValid;
}
public static class SprCentroidServo
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void TrackResonanceDip(
in SprConfig cfg,
ReadOnlySpan angleArrayDeg,
ReadOnlySpan reflectivityArray,
ref SprServoState state)
{
if (angleArrayDeg.Length != reflectivityArray.Length || angleArrayDeg.Length < 3)
return;
// 1. 최소 반사율 탐색 (Dip 바닥 근처 탐지)
int minIdx = 0;
double minR = reflectivityArray[0];
for (int i = 1; i < reflectivityArray.Length; i++)
{
if (reflectivityArray[i] < minR)
{
minR = reflectivityArray[i];
minIdx = i;
}
}
state.MinimumReflectivity = minR;
// 2. Dip 주변 5개 포인트 가중치 무게중심(Centroid) 계산으로 서브픽셀 분해능 확보
int start = Math.Max(0, minIdx - 2);
int end = Math.Min(reflectivityArray.Length - 1, minIdx + 2);
double sumWeights = 0.0;
double sumWeightedAngles = 0.0;
double baseline = 1.0;
for (int i = start; i <= end; i++)
{
double invertedWeight = Math.Max(0.0, baseline - reflectivityArray[i]);
sumWeights += invertedWeight;
sumWeightedAngles += angleArrayDeg[i] * invertedWeight;
}
double dipAngleDeg = (sumWeights > 1e-9) ? (sumWeightedAngles / sumWeights) : angleArrayDeg[minIdx];
state.ResonanceAngleDeg = dipAngleDeg;
// 3. 공명각으로부터 시료 유효 굴절률 nd 역산
// sin(theta) = sqrt( eps_r * nd^2 / (eps_r + nd^2) ) / np
double sinTheta = Math.Sin(dipAngleDeg * Math.PI / 180.0);
double sin2 = sinTheta * sinTheta * cfg.PrismRefractiveIndex * cfg.PrismRefractiveIndex;
double epsR = cfg.GoldDielectricReal;
// nd^2 = epsR * sin2 / (epsR - sin2)
double ndSq = (epsR * sin2) / (epsR - sin2);
double sampleNd = (ndSq > 0) ? Math.Sqrt(ndSq) : 1.333;
state.SampleRefractiveIndex = sampleNd;
// 4. 생체 분자 흡착 농도 지수 추정 (순수 완충용액 n0 = 1.3330 기준)
state.MolecularAdsorptionIndex = Math.Max(0.0, (sampleNd - 1.3330) * 1000.0);
state.IsResonanceValid = (minR < 0.25) && (sampleNd >= 1.30 && sampleNd <= 1.45);
}
}
}
5. 국방 및 교육 현장 응용
- 국방 화학/생물학 무기(CBRN) 초고감도 현장 정밀 탐지: 탄저균, 사린가스, 독소 단백질을 라벨링(형광체) 없이 피코몰(pM) 단위로 실시간 즉각 탐지.
- 2022 개정 생명과학 및 물리 교과 교구: 전반사 및 소멸파(Evanescent Wave), 금속 나노 박막의 플라즈몬 공명, 항원-항체 특이적 반응 동역학을 인터랙티브 센서로 실험.
6. 결론
본 크레취만 SPR 바이오센서 서보 엔진은 10,000Hz 0-Alloc C# 가중 무게중심 알고리즘을 통해 $10^{-6}$ RIU 수준의 극미세 굴절률 변위를 실시간으로 복조하여 초고감도 바이오 계측을 실현합니다.