ARTICLE DETAIL

建站实战干货

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

三类涡旋光束MATLAB仿真:环形/贝塞尔-高斯/拉盖尔-高斯光场建模

2026/9/17 2:41:20 拓冰建站 浏览量
三类涡旋光束MATLAB仿真:环形/贝塞尔-高斯/拉盖尔-高斯光场建模 简介本资源是一份面向光学与光子学领域科研人员及工程师的MATLAB仿真实践资料聚焦环形涡旋光束、贝塞尔-高斯光束和拉盖尔-高斯光束三类特殊激光模式的建模与可视化分析解决复杂光场特性理解难、仿真代码复现门槛高的实际问题。压缩包共8个文件4个核心MATLAB脚本.m实现光束生成与参数调控3张JPEG图像直观展示光强与相位分布特征1份Word文档系统梳理理论推导、物理意义及典型应用场景总大小仅393KB轻量易用且结构清晰。已有647人学习下载适合具备基础MATLAB编程能力的研究者快速掌握涡旋光束仿真技术。用户可直接运行main.m等主程序复现全部结果结合LIGNHT.m、ROY.m等模块化脚本深入理解各光束的数学构造逻辑并依托论文.docx把握其在量子信息、光学微操控及高分辨成像中的工程价值。1. 这不是普通激光图——三类涡旋光束的MATLAB仿真直接决定你能否复现光学论文里的关键图谱如果你正在读一篇关于光学微操控或OAM编码通信的论文发现图2里那个带“甜甜圈”光强环、图3中螺旋状相位纹、图4里无衍射传播的细长光柱——却找不到可复现的代码或者你在调试空间光调制器SLM加载全息图时反复调整参数却得不到理论预期的拓扑荷数与环宽比又或者评审专家在你项目书里批注“光束模式仿真缺乏定量验证”……那么这份【老生谈算法】MATLAB包不是教学示例而是能立刻拆解、修改、嵌入你实验流程的光学建模底座。它不讲傅里叶光学推导但每行代码都对应一个物理量拓扑荷l控制相位螺旋圈数径向阶数p决定环内暗斑数量贝塞尔函数截断半径ρc影响无衍射距离高斯包络w0调控横向发散角。适合已写过plot(sin(x))、能看懂meshgrid生成坐标矩阵、但还没在phase unwrap和fftshift之间建立直觉的光学工程师——你不需要从麦克斯韦方程重推但必须知道Lagar.m里第47行exp(1j*l*theta)漏掉1j会导致整个相位图变实数而ROY.m中besselj(l, k_r*r)若未归一化振幅仿真出的强度图会因数值溢出全白。2. 光束数学模型到MATLAB实现为什么选这三类、参数如何物理映射、代码结构怎么拆解2.1 环形涡旋光束拓扑荷与环宽的耦合约束必须显式编码环形涡旋光束Annular Vortex Beam的核心是其强度零点构成闭合环相位沿方位角线性旋转。其电场表达式为$$ E_{AV}(r,\theta,z) A \cdot \text{circ}\left(\frac{r}{R}\right) \cdot \exp(i l \theta) $$其中circ(r/R)是环形窗函数l为拓扑荷数。但实际仿真中纯环形窗会导致远场衍射严重发散因此LIGNHT.m采用高斯-环形复合调制% LIGNHT.m 关键段已简化注释 R 50; % 环形中心半径像素 w_ring 8; % 环宽像素 [xx,yy] meshgrid(-256:255,-256:255); r sqrt(xx.^2 yy.^2); theta atan2(yy,xx); % 高斯加权环形窗exp(-(r-R).^2/(2*w_ring^2)) 而非 step 函数 ring_mask exp(-(r-R).^2/(2*w_ring^2)); E_av ring_mask .* exp(1j * l * theta); % 注意1j 不可写作 i避免与变量i冲突提示ring_mask若用abs(r-R)w_ring硬截断会在频域引入高频噪声导致imshow(abs(E_av).^2)出现明显栅瓣。高斯加权虽牺牲部分环锐度但保证傅里叶变换后传播计算的数值稳定性——这是LIGNHT.m与多数开源脚本的关键差异。参数物理映射表需根据你的光学系统标定MATLAB变量物理含义典型取值范围修改建议R环形光束中心半径像素30~120对应实际焦平面半径 R_mm R * λ * f / (π * pixel_size)f为透镜焦距w_ring环宽像素5~20宽度过小导致信噪比低过大则失去“环形”特征退化为高斯光束l拓扑荷数±1,±2,...,±10正负号决定相位旋转方向绝对值决定轨道角动量量子数2.2 贝塞尔-高斯光束无衍射特性的数值实现陷阱与截断处理贝塞尔-高斯光束Bessel-Gaussian Beam理论上具有无衍射传播特性其电场为贝塞尔函数与高斯包络乘积$$ E_{BG}(r,\theta,z) J_l(k_r r) \cdot \exp(-r^2/w_0^2) \cdot \exp(i l \theta) $$但ROY.m中直接调用besselj(l, k_r*r)会导致大r处数值溢出贝塞尔函数在大自变量时振荡剧烈且幅值衰减慢因此必须施加径向截断% ROY.m 截断逻辑关键修正点 k_r 2*pi / lambda * sin(alpha); % alpha为锥角决定无衍射距离 r_max 200; % 截断半径像素 r_vec linspace(0, r_max, 512); J_l besselj(l, k_r * r_vec); % 归一化并施加高斯窗抑制尾部振荡 J_l_norm J_l / max(abs(J_l)); gauss_window exp(-(r_vec/r_max).^2); % 避免硬截断的吉布斯现象 J_l_smooth J_l_norm .* gauss_window; % 构建二维场 [rr,tt] meshgrid(r_vec, linspace(0,2*pi,512)); E_bg interp1(r_vec, J_l_smooth, rr, linear, 0) .* exp(1j*l*tt);注意interp1插值必须指定linear而非默认spline否则在贝塞尔函数零点附近产生虚假极值linear配合extrap参数设为0确保rr_max区域场强为零——这直接对应物理上空间光调制器有限口径的限制。无衍射距离z_max与参数关系$$ z_{\max} \approx \frac{k w_0^2}{2} \quad \text{高斯部分主导} $$但实际仿真中k_r增大即锥角α增大可延长无衍射段代价是中心光强下降。ROY.m中通过k_r 0.05对应α≈2.87°平衡长度与强度你可根据实验需求将k_r调至0.1测试。2.3 拉盖尔-高斯光束径向阶数p与拓扑荷l的正交性验证方法拉盖尔-高斯光束Laguerre-Gaussian Beam是厄米-高斯光束的柱对称推广其模态由两个整数(p,l)标记满足正交完备性。Lagar.m实现中必须验证不同(p,l)组合的内积是否趋近于δ函数否则后续OAM复用仿真失效% Lagar.m 中正交性验证片段运行前取消注释 p10; l11; p20; l22; % 测试相同p、不同l E1 laguerre_gaussian(p1,l1,r,theta,w0); % 自定义函数 E2 laguerre_gaussian(p2,l2,r,theta,w0); overlap sum(sum(E1.*conj(E2))) * dx*dy; % dx,dy为像素物理尺寸 fprintf(Overlap (p%d,l%d p%d,l%d): %.2e\n, p1,l1,p2,l2, abs(overlap)); % 输出应 1e-12否则需检查laguerre_poly计算精度laguerre_gaussian函数内部使用递推关系计算广义拉盖尔多项式避免gamma函数大数溢出function L_pl laguerre_poly(p,l,x) % p: radial index, l: azimuthal index, x: rho^2 L_pl zeros(size(x)); for i 0:p term (-1)^i * nchoosek(pl,i) * nchoosek(p,i); L_pl L_pl term * x.^i; end L_pl L_pl / factorial(p); % 归一化系数 end提示当p5或l10时nchoosek(pl,i)可能超出双精度范围此时需改用loggamma计算exp(loggamma(pl1)-loggamma(i1)-loggamma(pl-i1))——Lagar.m第33行已预埋此分支但默认关闭如需高阶模请手动启用。3. 仿真结果可视化与物理量提取光强/相位图生成、OAM谱分析、传播演化动画3.1 标准化光强与相位图避免伪彩色误导的三步法main.m调用各光束生成函数后必须执行标准化才能正确对比% main.m 中标准化流程不可跳过 E_av LIGNHT(l, R, w_ring); % 环形涡旋 E_bg ROY(l, k_r, w0); % 贝塞尔-高斯 E_lg Lagar(p, l, w0); % 拉盖尔-高斯 % 步骤1强度归一化到[0,1] I_av abs(E_av).^2; I_av I_av / max(I_av(:)); I_bg abs(E_bg).^2; I_bg I_bg / max(I_bg(:)); I_lg abs(E_lg).^2; I_lg I_lg / max(I_lg(:)); % 步骤2相位解卷绕unwrap并映射到[-π,π] phi_av angle(E_av); phi_av unwrap(phi_av, [], 2); % 沿列方向解卷绕 phi_av mod(phi_av pi, 2*pi) - pi; % 强制到[-π,π] % 步骤3使用parula色图MATLAB R2014b后默认禁用jet figure; subplot(1,2,1); imagesc(I_av); colormap(parula); colorbar; title(环形涡旋光强); axis equal tight; subplot(1,2,2); imagesc(phi_av); colormap(hsv); colorbar; title(环形涡旋相位); axis equal tight;注意angle()直接返回[-π,π]但存在离散跳变点unwrap消除2π突变mod(...,2*pi)-pi确保相位连续性可视化——若跳过此步hsv色图中会出现刺眼的黄/青分界线误判为相位奇点。3.2 OAM谱定量提取通过模式投影计算拓扑荷分布仅看相位图无法确认OAM纯度需计算其在标准LG基底上的投影系数% 在main.m末尾添加OAM谱分析 l_test -5:5; % 测试拓扑荷范围 c_l zeros(size(l_test)); for idx 1:length(l_test) E_test Lagar(0, l_test(idx), w0); % 固定p0扫描l % 投影c_l(idx) ∫ E_input * conj(E_test) dA c_l(idx) sum(sum(E_lg .* conj(E_test))) * dx * dy; end figure; stem(l_test, abs(c_l).^2); xlabel(Topological Charge l); ylabel(|c_l|^2); title(OAM Spectrum of Input Beam);该代码输出茎状图显示主峰位置即实际承载的OAM值旁瓣高度反映模式纯度。例如环形涡旋光束在l3时|c_3|^20.92而|c_1|^20.03说明存在3%的模式串扰——这比单纯看相位图更可靠。3.3 传播演化动画用VideoWriter生成GIF验证无衍射特性ROY.m生成的贝塞尔-高斯光束需验证其无衍射性main.m中嵌入传播循环% 生成传播动画z从0到2000mm步长50mm z_range 0:50:2000; % 单位mm v VideoWriter(BG_propagation.gif,gif); open(v); for z z_range E_z propagate_BG(E_bg, z, lambda, dx, dy); % 自定义传播函数 I_z abs(E_z).^2; I_z I_z / max(I_z(:)); figure; imagesc(I_z); colormap(parula); axis equal tight; title(sprintf(z %d mm,z)); drawnow; frame getframe(gcf); writeVideo(v,frame); close(gcf); end close(v);propagate_BG函数采用角谱法Angular Spectrum Methodfunction E_out propagate_BG(E_in, z, lambda, dx, dy) k 2*pi/lambda; [kx,ky] meshgrid((-1/dx/2):(1/dx/(size(E_in,2)-1)):(1/dx/2), ... (-1/dy/2):(1/dy/(size(E_in,1)-1)):(1/dy/2)); H exp(1j*k*z*sqrt(1-(lambda*kx).^2-(lambda*ky).^2)); % 传播算子 E_out ifft2(fft2(E_in) .* H); end提示sqrt(1-(lambda*kx).^2-(lambda*ky).^2)中当|kx|1/lambda时根号内为负对应消逝波H自动衰减——这保证了数值稳定性。若用菲涅尔近似z过大时误差显著此处坚持角谱法。4. 关键参数调试指南解决光强不对称、相位跳变、传播发散三大高频问题4.1 光强不对称网格原点偏移与FFT中心校准当你发现环形光束的“甜甜圈”明显偏向左上角或LG光束暗斑不在图像中心问题常出在meshgrid坐标系原点与FFT中心不一致% 错误做法导致不对称 [xx,yy] meshgrid(1:512,1:512); % 原点在(1,1) % 正确做法强制中心对齐 N 512; x linspace(-N/2, N/2-1, N); % 生成[-256,255]整数序列 [xx,yy] meshgrid(x,x); % 原点在(0,0)与fftshift匹配 r sqrt(xx.^2 yy.^2); theta atan2(yy,xx); % theta在(-π,π]完美匹配exp(il*theta)LIGNHT.m和Lagar.m均采用此方案但ROY.m中r_vec若未以0为中心则贝塞尔函数计算失真。检查ROY.m第22行r_vec linspace(0, r_max, 512)应改为r_vec linspace(-r_max/2, r_max/2, 512)并在构建rr时用meshgrid而非repmat。4.2 相位跳变unwrap维度选择与边界条件处理相位图出现水平/垂直条纹通常是unwrap未沿正确方向对环形/ LG光束相位随θ变化应沿角度方向解卷绕 →unwrap(phi, [], 2)列方向对贝塞尔光束相位在径向有振荡需沿r方向 →unwrap(phi, [], 1)行方向更稳健的做法是先做radon变换检测主导方向但工程中直接按光束类型预设% 在phase visualization前统一处理 if strcmp(beam_type,av) || strcmp(beam_type,lg) phi unwrap(phi, [], 2); % 沿列θ方向 else phi unwrap(phi, [], 1); % 沿行r方向 end phi mod(phi pi, 2*pi) - pi;4.3 传播发散采样率不足与频域混叠的双重诊断若贝塞尔光束传播后迅速扩散先检查两个指标空间带宽积SBPdx*dy*Nx*Ny应 (λ*z)/(π*w0)否则欠采样计算当前SBPSBP_current dx*dy*size(E_bg,1)*size(E_bg,2)要求SBP_current lambda * z_max / (pi * w0)频域截止频率max(kx), max(ky)应 1/lambda否则混叠快速诊断命令% 在propagate_BG中插入 k_max max(max(sqrt(kx.^2ky.^2))); fprintf(k_max %.3f 1/m, 1/lambda %.3f 1/m\n, k_max, 1/lambda); if k_max 0.9/lambda warning(频域接近混叠减小dx,dy或增大图像尺寸); end实战技巧当z_max要求1m时将dx,dy从10μm降至5μm并把图像尺寸从512×512升至1024×1024——main.m第15行N512改为N1024同时更新所有meshgrid和fft2调用。内存增加4倍但这是无衍射仿真的必要代价。本文还有配套的精品资源点击获取