4. 高斯光束的变换:透镜对高斯光束的聚焦与准直,ABCD矩阵的应用

好,咱们进入正题。前面几章我们把高斯光束的脾气摸了个大概——腰斑多大、发散角多宽、等相位面怎么弯。但光摸清脾气没用,你得会使唤它。怎么使唤?用透镜。

透镜对普通几何光线的变换,大家高中就学过。但高斯光束不一样,它是个有“厚度”的光斑,不是一条线。你拿一个透镜去聚焦一束高斯光,焦点位置和光斑大小,跟几何光学算出来的结果往往对不上。我第一次做这个实验时就栽过跟头——算好了焦距,结果焦点偏了快一厘米,光斑也比预期大了一圈。后来才明白,高斯光束的变换,得用一套专门的工具:ABCD 矩阵。

核心思想:高斯光束通过光学系统,其复参数 q 的变换规律,与几何光学的光线变换矩阵完全一致。即:

q₂ = (A·q₁ + B) / (C·q₁ + D)

其中 [A B; C D] 是光学系统的光线传输矩阵。

4.1 复参数 q 的引入——为什么需要它?

你想想看,描述一束高斯光束,我们需要两个量:光斑半径 ω(z) 和等相位面曲率半径 R(z)。这两个量随着传播距离 z 变化,而且相互耦合。单独追踪它们很麻烦。

于是有人想了个聪明的办法:把这两个量捏成一个复数。

定义复参数 q:

1/q(z) = 1/R(z) - i·λ/(π·ω²(z))

其中 λ 是波长,ω(z) 是光斑半径,R(z) 是等相位面曲率半径。

这个式子看着有点抽象,但你把它拆开看:

  • 实部 1/R(z):代表波前的弯曲程度。R 为正表示发散球面波,R 为负表示会聚球面波。
  • 虚部 -i·λ/(π·ω²):代表光斑的有限尺寸。虚部越大,光斑越小,光束越“紧”。

在腰斑位置 z=0 处,R(0) → ∞,所以 1/R(0)=0。此时:

1/q₀ = -i·λ/(π·ω₀²)  →  q₀ = i·π·ω₀²/λ

这个 q₀ 是纯虚数。记住它,后面计算聚焦时经常用到。

我个人习惯:在纸上算题时,先把腰斑处的 q₀ 写出来,然后一路乘矩阵。这样不容易乱。我曾经带过一个实习生,他每次都从 z 开始推,结果符号搞反了三次。

4.2 自由空间的 ABCD 矩阵与 q 参数传播

高斯光束在自由空间传播距离 d,它的 q 参数怎么变?很简单,自由空间的传输矩阵是:

M_free = [1  d]
         [0  1]

代入 q 变换公式:

q₂ = (1·q₁ + d) / (0·q₁ + 1) = q₁ + d

也就是说,在自由空间里,q 参数就是线性叠加传播距离。这跟几何光学里光线高度随距离线性变化是一个道理。

举个例子:腰斑在 z=0 处,q₀ = i·z₀(其中 z₀ = π·ω₀²/λ 是瑞利长度)。传播到距离 z 处:

q(z) = q₀ + z = i·z₀ + z

然后取倒数,就能分离出 R(z) 和 ω(z)。这个我们上一章已经算过,现在用 q 参数重新看,是不是清爽多了?

4.3 薄透镜的变换——聚焦的核心

薄透镜是高斯光束变换里最常用的元件。它的 ABCD 矩阵是:

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

其中 f 是透镜焦距。注意符号约定:会聚透镜 f > 0,发散透镜 f < 0。

代入 q 变换公式:

q₂ = (1·q₁ + 0) / ((-1/f)·q₁ + 1) = q₁ / (1 - q₁/f)

这个公式看着简单,但用起来有门道。我建议你记住它的物理图像:透镜只改变波前的曲率(即 q 的实部),不改变光斑尺寸(即 q 的虚部在透镜前后连续)。

我曾经踩过的坑:在计算透镜后方的光斑时,直接套用几何光学的成像公式。结果发现实际焦点位置和光斑大小都跟预期差很多。后来才意识到,高斯光束的聚焦,必须同时考虑腰斑位置和透镜焦距的匹配关系。

4.4 透镜聚焦高斯光束——定量分析

现在我们来解决一个实际问题:一束高斯光入射到一个透镜上,求焦点位置和焦斑大小。

设入射高斯光束的腰斑为 ω₀,腰斑到透镜的距离为 d。透镜焦距为 f。

步骤一:写出入射光束在透镜前表面的 q 参数。

q_in = d + i·z₀   其中 z₀ = π·ω₀²/λ

步骤二:经过透镜变换。

q_out = q_in / (1 - q_in/f)

步骤三:从透镜后表面继续传播到焦点。焦点位置是 q 参数实部为零的地方(即等相位面为平面)。

这个计算过程,我一般用 Python 快速算一下:

import numpy as np

