3. 拉姆齐干涉条纹仿真与频率估计

拉姆齐序列的物理过程与可观测信号

拉姆齐干涉的核心是“先制备叠加态,再让相位自由累积,最后把相位差转成布居数差”。对单个二能级原子,设驱动频率为 ω,原子跃迁频率为 ω₀,失谐 Δ = ω − ω₀。在旋转坐标系下,两段 π/2 脉冲之间自由演化时间 τ 内,相对相位累积为 φ = Δ·τ。若两段脉冲相位相同,末态布居数差(即测量信号)为:

P(τ) = cos(Δ·τ)

因此扫描 τ 会得到一条余弦条纹,条纹角频率就是失谐 Δ。实际估计时,我们固定 τ 扫描驱动频率 ω(等价于扫描 Δ),在条纹过零点附近,信号对频率的斜率最大,频率估计灵敏度最高。

拉姆齐脉冲时序 t π/2 制备叠加态 自由演化 τ,相位累积 φ = Δ·τ π/2 相位转布居 测量 P(τ)=cos(Δτ) 干涉条纹与斜率估计 Δ (失谐) P Δ₁ Δ₂ 斜率最大处 灵敏度最高 关键关系 条纹周期 T = 2π / τ τ 越长 → 条纹越密 → 频率分辨越高 过零点斜率 ∝ τ,灵敏度随 τ 增大 但 τ 受退相干时间 T₂* 限制 最佳工作点:条纹过零点附近

仿真实现:从序列到频率估计

下面用 Python 实现完整流程:构造两段 π/2 脉冲的传播算符,在自由演化段施加相位,扫描失谐得到条纹,再用过零点附近的线性拟合估计频率。代码自洽可运行,仅依赖 NumPy 与 Matplotlib。

import numpy as np
import matplotlib.pyplot as plt

# 旋转坐标系下的二能级哈密顿量(失谐 Δ)
# H = (ħ/2) * [[0, Δ], [Δ, 0]] 的等效相位累积
# 自由演化算符:U_free(τ) = exp(-i * Δ * τ / 2 * σx)
# 这里用相位累积形式:相对相位 φ = Δ * τ

def ramsey_signal(delta, tau):
    """给定失谐 delta 和自由演化时间 tau,返回布居数差 P = cos(delta*tau)"""
    return np.cos(delta * tau)

# 1) 固定 tau,扫描失谐,生成干涉条纹
tau = 2.0e-6          # 自由演化时间 2 μs
delta_scan = np.linspace(-2*np.pi*1e6, 2*np.pi*1e6, 801)  # ±1 MHz
signal = ramsey_signal(delta_scan, tau)

# 2) 在过零点附近做线性拟合估计频率
# 找到信号过零点(符号变化处)
zero_crossings = []
for i in range(len(signal)-1):
    if signal[i] * signal[i+1] < 0:
        # 线性插值求过零点
        d0, d1 = delta_scan[i], delta_scan[i+1]
        s0, s1 = signal[i], signal[i+1]
        d_zero = d0 - s0 * (d1 - d0) / (s1 - s0)
        zero_crossings.append(d_zero)

print("过零点位置 (rad/s):", zero_crossings)
# 相邻过零点间距 = π/τ,可反推 τ 或校验条纹周期
if len(zero_crossings) >= 2:
    spacing = zero_crossings[1] - zero_crossings[0]
    tau_est = np.pi / spacing
    print(f"由条纹间距估计的 tau = {tau_est*1e6:.3f} μs")

# 3) 分析 tau 对灵敏度的影响
# 过零点斜率 dP/dΔ = -tau * sin(Δτ),在 Δτ = π/2 时 |斜率| = tau
taus = np.array([0.5e-6, 1.0e-6, 2.0e-6, 4.0e-6])
slopes = taus  # 过零点处最大斜率绝对值 = tau
for t, s in zip(taus, slopes):
    print(f"tau = {t*1e6:.1f} μs, 过零点最大斜率 = {s:.3e} /(rad/s)")

# 4) 绘图
fig, axes = plt.subplots(1, 2, figsize=(11, 4))
axes[0].plot(delta_scan/1e6, signal, color='#e07b39')
axes[0].axhline(0, color='gray', lw=0.8)
axes[0].set_xlabel('失谐 Δ (MHz)')
axes[0].set_ylabel('布居数差 P')
axes[0].set_title(f'拉姆齐条纹 (τ={tau*1e6:.1f} μs)')
axes[0].grid(alpha=0.3)

for t in taus:
    axes[1].plot(delta_scan/1e6, ramsey_signal(delta_scan, t), label=f'τ={t*1e6:.1f} μs')
axes[1].axhline(0, color='gray', lw=0.8)
axes[1].set_xlabel('失谐 Δ (MHz)')
axes[1].set_ylabel('布居数差 P')
axes[1].set_title('不同自由演化时间的条纹对比')
axes[1].legend(fontsize=8)
axes[1].grid(alpha=0.3)
plt.tight_layout()
plt.show()

结果判读与灵敏度分析

运行上述代码后,左图应看到一条关于 Δ=0 对称的余弦条纹,过零点等间距分布。右图对比不同 τ:τ 越大,条纹越密,过零点处斜率越陡。这直接对应频率估计的灵敏度——在过零点附近,信号变化量 δP ≈ τ·δΔ,因此相同测量噪声下,τ 越大对失谐的分辨能力越强。

自由演化时间 τ条纹周期(Δ 域)过零点最大斜率频率分辨趋势
0.5 μs2π/τ ≈ 12.6 Mrad/s0.5×10⁶较低
1.0 μs≈ 6.3 Mrad/s1.0×10⁶中等
2.0 μs≈ 3.1 Mrad/s2.0×10⁶较高
4.0 μs≈ 1.6 Mrad/s4.0×10⁶高(但受 T₂* 限制)
τ 不能无限增大:实际系统中横向退相干时间 T₂* 会限制相干信号的存活时间。当 τ 接近或超过 T₂* 时,条纹对比度显著下降,斜率带来的灵敏度增益被信号衰减抵消。因此最佳 τ 通常在 T₂* 量级附近选取,并需在仿真中引入衰减因子 exp(−τ/T₂*) 加以验证。
频率估计的实用做法:先粗扫找到条纹过零点,再在过零点附近小范围细扫并做线性拟合,用拟合斜率与截距反推失谐。这样可避免整条余弦拟合对初值敏感的问题,也更贴近实验中的锁频流程。