4. 自旋回波抑制低频噪声仿真

任务拆解:把“低频噪声”变成可比较的两条相干曲线

本案例要验证的核心事实是:自旋回波对静态或慢变噪声有效,对快变噪声无效。因此仿真设计的关键不是“跑一条回波序列”,而是构造一个可控的低频噪声模型,让同一段噪声同时作用于“无回波(自由感应衰减)”和“带回波(π 脉冲翻转)”两条路径,再比较相干幅值随总演化时间的衰减。

采用二能级纯退相干模型:噪声表现为随时间变化的失谐 δ(t),相干幅值取 W = |⟨exp(-i∫δ(t)dt)⟩|。无回波时相位累积为 φ = ∫₀^T δ(t)dt;回波序列在 T/2 处施加 π 脉冲,等效于把后半段失谐取负,相位累积变为 φ = ∫₀^{T/2}δdt − ∫_{T/2}^{T}δdt。若 δ 在 T 内近似恒定,回波相位几乎抵消;若 δ 变化很快,抵消失效。

低频噪声源 δ(t) 截止频率 f_c 低 相关时间 τ_c ≫ T₂* 无回波:自由感应衰减 φ = ∫₀ᵀ δ(t) dt 自旋回波:π 脉冲翻转 φ = ∫₀^{T/2}δdt − ∫_{T/2}^{T}δdt 相位累积(无回波) 单调累积 → 相干快速衰减 相位累积(回波) π 脉冲 @ T/2 后半段反向抵消 → 相干保留 判读要点 慢变噪声(τ_c ≫ T):回波曲线衰减显著变慢,T₂ 明显长于 T₂*。 快变噪声(τ_c ≪ T):两条曲线接近重合,回波几乎无抑制效果。 扫描 τ_c 或 T 观察比值 W_echo/W_FID,可定量刻画回波对低频噪声的抑制能力。 同一噪声实现下对比两条路径,避免噪声随机性干扰结论。

噪声模型与仿真参数

用一阶自回归过程(Ornstein–Uhlenbeck 离散形式)生成低频噪声,相关时间 τ_c 可调,这是控制“低频程度”的关键旋钮:

δ[k+1] = δ[k]·exp(-dt/τ_c) + σ·sqrt(1 - exp(-2dt/τ_c))·ξ[k],  ξ ~ N(0,1)

教学示例参数(示例值,非实测):失谐标准差 σ = 2π×5 kHz,总演化时间 T 取 0.2 ms 到 4 ms 扫描,时间步 dt = 1 μs,τ_c 分别取 0.05 ms(快变)、0.5 ms(中等)、5 ms(慢变)。每个 τ_c 下生成 200 条噪声实现做系综平均,得到 W_FID(T) 与 W_echo(T)。

关键实现:同一噪声、两条相位路径

import numpy as np

def ou_noise(T, dt, tau_c, sigma, rng):
    n = int(T / dt)
    a = np.exp(-dt / tau_c)
    b = sigma * np.sqrt(1 - a**2)
    d = np.zeros(n)
    for k in range(1, n):
        d[k] = a * d[k-1] + b * rng.standard_normal()
    return d

def phase_fid(d, dt):
    return np.sum(d) * dt

def phase_echo(d, dt):
    half = len(d) // 2
    return (np.sum(d[:half]) - np.sum(d[half:])) * dt

def coherence(T_list, dt, tau_c, sigma, n_real=200, seed=0):
    rng = np.random.default_rng(seed)
    w_fid, w_echo = [], []
    for T in T_list:
        pf, pe = [], []
        for _ in range(n_real):
            d = ou_noise(T, dt, tau_c, sigma, rng)
            pf.append(phase_fid(d, dt))
            pe.append(phase_echo(d, dt))
        w_fid.append(abs(np.mean(np.exp(-1j*np.array(pf)))))
        w_echo.append(abs(np.mean(np.exp(-1j*np.array(pe)))))
    return np.array(w_fid), np.array(w_echo)

T_list = np.linspace(0.2e-3, 4e-3, 20)
for tau_c in [0.05e-3, 0.5e-3, 5e-3]:
    wf, we = coherence(T_list, 1e-6, tau_c, 2*np.pi*5e3, seed=1)
    print(f"tau_c={tau_c*1e3:.2f} ms  W_FID(T=4ms)={wf[-1]:.3f}  W_echo(T=4ms)={we[-1]:.3f}")

要点:phase_echo 用“前半段求和减后半段求和”实现 π 脉冲的符号翻转,等价于把后半段失谐取负;两条路径共用同一条 d,保证对比公平。

结果判读与验证

预期现象(由模型直接推出,非实测):τ_c = 5 ms 时,T = 4 ms 内噪声近似恒定,回波相位几乎抵消,W_echo 应显著高于 W_FID;τ_c = 0.05 ms 时噪声在 T/2 内已多次变号,回波抵消失效,两条曲线应接近重合。验证时检查三点:

  • 同一 τ_c 下 W_echo(T) ≥ W_FID(T)(回波不应让相干更差,数值误差除外);
  • 随 τ_c 增大,W_echo/W_FID 的比值应上升,体现“越慢越有效”;
  • 增大系综数 n_real,曲线应更平滑,说明结果是统计平均而非单次噪声实现的偶然。
若想进一步量化,可对 W_FID 与 W_echo 分别做指数拟合提取 T₂* 与 T₂,并绘制 T₂/T₂* 随 τ_c 的变化曲线,直接展示回波抑制低频噪声的能力边界。