# 参数设置
w0 = 1e-3       # 腰斑半径 1 mm
lam = 632.8e-9  # 波长 632.8 nm
f = 0.1         # 透镜焦距 100 mm
d = 0.5         # 腰斑到透镜距离 500 mm

# 计算
z0 = np.pi * w0**2 / lam
q_in = d + 1j * z0
q_lens = q_in / (1 - q_in / f)

# 寻找焦点位置:实部为零
# 从透镜后表面开始,每步传播 dz
dz = 0.001
z_scan = 0
q_scan = q_lens
while np.abs(np.real(1/q_scan)) > 1e-6:
    z_scan += dz
    q_scan = q_lens + z_scan

print(f"焦点距透镜: {z_scan*1000:.2f} mm")
# 计算焦斑大小
w_focus = np.sqrt(-lam / (np.pi * np.imag(1/q_scan)))
print(f"焦斑半径: {w_focus*1e6:.2f} um")

这个代码我用了很多年,基本没出过问题。但要注意,当入射腰斑离透镜很远(d >> f)时,焦点位置会趋近于几何光学的像方焦点;当 d 很小时,焦点会偏离。

4.5 高斯光束的准直——让光束“变直”

准直是聚焦的逆过程。说白了,就是用一个透镜,把发散的高斯光束变成近似平行光。

准直的条件是:透镜后方的出射光束,其腰斑位于无穷远处(或者说,等相位面在透镜后方很大范围内保持平面)。

实际操作中,我们通常把透镜放在入射光束的腰斑处(d=0),此时:

q_in = i·z₀
q_out = i·z₀ / (1 - i·z₀/f)

经过透镜后,出射光束的腰斑位置和大小可以通过 q_out 的传播得到。你会发现,当 f 远大于 z₀ 时,出射光束的发散角会显著减小。

准直的经验法则:

  • 透镜焦距 f 越大,准直效果越好(出射发散角越小)。
  • 入射腰斑 ω₀ 越大,准直后的发散角越小。
  • 但大腰斑意味着需要更大口径的透镜,否则会有衍射损失。

4.6 ABCD 矩阵的级联——复杂系统的处理

实际光学系统往往不止一个透镜。比如一个典型的激光扩束器,由两个透镜组成。这时候,ABCD 矩阵的威力就体现出来了。

多个元件的级联,总矩阵等于各元件矩阵的逆序乘积:

M_total = M_n · M_{n-1} · ... · M_2 · M_1

然后直接用总矩阵去变换 q 参数:

q_out = (A·q_in + B) / (C·q_in + D)

就这么简单。你不需要关心中间过程,只需要知道输入和系统的总矩阵。

下面这张图展示了典型的透镜聚焦系统的矩阵分解流程:

透镜聚焦系统的 ABCD 矩阵分解流程 输入光束 q_in 自由空间 M₁(d₁) 薄透镜 M₂(f) 自由空间 M₃(d₂) 输出光束 q_out 总矩阵 M_total = M₃ · M₂ · M₁ 说明: • 每个光学元件对应一个 2×2 的 ABCD 矩阵 • 级联时矩阵按逆序相乘:先经过的元件放在最右边 • 最后用 q_out = (A·q_in + B) / (C·q_in + D) 一步算出输出光束

4.7 常见光学元件的 ABCD 矩阵汇总

为了方便查阅,我把常用的 ABCD 矩阵整理成了一张表。建议你收藏一下,做设计时随时翻:

光学元件 ABCD 矩阵 参数说明
自由空间传播 d [1 d; 0 1] d 为传播距离
薄透镜(焦距 f) [1 0; -1/f 1] f > 0 会聚,f < 0 发散
介质界面(折射率 n₁→n₂) [1 0; 0 n₁/n₂] 平面界面,垂直入射
球面反射镜(曲率半径 R) [1 0; -2/R 1] R > 0 凹面镜,R < 0 凸面镜
厚透镜(主平面间传播) [1 d/n; 0 1] d 为厚度,n 为折射率

一个小技巧:当你拿到一个复杂系统时,先画出光路图,标出每个元件的顺序。然后从输入到输出,依次写出每个元件的矩阵。最后用 Python 或 MATLAB 做矩阵乘法。我习惯在代码里把每个矩阵单独定义,这样调试时容易定位问题。

4.8 本章小结——你该记住什么

好,这一章内容不少,我帮你捋一下重点:

  1. 复参数 q 把光斑半径和波前曲率合二为一,是高斯光束变换的“通行证”。
  2. ABCD 矩阵 是光学系统的“身份证”,每个元件都有对应的矩阵。
  3. q₂ = (A·q₁ + B) / (C·q₁ + D) 是核心公式,所有变换都靠它。
  4. 透镜聚焦 时,焦点位置和焦斑大小取决于入射腰斑位置与透镜焦距的匹配。
  5. 准直 的本质是让出射光束的腰斑尽可能大且远,发散角尽可能小。
  6. 级联系统 的总矩阵等于各元件矩阵的逆序乘积,一步到位算出输出。