“复现”这件事,永远是学超表面最磨练人的环节之一。中红外宽带消色差偏振复用超透镜模型这个标题拆开看,就是四个关键词:中红外、宽带消色差、偏振复用、超透镜。我这次复现的目标,是把论文里的一套相位设计方法,落到自己可跑的仿真流程里,同时验证它在3到5微米波段能否同时解决色差和偏振串扰的问题。这个工作做下来,最大的感受是:真正卡的从来不是公式,而是单元结构库怎么建、群延迟怎么凑、相位包裹怎么处理这些看起来很基础的细节。这篇文章就按我实际的操作顺序,把原理、参数、流程和踩过的坑一并写清楚,给准备复现类似超表面模型的朋友做个参考。
1. 先搞懂这个模型到底在做什么
1.1 中红外超透镜解决的是真实需求
中红外3到5微米这个波段,对应大气窗口,很多气体分子在这里有特征吸收峰,所以热成像、气体传感、医学无创检测和自由空间光通信都会用到。传统红外光学系统里,用来做聚焦和成像的透镜大多是硒化锌、锗、硫系玻璃这些材料磨出来的,又厚又重,曲面加工精度要求高,而且材料本身的折射率随波长变化非常明显,色差比可见光波段更难压。
超透镜的优势在于,它是一个平面结构,用纳米柱阵列来替代传统透镜的曲面。每个纳米柱就像一个小型的“相位控制器”,通过调整尺寸和朝向,让入射光在不同位置获得所需的相位变化,从而实现聚焦、偏折、涡旋光束、偏振分束等效果。把透镜做得平整、薄、轻,对红外系统集成有非常大的吸引力。
但这个项目标题里还有两个定语,一个叫“宽带消色差”,一个叫“偏振复用”。这两个词加进来,意味着不是简单地做一个能聚焦的平板就行了,而是要在一个器件里同时实现多波长聚焦到同一个焦点,并且让不同偏振态的光各自执行不同的功能。这个“叠加态”才是模型的复杂之处。
1.2 消色差的核心矛盾:相位够用还不够
超透镜要实现聚焦,靠的是每个位置提供的相位延迟。对一个焦距为f的透镜,距离中心r处的目标相位可以写成:
φ(r, λ) = -2π/λ * (sqrt(f² + r²) - f)
这个公式并不难理解:中心相位和边缘相位之间存在一个光程差,光经过透镜后,不同位置的光波前被重新塑造成会聚球面波。问题是,这个目标相位本身是随波长变化的。如果每个单元结构只在一个波长上做到位,其他波长的焦点就会沿光轴漂移,出现轴向色差。这就是普通衍射透镜被吐槽“有严重色差”的根子。
要消色差,就得让每个单元结构在目标波段内呈现特定的相位色散特性,而不是只要单独一个波长下的相位值。把目标相位对波长做展开,核心是两个参数:一个是中心波长λ0处的相位值φ(r, λ0),另一个是相位对波长的变化率∂φ/∂λ。后者等价于群延迟。一个单元结构想要参与宽带消色差聚焦,必须同时满足这两个约束。
用一个生活化的类比来说,相位是十字路口要转的角度,群延迟是不同颜色车辆在路口排队的时间差。你要让红绿蓝三种颜色的车同时到终点,光给每个路口设一个转向角度是不够的,还得保证它们经过每个路口的时间差互相匹配。
那种认为“库里面相位覆盖到0到2π就能做消色差”的想法相当普遍,但纯覆盖0到2π只能保证做一个单波长的透镜。要在一个较宽的波段内都聚焦到同一处,群延迟的匹配才是真正的硬门槛。这个认知我复现之前也踩过,所以特别提一句。
1.3 偏振复用:在同一块透镜上做多件事
偏振复用的实现思路,是让不同偏振态的光看到不同的“相位版图”。主流办法是选择各向异性的纳米结构,比如矩形柱、椭圆柱、十字形结构。一个矩形柱对x偏振和y偏振光的响应不一样,因为光沿长边和短边看到的是不同的有效折射率。通过分别调节这个矩形柱的长度和宽度,就能在两套偏振基底下各自独立地积累相位。
如果在此基础上再让柱子旋转,还可以引入几何相位,也就是所谓的Pancharatnam-Berry相位,这种相位只跟旋转角有关,对波长不敏感,非常适合宽带场景。但几何相位通常对应圆偏振基底的转换,会引入交叉偏振成分。在这个模型里,我更关心的是两个正交线偏振的复用,所以主要利用传播相位差异,旋转角只用在对偏振串扰做辅助优化的环节。
偏振复用的难点在于,单个纳米柱的(Lx, Ly)两个参数是有限的自由度,而要同时满足x偏振的相位和群延迟、y偏振的相位和群延迟,约束条件有四个。说句大白话,你手头只有两个旋钮,却想独立控制四个旋钮才能控制的东西,这就是偏振复用超透镜最让人头疼的地方。实际做的时候,通常只能放宽约束、筛选次优解,或者引入更复杂的单元结构来增加调节自由度。
2. 复现前要把参数和原理盘明白
2.1 先定波长、焦距、NA和材料
复现任何超表面模型,第一步不是开软件,而是先把目标参数明确下来。我这次设定的波段是3到5微米,覆盖整个中红外大气窗口,也算一个相对苛刻的相对带宽要求。中心波长取4微米,焦距50微米,器件半径25微米,数值孔径NA大约0.45。
数值孔径算出这个值的意思是,透镜最边缘的入射角并不小,边缘和中心的目标相位差比较大。用公式算一下:
sqrt(f² + R²) - f = sqrt(50² + 25²) - 50 = 55.9 - 50 = 5.9 微米
这个5.9微米的路径差除以中心波长4微米,再乘2π,大约是2.95π的相位跨度。也就是说,整个透镜上的相位分布需要从中心到边缘连续变化差不多1.5个周期,这会给相位展开带来不小的麻烦,我后面再细说。
材料方面,中红外波段可用的晶圆级材料不算多。硅在红外波段损耗很低,折射率约3.4,CMOS工艺还成熟,所以我选了硅做纳米柱。衬底用氟化钙,它在3到5微米透过率高,折射率约1.4,对仿真边界条件的影响比较简单。纳米柱周围的环境介质默认是空气。
还有一个关键参数是单元周期。我取周期P=1微米。为什么取这个值?首先要小于入射光最短波长,也就是3微米,这样才不会出现高阶衍射;其次,周期决定了每个纳米柱能占据的面积,周期太小,柱子可以调整的尺寸范围受到挤压,相位覆盖往往不够;周期太大,又可能出现高阶衍射和单元之间的耦合串扰。1微米在3到5微米波段是一个比较折中的选择。
2.2 单元结构选型背后的权衡
单元结构我最后选了矩形硅柱,并不是因为它在物理上最先进,而是它在复现过程中最不容易出幺蛾子。矩形柱的长和宽分别对应x和y偏振的有效折射率调节,高度则统一控制,这是最经典的两自由度结构。
十字形结构可以更好地解耦两个偏振的响应,因为x方向的臂长主要影响x偏振,y方向的臂长主要影响y偏振,理论上是更理想的偏振复用单元。但它的几何形状更复杂,在FDTD网格里的计算量更高,而且在实际加工中边角效应也更明显。做复现研究,把问题简化到底层逻辑上去验证,往往比一上来就追求最炫结构更有价值。
纳米柱高度方面,我做了几组预扫描后发现,高度2微米是一个比较稳妥的值。太矮了,传播相位积累不足,相位覆盖范围不够;太高了,波导里的高阶模式会被激发出来,相位响应在波长上变得异常剧烈,群延迟量确实上去了,但代价是大巅峰状的谐振响应让透过率掉得很厉害。2微米这个高度在中红外波段,既能覆盖接近2π的相位,又能让透过率整体维持在可接受范围。
选型时还有一个原则:尽量远离品质因子过高的谐振区。单元库里的某些尺寸组合会出现很窄的相位突变现象,这在单个波长下能提供大相位变化,但换一个波长就崩掉。宽带消色差不欢迎这种过于敏感的单元,筛选时要专门剔除。
2.3 目标相位公式怎么离散到网格上
确定了宏观参数之后,接下来就是把连续的目标相位分布离散到每个纳米柱的中心坐标上。假设透镜是一个以原点为中心的圆,第i个位置与中心距离为ri,那么该位置在中心波长下的目标相位是:
φ_x(r_i, λ0) = -2π/λ0 * (sqrt(f² + ri²) - f) + C_x
这里C_x是一个常数偏置,可以取0,也可以取任意值来配合单元库里可用的相位范围,因为整个透镜加上一个常数相位常量,对焦点位置没有影响,只影响总的相位延迟。调制到2π范围内时,常数偏置可以帮助避开相位库中某些透过率低的结构。
对于y偏振,我不想让它和x偏振做一样的聚焦。既然要展示偏振复用能力,就把y偏振的目标相位设计成涡旋光束的相位分布,也就是φ_y(r_i, θ_i)= l * θ_i,其中l取1,拓扑电荷为1,θ_i是当前位置的极角。这样x偏振入射时是一个普通焦点,y偏振入射时是一个涡旋光束,中心是暗的。在焦平面验证时,两套结果一眼就能区分开,也比两个不同焦距的焦点更直观。
除此之外,还要考虑每个位置的群延迟目标。由于消色差透镜要求焦点位置对波长不敏感,群延迟目标可以从上面那个目标相位公式对波长求导得到:
GD(r) = (sqrt(f² + r²) - f) / c
这个结果很有意思:它跟波长无关,只跟透镜的几何参数有关。用刚才的数值算,透镜边缘需要的群延迟约为5.9微米/0.3微米每飞秒,约等于19.7飞秒。这比可见光波段需要的群延迟大了不少,因为中红外的路径差本来就在微米量级。所以单元结构库必须能覆盖0到20飞秒左右的群延迟范围,这个要求并不轻松。
3. 仿真流程逐段拆解
3.1 用FDTD扫描纳米柱库的全过程
单元库的建库我习惯用三维时域有限差分仿真来做,常用的是Lumerical FDTD,理论上开源工具MEEP也可以做到同样的事。仿真区域就是单个周期单元,周期边界条件设置成P=1微米,在x和y方向使用周期性边界条件,z方向用完美匹配层来吸收透射和反射光。入射光是平面波,分别设置x偏振和y偏振两种激发条件,在结构下方放一个功率监视器,在结构上方或下方记录透射场的振幅和相位。
扫描时,Lx从0.2微米扫到0.9微米,Ly也从0.2微米扫到0.9微米,步长10纳米。这是一个不小的参数空间,粗扫的步长往往先用20纳米做一轮,筛掉明显透过率低和相位覆盖不到位的区域,然后在重点区域补细网格。90纳米或100纳米高度的柱子在这个范围内有足够多的模式变化,但也要注意FDTD的网格精度设到5纳米左右才比较可靠,网格太粗会带来相位误差,那个误差在最终聚焦质量上会放大得非常明显。
扫描结果的原始数据里,最关键的两个量是透射系数的幅值和相位。相位通过监视器记录的复数电场求辐角得到,但这里有一个非常容易出错的地方——软件输出的相位默认在-π到π之间,是包裹相位。对于周期性单元,这个包裹可以由软件自动处理,但在后面建库时如果不注意unwrap,拿包裹相位去做群延迟计算,结果会直接偏离几十个飞秒。
群延迟的提取,可以通过波长域数据来做。在对结构参数不变的情况下,用多个波长分别做单频仿真,得到一系列复数透射系数t(λ),相位谱φ(λ)在中心波长λ0附近的斜率就是dφ/dλ。群延迟GD就可以用下式得到:
GD = -dφ/dω = (λ0² / 2πc) * dφ/dλ
实际操作中,我至少会在3到5微米之间设置7个波长采样点,用中心波长附近相邻两点的相位差除以整段频率间隔来估算斜率。采样点太稀,会平均掉真实的色散变化;采样点太密,每一组参数都要重复仿真,数据库构建时间会明显拉长。7个点是时间和精度之间的一个平衡。
3.2 从扫描结果构建一张可查询的数据库
扫描完成后,数据库里每一条记录都应该包含这些字段:Lx、Ly、中心波长下的φx、φy、透过率Tx、Ty,以及群延迟GDx、GDy。如果还用不同偏振仿真的话,可以额外存储交叉偏振透过率,用于后续串扰排查。
构建数据库这步,听起来像搬数据,实际上是在做大面积筛选。因为我们的目标是给每个空间位置找一个(Lx, Ly),使四种约束同时最接近目标值。筛选时的第一道硬性条件是透过率,我一般要求Tx和Ty都大于0.5,否则到了最终的透镜上,焦斑亮度会严重不均,效率数据也很难看。通过这道门槛之后,再按相位误差排序。
为什么要先卡透过率再卡相位?因为相位和群延迟都可以通过后期寻找偏置和补偿来微调,但一个单元结构透过率太低,无论相位数据多漂亮,放到真实器件里都是黑洞,只会伤害最后的聚焦效率。很多论文给的库数据里,透过率维持在0.7以上才被算作有效结构,这可以作为复现时的一个默认标尺。
由于最终要匹配的目标是x偏振的聚焦相位和y偏振的涡旋相位,数据库是二维的(Lx, Ly),因此实质上是在二维字典里寻找一个双映射。不同位置的目标组合可能落到库里的同一个(Lx, Ly),也可能根本找不到完全匹配的,这时就要从误差最小的候选中去选。我给每个参数设了匹配权重,相位误差权重高一点,群延迟误差权重稍低,因为群延迟允许的误差范围通常比相位更宽。加权公式大致是这样的。
for Lx, Ly, rec in library: err_phi = ((target_phi_x - rec.phi_x) ** 2 + (target_phi_y - rec.phi_y) ** 2) err_gd = ((target_gd_x - rec.gd_x) ** 2 + (target_gd_y - rec.gd_y) ** 2) err_total = err_phi / sigma_phi**2 + err_gd / sigma_gd**2这个搜索逻辑在代码上很简单,真正的技巧在于设置合适的误差权重,以及接受一定误差的阈值。如果误差阈值设得太小,可能出现大量位置找不到结构,透镜图样稀疏破碎,聚焦效率崩掉;设得太大,色散补偿效果变差。我最后采用的是相位误差小于5度、群延迟误差小于2飞秒作为筛选条件。
3.3 组透镜:从目标相位反推每个位置的结构
当数据库准备好以后,组建整个透镜就变成一个查表加插值的过程。把透镜网格分成若干个正方形像素,网格的格点间距取为周期P=1微米,也就是每个格点对应一个纳米柱。在每一个格点位置,根据它的极径和极角代入目标相位和群延迟表达式,得到一组目标值,然后到库里找最匹配的(Lx, Ly)。
有一个细节我建议特别留意:目标相位最好在0到2π之间连续表示,不要只取模值。比如一个格点需要的实际相位是5.7弧度,换算成0到2π之后可能是-0.58弧度,但你在库里搜的是-0.58附近的结构,可能和5.7弧度的真实需求完全不是一组参数。所以搜索之前,要对目标相位和库里的相位分布做统一处理,要么都unwrap,要么都在一个固定的2π范围内比较。对于圆对称的聚焦透镜,相位本身就是从中心到边缘连续增加的,unwrap之后搜索会稳定得多。
搜索完成后,所有格点的(Lx, Ly)就固定下来了。为了保证透镜的稳定性,我还额外加了一个操作:对相邻格点的结构参数做一次光滑性检查。这个在论文里很少写,但实际操作中如果相邻柱子长短差异特别大,就说明相位匹配已经接近跳变,很容易在真实器件里激发强近场耦合。对这种点,我会人工调节到邻近且误差次小的结构,而不是死守最小误差。
3.4 全器件仿真和焦平面的数据提取
单元库仿真只是解决“单个柱子在周期条件下”的行为,真正要验证这个模型能不能用,必须把整个透镜放进一个更大的仿真区域里做全器件仿真。我搭建的模型尺寸是半径25微米,也就是直径50微米。很多情况下,完全3D的FDTD仿真内存和耗时都非常可观。为了控制计算量,我会把x偏振和y偏振分别用两个独立的仿真来做,这样每个偏振关注一种物理过程,可以避免同时打开多个入射偏振造成的模场混叠。
焦平面监视器放在z=f=50微米的位置,同时记录电场或磁场分布。如果要看轴向色差,还需要在z=35到65微米的范围内放一组电场监视器,扫出不同波长下的焦斑位置。这个操作比较耗时,但这是验证“消色差”最直观的证据:不同波长的x偏振入射光,焦点要落在同一个z=50微米平面上。
评估时,我会提取焦平面上的光强分布,找到主峰位置,计算半高全宽,并把主峰一定范围内的积分功率除以入射总功率,得到聚焦效率。对于y偏振涡旋光束,则要看焦平面上是不是有一个中心为零的环状暗斑,环的半径随拓扑电荷增加而变大,相位分布存在围绕中心的螺旋结构。如果这两套结果同时满足,偏振复用才算真正成立。
4. 复现中遇到的坑和排查方法
4.1 相位包裹跳变导致的“假消色差”
这是我最开始遇到的头号问题。单元库里提取的相位已经在软件里做了unwrap,但不同波长点之间的相位差如果超过π,相邻波长点的相位斜率就会算出一个错误但看起来平滑的数值。最典型的现象是全器件仿真结果里,单波长聚焦很漂亮,换一个波长焦点偏移不大,但聚焦效率只有个位数,焦斑边上还飘着一圈衍射环。
排查方法是把每一个被选中单元的相位谱单独拉出来,看看中心波长附近的相位斜率是否真的和设计目标接近。如果某一个位置的结构相位谱在波段内出现了快速跳变,比如从-3弧度突然跳到2.8弧度,那么即使unwrap后的相位在目标波长附近是对的,群延迟也完全不对。遇到这种结构,直接换掉,不要试图用加权去补救。
4.2 群延迟库不够用,焦距越大越明显
继续深入之后,我又发现了一个比相位更不讲理的问题:数据库中纳米柱能提供的群延迟范围,往往只能覆盖0到8飞秒左右,而设计的透镜边缘需要将近20飞秒。这个差距意味着,无论怎么搜,都不可能找到满足群延迟目标的结构。
解决的办法有几种。最简单的是降低NA,也就是让透镜口径小一些或者焦距大一些,这样需要的路径差就减小了。其次,可以提高纳米柱的高度,因为更高的柱子在同样波导结构下,相位色散会变大,群延迟范围会相应扩宽,但高度太高又会让短波长段的透过率下降,制造难度也上去了。更彻底的方案是引入二聚体结构,让两个距离很近的柱子之间产生更强的耦合,在保持透过率的同时扩展群延迟动态范围。如果复现的模型要求严格遵循论文,那么论文正文里给的单元类型和高度就是你需要复现的对象;如果只是自己学习验证,不妨先降低焦距要求,把现象跑出来再说。要解释清楚这个权衡,光靠公式还不够,真正有说服力的还是多跑几组库对比。
4.3 x和y偏振串扰,表征比想象中难
偏振复用最怕的就是串扰,也就是入射x偏振光时,y偏振通道里也能看到能量。在理想矩形柱仿真中,因为结构严格沿x/y轴对称,x偏振激发不会产生y偏振出射分量,串扰几乎为零。但一旦引入旋转角来辅助相位匹配,或者为了扩展群延迟而采用非对称的耦合双柱,x偏振入射就会在y偏振通道里留下显著的电场分量。
排查方法是在单元库阶段就加入交叉偏振透射率的记录,筛选时直接去掉交叉偏振透过率高于0.1的结构。全器件仿真阶段,则可以通过在焦平面监视器中分别投影x和y偏振分量,比较两个分量的强度和分布。如果y偏振通道焦斑上出现x偏振聚焦的亮度残留,说明串扰已经影响到功能判别了,这时候最好的手段是把旋转角重新设为零,回归纯矩形柱方案。
4.4 透过率上不去,效率指标怎么救
很多初学者会把聚焦效率低归咎于透镜结构设计,但做过几次全器件仿真以后,我发现最大的效率杀手往往藏在单元库里。圆柱高度、长宽比不合适,导致某个波长的反射特别强;或者周期太大,部分光进入高阶衍射通道。这两种问题在单单元扫描时就能看出来,不用等到全器件仿真再哭。
提升效率的操作包括:在单位和全器件仿真中都检查反射谱,观察哪个波长反射异常,回头找对应的(Lx, Ly)都落在库里的哪些区域,把这些区域在筛选时整体降权。另一个手段是在结构上方或下方加一层减反射介质层,用简单的等效介质模型估算厚度,可以让短波段的透过率普遍提升5到10个百分点。复现论文的时候,如果对方效率很高,一定要先确认它用的效率定义是入射总功率还是焦斑积分功率,不同定义的数据差个两三倍都很常见。
4.5 常见问题速查表
| 问题表现 | 可能原因 | 排查手段 | 解决办法 |
|---|---|---|---|
| 单元库相位覆盖不够 | 高度过矮或周期太大 | 看库中相位散布范围 | 增加高度,缩小周期,改看椭圆柱 |
| 群延迟范围不足 | 模式色散不足 | 计算库中GD极差 | 加高度,改二聚体,降低NA |
| 焦斑出现环状旁瓣 | 相位展开不一致 | 逐个检查选中单元相位谱 | 统一unwrap,剔除相位跳变单元 |
| 效率低但相位没问题 | 反射强或高阶衍射 | 看反射谱与衍射级次 | 加增透层,修正周期和网格 |
| x/y偏振串扰 | 结构非对称过强 | 测量交叉偏振透过率 | 去除旋转角,筛选中限制交叉透过率 |
| 不同波长焦斑位置没对齐 | 群延迟匹配偏差过大 | 扫轴向焦斑分布 | 缩小GD误差阈值,重新选库 |
复现这个模型最让我觉得值得细品的地方,其实是“建模-筛选-匹配”这一整套思路的可迁移性。这次是为了中红外消色差偏振复用,但换到可见光波段、换成TiO2或GaN纳米柱、换成圆偏振复用,流程骨架几乎一模一样,差别主要在对材料折射率、目标相位色散和库的筛选逻辑做相应调整。每次做这类工作,我都习惯先把目标公式写完整再动手去跑仿真,公式能告诉你要从库里找什么,库能告诉你哪些公式预期是现实中可达的,两者来回反复迭代,才能把模型从纸面变成一份靠谱的设计数据。
如果你正卡在这个模型的某一步,我建议先回头检查整个数据链路里最不起眼的环节:相位是否有统一的unwrap约定、群延迟是否用相邻波长差分估算、库中透过率阈值是否定得太低。这几个点理顺了,后面的结果通常不会差到哪里去。