)
用MATLAB R2023b复现激光TEM模式光斑从厄米特多项式到3D光强分布附完整代码当激光束穿过光学系统时它的横截面会呈现出特定的光强分布模式这就是我们常说的TEM横电磁模模式。对于光学工程和物理专业的学生来说理解这些抽象的模式往往是个挑战。本文将带你用MATLAB R2023b从零开始构建厄米特-高斯光束模型通过代码实现让这些理论概念变得可视化。1. 理论基础与准备工作在开始编码前我们需要理解几个核心概念。厄米特-高斯光束是描述激光在方形镜对称共焦腔中传播时的数学模型。这种光束的横截面光强分布可以用厄米特多项式和高斯函数的乘积来表示。关键公式电场复振幅分布$u_{mn} \approx C_{mn}H_m(X)H_n(Y)e^{-(X^2Y^2)/2}$厄米特多项式前几项$H_0(X) 1$$H_1(X) 2X$$H_2(X) 4X^2-2$$H_3(X) -8X^312X$提示在实际计算中我们通常关注光强分布$I_{mn} \propto |u_{mn}|^2$这是实验中可以直接测量的量。MATLAB环境准备% 清理工作区并关闭所有图形窗口 clear all close all clc % 设置默认图形参数 set(0,DefaultAxesFontSize,12) set(0,DefaultLineLineWidth,1.5)2. 构建基础模型2.1 参数设置与坐标网格首先我们需要定义模拟的基本参数和创建计算网格% 基本参数 lambda 632.8e-9; % He-Ne激光波长(m) L 0.1; % 谐振腔长度(m) w0 sqrt(lambda*L/(2*pi)); % 束腰半径 % 坐标范围设置 x linspace(-5e-3, 5e-3, 200); % 横向坐标(m) y linspace(-5e-3, 5e-3, 200); % 纵向坐标(m) % 创建网格坐标 [X,Y] meshgrid(x,y); % 归一化坐标 X_norm X.*sqrt(2*pi/(lambda*L)); Y_norm Y.*sqrt(2*pi/(lambda*L));2.2 厄米特多项式实现我们可以用递归方法实现厄米特多项式的计算function H hermite(n, x) % 计算n阶厄米特多项式在x处的值 if n 0 H ones(size(x)); elseif n 1 H 2*x; else H 2*x.*hermite(n-1,x) - 2*(n-1)*hermite(n-2,x); end end2.3 模式场分布计算基于上述函数我们可以计算任意TEMmn模式的场分布function u TEM_mode(m, n, X, Y) % 计算TEMmn模式的归一化场分布 Hm hermite(m, X); Hn hermite(n, Y); u Hm .* Hn .* exp(-(X.^2 Y.^2)/2); end3. 可视化不同TEM模式3.1 二维光斑图展示让我们从简单的TEM00到TEM33模式开始% 创建图形窗口 figure(Position, [100 100 1200 900], Color, w) % 定义要展示的模式组合 modes [0 0; 1 0; 2 0; 3 0; 0 1; 1 1; 2 1; 3 1; 0 2; 1 2; 2 2; 3 3]; % 绘制各模式光斑 for i 1:size(modes,1) subplot(3,4,i) m modes(i,1); n modes(i,2); u TEM_mode(m, n, X_norm, Y_norm); imagesc(x*1e3, y*1e3, abs(u).^2) axis image title(sprintf(TEM_{%d%d}, m, n)) xlabel(x (mm)) ylabel(y (mm)) colormap hot colorbar end3.2 三维光强分布为了更直观理解模式结构我们可以绘制3D光强分布% TEM11模式3D展示 figure(Position, [200 200 800 600]) u11 TEM_mode(1, 1, X_norm, Y_norm); I11 abs(u11).^2; subplot(1,2,1) surf(X*1e3, Y*1e3, I11, EdgeColor, none) title(TEM_{11} 3D光强分布) xlabel(x (mm)) ylabel(y (mm)) zlabel(相对光强) view(30, 45) colormap jet subplot(1,2,2) contourf(X*1e3, Y*1e3, I11, 20) title(TEM_{11} 等高线图) xlabel(x (mm)) ylabel(y (mm)) axis image colorbar4. 参数影响与高级技巧4.1 波长对模式分布的影响不同波长的激光会产生不同的模式分布我们可以比较几种常见激光波长wavelengths [405e-9, 532e-9, 632.8e-9, 1064e-9]; % 常见激光波长 L 0.1; % 固定腔长 figure(Position, [100 100 1000 800]) for i 1:length(wavelengths) lambda wavelengths(i); w0 sqrt(lambda*L/(2*pi)); x linspace(-5*w0, 5*w0, 200); [X,Y] meshgrid(x,x); X_norm X.*sqrt(2*pi/(lambda*L)); u00 TEM_mode(0, 0, X_norm, X_norm); subplot(2,2,i) imagesc(x*1e3, x*1e3, abs(u00).^2) title(sprintf(λ %.1f nm, lambda*1e9)) xlabel(x (mm)) ylabel(y (mm)) axis image colormap hot end4.2 高阶模式动画展示创建动画可以更好地理解模式随参数变化% TEM20模式随传播距离变化的动画 figure(Position, [200 200 600 500]) z linspace(0, 2*L, 50); % 传播距离 for k 1:length(z) % 计算当前传播距离下的模式 wz w0*sqrt(1 (2*z(k)/L)^2); Rz z(k) L^2./(4*z(k)); phase atan(2*z(k)/L); X_z X./wz; u20 TEM_mode(2, 0, X_z, Y/wz); % 绘制 imagesc(x*1e3, y*1e3, abs(u20).^2) title(sprintf(TEM_{20} 传播距离 %.1f mm, z(k)*1e3)) xlabel(x (mm)) ylabel(y (mm)) axis image colormap hot colorbar drawnow end5. 完整代码整合与优化将所有功能整合到一个可复用的MATLAB类中classdef LaserTEMmode % LaserTEMmode 激光横电磁模模拟类 properties lambda % 波长(m) L % 腔长(m) w0 % 束腰半径(m) x % 横向坐标向量 y % 纵向坐标向量 X % 横向坐标网格 Y % 纵向坐标网格 end methods function obj LaserTEMmode(lambda, L, gridSize) % 构造函数 obj.lambda lambda; obj.L L; obj.w0 sqrt(lambda*L/(2*pi)); % 创建计算网格 obj.x linspace(-5*obj.w0, 5*obj.w0, gridSize); obj.y linspace(-5*obj.w0, 5*obj.w0, gridSize); [obj.X, obj.Y] meshgrid(obj.x, obj.y); end function u computeMode(obj, m, n) % 计算TEMmn模式场分布 X_norm obj.X.*sqrt(2*pi/(obj.lambda*obj.L)); Y_norm obj.Y.*sqrt(2*pi/(obj.lambda*obj.L)); Hm obj.hermite(m, X_norm); Hn obj.hermite(n, Y_norm); u Hm .* Hn .* exp(-(X_norm.^2 Y_norm.^2)/2); end function plotMode(obj, m, n) % 绘制指定模式的光斑和3D分布 u obj.computeMode(m, n); I abs(u).^2; figure(Position, [100 100 1000 400]) % 2D光斑 subplot(1,2,1) imagesc(obj.x*1e3, obj.y*1e3, I) title(sprintf(TEM_{%d%d} 光斑, m, n)) xlabel(x (mm)) ylabel(y (mm)) axis image colormap hot colorbar % 3D分布 subplot(1,2,2) surf(obj.X*1e3, obj.Y*1e3, I, EdgeColor, none) title(sprintf(TEM_{%d%d} 3D分布, m, n)) xlabel(x (mm)) ylabel(y (mm)) zlabel(相对光强) view(30, 45) colormap jet end end methods (Static) function H hermite(n, x) % 静态方法计算厄米特多项式 if n 0 H ones(size(x)); elseif n 1 H 2*x; else H 2*x.*LaserTEMmode.hermite(n-1,x) - ... 2*(n-1)*LaserTEMmode.hermite(n-2,x); end end end end使用这个类可以方便地进行各种模拟% 使用示例 sim LaserTEMmode(632.8e-9, 0.1, 200); sim.plotMode(2, 1); % 绘制TEM21模式6. 常见问题与调试技巧在实际操作中可能会遇到以下问题及解决方案模式不对称或变形检查坐标网格是否对称确保x和y范围相同验证厄米特多项式实现是否正确光强分布异常确认归一化坐标计算正确检查高斯函数部分的指数项符号确保使用的是光强场振幅的平方而非场振幅图形显示问题尝试不同的colormaphot, jet, parula等调整colorbar范围以突出细节对于3D图形尝试不同视角view命令注意当模拟高阶模式如TEM33及以上时可能需要增加网格分辨率以获得平滑的结果。通过本文的代码实现我们成功地将抽象的厄米特-高斯光束理论转化为直观的可视化结果。在实际教学中这种可视化方法可以显著提高学生对激光模式的理解。对于更复杂的谐振腔结构或非理想条件可以在此基础上进一步扩展模型。