news 2026/9/16 16:36:03

DOE光场整形实战:相位恢复、算法设计与加工公差

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DOE光场整形实战:相位恢复、算法设计与加工公差

简介:DOE光场整形是衍射光学元件应用中的核心方向,面向从事激光加工、成像系统或光学通信的工程师与研究人员,用于解决高斯光束难以满足特定形态需求的工程问题。压缩包共2个文件,总大小约832KB,其中MATLAB脚本负责设计DOE相位函数并进行衍射计算,音频文件对应实验测量或频谱分析数据,便于验证整形效果。已有696人浏览学习,具有一定参考价值。通过该MATLAB程序,可直观理解从高斯光束到平面波、环形光束等目标光场的相位反演过程,并结合傅里叶光学与优化算法掌握光场整形的设计思路;音频数据则为分析光束频谱特性提供了实际案例,适合需要快速上手DOE设计的入门者或希望拓展光学仿真能力的进阶用户。

1. DOE 光场整形:一片微结构替掉半套光路

做激光加工或光电集成的人,迟早会撞上同一个需求:把高斯光变成均匀多点阵列,或把椭圆光斑整形成平顶。DOE(衍射光学元件)的做法,是在基片上刻微米级浮雕相位,让光经过后自行重排能量,一片石英片替掉半套透镜组。光场整形在工程语境内,就是设计相位分布,把远场或焦平面强度改写成预设形态,常见输出有平顶光斑、多点阵列、涡旋光束。这套方案适合激光微加工、激光雷达、结构光投影领域的光学工程师,也适合自研光学模组的硬件团队。代价是设计有门槛、加工有公差、对波长敏感,下文按模型、算法、加工、实测这条技术路线逐个展开。

2. DOE 光场整形的物理模型:相位怎么变成强度

2.1 薄元件近似:为什么只看相位就够了

DOE 的设计前提是薄元件近似。浮雕结构与波前相互作用时,每个点的透射函数近似写成 t(x,y)=exp(iφ(x,y)),振幅不变,只有相位被调制。入射光通常是高斯或平顶激光,进入元件前振幅分布已知,进入后振幅基本不变,相位被表面浮雕改写。这个近似成立的条件是特征尺寸远大于波长、数值孔径不高,绝大多数多焦点和平顶整形场景都满足。

远场或透镜焦平面上,光场是输入面光场的二维傅里叶变换。相位在输入面是角度信息,到了焦平面就变成位置信息:输入面上一个线性相位倾斜,对应焦平面上一个整体平移。所以用相位和光场整形的本质,是把能量从中心零级搬到指定空间频率上去。设计任务因此变成求一组相位分布,使得它的傅里叶变换强度符合目标,这类问题统称相位恢复,Gerchberg-Saxton 算法就是为解决它出现的。

2.2 标量衍射与傅里叶关系的适用边界

用傅里叶变换描述焦平面光场,背后是标量衍射和菲涅尔近似的假设。判断标准有两条:元件最小特征尺寸大于 2 个波长左右,且照明数值孔径不高。低于 1λ 的特征就要用严格耦合波分析或时域有限差分,那是超表面和偏振选择性元件的领域;常规激光分束、平顶整形用标量模型,误差在百分之一量级,足够指导设计。

设计里反复用到一个换算关系:焦平面采样间隔 δ = λf/L,其中 λ 是设计波长,f 是聚焦焦距,L 是设计窗口边长。这个式子在布参时是第一个要算的数,光斑能摆在哪、间隔多大,都由它决定。用一段小代码验证一下:

lam, f, L = 1064e-9, 50e-3, 1024 * 5.2e-6 # 1064nm, f=50mm, 窗口=1024*5.2um delta = lam * f / L print(f"焦面采样间隔 delta = {delta*1e6:.2f} um")

这段代码输出约 10.00 µm。逻辑是:设计窗口在频域里对应一个基频,焦面上的相邻采样点间距就是这个值。后面设计 3×3 多焦点时,焦点间隔直接写成 delta 的整数倍,物理位置就由 λ、f、L 三者锁死,不需要再换算回空间坐标。

