3. 单光子源与纠缠光子对:SPDC原理与HBT实验复现
做量子光学实验,绕不开两个核心器件:单光子源和纠缠光子对。说白了,没有它们,很多量子信息方案就是纸上谈兵。而SPDC(自发参量下转换)是目前最成熟、最常用的手段。我当年刚进实验室时,导师丢给我一本Yariv的《量子电子学》,说“你先搞懂SPDC”。结果我啃了三天,脑子里全是泵浦光、信号光、闲频光在打转。后来亲手搭了一套HBT实验,才算真正入了门。
今天我们就来拆解SPDC的原理,再手把手复现一个经典的HBT实验。嗯,这里我会穿插一些当年踩过的坑,希望能帮你少走弯路。
3.1 SPDC:一个光子如何变成两个?
SPDC是一种二阶非线性光学过程。一个高能量的泵浦光子(通常是紫外或蓝光)进入非线性晶体,有一定概率分裂成两个低能量的光子——我们叫它们信号光(signal)和闲频光(idler)。
为什么会这样?因为晶体内部的非线性极化响应,让泵浦光与晶格相互作用,产生了新的频率分量。能量守恒和动量守恒(相位匹配)是两个硬约束:
- 能量守恒:ωp = ωs + ωi
- 动量守恒:kp = ks + ki + Δk(相位失配项)
你想想看,如果相位匹配条件不满足,转换效率会低到几乎测不到信号。我记得第一次搭光路时,晶体角度调了半天,就是看不到下转换光。后来发现是温度没控好——BBO晶体的折射率对温度很敏感,差个0.5°C,相位匹配就跑了。
关键参数速查表(以BBO晶体为例,Type-I相位匹配,405nm泵浦):
| 参数 | 典型值 | 备注 |
|---|---|---|
| 晶体长度 | 1-3 mm | 越长效率越高,但色散也大 |
| 相位匹配角 | ~29.2° | 对角度非常敏感 |
| 转换效率 | 10-6 ~ 10-8 | 单光子级别,别指望高功率 |
| 带宽 | ~10 nm | 取决于晶体长度和泵浦线宽 |
3.2 两种相位匹配:Type-I vs Type-II
SPDC根据偏振关系分为两种类型。我个人习惯用Type-I做单光子源,用Type-II做纠缠光子对。为什么?
- Type-I:信号光和闲频光偏振相同。适合产生频率简并或非简并的单光子对。结构简单,但无法直接产生偏振纠缠。
- Type-II:信号光和闲频光偏振正交。通过补偿晶体,可以制备出偏振纠缠态,比如著名的|Φ+⟩ = (|HH⟩ + |VV⟩)/√2。
我在项目中遇到过一个问题:用Type-II BBO做纠缠源时,信号光和闲频光在空间上会分开一个很小的角度(走离角)。如果不做空间补偿,后端的耦合效率会惨不忍睹。后来我加了一对半波片和偏振分束器,才把两路光重新对齐。
3.3 HBT实验:验证单光子性的黄金标准
HBT实验(Hanbury Brown-Twiss干涉)原本是天文学家用来测量星体角直径的。后来被量子光学界拿来测量光子的二阶关联函数g(2)(0)。
对于单光子源,g(2)(0) < 0.5是判断非经典性的标准。理想单光子源的g(2)(0) = 0。而热光源的g(2)(0) = 2,相干光则是1。
实验光路其实不复杂:
- SPDC产生的光子对经过分束器(50:50 BS)
- 两路分别进入单光子探测器(SPAD)
- 用时间相关单光子计数模块(TCSPC)记录符合计数
嗯,这里有个坑:分束器的分光比一定要校准。我当年用了一个标称50:50的BS,结果实际测出来是48:52。虽然只差2%,但g(2)(0)的计算值会偏大。后来我改用校准过的BS,数据才漂亮起来。
避坑指南:我曾经在HBT实验中发现符合计数一直偏高。排查了两天,最后发现是探测器暗计数太大(~500 cps)。解决办法:加装时间滤波窗口,只保留光子到达时间窗口内的计数。暗计数瞬间降到50 cps以下。
3.4 代码实现:g(2)(0)计算
下面是一段Python代码,用来从TCSPC数据中计算g(2)(0)。实际实验时,数据格式可能不同,但核心逻辑是一样的。
import numpy as np
def calculate_g2(timestamps_ch1, timestamps_ch2, bin_width=1e-9, delay_range=100e-9):
"""
计算二阶关联函数 g2(tau)
参数:
timestamps_ch1, timestamps_ch2: 两路探测器的到达时间数组 (单位: 秒)
bin_width: 时间bin宽度 (默认1 ns)
delay_range: 延迟扫描范围 (默认 ±100 ns)
返回:
tau: 延迟时间数组
g2: 归一化的二阶关联函数
"""
# 构建时间bin
bins = np.arange(-delay_range, delay_range + bin_width, bin_width)
coincidences = np.zeros(len(bins) - 1)
# 计算符合计数 (简化版,实际应用需优化)
for t1 in timestamps_ch1:
deltas = timestamps_ch2 - t1
hist, _ = np.histogram(deltas, bins=bins)
coincidences += hist
# 归一化: 除以随机符合期望
rate1 = len(timestamps_ch1) / (timestamps_ch1[-1] - timestamps_ch1[0])
rate2 = len(timestamps_ch2) / (timestamps_ch2[-1] - timestamps_ch2[0])
random_coinc = rate1 * rate2 * bin_width * len(timestamps_ch1)
g2 = coincidences / random_coinc
tau = (bins[:-1] + bins[1:]) / 2
return tau, g2
# 使用示例
# tau, g2 = calculate_g2(t1, t2)
# print(f"g2(0) = {g2[np.argmin(np.abs(tau))]:.3f}")
注意:上面的代码是教学简化版。实际实验中,你需要考虑探测器死时间、暗计数修正、以及时间抖动。我曾经因为没做死时间修正,g(2)(0)算出来只有0.3,但实际应该是0.1。修正后数据才对得上。
3.5 知识体系总览
下面这张SVG图,把SPDC和HBT实验的核心逻辑串起来了。你可以把它当作一张思维导图,方便复习时快速回忆。
这张图把SPDC从物理原理到实验验证串成了一条线。你从顶部开始,先理解非线性过程,再区分两种类型,最后落到HBT实验的g(2)(0)判据上。我个人觉得,把这张图记在脑子里,比背十页公式都管用。
好了,SPDC和HBT实验的核心内容就这些。下次你搭光路时,记得先检查相位匹配温度,再校准分束器,最后别忘了做死时间修正。嗯,这些坑我都替你踩过了。
公众号:蓝海资料掘金营,微信deep3321