高斯光束的ABCD定律(二):复参数q的MATLAB可视化与典型光学系统传输仿真

张开发
2026/4/12 17:01:35 15 分钟阅读

分享文章

高斯光束的ABCD定律(二):复参数q的MATLAB可视化与典型光学系统传输仿真
1. 复参数q的物理意义与MATLAB可视化基础高斯光束的复参数q是描述光束传输特性的核心工具它巧妙地将光束半径w(z)和波前曲率半径R(z)整合到一个复数中。我第一次接触这个概念时也被它的简洁性惊艳到——原本需要两个独立参数描述的光束状态现在只需要一个复数就能搞定。复参数q的定义式为q z 1i*z_R; % z_R是瑞利距离z是传播距离这个看似简单的表达式背后藏着丰富的物理意义。实部代表光束的几何传播距离虚部则包含瑞利距离信息直接关联光束的衍射特性。在MATLAB中我们可以通过复数运算轻松提取光束参数w0 0.5e-3; % 束腰半径0.5mm lambda 632.8e-9; % He-Ne激光波长 z_R pi*w0^2/lambda; % 计算瑞利距离 z linspace(-2*z_R, 2*z_R, 500); % 生成传播距离数组 q z 1i*z_R; % 生成复参数数组 % 提取光束半径和曲率半径 w_z w0*sqrt(1 (z/z_R).^2); R_z z.*(1 (z_R./z).^2);可视化这些参数时我习惯用subplot创建对比图。左侧显示光束半径随传播距离的变化右侧显示波前曲率的变化规律。这种并排对比能清晰展示光束从束腰位置开始发散的全过程。特别要注意的是在束腰位置(z0)处波前曲率半径理论上为无限大实际绘图时需要做特殊处理避免数值溢出。2. ABCD定律的MATLAB实现与验证ABCD定律堪称高斯光束传输的万能钥匙其数学表述简洁得令人难以置信q2 (A*q1 B)/(C*q1 D)这个公式的神奇之处在于它能描述光束通过任何光学系统后的状态变化。记得我第一次用MATLAB验证这个定律时选择了一个经典场景光束通过薄透镜系统。先定义透镜的ABCD矩阵function M lens_matrix(f) M [1, 0; -1/f, 1]; end然后模拟光束从束腰位置出发经过20cm传播后通过焦距15cm的透镜f 0.15; % 透镜焦距15cm L 0.20; % 传播距离20cm M_space [1 L; 0 1]; % 自由空间传输矩阵 M_lens lens_matrix(f); % 透镜矩阵 M_total M_lens * M_space; % 注意矩阵乘法顺序 q1 1i*z_R; % 初始q参数(束腰位置) q2 (M_total(1,1)*q1 M_total(1,2)) / (M_total(2,1)*q1 M_total(2,2));验证时最容易出错的是矩阵乘法顺序——光学系统的矩阵乘法顺序与光线传播方向相反。我建议在代码中添加清晰的注释或者像上面这样分步计算避免顺序错误导致的调试困扰。3. 典型光学系统的传输仿真3.1 自由空间传输的动态演示自由空间传输是最基础的场景但其中藏着许多有趣的细节。我习惯用动画来展示光束参数的变化过程figure; for L linspace(0, 2*z_R, 100) q_temp q1 L; w w0*sqrt(1 (imag(q1)/real(q_temp))^2); plot(z, w_z, b, L, w, ro); xlabel(传播距离(m)); ylabel(光束半径(m)); title([自由空间传输 L num2str(L) m]); drawnow; end这个动画会显示光束半径如何从束腰位置开始缓慢增大在瑞利距离处达到√2倍束腰半径。一个实用技巧是在动画中添加瑞利距离的标记线这能帮助观众直观理解这个关键参数的意义。3.2 薄透镜系统的聚焦特性分析透镜对高斯光束的变换是工业应用中最常见的场景。通过修改前面lens_matrix函数的参数我们可以研究不同焦距透镜的效果focal_lengths [0.10, 0.15, 0.20]; % 研究不同焦距 colors [r, g, b]; figure; hold on; for i 1:length(focal_lengths) f focal_lengths(i); M lens_matrix(f); q_out (M(1,1)*q1 M(1,2)) / (M(2,1)*q1 M(2,2)); % 计算输出光束参数 z_out -real(1/q_out); w0_out sqrt(lambda/pi * abs(1/imag(1/q_out))); plot(f, w0_out*1e3, [colors(i) o], MarkerSize, 8); end xlabel(透镜焦距(m)); ylabel(输出束腰半径(mm));这个仿真揭示了一个重要现象短焦距透镜会产生更小的聚焦光斑但代价是更短的瑞利距离即焦深变浅。在实际光学设计中我们需要在光斑大小和焦深之间寻找平衡点。3.3 反射镜系统的等效透镜模型反射镜的矩阵描述与薄透镜非常相似只是曲率半径的定义需要特别注意符号约定。我建议编写一个带错误检查的反射镜矩阵函数function M mirror_matrix(R) if R 0 error(曲率半径不能为零); end M [1, 0; -2/R, 1]; % 凹面镜R0凸面镜R0 end一个有趣的仿真案例是研究光束在谐振腔中的往返传输。通过连续应用反射镜矩阵和自由空间矩阵可以观察光束参数如何逐渐稳定到谐振腔的模式R1 1; R2 1; L 0.5; % 两凹面镜相距0.5m M1 mirror_matrix(R1); M2 mirror_matrix(R2); M_space [1 L; 0 1]; q 1i*z_R; % 初始猜测 for i 1:20 % 往返20次 q (M1(1,1)*q M1(1,2)) / (M1(2,1)*q M1(2,2)); q (M_space(1,1)*q M_space(1,2)) / (M_space(2,1)*q M_space(2,1)); q (M2(1,1)*q M2(1,2)) / (M2(2,1)*q M2(2,1)); q (M_space(1,1)*q M_space(1,2)) / (M_space(2,1)*q M_space(2,1)); end这种迭代法虽然简单但能直观展示谐振腔模式的形成过程。在实际应用中我们通常会使用更高效的数值方法求解稳态解。4. 复杂光学系统的级联仿真当面对由多个光学元件组成的复杂系统时ABCD矩阵法的优势就更加明显。我曾经用这个方法分析过一个激光扩束系统下面是关键部分的实现代码% 定义光学元件参数 f1 0.05; % 聚焦透镜焦距5cm f2 0.20; % 准直透镜焦距20cm d1 0.10; % 两透镜间距10cm d2 0.30; % 输出传播距离30cm % 构建系统矩阵 M1 lens_matrix(f1); M2 space_matrix(d1); M3 lens_matrix(f2); M4 space_matrix(d2); M_total M4 * M3 * M2 * M1; % 注意矩阵顺序 % 计算输出光束参数 q_in 1i*z_R; % 输入束腰 q_out (M_total(1,1)*q_in M_total(1,2)) / (M_total(2,1)*q_in M_total(2,2));这种级联系统的仿真有几个易错点首先是矩阵乘法顺序我习惯画一个简单的光路图来确认顺序其次是单位一致性确保所有长度参数使用相同单位建议统一用米最后是复参数q的初始定义要明确是在束腰位置定义还是任意位置定义。为了更直观地展示级联系统的效果我开发了一个可视化函数可以绘制光束在系统中的演变过程function plot_beam_propagation(M_elements, positions, q_in) z linspace(0, positions(end), 500); w zeros(size(z)); current_q q_in; for i 1:length(z) % 判断当前位置经过的光学元件 M_cumulative eye(2); for j 1:size(M_elements,3) if positions(j) z(i) M_cumulative M_elements(:,:,j) * M_cumulative; end end temp_q (M_cumulative(1,1)*q_in M_cumulative(1,2)) / ... (M_cumulative(2,1)*q_in M_cumulative(2,2)); w(i) sqrt(-lambda/pi / imag(1/temp_q)); end plot(z, w, b, z, -w, b); xlabel(传播距离(m)); ylabel(光束半径(m)); end这个函数通过逐步累积光学元件的影响绘制出光束半径在整个系统中的变化曲线。对于包含反射镜的系统需要特别注意坐标系的处理可能需要分段绘制。

更多文章