ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

DOE光场整形实战:基于GS算法的相位设计与MATLAB仿真

2026/9/16 19:02:15 拓冰建站 浏览量
DOE光场整形实战:基于GS算法的相位设计与MATLAB仿真 简介一份围绕衍射光学元件DOE光场整形的轻量资源包面向光学工程、激光加工、成像系统等领域的科研与工程人员也适合相关专业学生作为课程设计与仿真参考。内容聚焦基于傅里叶光学的相位函数设计借助MATLAB实现将高斯光束整形为平面波、环形光束等任意目标分布并演示衍射与相位调制的基本原理。压缩包内共2个文件包括1个m格式的MATLAB程序用于计算DOE相位分布集成傅里叶变换、优化算法等核心步骤另有1个wav格式的声学光谱测量文件可作为分析整形前后光束频谱特性的参考整体大小约832KB轻巧便于快速复现。目前已有696人学习下载显示出较强的实用参考价值。通过此资源读者可获取完整的相位整形设计思路、可直接运行的MATLAB脚本以及配套实验数据涵盖从原理推导、仿真计算到实验数据对照的完整链路适用于课题验证、课程设计或入门衍射光学研究和项目实践。1. 当高斯光束遇上 DOE 光场整形问题从“成像”变成“设计相位”做光学仿真和激光加工的人八成都被同一件事卡过手里只有一束高斯基模却要它在目标面上变成平顶、环形甚至多焦点阵列。换透镜、换扩束镜只能改变尺寸改不了形态。DOE衍射光学元件光场整形直击这个痛点在元件表面刻一层相位函数让入射光束经过衍射后重新分布在指定形状上。DOE.zip 里的 DOE.m 正是这套设计流程的 MATLAB 实现配合 me.wav 这类测量数据可以做闭环验证。这篇分享主要面向做光场调控、激光加工和成像系统仿真的工程师从傅里叶光学的角度把相位设计、迭代算法和实验踩过的坑一次说清。2. 傅里叶光学视角下的 DOE 设计从高斯光束到目标光场的正问题与逆问题DOE 光场整形不是一个“画图案”的问题而是一个先建立正向衍射模型、再反解相位分布的逆问题。不理解这一步后面调 DOE.m 的参数就会变成盲猜。2.1 为什么相位型 DOE 比振幅掩模更适合光束整形振幅掩模也能改变光束形状比如在光路里放一个带圆孔的挡板高斯光束透过之后就变成近似平顶。但代价是能量全部被挡掉透过率往往不到 30%。对于激光加工这种需要功率密度的场景这不可接受。相位型 DOE 只改变光的相位不遮挡能量理论衍射效率可以做到 95% 以上。关键点在于相位板表面是连续或量化的浮雕结构光束每个位置的相位被推迟不同的量衍射后各点干涉相消或相长最终在目标面上合成想要的强度分布。DOE.m 里要算的正是这个相位分布。这里有个容易混淆的概念DOE 不是“透镜阵列”也不是简单的光栅。光栅是把光束分成固定方向的多级衍射DOE 的相位函数是自定义的可以做到一个入射光束分到多个指定区域或者连续塑形成任意灰度图案。设计自由度来自相位函数的空间分辨率也就是加工时的像素尺寸。2.2 夫琅禾费衍射离散模型与高斯光束采样在标量衍射理论下一束经过 DOE 的光再经过聚焦透镜焦平面上的复振幅分布近似等于 DOE 平面复振幅的傅里叶变换。这就是夫琅禾费衍射模型。模拟时用 FFT 替代连续傅里叶变换前提是网格采样满足奈奎斯特条件。先看输入光场的建模。一般假设入射是基模高斯光束复振幅写为lambda 532e-9; % 波长 532nm w0 2.5e-3; % 高斯光束束腰半径 2.5mm N 512; % 采样网格点数 L 12e-3; % 采样区域边长 12mm dx L / N; % 采样间隔 x (-N/2:N/2-1) * dx; [X, Y] meshgrid(x); r2 X.^2 Y.^2; E_in exp(-r2 / w0^2); % 高斯光束复振幅假设为理想平面相位这段代码里L必须足够大通常取高斯光束束腰的 4 到 5 倍。如果L太小高斯光束边缘被截断衍射仿真会引入明显的环状伪影。N取 2 的幂FFT 效率高也能避免多数 FFT 实现的边界问题。接下来是正向衍射模型。假设 DOE 紧贴入射面复振幅变为E_in .* exp(1i*phi)经过焦距为f的透镜后焦平面复振幅正比于傅里叶变换f 100e-3; % 傅里叶透镜焦距 100mm phi zeros(N); % 占位后续由 DOE.m 计算得到 E_doe E_in .* exp(1i * phi); % 夫琅禾费衍射FFT 结果乘上与坐标无关的系数 E_far fftshift(fft2(fftshift(E_doe))) * dx^2 / (1i * lambda * f); I_far abs(E_far).^2; % 焦平面强度这里fftshift的位置很关键。MATLAB 的fft2默认把零频放在左上角而fftshift将其移到中心。先在fft2之前对输入做一次fftshift输出再做一次等价于把坐标原点定义在网格中心这是连续傅里叶变换的常见约定。系数dx^2/(1i*lambda*f)只影响整体振幅缩放对最终的归一化强度分布没有影响但如果要做绝对光功率效率计算必须保留。2.3 目标光场的离散化描述与采样策略目标面不是任意一个连续函数都能直接用 FFT 计算。网格的物理尺寸和 DOE 面必须对应通常让目标面采样间隔为lambda * f / L。这个关系从傅里叶变换的离散频率间隔推导出来空间频率间隔Δfx 1/L对应目标面坐标间隔Δu lambda * f * Δfx lambda * f / L。波长 lambda 532e-9 m 焦距 f 100e-3 m DOE 面采样区域 L 12e-3 m 目标面采样间隔 Δu 532e-9 * 100e-3 / 12e-3 ≈ 4.43e-6 mDBSCAN 聚类算法和光场整形没有关系这里不展开但采样策略一定要提目标面网格数量必须和 DOE 面一致都是 N×N。如果目标需要的是一个平顶光斑就生成一个同样 N×N 的矩阵中心园域内为 1园域外为 0边缘可以做 2 到 3 个像素的平滑过渡否则迭代时容易产生高频噪声。表DOE 光场整形仿真的推荐参数范围参数取值范围说明采样点数 N256 / 512 / 1024越大衍射细节越清楚但 GS 迭代耗时成倍上升采样区域边长 L束腰的 45 倍避免高斯光束边缘截断目标区域直径目标面采样间隔的 2050 倍太小则平顶边缘过宽均匀性难以保证初始相位随机相位或二次相位随机相位收敛慢但不易陷入局部最优见第 3 章迭代次数200500 次超过 500 次提升有限除非引入平滑约束3. DOE.m 中的 GS 算法实战相位初始值、迭代权重与收敛控制看完正问题下一步解决逆问题已知输入高斯光束和目标光场反求 DOE 相位。DOE.m 这类程序通常采用 GSGerchberg-Saxton迭代算法原理简单但工程实现里细节决定成败。3.1 标准 GS 算法在光束整形中的迭代步骤GS 算法的核心是在 DOE 面和目标面之间来回交替傅里叶变换每次用一个面的约束条件修正复振幅DOE 面只保留相位信息振幅固定为入射光束目标面只保留相位信息振幅替换为目标光场。如此反复相位分布会逐渐收敛。target double(createTarget(N)); % 目标振幅例如平顶光斑 mask target 0; % 目标区域掩膜用于误差计算 phi 2 * pi * rand(N); % 随机初始相位 rmse zeros(200, 1); % 记录迭代误差 for k 1:200 % 1. 正变换到目标面 E_doe E_in .* exp(1i * phi); E_far fftshift(fft2(fftshift(E_doe))) * dx^2 / (1i * lambda * f); % 2. 目标面约束目标区域振幅替换为目标值保留相位 E_far_new E_far; E_far_new(mask) target(mask) .* exp(1i * angle(E_far(mask))); % 3. 逆变换回 DOE 面 E_doe_new ifftshift(ifft2(ifftshift(E_far_new))) * (1i * lambda * f) / dx^2; % 4. DOE 面约束保留相位振幅固定为输入高斯光束 new_phi angle(E_doe_new ./ max(E_in, 1e-12)); phi mod(new_phi, 2 * pi); % 5. 计算目标区域内的强度均方根误差 I_far abs(E_far).^2; I_target target.^2; I_m I_far(mask); I_t I_target(mask); rmse(k) sqrt(mean((I_m / sum(I_m(:)) - I_t / sum(I_t(:))).^2)); end这段代码把 GS 算法拆成五个步骤。第 2 步的目标面约束里target是振幅所以乘上相位后直接替换。注意mask之外的区域没有替换这意味着目标区域外允许有杂散光分布给迭代留出更多的自由度否则算法很容易不收敛。第 4 步做除法时对E_in加了1e-12避免边缘接近零的位置除出无穷大。如果不用max(E_in, 1e-12)归一化后的相位会在高斯光束边缘随机跳动最终 DOE 加工图上出现一圈无意义的高频条纹。3.2 随机相位与二次相位初始化的差别phi 2 * pi * rand(N)是随机初始相位。随机相位覆盖面广不容易卡在对称的伪解里但前 50 次迭代误差下降很慢而且最终相位杂乱加工时对刻蚀深度误差更敏感。二次相位则提前把光束的传播趋势给定phi - (pi / (lambda * f)) * r2; % 类似薄透镜的聚焦相位这个初始化在目标面先产生一个焦点GS 迭代在此基础上把焦点“摊开”成目标形状。收敛速度快但有一个问题如果目标形状是离轴的比如多焦点阵列二次相位的中心对称性会让迭代更倾向于把能量留在中心。我一般会先用随机相位跑 100 次再切换到二次相位附近做局部精修但 DOEM 里如果直接写死的一种初始化需要按测试结果取舍。实际观察到的差别如下随机相位迭代 200 次后均匀性通常能到 2% 以内但相位函数高频成分多二次相位收敛速度快约 100 次就能达到稳定但目标形状边缘容易出现波纹混合方案把二次相位的权重加到随机相位上以0.5 * 随机 0.5 * 二次起步可以兼顾收敛速度和均匀性。3.3 多目标光场整形的权重调整与参数表DOE 光场整形不只是把高斯变成平顶。激光并行加工里经常需要把一个光束分成 n×n 个焦点每个焦点的强度可能还不一样。这种情况下GS 算法的目标面约束需要对不同区域给不同权重否则算法会自动牺牲强度弱的区域来优化强区域。target_array zeros(N, N); centers [200, 150; 300, 200; 200, 300]; % 三个焦点中心坐标 weights [1.0, 0.8, 1.2]; % 三个焦点的强度权重 for idx 1:size(centers, 1) cx centers(idx, 1); cy centers(idx, 2); [XX, YY] meshgrid(1:N, 1:N); target_array target_array ... weights(idx) * exp(-((XX-cx).^2 (YY-cy).^2) / (2*3^2)); end target target_array / max(target_array(:)); mask target 0.05; % 只约束目标区域权重并不是直接乘在整个目标矩阵上而是通过目标振幅的峰值高度体现。GS 算法对振幅绝对值不敏感对相对比例敏感因此加权必须在目标矩阵生成时完成而不是在迭代循环内临时改。另外焦点半径直接影响加工光斑尺寸半径取 2 到 3 个像素即可太大焦点会重叠。表多焦点 DOEM 迭代参数速查项目推荐值失败时的表现目标焦点间距至少 3 个目标面采样间隔间距太小焦点连成一条亮线权重范围0.51.5权重差太大弱焦点基本消失目标区域外约束不约束若约束为 0迭代震荡RMSE 不下降迭代次数300 次左右过多会导致相位跳变加工困难4. 用 me.wav 做测量闭环与 DOE 装调排错仿真只解决“相位长什么样”的问题真正把 DOE 用到实验台上又是另一回事。DOE.zip 里除了 DOE.m 还有一个 me.wav这个文件很容易被人忽略但它恰恰可能记录了光场整形前后的某一类测量信号。4.1 me.wav 在 DOE 光场整形实验中的角色从文件扩展名看me.wav 是一个音频格式的波形文件但它显然不是在播放音乐。在光学实验中常见的一种做法是用声光调制器AOM对光束做频率调制然后用光电探测器接收再通过音响设备或数据采集卡记录拍频信号。通过分析 me.wav 的频谱可以间接观察激光器的工作状态、光束经过 DOE 前后功率波动、或者环境振动引入的调制成分。另一种更直接的可能是me.wav 是用声学方式记录的光束截面扫描信号。早期实验中没有高速相机时会用一个带小孔的旋转斩波器逐点扫描光束截面探测器输出经过 V-F 变换后再以 WAV 格式保存。这种情况下时域波形的包络对应光强分布的一维切片。4.2 读取和分析 me.wav从时域到频谱不管 me.wav 具体是哪种信号第一步都是读入并做傅里叶分析确定它的主频成分和时间包络。这里用的方法和光学傅里叶变换同源但对很多只熟悉好光学分析的人来说这是一个容易漏掉的环节。[y, fs] audioread(me.wav); % 读取 WAVfs 为采样率 if size(y, 2) 1 y mean(y, 2); % 双声道取平均 end t (0:length(y)-1) / fs; % 时间轴 figure subplot(2, 1, 1) plot(t, y) xlabel(Time (s)); ylabel(Amplitude) title(Time-domain waveform) Y fft(y); f linspace(0, fs, length(Y)); subplot(2, 1, 2) plot(f(1:floor(end/2)), abs(Y(1:floor(end/2)))) xlabel(Frequency (Hz)); ylabel(Magnitude) title(Spectrum)这段代码先做声道合并避免左右声道相位抵消。频谱分析只取正半轴并去掉零频分量因为零频往往对应信号直流偏置会压扁其他频率成分。如果 me.wav 记录的是 1 kHz 附近的调制信号频谱图上会看到一个明显峰如果是光束扫描信号频谱会是一条宽带包络。关键是通过频谱判断测量系统是否存在周期性干扰。50 Hz 及其谐波直接暴露电源噪声数百赫兹的宽峰通常来自机械振动高出信号主频一个量级的尖峰往往是探测器放大电路自激。做 DOE 整形效果评估前这些干扰必须排除否则计算出来的能量效率和均匀性都会被污染。4.3 DOE 加工误差与实验中的常见坑相位设计得再好DOE 加工出来也不可能完全一致。常见的偏差包括刻蚀深度误差、台阶量化误差和像素尺寸误差。刻蚀深度误差直接导致相位偏差对应目标面的能量均匀性下降。二元 DOE只有 0 和 π 两种相位加工简单但衍射效率理论上限约 81%四台阶 DOE相位量化到 4 级理论效率约 95%连续相位 DOE效率最高但加工成本和误差控制要求也最高。在实验台上第一个要确认的是零级衍射。即使相位板上存在一定量的未调制区域中心也会有一个高亮度零级光斑这会让目标面中心出现一个亮斑。解决办法是把 DOE 设计成带有额外离轴相位整体偏转光束让零级和有效衍射光在空间上分离开。DOE.m 里可以加一句phi phi 2*pi*(fx0*X fy0*Y)其中fx0、fy0是偏转空间频率但这会降低有效区域内的能量效率需要做权衡。第二个常见问题是目标面与仿真面的坐标系方向不一致。FFT 之后的目标光场在空间上是反演的也就是上下左右与 DOE 面对应关系颠倒。实验中使用 CCD 观察目标面时如果发现整形图案与设计镜像翻转一般是因为光学系统有奇数次反射。解决办法不是改软件而是在光路中调整 CCD 的安装方向或者在方案里做一次坐标翻转后再发出去加工。5. 验证 DOE 整形效果的三个指标与容差判定仿真收敛不代表实验能达到同样效果。判断 DOE 光场整形是否成功我一般只看三个指标能量效率、均匀性、以及目标区域边缘的陡峭程度。能量效率定义为目标面有效区域内的光功率与入射总功率之比。计算时要避开零级衍射点所以实验测量通常用“入瞳能量”和“目标区域能量”作为两张图分别积分后相除。MATLAB 里实现很简单eff sum(I_far(mask), all) / sum(E_in(:).^2);但这里的I_far需要先做绝对强度标定否则只能看相对值。均匀性可以用极差比表示目标区域内最大值与最小值的差除以平均值。低于 10% 属于可接受对于激光退火这类对均匀性要求极高的场景需要小于 5%。边缘陡峭度用 10%90% 上升距离来描述。这个参数容易被忽略但对成像系统很关键。台阶相位设计的 DOE边缘往往有几十微米的过渡带直接导致成像对比度下降。验证方法是取目标面强度沿着直径方向画一条截面线然后测量归一化强度从 0.1 升到 0.9 的横向距离。容差判定可以做成一个自动检查脚本每次实验后读入 CCD 图像自动计算上面三个指标超过阈值则报警。我通常把能量效率阈值设为设计值的 80%均匀性阈值设为 10%边缘上升距离阈值设为设计值的两倍。低于阈值时依次检查零级衍射强度、DOE 面是否清洁、入射光束是否准直。这三个问题占了 DOE 光场整形实验失败原因的绝大多数。如果三个阈值全过基本可以放心进入产线或后续工序。本文还有配套的精品资源点击获取