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。

实验光路其实不复杂:

  1. SPDC产生的光子对经过分束器(50:50 BS)
  2. 两路分别进入单光子探测器(SPAD)
  3. 用时间相关单光子计数模块(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实验知识体系 SPDC 自发参量下转换 物理原理:二阶非线性 + 相位匹配 Type-I (同偏振) vs Type-II (正交偏振) 应用:单光子源 (Type-I) | 纠缠光子对 (Type-II) HBT实验:g²(0)测量 g²(0) < 0.5 → 非经典光 | g²(0) = 0 → 理想单光子 | g²(0) = 1 → 相干光 | g²(0) = 2 → 热光

这张图把SPDC从物理原理到实验验证串成了一条线。你从顶部开始,先理解非线性过程,再区分两种类型,最后落到HBT实验的g(2)(0)判据上。我个人觉得,把这张图记在脑子里,比背十页公式都管用。

好了,SPDC和HBT实验的核心内容就这些。下次你搭光路时,记得先检查相位匹配温度,再校准分束器,最后别忘了做死时间修正。嗯,这些坑我都替你踩过了。


公众号:蓝海资料掘金营,微信deep3321