
涡旋光束和轨道角动量OAM是光学里概念不难、但特别容易“一听就懂、一画就懵”的话题。轨道角动量有些资料里也写成“轨迹角动量”英文都叫 Orbital Angular Momentum指的就是涡旋光束波前螺旋结构带来的那份角动量。所谓涡旋光束直观理解就是光波的等相位面不再是平面而是像旋转楼梯一样绕着传播轴一路抬升对应地每个光子携带 ℓħ 的角动量ℓ 就是常说的拓扑荷。最近做光通信、超分辨成像、微粒操控的人都在拿 OAM 做文章而 MATLAB 仿真恰恰是理解这个现象性价比最高的入口——不需要光学平台一台电脑就能复现涡旋光束的光强、相位和干涉特征。这篇文章就按“先立物理图像再做五步仿真最后聊应用和坑”来写适合光学方向的学生、刚接触 OAM 的工程师以及所有想把公式落到图上的人。1. 涡旋光束与OAM先别急着写代码把物理图像立起来1.1 涡旋光束螺旋等相位面与中心暗核涡旋光束的核心特征体现在电场表达式里就是在原有的复振幅上多乘一个因子 exp(iℓφ)。这里的 φ 是柱坐标系下的方位角ℓ 为整数拓扑荷表示绕传播轴一周相位改变 2πℓ。这个额外相位因子让原本平坦的波前变成螺旋面往前传播时等相位面不再是一个平面盘而像旋转楼梯一样一格格抬升。由于相位绕轴一周后必须回到同一点螺旋相位在轴上那一点无法定义光强必须严格为零——于是横截面上出现一个稳定的中心暗核。所以涡旋光束的光强图总是“甜甜圈”形状外圈亮、中心黑。这个暗核不是孔径遮挡出来的而是相位奇点的直接后果也是区分普通高斯光束和涡旋光束最简单的方法。你拿一束普通高斯光和一束涡旋光并排做光强图前者是实心亮斑后者中心必然有一个洞肉眼一眼就能认出来。相位奇点这个概念在后面仿真时尤其重要因为网格上那一个点的电场值会被算成 0相位显示上就会形成特别的螺旋结构。1.2 OAM的真正身份光子的“轨道”自由度先理清两个容易混淆的概念。自旋角动量SAM对应光的圆偏振每个光子只有 ±ħ 两种取值涡旋光束携带的 OAM 则来自波前的螺旋结构每光子携带 ℓħℓ 可以取任意整数。打个比方SAM 像地球的自转OAM 更像地球绕太阳的公转——一个是绕自身轴转一个是整体绕轨道中心转。这种“维度上的差距”是 OAM 最有价值的地方偏振只有两个正交态而 OAM 理论上可以有无穷多个正交态。这直接支撑了它在光通信复用、量子信息编码等场景中的核心地位。实际研究里还能把不同 ℓ 的 OAM 态和偏振组合起来形成更大的态空间。注意光的总角动量是 SAM 与 OAM 的矢量和二者可以独立调控、互不冲突这一点在实验设计上非常关键。1.3 为什么用MATLAB仿真来学OAM理论推导能告诉你公式长什么样但很难让你直观感受“暗核到底多暗”“螺旋相位怎么绕”。MATLAB 仿真本质上就是把 LG 模的复振幅在二维网格上算一遍先建立网格坐标再算每个点的径向距离 r 和方位角 φ套用解析公式得到复数电场矩阵然后分别取模方和辐角画出光强图和相位图。整个过程没有复杂的数值求解纯粹是“公式→数组→图像”的映射。正因为门槛低、反馈快仿真成了快速建立 OAM 物理直觉的最佳方式。我把这篇文章定位成“学习笔记实战记录”是想顺着一个新手从上手到踩坑的真实路径来写而不是列一份干巴巴的公式清单。你跟着敲完下面五步代码拓扑荷、暗核、叉形干涉条纹这些概念就全都落地了。2. 仿真方案设计从LG模式到五步路线图2.1 为什么选LG模式当“标准样品”涡旋光束的产生方式很多螺旋相位板、空间光调制器加载叉形光栅、涡旋光纤等都可以但最标准的理论模型是拉盖尔-高斯Laguerre-GaussianLG模式。LG 模是傍轴波动方程的一组正交完备解它的解析表达式天然包含 exp(iℓφ) 这个螺旋相位项并用 ℓ 和 p 两个指标分别描述角向与径向结构。用 LG 模做仿真有三个实际好处一是解析公式在手计算精确快速二是它自带涡旋相位不用额外模拟螺旋相位板三是参数修改非常直观改一个 ℓ光强暗核和相位螺旋立刻跟着变化。换句话说用 LG 模当作“标准样品”可以最大限度排除其他干扰因素专心观察 OAM 本身的物理。仿真里还有一个隐含选择默认在 z0 平面计算这样不用处理传播方向的 Gouy 相位和曲率半径先把螺旋相位和暗核看明白再说。2.2 关键参数的物理设定参数设定决定了仿真图像好不好看更决定结果是否正确。我的常用设定是波长 λ632.8 nm就是氦氖激光的典型红光束腰半径 w01 mm网格边长 L6 mm网格点数 N512。这些数值是配套选的网格区域至少要覆盖光束的有效范围大约 ±3 倍束腰否则光斑边缘会被截断网格点数要足够分辨边缘处相位的快速变化否则干涉条纹会出现真假莫辨的锯齿。拓扑荷先取 ℓ1 跑通再换 2、3 对比暗核半径和相位螺旋圈数的变化比背十遍公式都管用。径向指数 p 默认取 0代表单环若把 p 改成 1 或 2就需要在代码里加入拉盖尔多项式的项光强会变成多个同心环。另一个值得先算出来的参数是瑞利距离 zRπw0²/λ按上面的数值大约是 5 m。这意味着毫米级束腰下光束在几米内都近似保持准直理解这个量对后面讨论传播演化很有帮助。2.3 五步路线图的逻辑五步分别是参数初始化、LG 模场构造、光强图验证、相位图验证、干涉图检测拓扑荷。为什么要用干涉做最后一步因为光强和相位图能说明“这是涡旋光束”但不容易直接给出 ℓ 的数值——相位图需要手动数颜色循环的圈数误差一眼看不出来而把涡旋光和一束倾斜平面波叠加得到叉形干涉条纹分叉数直接等于 |ℓ|正负号则看叉的朝向。这种方法就是实验室里验证 OAM 的标准手段。所以五步走完你既做了数值计算又完成了物理验证整个闭环是完整的。3. MATLAB实战5步搞定涡旋光束仿真3.1 第一步参数初始化% 第1步参数初始化 lambda 632.8e-9; % 波长m w0 1e-3; % 束腰半径m N 512; % 网格点数 L 6e-3; % 网格边长m x linspace(-L/2, L/2, N); [X, Y] meshgrid(x, x); % 直角坐标网格 r sqrt(X.^2 Y.^2); % 径向坐标 phi atan2(Y, X); % 方位角 l 1; % 拓扑荷 p 0; % 径向指数这里有一个看起来不起眼、实际上很关键的细节meshgrid(x, x)生成二维网格后atan2(Y, X)返回的方位角范围是 (−π, π]。之所以用atan2而不是atan是因为前者能正确处理四个象限避免在第三、第四象限出现角度跳变。网格边长 L 取 6 mm约等于 6 倍束腰既不会截断光斑也不会让光束在画面里显得太小。如果 L 取到 20 mm暗核和亮环会挤在画面中央一小块看起来很不清晰。3.2 第二步构造LG模的复振幅% 第2步构造LG模复振幅z0, p0 rho sqrt(2) * r / w0; % 归一化径向坐标 LG sqrt(2/(pi*factorial(abs(l)))) / w0 * ... rho.^abs(l) .* exp(-rho.^2/2) .* exp(1i*l*phi);这一步在实现 LG(ℓ,0) 的解析表达式。rho.^abs(l)负责产生中心为零的幅度凹陷exp(-rho.^2/2)是高斯包络exp(1i*l*phi)是螺旋相位。注意点乘.*和幂运算.^一个都不能漏因为 LG 是 512×512 的矩阵不是标量。另一个细节当 l 为负整数时factorial(abs(l))保证归一化系数为正而exp(1i*l*phi)的符号决定螺旋方向。只要把 l 改成 -1就能得到反向涡旋后面的干涉条纹也会跟着反转。这是检验自己是否理解拓扑荷正负号的绝佳测试。3.3 第三步光强分布计算与可视化% 第3步光强分布 I abs(LG).^2; % 光强正比于电场模方 I I / max(I(:)); % 归一化到 [0,1]便于显示 figure; imagesc(x*1e3, x*1e3, I); axis xy; axis equal tight; colormap hot; colorbar; title([LG_{, num2str(l), ,0} 光强分布]);运行之后你会看到标准的甜甜圈结构中心是黑色圆斑周围是明亮圆环。这个暗核的大小会随 |ℓ| 增大而增大实际峰值半径约等于 w0×√(ℓ/2)。比如 ℓ1 时峰值在 0.7 mm 附近ℓ2 时在 1 mm 附近用 r 阵列和 find 函数可以精确验证。注意imagesc默认会把 Y 轴反过来必须加axis xy把图像翻正否则你会看到暗核跑到图像下方和物理直觉不符。用hot色标还有一个好处暗核颜色最深亮环由红到黄渐变明暗对比最直观。3.4 第四步相位分布与涡旋结构验证% 第4步相位分布 phase_LG angle(LG); figure; imagesc(x*1e3, x*1e3, phase_LG); axis xy; axis equal tight; colormap hsv; colorbar; title([拓扑荷 l , num2str(l), 的螺旋相位分布]);相位图是这一步最漂亮、也最容易认错的地方。angle 返回的相位被截断在 (−π, π]所以颜色会在 −π 到 π 之间跳变形成一条从暗核中心向外延伸的分支线——这是数值显示的必然结果不是计算错误。用 hsv 色标是因为它是循环色图首尾颜色衔接自然能把相位跳变看得清清楚楚。当 ℓ1 时绕暗核走一圈颜色完整循环一次当 ℓ2 时循环两次看上去就像两条螺旋臂。你可以沿暗核外的圆环路径观察颜色变化次数来确认拓扑荷到底是不是 l。随便吐槽一句如果你用的是 jet 色图而不是 hsv相位图的跳变会被色彩本身的明暗差异带偏看着特别像错误的噪声分布。3.5 第五步干涉图样与拓扑荷检测% 第5步与倾斜平面波干涉 alpha 2*pi*6/L; % 参考波倾斜量约6条干涉条纹 ref exp(1i*alpha*X); % 倾斜平面波参考光 interference LG ref; I_interf abs(interference).^2; I_interf I_interf / max(I_interf(:)); figure; imagesc(x*1e3, x*1e3, I_interf); axis xy; axis equal tight; colormap gray; colorbar; title([l , num2str(l), 的叉形干涉条纹]);这是我个人最喜欢的一步。把涡旋光和平面参考光叠加后干涉图里会出现竖直方向的叉形条纹条纹主干大致平行但在暗核附近分出一条支叉向一侧偏移。分叉条数正好等于 |ℓ|ℓ1 一支叉ℓ2 两支叉。叉头朝上还是朝下取决于 ℓ 的正负号。原理可以这样理解平面波的等相位线是平行直线涡旋光的等相位线带有一条螺旋两者叠加后相位相等处形成亮条纹而螺旋在中心附近缠绕一圈使得一条条纹被迫断开并错位看起来就是分叉。这也是实际光学实验室里检测 OAM 的通用方法。alpha 的取值有个手感问题我一般选 6 到 10表示画面上大约有 6 到 10 个干涉周期。改成太小条纹稀疏分叉位置不容易判断改成 50条纹密到采样跟不上叉形结构会被混叠成摩尔纹根本认不出来。4. 常见问题与排查技巧实录4.1 相位奇异点不明显很多新手跑完第 4 步发现相位图上只有一个颜色均匀的圆盘中心没有螺旋环绕。这种情况最常见的原因是忘加.* exp(1i*l*phi)这一项或者 l 被写成了 0。另一个常见原因是网格范围太大暗核在画面上只占几个像素螺旋看起来就像一团噪点。解决办法是先把 l 打印出来确认不是 0然后把 L 缩小到束腰的 6 到 8 倍。如果相位图中心始终是一个颜色补丁多半是中心区域欠采样把 N 提高到 1024 再看看。判断相位图是否正确有个快速标准沿暗核外任意圆环路径看到的颜色必须是按顺序循环的而不是随机跳变。4.2 干涉条纹不是叉形出现这种情况通常有两个原因。一是参考光方向不对如果你把参考光写成了对 Y 方向倾斜而不是 X 方向叉形条纹会变成水平方向。虽然也是分叉但方向和常规实验习惯不同后续比对时容易混淆。二是 alpha 取值不合理条纹过密时空间采样跟不上叉形结构被混叠条纹过稀时分叉可能刚好落在画面边缘之外。我建议做一步“对照组”先只画参考光本身的干涉图确认条纹方向和密度正常再把涡旋光加进去。这个习惯成本极低却能在出问题时快速定位到底是谁出了问题。此外如果涡旋光幅度远小于参考光叉形条纹会淡到看不见最好把 LG 场先归一化到最大幅度接近 1再和参考光叠加。4.3 光强分布不对称或数值异常如果第 3 步画出来不是干净的圆环而是半边亮半边暗或者出现奇怪的斜条纹先检查atan2(Y, X)是不是写成了atan2(X, Y)。坐标轴一换相位绕轴的方向就会判断错乱光强分布自然跟着不对称。另一个常见的数值坑是在计算rho.^abs(l)时如果 r 数组里恰好有 0 值而你把幂写成了负数MATLAB 会算出 Inf整张图直接白屏。我代码里用abs(l)就是为了避免这个情况但你自己改公式时一定要警惕零像素。还有一个小问题如果光强图边缘出现一圈很亮的值多半是网格太小光斑边界被硬生生截断造成的把 L 调大一些就行。4.4 调参进阶从l1到高阶涡旋单一算例跑通后强烈建议把 l 改成 -1、2、-2、3 各跑一遍。你会看到光强图暗核逐渐变大、相位图螺旋圈数增加、干涉图分叉数变化和方向反转。把三组图放在一起对比比背十遍公式都有用。想更进阶可以在计算区域里同时生成两个不同 l 的 LG 模叠加起来看花瓣状的光强分布这是后面做 OAM 复用通信的雏形。如果把 z 从 0 改成非零值需要在公式里加入传播相位 exp(-i·k·r²/(2R(z)))R(z) 是高斯光束的曲率半径。取 z 等于半个瑞利距离再算一次你会发现环的半径随传播增大了。这正是空间光通信里 OAM 光束发散的一个直观证据也是从“静态画图”走向“传播模拟”的第一步。5. 从仿真走向应用OAM能干什么5.1 光通信的扩容新维度OAM 最重要的应用之一就是通信复用。因为不同 ℓ 值的涡旋光束在空间上正交理论上它们可以在同一根光纤或同一段自由空间里同时传输而不互相干扰每条信道都携带独立的 OAM 阶数通信容量可以乘以一个很大的倍数。这在传统的波分复用之外又增加了一个新的复用维度。做这项研究的人经常需要在仿真里生成多个不同 ℓ 的 LG 模叠加在一起再通过匹配滤波或干涉检测来检验串扰有多大。本文的代码稍作扩展就能搭建一个“两路 OAM 复用”的简化模型生成 ℓ1 和 ℓ2 两个场各自对应一路信号叠加后分别用匹配相位去解码观察互相干扰程度。这个过程很直观地解释了为什么 OAM 被称为“新维度”。5.2 光学操控与超分辨成像涡旋光束的暗核和螺旋相位在显微操控与成像里都有直接应用。比如光镊领域把微粒放在涡旋光束的暗核或亮环上OAM 的传递会让粒子绕光束轴旋转形成“光致旋转”这在微流控、细胞分选中都有研究价值。在超分辨成像领域涡旋光束的环形光斑被用作受激发射损耗STED显微镜的损耗光用来抑制荧光发光区域从而突破衍射极限。这些应用乍看和仿真代码关系不大但如果连相位奇点在哪、暗核半径怎么随 ℓ 变化都说不清楚基本没法上手设计实验。仿真训练的就是这种“看图说话”的基础能力——拿到实验图能快速判断拓扑荷是多少光路对得不准还是参考光角度偏了。5.3 后续还能玩什么到这里你已经有了一套可以自由改动的 LG 模仿真环境后续可以玩的方向不算少把多个不同 ℓ 的涡旋光叠加会得到花瓣状的光束结构这是空分复用里很有用的模型加入随机相位屏模拟大气湍流可以观察 OAM 光束在湍流下的模式串扰把相位分布导出成灰度图配合空间光调制器的控制软件就能变成“仿真驱动实验”的案例。我后来还做过一个简单的“螺旋相位板”仿真把 ℓφ 这个相位项单独拿出来生成一张 0 到 255 的灰度图直接等价于一个 8 级台阶的螺旋相位板。这一步能让你深刻理解实验室里所谓“相位板”到底在板的哪个位置改变了相位以及为什么加工精度会影响涡旋光束的质量。最后给个掏心窝的建议第一次跑这套代码时别急着追求 ℓ 很大或者图像很炫先把 ℓ1 的光强、相位、干涉三张图都读懂。然后闭上眼睛回想那张相位图绕暗核一圈相位从 −π 到 π 平滑变化在这条环上每一条等相位线都恰好汇入中心的那一根暗线。那种“原来螺旋相位就是这样绕着光轴走了一圈”的直观感比记住任何公式都珍贵。踩过几次坑之后你会发现MATLAB 仿真涡旋光束并不是技术难题真正的门槛是把拓扑荷的物理含义内化成直觉。