2.3 设计算法:选迭代傅里叶还是别的

常见做法是迭代傅里叶变换这一类,代表是 Gerchberg-Saxton(GS)及其变体。它交替在输入面和焦平面做傅里叶变换与逆变换,一个平面保留振幅约束、另一个平面只保留相位自由度,反复迭代直到收敛。对多焦点阵列,业界用得更稳的是加权 GS 和它的各种自校正变体,它们在替换振幅约束时乘一个误差权重,均匀性收敛远好于原始 GS。

算法均匀性收敛计算成本典型用途
原始 Gerchberg-Saxton一般,易卡局部最优单焦点、简单整形
加权 GS多焦点阵列、平顶
直接二分搜索(DBS)小规模、量化相位
模拟退火 / 遗传算法大周期、复杂目标图样

选择依据主要是目标复杂度和网格大小。几百个焦点的复杂图样,才需要 DBS 或更重的优化;常规 3×3、5×5 阵列和矩形平顶,加权 GS 配上好的初始化就够用。模拟退火能处理带约束的最优问题,但迭代量通常是 GS 的几十倍,适合不赶时间的设计。

2.3.1 信号区与自由区:效率从哪来

GS 家族算法的关键自由度在焦平面:只有信号区的振幅被约束,信号区外的能量去哪都可以。相位恢复迭代时,算法会把多余能量尽量压向信号区外的"自由区",而不是硬塞进信号点里。信号区外保留自由,是衍射效率能否到百分之八十以上的分水岭。把整个焦平面都设成约束的做法效率很低,新手常在这里翻车。实际设计时,我一般先画一个信号区掩模,掩模外振幅字段每轮迭代都用当前值,不做替换,收敛效率和均匀性会明显改善。

3. 用 Python 跑通 3×3 多焦点 DOE 设计

3.1 定参数:波长、焦距、窗口与像素的关系

设计前先按光路布局把四个数定下来:波长 λ、焦距 f、窗口边长 L、采样网格 N。窗口乘上像素间距就是 L,L 和 N 决定焦面采样间隔 δ=λf/L,δ 又决定焦点能放多密。下面这组参数按常见激光微加工光路取值,后面所有代码都基于它:

参数取值说明
设计波长 λ1064 nm与激光器输出波长一致
焦距 f50 mm由聚焦镜布局决定
设计窗口 L5.32 mm1024 × 5.2 µm,约 5 倍波长量级
焦面采样间隔 δ≈10 µmλf/L,设计网格与物理位置换算的桥梁
焦点间隔300 µm对应 FFT 里 30 个采样格
相位量化台阶8三块掩膜的二元光学工艺

窗口加大,焦面采样变细,光斑变小、能摆的阵列更密,但加工特征尺寸跟着变小,难度上升。窗口选多大,本质是光学性能与加工能力的折中,没有独立于工艺的"最佳值"。

3.2 加权 GS 核心代码:最小可复现版本

代码实现了一个带自校正权重的加权 GS,目标图样是 3×3 等强度焦点。信号区外的振幅每轮保留当前值,这是效率能否做上去的关键:

