夏克-哈特曼传感器:一块微透镜阵列如何“看见”波前
夏克-哈特曼传感器(Shack-Hartmann Sensor,SH Sensor)是自适应光学和光学检测里最常用的波前测量器件。它的原理朴素得有点意外:不去直接测量波前高度,而是测量波前的斜率。
把波前切成小块
核心元件是一块微透镜阵列——在一小片玻璃上排布几百到几千个相同的小透镜,每个直径几十到几百微米。
当一束带像差的波前入射时,每个小透镜把自己那一小块孔径内的光聚焦成一个光斑,落在后面的探测器上。如果这一小块波前是理想的平面,光斑就正好落在该子孔径的光轴上;如果这一小块波前有倾斜,光斑就会偏移。
偏移量与斜率的关系很简洁:
Δx = f × (∂W/∂x)
其中 f 是微透镜焦距,W 是波前。也就是说,测出光斑位移,就得到了该子孔径上波前在 x 方向的斜率。y 方向同理。一帧图像,就得到整个孔径上的斜率场。
从斜率到波前
斜率是波前的导数,要还原波前本身,需要做一次积分——但不是简单累加,而是用一组基函数去拟合。
最常用的是 Zernike 多项式。它是一组在单位圆上正交的多项式,每一项对应一种经典像差:
- 第 2、3 项:倾斜(tilt)——整个光斑一起偏移,对应星像抖动
- 第 4 项:离焦(defocus)——对应焦点前后
- 第 5、6 项:像散(astigmatism)
- 第 7、8 项:彗差(coma)
- 更高阶:球差及各种高阶不规则
把测得的斜率场投影到这组基函数上,就能得到每一项的系数。系数出来了,波前的 PV、RMS 就都能算出来,也可以直接画成相位图给人看。
这就是为什么波前检测软件的界面上,通常同时给出三样东西:光斑阵列图(原始数据)、相位图(重建结果)、Zernike 系数曲线(模态分解)。三者互为印证——光斑阵列如果某个角落的光斑糊了或者跑出去了,相位图对应区域也会失真,一眼就能看出来。
灵敏度与动态范围的拉扯
设计一套 SH 传感器,绕不开一个矛盾:
- 子孔径越小,对波前的空间采样越细,能测到更高阶的像差;同时焦距一定时,同样的波前斜率产生的光斑位移更大,灵敏度更高。
- 但子孔径越小,光斑能移动的范围也越小——像差一大,光斑就跑出子孔径边界,和邻居串门,测量直接失效。这就是动态范围的损失。
反过来,微透镜焦距 f 越大,同样的斜率对应的位移越大(灵敏度高),但动态范围更小。所以焦距的选择本质上是在“能测多细”和“能测多大”之间做取舍。
工程上的常规做法:先根据被测波前的预期幅度估算最大斜率,反推出所需动态范围,再在这个约束下尽量选小焦距、小孔径以提高灵敏度。如果两者实在不能兼顾,就只能上两套传感器分档测量。
几个容易被忽略的误差源
质心算法。光斑位置不是简单取最亮点,而是算灰度质心。阈值设高了会丢弱光斑,设低了会被噪声拖偏。弱信号下质心误差是主要误差项之一。
串扰。相邻子孔径的光斑靠得太近时,一个子孔径的窗口会漏进邻居的光。窗口大小要卡在“框得住自己”和“不碰邻居”之间。
微透镜阵列的制造误差。阵列本身的间距误差、焦距一致性、与探测器的对准误差,都会直接进入测量结果。所以 SH 传感器必须做标定——用一束已知的理想平面波(或标准球面波)测一遍,把系统误差存成参考文件,实测时减掉。
混叠。如果波前里有高于子孔径采样频率的成分,它会被错误地折叠成低频成分,看起来像是一个不存在的低阶像差。这种误差最阴险,因为它不会表现得“明显不对”。
它适合什么,不适合什么
SH 传感器的优势是:单帧测量、结构紧凑、对环境振动不敏感(因为它测的是斜率,不是绝对光程差)、可以做到很高帧率。这让它成为自适应光学闭环的首选,也适合在线检测和动态过程测量。
它的短板是空间分辨率受限于子孔径数量,而且对高度非球面的面形测量不占优势——那种场合干涉法仍然是主力。
相关内容:夏克-哈特曼波前检测系统。
