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)
就这么简单。你不需要关心中间过程,只需要知道输入和系统的总矩阵。
下面这张图展示了典型的透镜聚焦系统的矩阵分解流程:
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 本章小结——你该记住什么
好,这一章内容不少,我帮你捋一下重点:
- 复参数 q 把光斑半径和波前曲率合二为一,是高斯光束变换的“通行证”。
- ABCD 矩阵 是光学系统的“身份证”,每个元件都有对应的矩阵。
- q₂ = (A·q₁ + B) / (C·q₁ + D) 是核心公式,所有变换都靠它。
- 透镜聚焦 时,焦点位置和焦斑大小取决于入射腰斑位置与透镜焦距的匹配。
- 准直 的本质是让出射光束的腰斑尽可能大且远,发散角尽可能小。
- 级联系统 的总矩阵等于各元件矩阵的逆序乘积,一步到位算出输出。