import numpy as np from itertools import product def design_fanout(spot_map, n_iter=300, gamma=0.8, levels=8, seed=7): """加权GS生成多焦点DOE相位分布 spot_map: 浮点数组, 非零位置为目标焦点, 值为相对强度 返回: 量化后的相位数组, 单位弧度 """ ny, nx = spot_map.shape rng = np.random.default_rng(seed) phi = rng.uniform(-np.pi, np.pi, (ny, nx)) # 随机相位初始化 amp_target = np.sqrt(np.clip(spot_map, 0, None)) mask = spot_map > 0 # 信号区掩模 weights = np.ones_like(amp_target) for it in range(n_iter): u_in = np.exp(1j * phi) # 输入面: 均匀振幅 + 待优化相位 U = np.fft.fftshift(np.fft.fft2(u_in)) # 到焦平面 amp = np.abs(U) ph = np.angle(U) if it > 0: # 上一轮输出与目标的比值, 修正信号区振幅约束 ratio = np.where(mask, amp_target / np.maximum(amp, 1e-12), 1.0) weights = np.where(mask, weights * np.clip(ratio, 0.5, 2.0) ** gamma, 1.0) weights = np.where(mask, weights / weights[mask].mean(), 1.0) # 信号区用加权目标振幅, 自由区保留当前振幅 new_amp = np.where(mask, amp_target * weights, amp) target = new_amp * np.exp(1j * ph) u_back = np.fft.ifft2(np.fft.ifftshift(target)) phi = np.angle(u_back) # 输入面只取相位 step = 2 * np.pi / levels return np.round(phi / step) * step # 量化到 8 台阶 N = 1024 spot_map = np.zeros((N, N)) step_cell = 30 # 焦点间隔 30 格 = 300 um for di, dj in product([-1, 0, 1], [-1, 0, 1]): r, c = N // 2 + step_cell * di, N // 2 + step_cell * dj yy, xx = np.mgrid[r-6:r+7, c-6:c+7] # 用 1.5 格宽度高斯代替理想delta, 降低目标过尖导致的环纹 spot_map[yy, xx] += np.exp(-((yy - r) ** 2 + (xx - c) ** 2) / 4.5) phase = design_fanout(spot_map, n_iter=300) np.save("doe_fanout_3x3.npy", phase)

逻辑说明:每一轮迭代先正向傅里叶变换到焦平面,取出振幅和相位;信号区把振幅约束替换成目标振幅乘权重,自由区保留当前振幅,然后带着统一相位逆变换回输入面。输入面丢弃振幅,只保留相位,这是相位型元件的物理约束。权重修正里 clip 到 0.5~2.0 是防止振幅比值过大导致振荡,gamma 取 0.8 控制修正速度。量化用 round 而不是 floor,因为 round 引入的相位误差均值为零,效率损失最小。

提示:代码按均匀振幅照明近似。真实高斯光入射时,把u_in改成A_gauss * np.exp(1j*phi),并让边缘焦点的目标强度反比于入射强度做补偿,否则阵列边缘光斑会比中心弱。

3.3 量化台阶与效率:为什么要 8 台阶

连续相位量化到 L 个台阶,衍射效率相对理想连续相位有一个固定损失系数:η_L = (sin(π/L) / (π/L))²。这个式子的意思是,台阶越粗,波形拟合越差,能量漏到旁瓣和杂散等级里。

量化台阶数相对效率对应掩膜数
240.5%1
481.1%2
895.0%3
1698.7%4

二元光学工艺里每增加一块掩膜,台阶数翻一倍。8 台阶用三块掩膜,效率已经到 95%,再上 16 台阶只提升不到 4 个百分点,掩膜成本和套刻误差却显著上升,所以量产多焦点器件大多停在 8 到 16 台阶。设计阶段先按连续相位算,最后量化,量化后的效率下降可以预先按上表估算。

3.4 设计质量的三个数字:均匀性、效率、信噪比

设计完成的相位,要回代仿真正式验收三个指标。均匀性用 AE 表示,AE = 1 - (I_max - I_min)/(I_max + I_min),越接近 1 越好;效率是九个焦点总能量占整个焦平面能量的比例;信噪比看信号区外有没有明显杂散亮斑,尤其是中心零级。验证代码:

