3. 拉姆齐干涉条纹仿真与频率估计
拉姆齐序列的物理过程与可观测信号
拉姆齐干涉的核心是“先制备叠加态,再让相位自由累积,最后把相位差转成布居数差”。对单个二能级原子,设驱动频率为 ω,原子跃迁频率为 ω₀,失谐 Δ = ω − ω₀。在旋转坐标系下,两段 π/2 脉冲之间自由演化时间 τ 内,相对相位累积为 φ = Δ·τ。若两段脉冲相位相同,末态布居数差(即测量信号)为:
P(τ) = cos(Δ·τ)
因此扫描 τ 会得到一条余弦条纹,条纹角频率就是失谐 Δ。实际估计时,我们固定 τ 扫描驱动频率 ω(等价于扫描 Δ),在条纹过零点附近,信号对频率的斜率最大,频率估计灵敏度最高。
仿真实现:从序列到频率估计
下面用 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 μs | 2π/τ ≈ 12.6 Mrad/s | 0.5×10⁶ | 较低 |
| 1.0 μs | ≈ 6.3 Mrad/s | 1.0×10⁶ | 中等 |
| 2.0 μs | ≈ 3.1 Mrad/s | 2.0×10⁶ | 较高 |
| 4.0 μs | ≈ 1.6 Mrad/s | 4.0×10⁶ | 高(但受 T₂* 限制) |
τ 不能无限增大:实际系统中横向退相干时间 T₂* 会限制相干信号的存活时间。当 τ 接近或超过 T₂* 时,条纹对比度显著下降,斜率带来的灵敏度增益被信号衰减抵消。因此最佳 τ 通常在 T₂* 量级附近选取,并需在仿真中引入衰减因子 exp(−τ/T₂*) 加以验证。
频率估计的实用做法:先粗扫找到条纹过零点,再在过零点附近小范围细扫并做线性拟合,用拟合斜率与截距反推失谐。这样可避免整条余弦拟合对初值敏感的问题,也更贴近实验中的锁频流程。