1. 개요: 자기공명 신호의 불균일 디페이징을 극복하고 순수 스핀 상호작용을 측정하다
정자기장 \(B_0\) 속의 원자핵 스핀은 라모어 주파수(\(\omega_0 = \gamma B_0\))로 세차 운동을 합니다. \(90^\circ\) 고주파(RF) 펄스로 가로 평면(\(xy\))에 눕혀진 거시 자화 벡터는 자유유도감쇠(Free Induction Decay, FID)를 겪으며 소멸합니다. 그러나 실제 자석의 공간적 불균일성(\(\Delta B_0\))으로 인해 스핀들이 빠르게 위상을 잃어 겉보기 이완 시간(\(T_2^*\))이 진정한 분자 고유의 스핀-스핀 이완 시간(\(T_2\))보다 훨씬 짧아집니다.
어윈 한(Erwin Hahn)이 발견한 스핀 에코(Spin Echo)와 이를 확장한 카-퍼셀-메이붐-길(Carr-Purcell-Meiboom-Gill, CPMG) 펄스열은 \(90^\circ_x - [\tau - 180^\circ_y - \tau - \text{echo}]_n\) 시퀀스를 인가하여 정적 자기장 불균일성에 의한 디페이징을 완벽히 리포커싱(Refocusing)합니다. 이를 통해 분자의 회전 상관 시간, 결합 수분량, 나노 세공 크기 분포를 절대적으로 측정합니다.
2. 블로흐 방정식 및 CPMG 에코 감쇠 수식 모델
회전 좌표계(Rotating Frame)에서 거시 자화 벡터 \(\mathbf{M} = (M_x, M_y, M_z)\)의 시간 동역학은 블로흐(Bloch) 미분방정식에 의해 지배됩니다:
여기서 \(T_1\)은 스핀-격자 종이완 시간, \(T_2\)는 스핀-스핀 횡이완 시간입니다. CPMG 펄스열에서 \(n\)번째 에코 피크의 진폭 \(M(2n\tau)\)는 자기장 구배 \(G\) 하에서 분자 자기확산(Self-diffusion, \(D\)) 효과가 결합된 토리(Torrey) 확장 모델을 따릅니다:
펄스 간격 \(2\tau\)를 수 밀리초 이하로 극도로 단축하면 확산 감쇠 항(\(\propto \tau^2\))이 0으로 수렴하여, 순수한 다성분 지수 감쇠 \(M(t) = \sum_j A_j \exp(-t / T_{2,j})\)를 얻을 수 있습니다. 이를 비음수 최소제곱법(NNLS) 역라플라스 변환(ILT)하여 유체와 다공성 물질의 세공 크기 분포 \(P(T_2)\)를 복원합니다.
3. 실시간 NMR CPMG 에코 트레인 서보 아키텍처 다이어그램
4. 고성능 0-Alloc C# CPMG 스핀 에코 서보 구현
연속된 에코 진폭을 적분하고 잡음 속에서 \(T_2\) 이완 시간을 실시간 단일/다성분 추출하는 0-Alloc C# 클래스입니다:
using System;
using System.Runtime.CompilerServices;
namespace ZeliDesk.Stem.MagneticResonance
{
public readonly record struct CpmgParameters(
double LarmorFreqHz, // 21.3 MHz (0.5 Tesla 1H)
double EchoSpacingTau2S, // 2*tau (예: 500 us = 0.0005 s)
int TotalEchoCount // 에코 개수 (예: 200)
);
public ref struct CpmgServoState
{
public double InitialMagnetizationM0;
public double EstimatedT2Seconds;
public double EstimatedT2Ms;
public double FitResidueR2;
public double SignalToNoiseRatio;
public bool IsRelaxationValid;
}
public static class SpinEchoCpmgServo
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void FitRelaxationDecay(
in CpmgParameters p,
ReadOnlySpan echoAmplitudes,
ref CpmgServoState state)
{
int n = Math.Min(echoAmplitudes.Length, p.TotalEchoCount);
if (n < 4)
{
state.IsRelaxationValid = false;
return;
}
// 1. 초기 추정 및 로그 선형 회귀: ln(M) = ln(M0) - t / T2
double sumT = 0.0;
double sumY = 0.0;
double sumTY = 0.0;
double sumT2 = 0.0;
int validCount = 0;
for (int i = 0; i < n; i++)
{
double amp = echoAmplitudes[i];
if (amp > 1e-4) // 잡음 플로어 이상
{
double t = (i + 1) * p.EchoSpacingTau2S;
double y = Math.Log(amp);
sumT += t;
sumY += y;
sumTY += t * y;
sumT2 += t * t;
validCount++;
}
}
if (validCount < 4)
{
state.IsRelaxationValid = false;
return;
}
double denom = (validCount * sumT2 - sumT * sumT);
if (Math.Abs(denom) < 1e-15)
{
state.IsRelaxationValid = false;
return;
}
// 기울기 slope = -1 / T2
double slope = (validCount * sumTY - sumT * sumY) / denom;
double intercept = (sumY - slope * sumT) / validCount;
state.InitialMagnetizationM0 = Math.Exp(intercept);
if (slope < -1e-5)
{
state.EstimatedT2Seconds = -1.0 / slope;
state.EstimatedT2Ms = state.EstimatedT2Seconds * 1000.0;
state.IsRelaxationValid = true;
}
else
{
state.EstimatedT2Seconds = 0.0;
state.EstimatedT2Ms = 0.0;
state.IsRelaxationValid = false;
}
// 2. SNR 추정: M0 / (마지막 에코 잔차)
double noiseEst = Math.Abs(echoAmplitudes[n - 1]);
state.SignalToNoiseRatio = state.InitialMagnetizationM0 / Math.Max(1e-5, noiseEst);
}
}
}
5. 교육 연수 및 석유 자원 탐사/휴대용 생화학 검사 국방 적용 지침
방통대 직무연수 및 국방 휴대용 소형 NMR 분석기
- 물리/화학 교과 지도: 양자 스핀 각운동량과 라모어 세차, 고주파 펄스에 의한 자화 반전, 스핀 에코 리포커싱의 기하학적 블로흐 구면 시각화.
- 국방 항공 연료 품질 검사 및 폭발물 식별: 야전 비행기 급유 전 항공유 내 잔류 수분/결빙 불순물 즉시 검사 및 액체 폭약(TATP) 분자 이완 시간 비파괴 판별.