I = np.abs(np.fft.fftshift(np.fft.fft2(np.exp(1j * phase)))) ** 2 rows = [N // 2 + step_cell * i for i in (-1, 0, 1)] cols = [N // 2 + step_cell * j for j in (-1, 0, 1)] vals = np.array([I[r-1:r+2, c-1:c+2].sum() for r, c in product(rows, cols)]) AE = 1 - (vals.max() - vals.min()) / (vals.max() + vals.min()) eff = vals.sum() / I.sum() print(f"均匀性 AE={AE:.3f} 衍射效率={eff:.3f}")

每个焦点取 3×3 邻域求和,是因为焦点是 sinc 型分布,单点峰值受网格对齐影响大,邻域积分才代表真实能量。8 台阶设计做到 AE 大于 0.95、效率大于 0.8 是合格线。达不到时优先查两处:目标高斯宽度是否小于 1 格,以及目标图样是否离中心太近导致零级串扰。

4. 加工公差:从相位分布到真实 DOE

4.1 三条加工路线怎么选

设计出来的相位分布要落成表面浮雕,主流有三条路线:多掩膜光刻加反应离子刻蚀(ICP-RIE)、灰度光刻、激光直写。多掩膜光刻是二元光学标准工艺,每块掩膜对应一位量化,三块掩膜出 8 台阶,台阶数按 2 的幂增长,适合批量生产、一致性要求高的场景。灰度光刻用灰度掩膜一次曝光出连续轮廓,省去套刻步骤,但灰度可控性和刻蚀均匀性对设备依赖很强。激光直写适合原型验证和小批量,速度慢,胜在改版快,不制掩膜就能出样。

加工路线台阶能力单件成本适用批量主要误差来源
多掩膜光刻 + ICP-RIE4、8、16 台阶大批量套刻对准、深度控制
灰度光刻连续 / 多台阶中小批量灰度标定、刻蚀非线性
激光直写连续原型光斑重叠、定位漂移

选路线之前先确认最小特征尺寸。像素 5.2 µm、8 台阶时,最细结构的线宽就在 5 µm 附近,三块掩膜的工艺都能稳定做。如果设计为了追求大窗口把像素压到 1 µm 以下,激光直写和灰度光刻都要重新评估分辨率和侧壁陡度。

4.2 台阶深度换算:刻多深由波长和折射率决定

相位台阶和物理深度的换算关系是核心的一步。一个 2π 相位对应的总深度 H = λ/(n-1),分成 L 个台阶后,每个台阶深度 h_step = λ/(L·(n-1))。熔石英在近红外的折射率约 1.45,代入即得:

lam = 1064e-9 n = 1.4497 # 熔石英在 1064 nm 的折射率 H = lam / (n - 1) # 2π 相位对应总深度 h_step = H / 8 # 8 台阶单阶深度 print(f"总深度 {H*1e9:.0f} nm, 单阶深度 {h_step*1e9:.0f} nm")

结果约 2366 nm 和 296 nm。不同波长对应的值差异明显,常见激光波长下的参数如下,方便直接查:

设计波长熔石英折射率2π 总深度8 台阶单阶深度
1030 nm≈1.4502.29 µm286 nm
1064 nm≈1.44972.37 µm296 nm
1550 nm≈1.4443.49 µm436 nm

这里最容易犯的错是刻蚀工艺按某一波长标定深度,换一个波长直接复用,导致整体相位偏移。系统性深度偏差不会平均分布到各焦点,而是集中泄漏到中心零级,表现就是焦面中央一个不受控的亮斑。

4.3 三类加工误差怎么毁均匀性

第一类误差是台阶深度误差。每阶深度偏差 δh 对应相位误差 δφ = 2π·δh·(n-1)/λ。以 1064 nm、8 台阶为例,δh 控制在 ±30 nm 时,单阶相位误差约 ±4.6 度,对均匀性影响不大,效率损失约 2~3 个百分点;但如果深度系统性偏深或偏浅,零级能量会显著上升。实际下单时,台阶深度公差按 ±3% 提是比较稳妥的常规做法。

第二类误差是线宽或占空比误差,来源于光刻和刻蚀的选择比偏差。占空比不对称会让各级次能量分配失衡,在 3×3 阵列上就表现为某一列或某一行偏亮。以 5.2 µm 像素为例,CD 均匀性通常要求 ±0.2 µm 以内,超过这个量级光斑间亮度差肉眼可见。第三类是侧壁角度和表面粗糙度。侧壁不够垂直会把能量散射到信号区外,降低信噪比;粗糙度 Ra 超过 10 nm 时,焦面会出现弥散背景,暗背景和杂散等级都变难看。

4.4 波长与温度:DOE 不是宽带元件

相位的温度稳定性其实不错,熔石英热光系数在每开尔文 10⁻⁵ 量级,几十度温差引入的相位变化不到 0.1%,可以忽略。真正麻烦的是波长。多焦点阵列的焦点间距正比于波长,设计波长 1064 nm 的器件用在 1030 nm 光源上,300 µm 的间距会整体缩小约 1%,长焦距、大阵列时误差累积不可忽视。平顶整形对波长更敏感,波长偏移会让边缘轮廓变软、顶部出现波纹,因为平顶相位里包含大台阶深度的结构,相位误差按深度放大。所以下单前必须和光源方确认实际输出波长和线宽,半导体激光器 2 nm 量级的线宽在严格场景下就要考虑改用消色差设计或双层补偿结构。

5. 实测验证与两个收敛技巧

5.1 焦面测量要测什么、怎么测才准

拿到成品后,第一步是搭焦面测量光路:激光经过 DOE 后用 f=50 mm 透镜聚焦,相机放在透镜后焦面。测量优先看能量积分而不是峰值,因为相机像素与光斑尺寸的采样关系会掩盖真实峰值。本文参数里光斑约 10 µm 量级,相机像素在 5 µm 以内才能采到两到三个点,取每个焦点 3×3 邻域的灰度积分作为能量值。测量前先采集暗场帧减掉,再对多个帧取平均,避免散斑和光源抖动造成误判。衍射效率用功率计测:焦面处用光阑框住九个焦点测总功率,除以 DOE 前的入射功率,记得扣除基片反射损耗。

5.2 均匀性不达标时的两遍设计回路

实测 AE 低于 0.9 时,不要急着怀疑加工,先做一遍补偿设计:把实测每个焦点的相对强度记下来,新的目标强度设为 I_new = I_design × (mean(I_meas) / I_meas)^p,p 取 0.7 到 1.0,然后用这个修正后的目标重跑一遍设计。这个回路通常两到三轮就收敛,因为加工误差在信号区各点之间有相关性,反向修正能直接吃掉系统性偏差。如果补了两轮还压不下去,重点查焦点间距是否太近导致邻域串扰,以及零级是否被自由区泄漏污染。

5.3 一个零成本技巧:零填充细化光斑位置

FFT 设计有一个隐性约束:焦点只能落在采样网格的整数格点上。需要把焦点放在非整数位置(例如五个不等距焦点),常见做法是零填充。把设计网格从 N×N 零填充到 4N×4N 再做 FFT,焦面采样间隔从 δ 变成 δ/4,光斑位置分辨率直接提高四倍,算法和加工参数完全不用动。实现时把 spot_map 画在放大后的网格对应坐标上,设计完把相位裁回原窗口即可。需要注意放大网格上信号区外继续保持整块自由,否则均匀性反而不如原网格。这个技巧在调试焦点间距离不均、消除阵列周期性伪影时最常被用到,也是多焦点 DOE 设计里性价比最高的细化手段。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 16:33:57

手机端大模型翻译技术:从云端到移动端的突破

1. 项目概述:手机端运行的大模型翻译技术突破上周在调试一个跨国协作项目时,我偶然发现手机上的腾讯翻译君App更新后响应速度明显提升。仔细研究后发现,这背后是腾讯最新发布的手机端大模型翻译技术——传统需要云端GPU集群运行的百亿参数大模…

作者头像 李华
网站建设 2026/9/16 16:32:04

RTranslator离线实时翻译实测:6GB内存就能跑

RTranslator离线实时翻译实测:6GB内存就能跑 【免费下载链接】RTranslator Open source real-time translation app for Android that runs locally 项目地址: https://gitcode.com/GitHub_Trending/rt/RTranslator 出国数据流量用光的那一刻,你想…

作者头像 李华
网站建设 2026/9/16 16:31:51

STM32F407 USB MIDI实现:从CubeMX配置到端点收发详解

简介:一份基于STM32F407标准库的USB MIDI参考工程,面向需要实现USB Audio类MIDI通信的嵌入式开发者与音乐硬件爱好者。工程遵循USB音频设备类规范,将STM32F407配置为全速USB MIDI设备,完整展示PC与设备间MIDI数据收发流程&#xf…

作者头像 李华