拓冰建站拓冰建站
首页 / 资讯中心 / 正文

高斯光束Matlab仿真:从参数设计到可视化的完整实践指南

简介面向激光原理课程学习者与Matlab初学者的实验仿真文档围绕高斯光束在谐振腔中的归一化强度分布及传播特性展开。文档先建立高斯光束数学模型随后演示用imread读取CCD采集的实际光斑照片提取光斑直径方向强度数据绘制二维分布并与理论高斯曲线对比同时通过mesh命令生成三维强度分布图并对白边干扰给出处理建议。后续还提供完整M文件仿真高斯光束在不同传播距离下光斑尺寸与峰值强度的变化将数值结果与理论公式对照帮助理解瑞利长度、束腰等核心概念。资源仅含1个docx文件压缩包大小432KB内容紧凑适合课程作业、实验报告或期末复习参考已有461人学习。1. 高斯光束的matlab仿真从表达式到可视化的最短路径做激光光学、超表面设计或自由空间光通信时最常碰到的第一个仿真对象就是高斯光束。很多人一开始直接套菲涅尔衍射积分写上两层循环跑出来却是一堆噪点换一个网格尺寸结果又不一样。问题往往不在衍射算法本身而在于没把波长、束腰和采样间隔这几个基本参数理清楚。高斯光束的matlab仿真绝大多数场景用解析表达式就能覆盖需要的只是复振幅、传播距离和可视化三板斧。这篇文章按“数学建模→传播计算→画图→结果自检”的顺序给出一套可直接复用的代码和参数表适合刚接触光束仿真的学生也适合做系统联调时确认透镜前光场分布的工程师。2. 高斯光束的数学表达与matlab仿真参数设计2.1 为什么先定波长、束腰和传播距离高斯光束不是普通平面波它的横截面强度按高斯函数分布在束腰处最细向前向后逐渐扩展。仿真之前必须先确定三个物理量波长、束腰半径 w0 和传播距离 z。这三个值共同决定瑞利距离而瑞利距离又决定了你观察的是近场还是远场也决定了网格尺寸和采样点数怎么选。我一般先把波长定下来可见光常取 632.8nm红外通信大多取 1550nm因为短波长的瑞利距离更长同样的束腰可以传播得更远而不明显发散。接着设束腰半径最后按瑞利距离的倍数选传播距离。这样后面用解析公式对比时每个位置的光斑尺寸、相位曲率都有理论值可查仿真结果出了问题也能快速定位是公式写错还是采样不够。2.2 复振幅场怎么在matlab里构建常见做法是直接使用基模高斯光束的解析解不写衍射积分。设光沿 z 轴传播束腰位于 z0则任意位置 (x,y,z) 的复振幅为lambda 632.8e-9; % 波长单位米 w0 0.5e-3; % 束腰半径单位米 z 0.2; % 传播距离单位米 L 5e-3; % 仿真区域边长单位米 N 512; % 网格点数取2的整数次幂 x linspace(-L/2, L/2, N); y x; [X, Y] meshgrid(x, y); r2 X.^2 Y.^2; zR pi * w0^2 / lambda; % 瑞利距离 wz w0 * sqrt(1 (z / zR)^2); % z处的束宽 Rz z * (1 (zR / z)^2); % 等相位面曲率半径 k 2 * pi / lambda; E (w0 / wz) .* exp(-r2 / wz^2) ... .* exp(-1i * (k * z - atan(z / zR) k * r2 / (2 * Rz)));逻辑说明第一项(w0/wz)是中心振幅衰减系数随传播距离增大逐渐变小第二个指数项控制横向强度包络半径等于 wz 的时候振幅降到中心值的exp(-1)光强对应降到exp(-2)第三个指数项是相位信息包含平面波传播相位k*z、古伊相位-atan(z/zR)和横向波前弯曲项k*r2/(2*Rz)。这里相位符号用的是工程惯例计算angle(E)时看到的跳变不影响强度仿真。参数说明lambda越小则zR越大高斯光束准直距离越长w0越小则发散越厉害z0.2m处束宽变化就越明显L要至少覆盖最远传播距离处束宽的 4 到 5 倍否则能量被截断N决定了相位分辨率一般取 512 或 1024N 太小会导致提取束宽时出现量化误差。2.3 仿真参数表与常见设错点下面这张参数表是我每次开始仿真前都会过一遍的检查清单参数符号单位推荐起点对结果的影响波长lambdam632.8e-9决定瑞利距离和远场发散角束腰半径w0m0.5e-3束腰越小发散越快光斑变化越明显传播距离zm0.2控制光斑尺寸和相位弯曲程度仿真区域边长Lm5 * wz太小会截断光场能量明显损耗网格点数N1512限制最小分辨率和计算速度网格间距dxmL / N需要小于 0.1 * w0否则束腰细节丢失常见错误是直接把 L 设成入射面的大小而忘了在传播后光斑会扩展到原来的几倍。另一个坑是Rz在 z 很小时接近无穷此时横向相位项趋于 0如果直接用Rz z*(1(zR/z)^2)会得到很大的数matlab 里数值上没问题但如果你对 z0 做仿真就需要单独处理这一项。最稳妥的办法是在 z 接近 0 时直接用平面波前的表达式将k*r2/(2*Rz)置为 0。3. 用matlab仿真高斯光束传播与发散角的两种算法3.1 解析束宽公式怎么算高斯光束在自由空间里的发散遵循一条双曲线。远场条件下半发散角可以写成zR pi * w0^2 / lambda; theta lambda / (pi * w0); % 半发散角弧度 fprintf(瑞利距离: %.2f m\n, zR); fprintf(半发散角: %.4f mrad\n, theta * 1e3);逻辑说明theta是远场半夹角等于波长除以 π 和束腰的乘积。这意味着束腰压得越细发散角就越大。比如 w00.5mm、波长 632.8nm 时theta 约为 0.403mrad如果 w0 缩小到 0.1mm发散角会增加到 2.015mrad。激光测距和自由空间光通信里发射端总是先用望远镜把光束扩束目的就是增大 w0 以减少发散角。这个公式的价值在于它能快速估算任意传播距离上的光斑半径当 z 远大于 zR 时wz 近似等于 theta 乘以 z。我经常先算 zR如果整个仿真路径长度不到 zR 的十分之一就可以近似当作准直光处理否则必须保留完整的传播相位。3.2 扫描传播距离并对比仿真束宽实际的matlab仿真需要验证数值结果是否与理论一致。常见做法是扫描一组 z 值在每个位置计算光场然后从强度分布中提取 1/e^2 半径和理论束宽对比zList linspace(0.05, 2, 20); centerIdx round(N / 2); wSim zeros(size(zList)); for ii 1:numel(zList) zz zList(ii); wzPred_ii w0 * sqrt(1 (zz / zR)^2); E_ii (w0 / wzPred_ii) .* exp(-r2 / wzPred_ii^2); I abs(E_ii).^2; profile I(centerIdx, centerIdx:end); % 沿中心行的右半剖面 peak max(I(:)); idx find(profile peak * exp(-2), 1, first); if isempty(idx) wSim(ii) NaN; else wSim(ii) abs(x(centerIdx idx - 1)); end end figure; plot(zList, w0 * sqrt(1 (zList / zR).^2) * 1e3, r-, LineWidth, 1.5); hold on; plot(zList, wSim * 1e3, b--o); xlabel(传播距离 z (m)); ylabel(束宽 w(z) (mm)); legend(理论值, 仿真提取值); grid on;逻辑说明代码先计算理论束宽wzPred_ii用其来构建仅包含振幅项的光场再取中心横截面的强度剖面。根据高斯分布性质强度从峰值下降到peak*exp(-2)处对应半径就是束宽。profile(centerIdx:end)从中心开始取右半段找到第一个低于阈值的点其 x 坐标即是仿真束宽。参数说明zList的起点不要取 0因为 z0 时束腰处光斑极小提取过程容易受网格分辨率限制zList的终点按实际系统距离取我通常取到 5 到 10 倍瑞利距离。如果最终绘制出的仿真曲线明显偏离红色理论曲线优先检查仿真区域L是否足够大以及N是否小到无法分辨束腰尺寸。3.3 瑞利距离到底什么时候用瑞利距离不只是理论概念它也直接影响仿真参数选择。当 z 远小于 zR 时光斑半径变化很小可以把网格尺寸缩小用更多点数观察近场细节当 z 接近或超过 zR 时光斑迅速扩大网格边长L必须按目标距离处的 wz 重新缩放否则提取出的束宽会被人为截断。拿 2.1 节的参数举例lambda632.8e-9、w00.5e-3 时zR 约等于 1.24m。那么 z0.2m 仍属于近场到过渡区束宽只增加了 1.3% 左右而 z2m 时束宽已经接近 0.95mm比束腰大了近一倍。设计仿真区域时我会直接设 L 为最大传播距离处束宽的 6 倍保证能量占比超过 99%。4. 高斯光束的matlab可视化强度、相位和三维轮廓4.1 强度图与相位图的实际画法看仿真结果先看强度和相位但很多人一上来就画imagesc(abs(E))这会把强度动态范围压缩掉边缘看起来不干净。正确画法是用场强的平方figure; imagesc(x * 1e3, y * 1e3, abs(E).^2); axis image; colormap(parula); colorbar; xlabel(x (mm)); ylabel(y (mm)); title(高斯光束强度分布); set(gca, YDir, normal);逻辑说明abs(E).^2才对应光强axis image保证 x 轴和 y 轴的物理比例一致YDir设成 normal 是因为 imagesc 默认 y 轴向下但在光学空间坐标系里 y 轴向上更符合直觉。相位图不能直接用pcolor(angle(E))因为 angle 返回的是 -π 到 π 的包裹相位横向相位从中心向外单调变化时会突然出现一条红色到蓝色的跳变线。如果想看波前形状我一般画沿 x 轴的相位剖面figure; plot(x * 1e3, angle(E(centerIdx, :)), b-); xlabel(x (mm)); ylabel(相位 (rad)); title(沿x轴的相位剖面); grid on;参数说明centerIdx是 y 方向中心点索引。如果相位剖面出现很多密集跳变说明网格太粗需要增大 N 或者减小 L。对于基模高斯光束相位剖面应该是一个平滑的抛物线叠加常数传播相位残余的 2π 跳变不影响后续计算。4.2 三维光束轮廓怎么画不卡死三维 surf 图适合展示高斯光束的柱状轮廓但 N512 时直接surf(X, Y, I)会有 26 万个网格点旋转起来非常卡。我一般先对场做下采样只画每第 4 个点再用shading interp平滑step 4; figure; surf(X(1:step:end, 1:step:end) * 1e3, ... Y(1:step:end, 1:step:end) * 1e3, ... abs(E(1:step:end, 1:step:end)).^2, ... EdgeColor, none); shading interp; axis tight; xlabel(x (mm)); ylabel(y (mm)); zlabel(强度 (a.u.));逻辑说明下采样后的网格点数减少到原来的十六分之一但轮廓形状保留。EdgeColor置为 none 后颜色信息由colormap决定渲染速度明显提升。这个画法适合做演示图但你要从图上读峰值位置仍应回到原始数组里取。4.3 高阶模和涡旋光束的叠加技巧有些仿真需要生成更接近真实激光器的模式比如 TEM01 模或携带轨道角动量的涡旋光束。最容易犯的错是把不同模式的场直接相加然后忘了把每个模式自己的相位项包含进去。我习惯先写一个生成基模的函数再做叠加可视化目标推荐函数注意事项二维强度分布imagesc用abs(E).^2不用abs(E)二维相位分布pcolor / imagesc注意 2π 跳变必要时用 unwrap三维轮廓surf shading interp下采样 step 取 4 或 8截面曲线plot以峰值归一化后对比理论高斯生成涡旋光束的示例phi atan2(Y, X); l 1; E_vortex (w0 / wz) .* exp(-r2 / wz^2) ... .* exp(1i * l * phi) ... .* exp(-1i * (k * z - atan(z / zR)));逻辑说明在基模复振幅上乘以exp(1i*l*phi)其中phi是极角。这个相位项会让光束中心出现暗核暗核半径随 l 增大而增大。叠加多个轨道角动量模式时需要注意不同模式使用同一个X、Y网格否则会出现明显的干涉条纹。5. 验证高斯光束仿真结果的3个检查5.1 能量守恒检查自由空间传播不吸收能量所以总功率应当是常数。利用网格积分可以快速定位截断问题dx L / N; powerInit sum(abs(E0).^2, all) * dx^2; powerEnd sum(abs(E).^2, all) * dx^2; fprintf(能量变化: %.2f%%\n, (powerEnd / powerInit - 1) * 100);如果能量变化超过 1%优先把L放大一倍再试。对于解析表达式建模能量守恒核对的主要是网格范围是否覆盖到了远场扩散后的旁瓣。5.2 束宽与解析解对比在几个关键传播距离处分别提取仿真束宽和理论束宽误差应该在 5% 以内。仿真束宽的提取方法与 3.2 节一致理论束宽用w0*sqrt(1(z/zR)^2)计算。误差偏大时看两个方向一是L/N是否小于 0.1 倍的束腰二是中心剖面提取时是否因为网格不对称造成阈值位置偏移。5.3 相位趋势检查高斯光束传播时积累古伊相位从束腰到无穷远总共偏移 π。取轴上点的相位并 unwrap应该得到一条平滑曲线zProbe linspace(0.02, 2, 100); phaseProbe zeros(size(zProbe)); for ii 1:numel(zProbe) phaseProbe(ii) - (2 * pi / lambda * zProbe(ii) - atan(zProbe(ii) / zR)); end figure; plot(zProbe, unwrap(phaseProbe)); xlabel(传播距离 z (m)); ylabel(轴上相位 (rad)); grid on;曲线如果出现明显拐折说明 z0 处网格没有对准束腰中心或者采样间距过大导致相位折叠后无法还原。这三个检查做完仿真结果就可以放心往下游的光学系统里传了。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门