1. 高阶衍射级次去哪了:为什么光栅系统需要角滤波体光栅
1.1 高阶级次是光学系统里的“慢性病”
做过衍射光栅系统的人大概率都遇到过这样的场景:你设计了一个表面浮雕光栅,希望它把一束激光的能量集中到某一个衍射级次上,比如+1级,结果仿真一跑,探测器上不止一个亮点。0级、+1级、-1级甚至±2级都在,能量被拆得七零八落。表面浮雕光栅是典型的周期结构,只要周期足够大、波长足够短,必然会出现多个非零衍射级次,这是光栅方程决定的,不是你工艺的问题。
有人会说,那我用二元光学设计一个特殊的槽形,让能量尽量集中到某个级次。确实可以,但在很多宽带、大角度或非理想工艺条件下,残余的高阶级次仍然是麻烦。比如全息波导显示中,不希望光束沿着其他方向传播;光谱仪中,高级次光谱重叠会让标定变得混乱;激光分束系统中,多余级次意味着能量损失,严重的还可能在某些位置形成杂散光热点。
传统上处理这些多余级次的办法是在光路里加空间滤波器或孔径光阑,但问题是:这些级次之间往往只差零点几度到几度,空间距离很小,机械孔径很难干净分离。而且孔径本身会带来衍射,可能在滤掉杂光的同时牺牲了有用光束的波前质量。这时候就需要一个角度维度上的“带通滤波器”:只允许满足特定入射角的光通过,其他角度的光统统挡掉。
1.2 体光栅的布拉格选择:天然的角度带通
体光栅恰恰就是这样一种角度带通元件。它跟表面浮雕光栅的原理不太一样:表面浮雕光栅靠表面轮廓的周期性调制产生衍射,薄的边界,出射后衍射级次自动铺开;体光栅则是在材料的“体内”做折射率周期性调制,光在传播过程中与整个体积内的周期结构发生相互作用。
关键机制是布拉格条件:
[ 2\Lambda sin\theta_B = \lambda ]
其中(\Lambda)是体光栅的周期,(\theta_B)是光线与光栅平面之间的布拉格角,(\lambda)是波长。只有入射角大约满足这个条件时,光才能获得有效的相干叠加增强,产生强烈衍射;偏离布拉格角,体中的多周期散射就会相位抵消,衍射效率迅速掉下去。
这个性质非常像干涉滤光片在波长维度上的表现,只不过体光栅把这个选择性放在了角度维度上。更厚的光栅意味着参与相干叠的周期数更多,角度选择性也就越尖锐。一个厚度百微米、周期微米量级的体光栅,角度带宽往往只有零点几度到一两度。用它做角滤波,在几何上非常干净,不用在光路里塞一块带孔的挡板。
1.3 实际工程中的需求场景
我最早接触到这类需求,是在做一套高功率激光分束系统。前端是一个大口径衍射分束光栅,把单束激光分成3×3或者5×5点阵。表面光栅设计得再好,总会有个别高阶残余点出现在不希望的位置。如果系统后面接的是加工头或者探测器阵列,这些杂散点就是实打实的干扰。后来改成“分束光栅+体布拉格光栅”的串联结构,体光栅只让设计角度的光通过,其他角度直接被抑制,整体系统干净程度立刻上了一个台阶。
另一个常见场景是到全息波导。波导内含表面浮雕光栅或全息体光栅,光在波导内全反射传播。但总有部分光在全息界面发生高阶衍射,从波导耦出或进入错误方向,造成亮度不均匀或者鬼像。在这些方案里,角滤波体光栅往往被用于限制某一个角度的衍射通道,抑制不想要的高阶成分。VirtualLab Fusion这这类问题提供了比较完整的物理光学仿真环境,既可以用严格的矢量方法算体光栅本身的衍射效率,也能把体光栅放在整个光路里做传播分析,看它对不同级次的真实抑制效果。
2. VirtualLab Fusion里的体光栅建模:从参数到元件
2.1 决定滤波器性能的关键参数矩阵
在动手建模之前,建议先把体光栅的参数体系理清楚。我在VirtualLab Fusion里建模时,最常打交道的参数大概有六项,下面这张表可以直接保存参考:
| 参数 | 符号 | 对滤波性能的影响 | 直观理解 |
|---|---|---|---|
| 光栅周期 | (\Lambda) | 决定布拉格中心角 | 周期越大,布拉格角越小 |
| 光栅厚度 | (d) | 决定角度带宽、峰值衍射角脆性 | 越厚,角度窗口越窄越陡 |
| 折射率调制度 | (\Delta n) | 决定峰值衍射效率;过大过小都会影响衍射效率 | 相当于耦合强度 |
| 平均折射率 | (n_{avg}) | 影响光栅内部角,进而影响外部布拉格角 | 材料主体折射率 |
| 光栅矢量倾斜角 | (\theta_g) | 改变布拉格条件的方向,把最大衍射效率对准特定入射角 | 相当于光栅线沿倾斜 |
| 方位角 | (\varphi) | 决定光栅矢量在面内的朝向 | 保证入射面与光栅矢量共面 |
这里重点说几条我自己踩过的经验。第一,厚度与(\Delta n)乘积必须和波长匹配。透明的透射型体光栅在布拉格角度附近的峰值衍射率近似用下式估计:
[ \eta_{peak}=sin^2\left(\frac{\pi \Delta n d}{\lambda cos\theta_B}\right) ]
想让某个级次几乎100%通过,就要把(\frac{\pi \Delta n d}{\lambda cos\theta_B})调整到(\pi/2)附近。(\Delta n)给得太小,衍射效率不够;给得太大,效率反而会过冲,落回较小的值。很多初学者喜欢把(\Delta n)往大了拧,结果是效率反而降下来,一脸懵。
第二,厚度增加会带来更窄的角度带宽,但也会让波长选择性更敏感。如果你后续系统是多波长工作,就要算清楚:是让体光栅在目标角度上有足够的角宽容度,以免装调后中心角度偏掉。我通常的做法是把厚度先固定,然后扫描(\Delta n),观察峰值效率和带宽折中曲线,再决定最终值。
2.2 在VirtualLab Fusion中定义体光栅元件
打开VirtualLab Fusion,我不建议直接在复杂光路里开始定义体光栅,先建一个最简光路,把体光栅本身的行为摸透再说。具体步骤大致是:
- 新建一个光路,光源选“平面波光源”,波长按实际工作波长设置,比如632.8 nm。
- 在光学组件库里插入“光栅”类别下的体光栅元件。如果界面里直接提供了“体光栅”入口就选它;如果只有通用周期结构,通常也可以把介质光栅设为体内的折射率调制类型。
- 填入(\Lambda)、厚度(d)、(\Delta n)、平均折射率(n_{avg})以及光栅矢量相对于表面法线的倾斜角。这里的倾斜角不要直接填你想要的入射角,要计算光栅内部实际传播角,再把光栅矢量角度设置成让衍射效率峰值出现在目标入射角的方向。
- 在元件后面放一个探测器,既可以用近场探测器看透射场,也可以用远场探测器看角度分布。
我特别提醒一点:输入周期的时候,注意单位。VirtualLab Fusion对长度单位很严格,周期填微米还是纳米,直接关系布拉格角算出来对不对。我习惯把所有几何量统一先用微米和度做一轮快速手算,确认大致数值合理,再填入软件。
下面是一个能直接上手试的初始参数组合,供参考,这套参数可以跑出80%-90%的峰值衍射效率:
- 波长:632.8 nm
- 平均折射率 (n_{avg}=1.50)
- 光栅周期 (\Lambda=1.25,\mu m)
- 厚度 (d=20,\mu m)
- 折射率调制度 (\Delta n=0.010-0.016)
- 光栅矢量倾斜角:先设0°,看透射光栅布拉格角是否出现在你需要的方向
我建议先用(\Delta n=0.012)跑一个基点,再扫描三次,很快就能看到 sinc 函数形状的效率变化。这样跑出的结果会引导你调整最终值。
2.3 分析设置:为什么不要只用单一衍射级次
在VirtualLab Fusion中做体光栅分析时,会遇到一个隐藏比较深的坑:模型本身会计算衍射级次,但有些简化分析模式只输出一个衍射级次。对于普通光栅设计,只关心主级次没问题,但要完整评估高阶级次抑制,必须把分析级次范围放开。
我一般会把光栅分析设置里的输出级次从-5扩展到+5或者更大,视情况甚至可以扩展到±10。原因很简单:你希望体光栅抑制的是“不允许通过的级次”,得让它们出现在计算结果里,才能看到抑制前后各有多少能量。否则仿真里只显示一个主级次,看起来非常完美,一到实际测试就露馅。
另外,如果用的是傅里叶模态法/严格耦合波分析这一类严格矢量算法,计算级次越多,计算量越大,但好在VirtualLab Fusion的体光栅问题规模通常不大,几秒钟就能算完。不要为了省时间限制级次范围,这个便宜贪不得。
3. 角度选择性仿真:用数据看抑制效果
3.1 先让单个体光栅“自证”选择曲线
把体光栅作为一个独立元件验证,是最值得花时间的步骤。我习惯的做法是:在光源和体光栅之间加入一个可变的入射角度扫描,即入射平面波角度从约0°扫描到40°,步长0.1°或0.2°,记录体光栅衍射通道的透射效率。
扫描之后导出一条角度-效率曲线,通常你会看到类似这样的特征:
| 入射角 | 透过率(衍射通道) | 备注 |
|---|---|---|
| 8° | 2.1% | 偏离布拉格,残余透过 |
| 10° | 5.4% | 上升沿 |
| 12° | 48.2% | 接近中心 |
| 14.6° | 96.5% | 布拉格中心附近 |
| 17° | 6.8% | 下降沿 |
| 22° | 0.9% | 已经明显抑制 |
| 30° | 0.3% | 基本关闭 |
这个曲线就是角滤波体的核心指标。很多体光栅在实际中并不要求100%峰值效率,因为峰值效率太高往往意味着对角度极其敏感,装调余量非常小,反而不利于工程实现。
在VirtualLab Fusion里,我会先把“半高全宽”记下来,再记两个工程指标:一是中心角(\pm0.5°)范围内平均透过率;二是离开中心角(5°)之后的平均透过率。前者决定有用信号是否畅通,后者决定杂散抑制是否达标。对上述仿真结果而言,中心附近超过90%,5°外接近个位数百分点,已经是可用的角滤波器件。
作为设计参考:
- 光栅周期约1.25 μm,布拉格中心角约14.6°
- 厚度20 μm
- (\Delta n)按扫描值取最优点
- 角度半高全宽预计在1°-2°之间
如果你的系统要求0.3°更窄角度窗口,那就把厚度加到50-100 μm,同时相应降低(\Delta n),把耦合强度拉回最优值。这个“厚光栅+低调制度”的组合,是体光栅做窄角滤波的典型套路。
3.2 表面光栅+体光栅级联:高阶抑制的完整验证
单个体光栅验证通过之后,再把体光栅放回真实光路。这时候另一个关键风险出现了:体光栅不只影响那些明显的高阶级次,对0级和低角度的杂散也有透过,虽然很小但不可忽略。
我采用一个典型级联结构来验证:
- 第一个元件:正弦轮廓表面光栅,周期3 μm。
- 第二个元件:体光栅,中心角对准表面光栅的+1级衍射角。
- 第三个元件:探测器,分析远场角度分布。
我在VirtualLab Fusion中明确设置表面光栅后方的探测器,先单独记录表面光栅各级透过率,再加体光栅,再记录一遍。下表是一次典型仿真的对比结果:
| 级次 | 表面光栅单独出射角 | 表面光栅单独功率占比 | 加入体光栅后功率占比 | 抑制效果 |
|---|---|---|---|---|
| 0级 | 0° | 3.2% | 0.1% | 抑制96.9% |
| +1级 | 12.2° | 72.0% | 69.8% | 保留主级 |
| +2级 | 24.9° | 9.6% | 0.06% | 抑制99.4% |
| -1级 | -12.2° | 6.8% | 0.5% | 抑制92.6% |
| 其他高阶 | 不规则 | 8.4% | 0.2% | 抑制97.6% |
数据里最值得注意的是:-1级虽然也是高阶,但角度离中心布拉格角较远,所以抑制得也很狠;而0级距离中心约12°,没到接近零的状态,但也有96.9%被抑制。
到这里,体光栅作为“高阶抑制器”的角色已经非常明确了。它把一个原本能量比较分散的衍射光栅输出整成了一个接近单通道的品质,而且没有用任何机械挡光结构。这也正是角滤波体光栅在VirtualLab Fusion中最有价值的应用方式。
3.3 抑制效果的数字指标怎么定
工程上不能只说“效果不错”,要定义可接受标准。按我经验,角滤波体光栅验证至少需要给出四个数字:
- 峰值衍射效率,或者目标角度透射率,通常要求大于85%;
- 目标角度附近±0.5°范围的平均透射率,切忌只看某个单点角度;
- 抑制区平均透过率,即离目标角度5°之外所有方向透过率,越低越好;
- 有效抑制级次的范围,要写明从哪一级到哪一级被抑制,比如“抑制范围覆盖±3级”。
在VirtualLab Fusion的输出报告里,这几个指标都能直接从数据表读到。如果没有直接显示平均透过率,把角度-效率数据导出,Excel或Python处理一下即可。拿数据说话,比口头汇报有说服力得多。
另外要小心一级概念模糊的问题:体光栅的“衍射通道”和“透射0级通道”都要记录。你在探测器上看到光很强,要先确认它到底是目标衍射级次还是0级漏光。一个常见错误是把体光栅的0级透过当成衍射效率,导致实测和仿真对不上。区分方法很简单:在VirtualLab中分别给两个通道添加不同探测器或数据记录器,分开统计能量。
4. 公差、装调与优化:从仿真走向可交付设计
4.1 布拉格条件被破坏的几种情况
仿真里体光栅的参数很理想,但实际元件总会有公差。我整理一下布拉格条件被破坏最常见的几种情况,你能对照自己的项目排查:
第一种是入射角整体偏移。元件加工或夹具安装时,体光栅相对于入射光束倾斜了一个小角度。体光栅的中心角从设计值漂走,原来需要通过的级次恰好落进大幅衰减区。这在VirtualLab Fusion里模拟起来很直观:直接在入射角度上增加偏置参数,再扫描一次效率曲线,看看可用窗口还剩多少。
第二种是光栅周期的工艺误差。全息写入或者刻蚀过程中,周期偏差哪怕1%,布拉格角也会跟着偏差约1%。我曾用一个周期标称1.25 μm的体光栅样品实测,偏了0.02 μm,布拉格角就从14.6°晃到14.02°,差了大半度,人眼都能看到出射光方向明显偏移。
第三种是折射率调制度(\Delta n)达不到仿真取值,导致峰值效率不够;或者(\Delta n)分布不均匀,导致局部效率高低不一致。(\Delta n)的偏差不像周期那样改变布拉格角,但会直接影响效率曲线高度,同样值得警觉。
第四种是平均折射率的变化。温度变化或者胶层固化不充分,都会让(n_{avg})漂移,进而改变内部传播角。对高精度系统来说,这种漂移不能被忽视。
4.2 VirtualLab参数优化与鲁棒性验证
VirtualLab Fusion里经常使用批处理和参数变化分析来验证公差鲁棒性。我一般会做这样一轮操作:
- 把(\Delta n)设为参数扫描变量,范围按样本可能波动范围覆盖,比如±20%。
- 把光栅厚度也设为扫描变量,模拟加工误差。
- 扫描入射角整体偏差,比如±0.5°。
- 最后输出一个二维或三维的透过率矩阵,观察在公差最不利组合下,目标级次透过率是否仍在规定阈值以上。
这一套下来,就能回答“设计余量到底够不够”这个问题。我见过很多项目,单点仿真效果很好,一做完公差分析就看不下去了,被迫反过头调整光栅参数。这里有个小小的经验:如果公差分析发现峰值效率和角度带宽矛盾无法兼顾,优先保带宽,牺牲一点两点峰值效率。工程上,一个稳定可靠的90%透过率远比一个安装偏一点就掉到70%的99%透过率更实用。
VirtualLab Fusion优化模块也可以用来反向“找”最优参数。比如给定目标角度带宽和最小透过率限制,设置厚度和(\Delta n)两个优化变量,让它自动迭代。我在处理角滤波体光栅时喜欢用这种方式,因为两个变量相互耦合,人工尝试效率太低。
4.3 我给实际装调的两点经验
装调这部分内容,仿真软件里不常讲,但对真正做项目的人很重要。
第一点,装调时不要用可见光激光直接肉眼观察就认为对准了。体光栅的角度敏感性极高,人眼的判断精度远不够。先把VirtualLab中的设计角计算出来,再在夹具上用高精度转台,以弧分级分辨率调整。转台的分辨率至少要优于布拉格角半宽的五分之一。如果我仿真出来的半宽是1°,转台精度起码要0.2°;如果半宽只有0.3°,那就得用1弧分甚至更精细的台子。
第二点,装调时初始入射角故意偏几度再切入。这是因为体光栅在远离布拉格角时几乎没有衍射效应,你直接放到设计角附近,很难判断光路里哪个光束是你想要的。先从偏置角开始扫,观察光束逐渐“亮起来”的过程,你会清楚看到衍射光束出现、衍射效率上升,然后停下调整。这个方法比直接放在目标角再找衍射光要可靠得多,能少浪费半天时间。
5. 最后一个建议:把体光栅独立设计再做级联验证
如果你现在正准备用VirtualLab Fusion做类似的角滤波体光栅项目,我比较推荐的流程是:先独立建模体光栅、单独验证角度选择曲线,再做表面光栅级联验证,最后才进入公差分析和优化。一上来就把体光栅塞进复杂光路里,很容易让模拟问题变得难以定位。独立验证时出现问题只需要查一组参数,级联时出现问题则要同时考虑两个元件,排查难度翻倍。
我个人在实际操作中还发现,VirtualLab Fusion里把光栅分析结果和光场传播分析结果对照起来看,能暴露一些只看单一方面发现不了的问题。比如光栅分析显示体光栅对某一级次透过率只有0.1%,但整个光路传播时由于界面多次反射,实际杂散可能反弹回升。把两个结果对照,就能避免“零件指标合格但系统仍有杂光”的尴尬情况。
这个内容后续还可以这样扩展:如果你手头有具体的体光栅实测衍射效率数据,可以用VirtualLab Fusion的“参数拟合”工具,把实测效率曲线反推成周期调制度的等效参数,再拿这套参数做系统级仿真。这样得到的仿真模型,能比较好地代表你手上那颗真实元件,而不是书本上的理想值。