4. 薄透镜变换:从矩阵到物理图像

薄透镜,是激光光路里最常用的元件。我个人习惯把它的作用想成「给波前施加一个相位突变」——说白了,就是让光束的等相位面瞬间弯一下。这个弯的幅度,由透镜的焦距决定。

4.1 薄透镜的ABCD矩阵

先给结论。一个焦距为 f 的薄透镜,它的传输矩阵长这样:

M_lens = [1,   0]
         [-1/f, 1]

你可能会问:为什么是 -1/f?

嗯,这里要注意符号约定。我习惯用「正透镜聚焦、负透镜发散」的物理直觉。矩阵里的 -1/f 表示:当光线经过透镜时,它的斜率(或者说角度)会改变,改变量正比于光线离轴的高度。比例系数就是 -1/f。

举个例子。一束平行光(R→∞)垂直入射到 f=100 mm 的正透镜上。用矩阵算:

[r_out, θ_out]^T = M_lens * [r_in, 0]^T
r_out = r_in
θ_out = -r_in / f

出射光线向光轴偏折,偏折角 = r_in / f。这不就是几何光学里「平行光会聚到焦点」吗?矩阵和直觉对上了。

我的小习惯: 写矩阵时,我总会在旁边标上「透镜,f=xxx mm」。项目里透镜一多,光靠脑子记容易乱。标清楚,调试时少走弯路。

4.2 高斯光束通过薄透镜:q参数的变换

现在把高斯光束请进来。高斯光束的 q 参数经过薄透镜,变换规则极其简单:

q_out = q_in / (1 - q_in / f)

或者写成更常用的形式:

1/q_out = 1/q_in - 1/f

这个形式漂亮。它把透镜的作用看成「曲率相减」。q 参数的倒数,物理上就是波前曲率半径的倒数加上一个虚部(代表光斑尺寸)。透镜只改变实部——也就是波前曲率。

我曾经在搭建一台飞秒激光放大器时,遇到过一个问题:光束经过透镜后,焦点位置和理论计算差了将近 5 mm。排查了半天,发现是忽略了透镜的厚度效应。薄透镜近似在 f >> 透镜厚度时才成立。那台系统的透镜厚度 3 mm,焦距 50 mm,误差已经不可忽略了。

避坑指南: 薄透镜矩阵只适用于「薄透镜近似」。如果透镜厚度超过焦距的 1/10,请改用厚透镜矩阵,或者把透镜拆成「曲面-介质-曲面」三段来算。我曾经吃过这个亏,后来再也不敢偷懒了。

4.3 聚焦:高斯光束的束腰变换

高斯光束通过正透镜聚焦,是激光加工、光纤耦合里的常见场景。我们来算一个典型情况:

入射高斯光束的束腰在透镜前距离 d 处,束腰半径 ω₀,波长 λ。透镜焦距 f。聚焦后的束腰位置 d' 和半径 ω₀' 是多少?

用 q 参数三步走:

  1. 自由空间传输 d: q₁ = q₀ + d
  2. 经过透镜: 1/q₂ = 1/q₁ - 1/f
  3. 再自由空间传输 d': q₃ = q₂ + d'

聚焦后的束腰位置,就是让 q₃ 的实部为零的地方。解出来:

d' = f + (d - f) * f² / [(d - f)² + (πω₀²/λ)²]

这个公式看着有点复杂。但有个特例很好记:当入射束腰在透镜前焦面时(d = f),

d' = f

聚焦后的束腰就在透镜后焦面。而且此时聚焦光斑最小:

ω₀' = (λ f) / (π ω₀)

这就是经典的「焦面聚焦」关系。你想想看,它和几何光学的「物在焦点,像在无穷远」完全不同。高斯光束的衍射效应,让焦点落在了有限远处。

参数 几何光学 高斯光束
物在焦点 像在无穷远 像在透镜后焦面
聚焦光斑 点(理想) 有限大小 ω₀'
焦深 0 2πω₀'²/λ
核心结论: 高斯光束的聚焦,本质上是「衍射极限」和「几何聚焦」的平衡。聚焦光斑不可能无限小,它受限于 λ 和入射束腰的乘积。

4.4 成像公式的q参数形式

薄透镜成像,在几何光学里是 1/u + 1/v = 1/f。在高斯光束里,这个公式要升级。

假设入射高斯光束的 q 参数为 q_in,经过透镜后,在距离透镜 v 处的 q 参数为:

1/q_out = 1/(q_in + u) - 1/f

其中 u 是透镜到入射束腰的距离。如果出射束腰在 v 处,那么 q_out 的实部为零:

Re{1/(q_in + u) - 1/f} = 0

展开后得到:

1/(u + z_R²/(u - f)) + 1/v = 1/f

其中 z_R = πω₀²/λ 是瑞利长度。这个公式比几何光学的成像公式多了一项 z_R²/(u - f)。当 z_R → 0(即波长极短或束腰极大),它就退化成 1/u + 1/v = 1/f。

我个人觉得,q 参数形式的最大好处是:它把「成像」和「聚焦」统一了。你不需要记住两套公式,只需要会算 q 参数的传输和变换。

# Python 示例:计算高斯光束通过透镜后的束腰位置和大小
import numpy as np

def gaussian_lens_focus(w0, lam, f, d):
    """
    计算高斯光束通过薄透镜后的聚焦参数
    w0: 入射束腰半径 (mm)
    lam: 波长 (mm)
    f: 透镜焦距 (mm)
    d: 入射束腰到透镜距离 (mm)
    """
    zR = np.pi * w0**2 / lam  # 瑞利长度
    
    # 聚焦后束腰位置(距透镜)
    d_prime = f + (d - f) * f**2 / ((d - f)**2 + zR**2)
    
    # 聚焦后束腰半径
    w0_prime = w0 * f / np.sqrt((d - f)**2 + zR**2)
    
    return d_prime, w0_prime

# 示例:He-Ne 激光,λ=632.8 nm,w0=0.5 mm,f=100 mm,d=150 mm
d_prime, w0_prime = gaussian_lens_focus(0.5, 632.8e-6, 100, 150)
print(f"聚焦后束腰位置: {d_prime:.2f} mm")
print(f"聚焦后束腰半径: {w0_prime*1000:.2f} μm")
实用技巧: 实际项目中,我常用这个代码快速估算聚焦光斑。记得把单位统一——我习惯用 mm 做长度单位,波长用 mm 表示(比如 632.8 nm = 6.328e-4 mm)。单位错了,结果差三个数量级,别问我怎么知道的。

4.5 知识结构总览

下面这张图,把薄透镜变换的核心逻辑串起来了。从矩阵出发,到 q 参数变换,再到聚焦和成像——其实就一条线。

薄透镜变换知识结构图 薄透镜变换知识结构 薄透镜矩阵 [1, 0; -1/f, 1] q参数变换 1/q_out = 1/q_in - 1/f 聚焦 束腰位置 & 半径 成像 1/u + 1/v = 1/f + 修正 工程应用 激光加工 · 光纤耦合 注意 薄透镜近似条件: 透镜厚度 << 焦距 否则用厚透镜矩阵

从矩阵到 q 参数,再到聚焦和成像,每一步都有清晰的数学对应。我个人觉得,掌握了这个结构,你在设计激光光路时就能「心中有数」——知道每个透镜在干什么,也知道近似在什么地方会失效。