☰
涡旋光束与轨道角动量:MATLAB五步仿真从原理到实践
2026/10/9 17:28:36 网站建设 项目流程

涡旋光束和轨道角动量(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-Gaussian,LG)模式。LG 模是傍轴波动方程的一组正交完备解,它的解析表达式天然包含 exp(iℓφ) 这个螺旋相位项,并用 ℓ 和 p 两个指标分别描述角向与径向结构。

用 LG 模做仿真有三个实际好处:一是解析公式在手,计算精确快速;二是它自带涡旋相位,不用额外模拟螺旋相位板;三是参数修改非常直观,改一个 ℓ,光强暗核和相位螺旋立刻跟着变化。换句话说,用 LG 模当作“标准样品”,可以最大限度排除其他干扰因素,专心观察 OAM 本身的物理。仿真里还有一个隐含选择:默认在 z=0 平面计算,这样不用处理传播方向的 Gouy 相位和曲率半径,先把螺旋相位和暗核看明白再说。

2.2 关键参数的物理设定

参数设定决定了仿真图像好不好看,更决定结果是否正确。我的常用设定是:波长 λ=632.8 nm,就是氦氖激光的典型红光;束腰半径 w0=1 mm;网格边长 L=6 mm;网格点数 N=512。这些数值是配套选的:网格区域至少要覆盖光束的有效范围,大约 ±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模复振幅(z=0, p=0) 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 调参进阶:从l=1到高阶涡旋

单一算例跑通后,强烈建议把 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 仿真涡旋光束并不是技术难题,真正的门槛是把拓扑荷的物理含义内化成直觉。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询