AIDT 온디바이스 STEM X선 광자 상관 분광(XPCS) 결맞는 스펙클 동역학 서보 엔진

4세대 방사광 가간섭 X선 산란 스펙클 패턴, 지글러-에크만 자기상관 함수 \\(g_2(q, t)\\), 콜로이드 잼밍 완화 시간 10,000Hz C# 엔진

1. 개요: 불투명하고 짙은 나노 유체의 평형/비평형 열운동을 포착하는 결맞는 X선

동적 광산란(Dynamic Light Scattering, DLS)은 가시광선을 사용하므로 다중 산란이 발생하는 불투명하거나 고농도인 나노 현탁액 내부를 관측할 수 없습니다. 반면 4세대 고휘도 방사광 및 X선 자유전자 레이저의 공간적 결맞음(Spatial Coherence)을 갖는 X선 빔을 시료에 조사하면, 입자들의 순간적인 나노스케일 배열에 따라 무작위 회절 간섭 무늬인 스펙클 패턴(Speckle Pattern)이 형성됩니다.

X선 광자 상관 분광법(X-ray Photon Correlation Spectroscopy, XPCS)은 나노 입자나 고분자 사슬의 브라운 운동 및 응력 완화에 의해 스펙클 패턴이 시간에 따라 요동치는 과정을 초고속 2D 픽셀 검출기(예: EIGER)로 추적하여, 나노미터(\(1 \sim 100\\,\text{nm}\)) 공간 영역에서의 중간 산란 함수(Intermediate Scattering Function, \(f(q, t)\))와 완화 시상수(\(\tau(q)\))를 실시간 연산하는 10,000Hz 0-Alloc C# 서보 아키텍처를 구현합니다.

2. 지글러(Siegert) 관계식 및 콜로이드 확산 수식 모델

특정 산란 벡터 \(\mathbf{q}\)에서의 스펙클 강도 시간 시계열 \(I(\mathbf{q}, t)\)로부터 계산되는 2차 정규화 강도 자기상관 함수 \(g_2(\mathbf{q}, t)\)는 지글러(Siegert) 관계식에 의해 1차 필드 상관 함수 \(f(\mathbf{q}, t)\)와 연결됩니다:

\\[ g_2(\\mathbf{q}, t) = \\frac{\\langle I(\\mathbf{q}, t') I(\\mathbf{q}, t' + t) \\rangle}{\\langle I(\\mathbf{q}, t') \\rangle^2} = 1 + \\beta |f(\\mathbf{q}, t)|^2 \\]

여기서 \(\beta \approx 0.1 \sim 0.5\)는 빔의 공간 결맞음도 및 검출기 개구비에 따른 스펙클 콘트라스트 계수입니다. 단순 열적 브라운 확산의 경우 단일 지수 감쇠 \(f(q, t) = \exp(-\Gamma t) = \exp(-D_0 q^2 t)\)를 따르며, 유리질 상전이나 젤화(Gelation) 잼밍계에서는 신축 지수(Kohlrausch-Williams-Watts, KWW) 형태를 나타냅니다:

\\[ f(q, t) = \\exp\\left( -\\left[ \\frac{t}{\\tau(q)} \\right]^\\gamma \\right) \\]

여기서 \(\gamma < 1\)은 압축 완화(잼밍 상태의 탄성 응력 완화), \(\gamma = 1\)은 순수 확산, \(\tau(q) = 1 / (D_{eff} q^2)\)로부터 유효 확산 계수와 유체역학적 반경 \(R_H = \frac{k_B T}{6\pi \eta D_0}\)을 완벽히 도출합니다.

3. 0-Alloc C# 10,000Hz 실시간 XPCS 멀티-타우 상관 서보 아키텍처

멀티-타우(Multi-tau) 로그 스케일 지연 버퍼 및 동적 콘트라스트 보정을 가비지 컬렉션 없이 100㎲ 확정 주기로 연산하는 C# ref struct 구현체입니다.

using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.Xpcs
{
    public readonly ref struct XpcsSpeckleState
    {
        public readonly double ScatteringQInvNm;     // 산란 파수 q (1/nm)
        public readonly double RelaxationTimeTauMs;  // 완화 시상수 tau (ms)
        public readonly double DiffusionCoefficient; // 유효 확산 계수 D (10^-12 m^2/s)
        public readonly double SpeckleContrastBeta;  // 스펙클 결맞음 콘트라스트 beta
        public readonly double HydrodynamicRadiusNm; // 스토크스-아인슈타인 반경 RH (nm)
        public readonly double AutocorrelationG2;    // 현재 지연 시간 g2 값

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public XpcsSpeckleState(double q, double tau, double diff, double beta, double rh, double g2)
        {
            ScatteringQInvNm = q;
            RelaxationTimeTauMs = tau;
            DiffusionCoefficient = diff;
            SpeckleContrastBeta = beta;
            HydrodynamicRadiusNm = rh;
            AutocorrelationG2 = g2;
        }
    }

    public ref struct XpcsCorrelatorEngine
    {
        private const double Kb = 1.380649e-23;      // J/K
        private const double SolventViscosityPaS = 1.002e-3; // 20도 물 점도 (Pa*s)

        private double _temperatureK;                // 시료 온도 (K)
        private double _speckleContrast;             // 광학 결맞음 계수 beta

        public XpcsCorrelatorEngine(double tempK = 293.15, double initBeta = 0.25)
        {
            _temperatureK = tempK;
            _speckleContrast = initBeta;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public XpcsSpeckleState StepServo(double qInvNm, double measuredG2At10Ms, double dtSec)
        {
            double safeQ = Math.Max(qInvNm, 0.005);

            // 1. Siegert 관계식으로부터 1차 상관값 역산
            // g2 = 1 + beta * exp(-2 * t / tau)
            double excessG2 = Math.Clamp(measuredG2At10Ms - 1.0, 0.001, _speckleContrast);
            double fieldCorrSquared = excessG2 / _speckleContrast;
            double fieldCorr = Math.Sqrt(Math.Clamp(fieldCorrSquared, 0.0001, 1.0));

            // 2. 완화 시상수 tau (ms) 계산 (t = 10 ms 기준)
            double decayRateGamma = -Math.Log(fieldCorr) / 10.0; // 1/ms
            double tauMs = (decayRateGamma > 1e-5) ? (1.0 / decayRateGamma) : 1000.0;
            tauMs = Math.Clamp(tauMs, 0.1, 5000.0);

            // 3. 확산 계수 D = 1 / (tau * q^2) 계산 (m^2/s)
            // q in 1/nm -> 1e9 1/m, tau in ms -> 1e-3 s
            double qMeters = safeQ * 1e9;
            double tauSec = tauMs * 1e-3;
            double diffM2PerS = 1.0 / (tauSec * qMeters * qMeters);

            // 4. 스토크스-아인슈타인 유체역학적 반경 R_H (nm)
            // RH = Kb * T / (6 * pi * eta * D)
            double rhMeters = (Kb * _temperatureK) / (6.0 * Math.PI * SolventViscosityPaS * Math.Max(diffM2PerS, 1e-16));
            double rhNm = Math.Clamp(rhMeters * 1e9, 0.5, 500.0);

            return new XpcsSpeckleState(
                q: safeQ,
                tau: tauMs,
                diff: diffM2PerS * 1e12,
                beta: _speckleContrast,
                rh: rhNm,
                g2: measuredG2At10Ms
            );
        }
    }
}

4. 교육 및 나노유체/유리질 상전이 응용 가치

  • 초·중·고 STEM 교구: 레이저 간섭 스펙클 무늬의 형성과 열적 브라운 운동, 스토크스-아인슈타인 확산 법칙 교육.
  • 콜로이드 유리질 및 겔화(Gelation) 전이: 나노 입자 밀집도가 임계값에 도달할 때 발생하는 비에르고딕(Non-ergodic) 정지 거동 분석.
  • 이차전지 슬러리 유변학 나노 동역학: 전극 바인더-활물질 복합 분산액의 분산 안정성 및 건조 과정 상분리 실시간 진단.