做光学仿真这些年,我试过不少生成矢量光束的方案,最后被类Sagnac干涉仪这个结构圈了粉。它不靠复杂的谐振腔,也不靠高精度的双光路锁相,而是用一套共光程环形结构,让两束反向传播的光天然稳定地干涉,再借一个空间变化的半波片,直接把偏振态——径向、角向——在横截面里“编”出来。这篇文章是完整的VirtualLab Fusion仿真记录:从类Sagnac光路怎么搭、q-plate怎么建模、网格和偏振探测器怎么设,到结果怎么分析、出了毛病怎么排查,全部撸一遍。适合正在做矢量光束、偏振光学,或者刚上手VirtualLab Fusion、想找个完整案例参照的同学。
1. 为什么是类Sagnac:矢量光束生成思路的拆解
1.1 矢量光束到底是什么
普通激光束的偏振态在横截面上是均匀的,要么全水平、要么全竖直、要么全是圆偏振。矢量光束不一样,它的偏振方向在光束横截面内逐点变化。最常见的两类是径向偏振光和角向偏振光:径向偏振光的电场方向从中心向外辐射,像太阳光芒;角向偏振光的电场方向沿着同心圆切线,像漩涡。
这两种光能被重视,是因为它们聚焦后有独特的物理行为。径向偏振光经过高数值孔径透镜聚焦后,焦斑中心会产生很强的纵向电场分量,焦斑尺寸比同等条件下的线偏振光更小,能量密度更高,在激光切割、超分辨显微、表面等离激元激发这些场景里非常吃香。角向偏振光则在光学捕获、磁光记录里有独特优势。
生成矢量光束的难点在于:常规偏振元件(偏振片、波片)是对整束光做均匀变换,没法让偏振方向在空间上连续变化。要想得到径向分布,本质上需要把横截面上每一个位置的偏振方向单独“写”进去。基于干涉合成是主流办法——让两束正交偏振的光在空间上叠加,通过控制两束光的空间相位差来塑造偏振分布。但普通双光路干涉对环境振动极其敏感,几纳米级的抖动就会让相位乱掉,这也是矢量光束生成设备在外场环境下难用的原因。
1.2 类Sagnac结构怎样“用稳定换空间偏振”
Sagnac干涉仪在业内听得最多的是用在光纤陀螺仪里,测量旋转角速度。它的特点是光在同一个闭合环路里分成两束,一束顺时针、一束逆时针,绕一圈后再合束。因为两束光走的是同一条物理路径,光程严格相等,所以外界振动、温度漂移带来的影响对两束光是共模的,在合束端被自然抵消。这就是Sagnac结构稳定性好的根本原因,也是光学MEMS陀螺仪里特别爱用它的原因。
类Sagnac干涉仪没有跳出这个框架,只是往环里塞了额外的偏振元件,让两束反向传播的光在偏振维度上经历不同的变换。我在模型中用的是空间变化快轴的半波片,也就是q-plate,快轴方位角φ随极角α线性变化,φ = qα + φ0。输入光先经过偏振分束器PBS,分成水平和竖直两束正交偏振光,分别进入环路正反方向。它们在环路中先后经过同一块q-plate,但因为入射偏振态不同,经过q-plate后的偏振旋转效果在实验室坐标系里是“对称相反的”。
合束的时候,两束光的偏振保持正交,所以强度上不发生干涉,不产生条纹;但它们在空间上叠加形成了新的偏振矢量,其方向由q-plate的快轴分布、两束光的相对相位共同决定。当q=1且相位偏置合适时,输出就是径向偏振;偏置调90度,就切换到角向偏振。整个过程只靠一个空间变化波片和共光程环路,就把偏振的空间分布“写”好了。
这个思路的精妙之处在于:用共光程锁相,避免了普通干涉仪最头疼的相位漂移问题;用正交偏振叠加,又避免了干涉条纹污染强度分布。两件事凑在一起,才让矢量光束生成装置有实用价值。
1.3 我为什么选VirtualLab Fusion做这件事
这个仿真如果拿纯几何光线追迹软件做,基本做不出来,因为我们要看的是电磁场的矢量分布、偏振演化、干涉叠加,这些属于物理光学范畴。VirtualLab Fusion用的是场追迹方法,把光当电磁场传播,可以处理衍射、干涉、偏振耦合和部分相干问题。
我最早考虑过自己用Python写角谱法传播,把每个元件用琼斯矩阵叠加矩阵去算。但后来发现,一旦光路里出现“同一元件被正反两个方向光先后经过”的情况,自己写代码管理光路分支和端口会很繁琐,也不好排查错误。VirtualLab Fusion的Light Path图结构刚好能表达这种多分支光学系统,每个分支单独定义元件序列,合束时自动做场叠加。它的探测器也能直接输出强度和偏振分析结果,省掉我不少后处理工作。
另外补充一句,仿真工具的选型不必被“名气”绑架。如果你更熟悉其他支持场追迹的工具,用Matlab代码实现这套模型也不是不行,原理一模一样,只是VirtualLab Fusion让我在搭建光路和可视化上节省了时间。
2. 光路搭建与VirtualLab Fusion建模
2.1 从传统Sagnac环到类Sagnac改造
传统Sagnac布局非常简单:一块分束器加三块反射镜,围成一个三角形或矩形环。入射光经过分束器后,透射的一路沿顺时针走,反射的一路沿逆时针走,绕过一圈后回到分束器合束。两路光经过的几何路径完全一致,所以理论上光程差为零。
类Sagnac改造的核心是把普通分束器换成偏振分束器PBS,并在环内插入一块空间变化的半波片。PBS会让水平偏振(p光)走透射臂,竖直偏振(s光)走反射臂。这样进入环路的两束光初始偏振互相正交,后面通过q-plate时才能达到“对称旋转”的效果。PBS的另一个好处是,它既是分束器也是合束器,结构上不用额外增加合束元件。
我在建模中使用的环路布局是这样的:光源 → PBS(分束)→ A路顺时针:反射镜M1 → q-plate → 反射镜M2 → 回到PBS;B路逆时针:反射镜M2 → q-plate → 反射镜M1 → 回到PBS。从拓扑上看,A和B走的确实是同一个三角形环路的两个方向,只是从PBS出来时的相位参考不同。
要注意,这里我用PBS而不是普通BS还有一层考虑:如果两束光不是正交偏振进入q-plate,那它们经过q-plate后的偏振变换就不会呈现对称关系,合束后得到的就不是干净的矢量光束,而是一堆杂散偏振叠加。正交偏振是这套方案成立的前提。
2.2 核心元件参数一览
仿真模型里的参数我按一套实际可行的实验方案来设定,方便后续如果真上光学平台做实验,能直接对照。具体如下:
| 参数 | 取值 | 说明 |
|---|---|---|
| 波长 | 632.8 nm | HeNe激光器对应波长,实验器件好找 |
| 光束类型 | 高斯波束 | 束腰半径1 mm,束腰位于PBS入射面 |
| 入射偏振 | 45°线偏振 | 使PBS的p光和s光分量等幅 |
| PBS | 理想偏振分束 | p光透射、s光反射,暂忽略消光比 |
| 反射镜 | 理想反射镜 | 反射率100%,反射相位另做补偿 |
| q-plate | 半波延迟δ=π | 快轴角φ = q·α,q=1,φ0可调 |
| 输出探测器 | 距离PBS输出面100 mm | 观察近场偏振分布 |
这里最容易被忽略的是PBS反射的相位问题。偏振分束器在把s光反射出来时,反射光会带一个额外的相位跳变,通常不是0,具体值取决于镀膜设计和入射角。在VirtualLab Fusion里,理想PBS模型默认不会自动加这个相位,需要你在反射臂上手动插一个相位片来补偿,否则合束时两束光的相对相位不对,最终偏振分布会偏离预期。我习惯在反射臂上加一个厚度可调的Phase Plate,先放一个π相位,再用参数扫描微调。
参数这块有一件事要提前想清楚:q-plate的快轴方位角φ = qα,这里的α是相对光束中心点的极角。如果入射高斯光束的中心和q-plate的参考中心不对齐,φ计算就会错位,最后生成的偏振分布不是标准的径向或角向,而是一坨扭曲的图形。所以我建模时会对齐光源束腰中心和q-plate元件中心,并且在放置任何孔径或透镜之前都检查一遍坐标。
2.3 建模步骤和几个软件操作关键点
在VirtualLab Fusion里建这套模型,我按下面的顺序操作:
第一步,新建一个项目,计算通道选Harmonic Fields。单频连续光场是我们需要的,不需要用脉冲模式,也暂时不用考虑时间相干性。
第二步,添加光源。从光源库拖一个Gaussian Wave,波长632.8 nm,束腰半径1 mm,初始偏振设为水平。后续我在光源和PBS之间加一个半波片,用于把输入偏振调整到45°。这样做的目的是方便参数扫描,直接旋转半波片角度就能控制p光和s光的比例。
第三步,放PBS。在Light Path里PBS会有透射和反射两个输出端,我分别命名为A路和B路。物理上反射光的相位要考虑补偿,我在反射输出端加一个相位片,幅值设为π。记住这一步,否则后面结果会离谱。
第四步,布置环路反射镜。A路顺序是M1 → q-plate → M2,B路顺序是M2 → q-plate → M1。在VirtualLab Fusion里,我会先搭好完整的一个环路分支,然后复制整个分支,再把元件顺序反转。这时候有一个坑:复制分支后,软件里的传播方向标签是固定的,需要手动确认两段分支的光传播方向设置为“Forward”和“Backward”对应好,不然合束时场的相位方向会反。
第五步,定义q-plate的琼斯矩阵。我用的元件类型是“Jones Matrix”,琼斯矩阵形式为J(φ) = [[cos 2φ, sin 2φ], [sin 2φ, -cos 2φ]],φ定义为q·α+φ0。这相当于一个快轴角度逐点变化的半波片。软件里可以通过表达式或者查表的方式来定义这个空间分布,我用表达式方式,把q=1、φ0=0当作初始值。
第六步,合束并放置探测器。在PBS输出端口后面加一个Camera Detector先看强度,再加一个偏振分析组件看斯托克斯参数。需要提醒的是,A、B两路在合束前一定要保证网格参数一致,包括网格尺寸、采样点数、采样间隔。如果两路网格不一致,合束时软件会做插值,插值带来的数值误差在偏振分析里会变成虚假的高频噪声。我的做法是在合束前分别加一个Sampling组件,把网格统一成512×512、5 mm×5 mm。
这一套流程搭下来,模型里大概十几个元件。第一次搭建可能需要半天来熟悉软件操作,熟练后半小时就能搭完。关键是元件的逻辑顺序要按实际光路来,别偷懒用单分支链式结构替代,否则后面想加参数扫描会很难受。
3. 仿真中的关键物理细节与参数设置
3.1 光源相干性、网格尺寸和采样
矢量光束生成本质是两束正交偏振光的相干叠加。虽然强度上不出现干涉条纹,但合束后的偏振态由两束光的相对相位决定,所以光源必须具有足够的空间和时间相干性。我在模型里用理想Gaussian Wave,默认时间相干性视为无穷大,这相当于假设激光器的相干长度远大于光路长度差。
实际实验中,Sagnac结构共光程的特性让两臂光程差趋近于零,所以对光源相干长度要求反而没那么苛刻。这一点是类Sagnac方案比双光路方案更实用的原因之一,仿真时也不必去模拟低相干光源的复杂模型。
网格参数方面,光束直径2 mm,我取计算区域5 mm×5 mm,采样512×512,采样间隔约9.8 μm。对于632.8 nm的波长,这个采样密度在近场区域足够。但如果模型中加了透镜做聚焦到焦点,焦点附近的光场空间频率很高,需要把网格加密到1024×1024甚至更高,或者改用VirtualLab Fusion的非均匀采样模式。我自己因为暂时只观察PBS输出后的近场分布,512网格就很稳了。
还有个容易被忽略的点:VirtualLab Fusion里源场默认是归一化的,不直接代表绝对功率。如果你后续要计算转换效率,需要在光源属性里指定功率值,我一般设1 W来方便算效率。
3.2 q-plate的琼斯矩阵怎么填
q-plate在原理上是一个快轴方位角随极角变化的半波片,半波片的相位延迟δ=π。在VirtualLab Fusion里,我不建议用几何体建模去做一个真实的液晶聚合物结构,直接用琼斯矩阵元件最省事,也最可调试。
局部坐标系下,半波片的琼斯矩阵J(φ) = [[cos 2φ, sin 2φ], [sin 2φ, -cos 2φ]],这里的φ是快轴方位角。在仿真中需要把这个φ定义成空间位置的函数,我设置为φ(r, α) = q·α + φ0。q取1,表示快轴方向在绕中心一圈时变化2π;φ0是全局偏置,控制输出是径向偏振还是角向偏振。
我在调试过程中发现,表达式里的atan2函数如果定义域没选对,会在α跨过π的地方出现跳变,导致快轴方向出现异常变化。建议先用一组简单的φ值(比如常数45度)跑通均匀半波片测试,再用空间变化表达式。这样能快速区分是表达式写错还是光路本身的问题。
另外,不同文献对q-plate快轴角度的参考方向有差异,有的定义φ = q·α,有的定义φ = q·α + π/2,这会让径向偏振和角向偏振正好互换。仿真中不要只凭强度分布判断,要通过偏振分析器确定输出到底是径向还是角向。
3.3 偏振探测器与斯托克斯参数提取
偏振分布分析我用的是“探测器前加线偏振片”的方式。在VirtualLab Fusion里,我会放四组理想线偏振片,透光轴方向分别为0°、45°、90°、135°,每组后面跟一个强度探测器,得到I0、I45、I90、I135四个图像。这四幅图是计算斯托克斯参数的基础。
斯托克斯参数的计算很简单:S0 = I0 + I90,S1 = I0 - I90,S2 = I45 - I135。对于径向偏振光,S1在极坐标下应该呈现cos(2α)的分布,S2呈现sin(2α)的分布,S3理论上为零。线偏振度定义为sqrt(S1² + S2²)/S0,理想情况下等于1。
这里我有个使用经验:VirtualLab Fusion的探测器默认输出的可能是总功率图,而不是以W/m²为单位的辐照度图。要在探测器属性里把数据导出类型改成“Irradiance”,否则你做像素级的S1、S2计算时,数值会差一个比例常数。第一次做的时候我吃了这个亏,算出来的S1/S0不对,后来发现就是单位问题。
关于偏振分析器,VirtualLab Fusion也有现成的Polarization Analyzer组件,能一次性输出多个偏振通道,但我觉得用线偏振片更直观,因为能看到透过不同方向偏振片的“花瓣图”,对物理图像的理解更直接。