MATLAB实现高斯光束到平顶光束的转变 基于GS算法或者直接计算SLM相位分布
MATLAB实现高斯光束到平顶光束的转变 基于GS算法或者直接计算SLM相位分布。
一、引言
在光学工程、激光技术等领域,光束整形是一项关键技术,其核心目标是将一种光束的振幅、相位分布转换为目标分布,以满足特定应用场景的需求。本文所介绍的代码基于GS(Gerchberg-Saxton)算法与角谱传输理论,实现了从高斯光束到超高斯(平顶)光束的整形功能。该套代码经过多次迭代优化,具备模块化程度高、参数可配置性强、适配多种应用场景等特点,可广泛应用于激光加工、光学成像、光通信等领域。
二、代码整体框架与流程图
(一)整体架构
代码系统采用模块化设计,主要分为三大核心模块:光束生成模块、角谱传输模块、GS算法迭代优化模块,同时包含参数配置、结果可视化等辅助模块。各模块相互独立且通过接口灵活调用,整体架构如下:
光束整形系统代码架构
├── 参数配置模块:定义波长、距离、尺寸等核心参数
├── 光束生成模块(gussian.m):生成初始高斯光束与目标超高斯光束
├── 角谱传输模块(free_space.m):计算自由空间角谱传输函数
├── GS算法迭代模块(主程序untitled系列.m):核心迭代优化与相位调制
└── 结果可视化模块:输出光束分布、相位图、迭代误差曲线
(二)核心流程流程图
graph TD
A[参数初始化] --> B[生成初始高斯光束E0与目标超高斯光束E1]
B --> C[归一化振幅分布:Amplitude0、Amplitude1]
C --> D[设置初始相位,构建初始复振幅U1=Amplitude0·exp(1i·phase)]
D --> E[调用角谱传输模块,计算传输函数H0、H1]
E --> F[开始GS迭代循环]
F --> G[U1经H0传输至接收面:U2=ifft2(fft2(U1)·H0)]
G --> H[固定目标振幅,更新相位:U2_new=Amplitude1·(U2/|U2|)]
H --> I[U2_new经H1逆传输回SLM面:U1_new=ifft2(fft2(U2_new)·H1)]
I --> J[计算迭代误差RMS,更新初始相位]
J --> K{迭代次数达到阈值?}
K -- 否 --> F
K -- 是 --> L[输出整形后光束、相位图、误差曲线]
三、核心模块详细说明
(一)参数配置模块
所有主程序(untitled.m、untitled2.m等)的起始部分均为参数配置,核心参数及含义如下表所示:
| 参数名 | 含义 | 典型值 | 说明 |
|---|---|---|---|
| lambda | 激光波长 | 1.064e-6 m | 需根据实际激光光源调整 |
| L | SLM到接收屏的距离 | 0.5 m / 1 m | 决定传输路径长度 |
| a1/a2 | 初始/目标光束束腰 | 10e-3 m / 2e-3 m | 影响光束尺寸 |
| D | 计算区域尺寸 | 1e-2 m | 需覆盖完整光束分布 |
| N | 采样点数 | 1024 | 影响计算精度与速度,通常取2的幂次 |
| nn | 超高斯光束阶数 | 5 | 阶数越高,光束平顶特性越明显 |
| itera | 迭代次数 | 120/200/500 | 平衡整形效果与计算效率 |
| step_size | 步长因子 | 0.2 | 仅部分版本支持,用于稳定迭代 |
参数配置的灵活性是本代码的核心优势之一,通过修改上述参数,可适配不同波长的激光、不同距离的传输场景以及不同要求的平顶光束特性。
(二)光束生成模块(gussian.m)
1. 功能描述
该模块负责生成初始高斯光束(E0)和目标超高斯光束(E1),基于极坐标转换实现光束的径向对称分布计算。
2. 核心代码分析
x=linspace(-D/2,D/2-D/N,N);
y=linspace(-D/2,D/2-D/N,N);
[X,Y]=meshgrid(x,y);
[~,r]=cart2pol(X,Y); % 笛卡尔坐标转极坐标,获取径向距离r
%% 拉盖尔高斯光束公式
E0=exp(-(r.^2./w0^2)); % 初始高斯光束(二次衰减)
E1=exp(-(r.^nn./w1^nn));% 目标超高斯光束(nn阶衰减)
- 采用
linspace生成均匀分布的坐标网格,确保光束分布计算的均匀性; cart2pol函数将笛卡尔坐标转换为极坐标,简化径向对称光束的计算;- 高斯光束(E0)遵循二次指数衰减规律,超高斯光束(E1)通过调整阶数
nn控制光束平顶区域的平坦度,nn越大,光束边缘越陡峭,平顶特性越显著。
3. 模块特点
- 支持任意阶数的超高斯光束生成,适配不同平顶精度需求;
- 坐标计算考虑了采样点间隔,避免边界截断误差;
- 输出光束振幅分布直接用于后续归一化处理,接口简洁。
(三)角谱传输模块(free_space.m)
1. 功能描述
基于角谱传输理论,计算光束在自由空间中传输的频域传输函数,提供正、逆两个方向的传输函数(H0、H1),为GS算法的迭代过程提供传输模型支持。
2. 核心原理与代码分析
角谱传输函数的核心公式为:

$$H(fx,fy)=\exp\left(\pm i k0 dz \sqrt{1-(\lambda fx)^2-(\lambda f_y)^2}\right)$$

MATLAB实现高斯光束到平顶光束的转变 基于GS算法或者直接计算SLM相位分布。

其中,$fx,fy$为空间频率,$k0=2\pi/\lambda0$为真空中的波数,$dz$为传输距离。

代码实现:
dfx=1/D; dfy=1/D; % 空间频率间隔
k0=2*pi/wvl0;
fx=(-N/2:N/2-1)*dfx;
fy=(-N/2:N/2-1)*dfy;
[fx,fy]=meshgrid(fx,fy);
H=exp(-1i*k0*dz*sqrt(1-(wvl*fx).^2-(wvl*fy).^2));
H0=fftshift(H); % 正传输函数(SLM→接收屏)
H=exp(1i*k0*dz*sqrt(1-(wvl*fx).^2-(wvl*fy).^2));
H1=fftshift(H); % 逆传输函数(接收屏→SLM)
- 通过
meshgrid生成空间频率网格,覆盖完整的频域范围; fftshift函数调整频域数据的顺序,确保传输函数的正确性;- 传输函数分为正、逆两种,分别对应光束从SLM到接收屏和从接收屏到SLM的传输过程,为GS算法的双向迭代提供基础。
3. 模块优势
- 严格遵循角谱传输理论,传输精度高,适用于中短距离传输场景;
- 代码简洁高效,无冗余计算,与FFT(快速傅里叶变换)结合,计算速度快;
- 支持任意传输距离
dz和采样点数N,适配不同系统参数。
(四)GS算法迭代优化模块(主程序)
1. 功能描述
GS算法是光束整形的核心,通过在SLM面和接收面之间交替迭代,优化SLM的相位调制函数,使得经过传输后的光束振幅分布逼近目标超高斯光束。主程序包含多个版本(untitled.m、untitled2.m等),适配不同的应用需求。
2. 核心迭代流程(以优化版untitled2.m为例)
for n = 1:itera % 迭代循环
% 正传输:SLM面→接收面
U2=ifft2(fft2(U1).*H0);
% 固定接收面目标振幅,更新相位
Phase2 = U2./abs(U2);
U2_new=Amplitude1.*Phase2;
% 逆传输:接收面→SLM面
U1_new=ifft2(fft2(U2_new).*H1);
% 计算迭代误差
g_er = abs(Amplitude0) - abs(U1_new)/max(abs(U1_new(:)));
RMS_GS(n)=sqrt(mean2((g_er.^2)));
% 更新SLM面相位与复振幅
Phase0=U1_new./abs(U1_new);
U1=(Amplitude0+g_er*step_size).*Phase0;
end
- 正传输过程:通过FFT将SLM面的复振幅转换到频域,与传输函数H0相乘后,再通过IFFT转换回空域,得到接收面的复振幅U2;
- 相位更新:固定接收面的目标振幅Amplitude1,保留U2的相位信息,构建新的接收面复振幅U2_new;
- 逆传输过程:将U2new通过逆传输函数H1传回SLM面,得到更新后的复振幅U1new;
- 误差计算与优化:通过均方根误差(RMS)评估当前迭代效果,引入步长因子
step_size调整更新幅度,避免迭代震荡,提升收敛稳定性。
3. 不同版本主程序对比
| 程序版本 | 核心差异 | 适用场景 | 优势 |
|---|---|---|---|
| untitled.m | 未使用角谱传输函数,直接FFT传输 | 短距离近似传输场景 | 计算速度快,代码简洁 |
| untitled2.m(基础版) | 使用角谱传输函数,迭代次数200/500 | 高精度光束整形需求 | 传输精度高,整形效果好 |
| untitled2.m(优化版,平顶光束文件夹) | 增加步长因子、误差计算与可视化 | 需监控迭代过程与误差收敛 | 稳定性强,结果可追溯 |
(五)结果可视化模块
所有主程序均包含结果可视化功能,输出关键数据与图像,便于用户评估整形效果:
- 光束分布可视化:通过
mesh或imagesc函数输出整形后的光束振幅分布(如平顶光束的三维形貌); - 相位图可视化:展示SLM所需加载的相位调制分布,为实际光学系统搭建提供依据;
- 迭代误差可视化:通过
plot函数绘制RMS误差随迭代次数的变化曲线,直观反映算法收敛速度与整形精度。
四、代码优势分析
(一)模块化设计,可扩展性强
各功能模块独立封装(如光束生成、角谱传输),模块间通过清晰的接口交互。用户可根据需求替换模块,例如将“高斯光束生成”替换为“平顶光束生成”,或新增“相位调制约束模块”,无需修改核心迭代逻辑。
(二)参数配置灵活,适配多种场景
核心参数(波长、传输距离、光束尺寸、迭代次数等)均支持用户自定义,可适配不同波长的激光(如1064nm、532nm)、不同传输距离(如0.5m、1m)以及不同阶数的超高斯光束(如3阶、5阶、7阶)。
(三)迭代算法稳定,整形精度高
优化版主程序引入步长因子step_size,有效避免迭代过程中的震荡问题;同时通过RMS误差实时监控收敛情况,确保最终光束振幅分布与目标分布的偏差最小。
(四)计算效率高,支持大规模采样
采用FFT/IFFT进行频域与空域的转换,相较于时域传输计算,计算复杂度从$O(N^3)$降低至$O(N^2\log N)$,支持1024×1024等大规模采样点数的计算,兼顾精度与速度。
(五)结果可视化丰富,便于调试与评估
提供光束分布、相位图、误差曲线等多维度可视化结果,用户可快速判断整形效果是否满足需求,同时便于调试参数(如迭代次数、步长因子)。
五、注意事项
(一)参数配置合理性
- 采样点数
N建议取2的幂次(如512、1024、2048),以提高FFT/IFFT的计算效率; - 计算区域尺寸
D需大于光束的实际尺寸,避免光束被截断,影响整形效果; - 迭代次数
itera需根据实际情况调整:迭代次数过少,整形精度不足;迭代次数过多,计算耗时增加且收敛效果提升有限(通常100-500次为宜); - 步长因子
step_size建议取值范围为0.1-0.5,过大易导致迭代震荡,过小则收敛速度过慢。
(二)物理模型适用性
角谱传输理论适用于中短距离传输场景,若传输距离L远大于光束尺寸,建议采用菲涅尔近似或远场近似模型,需修改free_space.m中的传输函数公式。
(三)数值计算精度
- 波长
lambda、束腰a1/a2等参数的单位需统一(建议均采用米),避免单位不一致导致计算错误; - 初始相位的设置需合理,建议采用随机相位(
2pirand(N,N))或零相位(2pizeros(N,N)),避免初始相位分布不合理导致迭代不收敛。
(四)硬件适配问题
SLM(空间光调制器)的相位调制范围需与代码输出的相位图匹配(通常SLM的相位调制范围为0-2π),若相位超出该范围,需在代码中增加相位归一化处理。
六、使用说明
(一)环境准备
运行环境:MATLAB R2018b及以上版本(需支持FFT、mesh、imagesc等基础函数),无需额外安装工具箱。
(二)文件组织结构
代码文件结构
├── free_space.m % 角谱传输模块
├── gussian.m % 光束生成模块
├── untitled2.m % 主程序(优化版,推荐使用)
└── 其他版本主程序(可选)
使用时需确保所有文件在同一目录下,避免路径错误。
(三)操作步骤
- 打开MATLAB,切换至代码所在目录;
- 编辑主程序(如untitled2.m)中的参数配置部分,根据实际需求修改
lambda、L、a1、a2、itera等参数; - 运行主程序,等待迭代完成;
- 查看输出的可视化结果:
- 图1:整形后的光束振幅分布(如平顶光束的三维形貌);
- 图2:SLM所需加载的相位调制分布;
- 图3:迭代误差曲线,若误差趋于稳定,说明整形效果收敛。
(四)示例配置与结果
1. 示例参数
lambda=1.064e-6; % 1064nm激光
L=1; % 传输距离1m
a1=2e-3; % 初始高斯束腰2mm
a2=5e-3; % 目标超高斯束腰5mm
D=1e-2; % 计算区域10mm×10mm
N=1024; % 1024×1024采样点
nn=5; % 5阶超高斯光束
itera=120; % 120次迭代
step_size=0.2; % 步长因子0.2
2. 预期结果
- 图1:生成的光束呈现明显的平顶特性,中心区域振幅均匀,边缘陡峭;
- 图2:相位图呈现周期性分布,为SLM的相位加载提供直接依据;
- 图3:迭代误差曲线随迭代次数增加逐渐下降并趋于稳定,最终RMS误差小于0.05。
七、总结
本套代码基于GS算法与角谱传输理论,实现了高效、高精度的光束整形功能,核心优势在于模块化设计、参数灵活配置、迭代稳定收敛以及丰富的结果可视化。通过调整相关参数,可适配不同的激光光源、传输场景和目标光束需求,适用于科研实验与工程应用。使用时需注意参数配置的合理性、物理模型的适用性以及硬件的适配问题,以确保整形效果满足预期。
未来可进一步优化的方向:
- 新增相位调制约束(如平滑约束、带宽约束),提升相位图的可实现性;
- 引入并行计算,提高大规模采样点数下的计算效率;
- 支持更多类型的初始光束与目标光束(如拉盖尔-高斯光束、贝塞尔光束)。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)