☰
几何相位超表面金属透镜复现全流程:从单元设计到FDTD仿真踩坑实录
2026/9/29 17:22:43 网站建设 项目流程

前阵子折腾着复现一个2016年Science上的金属透镜(Metalens)工作,就是那种用几何相位超构表面把圆偏振光紧紧聚焦到衍射极限的做法。看论文时觉得原理很直白,无非是把一堆旋转过的纳米柱子排成阵列,可自己动手仿真才发现,从单元扫描到全结构聚焦,中间处处都是坑。这篇帖子把完整复现流程和踩过的坑都记下来,给准备上手超表面仿真做超构透镜(Metalens)复现的同学一个可以直接抄的作业。

本文涉及的核心关键词是几何相位、圆偏振聚焦、超表面仿真。适合谁读?第一类是刚接触超表面、想用FDTD验证PB相位聚焦的小白;第二类是正在复现经典文献、但不清楚具体参数和监视器设置的进阶选手;第三类是已经跑通但聚焦效率死活上不去的苦主。读完你可以理清从单元设计到全局透镜仿真的完整链路,并且明白每个关键参数背后为什么取这个值。

1. 复现目标与整体设计思路

1.1 2016年Science里的Metalens到底做了什么

2016年那篇Science的工作之所以经典,在于它用纯介电材料在可见光波段实现了衍射极限聚焦,摆脱了早期金属天线超表面损耗大、效率低的毛病。文章里展示的金属透镜把纳米柱单元做在玻璃基底上,通过控制每个单元对光场的相位响应,把入射平面波聚焦到一个衍射斑大小的焦点。这件事看起来不难,但当时解决了两个核心矛盾:一是可见光波段需要低损耗材料,二是需要高精度加工亚波长结构。复现的时候我们不需要真的去刻一个样品,但必须在仿真里把这两点体现出来——选对材料折射率、选对结构高度。

这里要说明一下:几何相位(Pancharatnam-Berry相位)并不是2016年那篇论文的首创,但金属透镜能成为超表面代名词,几何相位功不可没。所谓几何相位透镜,就是利用纳米柱的面内旋转角来记录一个与旋转角线性相关的相位延迟,入射的圆偏振光经过不同旋转角度的柱子后,交叉偏振分量的相位等于旋转角的两倍。换句话说,只要把柱子转角编码成空间分布,就能随意塑造波前,聚焦只是最简单的一种应用。

1.2 为什么选几何相位而不是传播相位

超表面实现相位调控通常有两条路:传播相位和几何相位。传播相位靠改变纳米柱的等效折射率或高度来累积相位延迟,需要针对每个位置优化一组尺寸,单元库往往庞大。几何相位干脆很多:所有柱子几何尺寸相同,只改变面内方位角,仿真时只要扫描透射振幅和相位随转角的变化即可。更妙的是,只要单元满足“半波片”条件,圆偏振光的交叉偏振分量透射率几乎不随转角变化,这样聚焦效率就能保持稳定。

从仿真角度讲,几何相位还有一个隐蔽优势:单元扫描维度少。如果是传播相位透镜,你要扫描L、W两个变量,然后找某一组满足目标相位的组合,数据量是二维的;几何相位只要先固定L、W,之后只扫转角θ,一维扫描就够了。2016年那次复现我用FDTD扫了几十组转角,很快就拿到了完整的相位响应曲线。这才是“快”的根源。

1.3 设计指标和仿真边界

复现之前先定目标。我选的指标是:

参数数值说明
工作波长632.8nmHe-Ne激光器常用波长,材料库数据好找
基底SiO₂折射率1.46,透明
纳米柱材料TiO₂折射率约2.43,损耗小,可见光经典选择
纳米柱高度600nm保证相位延迟足够,又不过分难加工
周期400nm小于波长,避免高级衍射,满足亚波长条件
透镜直径20μm仿真内存有限,先用小口径验证聚焦行为
设计焦距40μm对应数值孔径约0.24,衍射极限FWHM约1.6μm

选TiO₂是因为2016年那波超透镜基本都是TiO₂,它在可见光波段透明,折射率高,能把相位控住。周期400nm对632.8nm来说确实够小了,有效避免了高阶衍射。透镜直径20μm看起来不大,但全结构FDTD网格如果是10nm,网格数量接近1亿,内存直接爆掉。所以后面我被迫用了一些技巧,这个等会儿在仿真部分细说。

2. 几何相位原理与单元设计拆解

2.1 PB公式:为什么转角乘以2

几何相位的最基本公式非常短:当一个圆偏振光入射到一个旋转角为θ的纳米柱上时,透射交叉偏振分量会携带一个额外相位Φ = 2σθ,其中σ = +1或-1分别对应左旋和右旋圆偏振。如果你不取交叉偏振分量,同偏振分量不携带任何几何相位,这就是为什么最后要放一个圆偏振分析器来滤出交叉分量。

为什么是2θ而不是θ?这要从Poincaré球上说:光在纳米柱这个“半波片”上从球的一个极点转到另一个极点,经过的路径是球的某条大圆弧,而几何相位等于该大圆弧围成的立体角的一半。当半波片绕光轴旋转θ时,这条大圆弧也旋转θ,但其立体角变化为4θ的一半,于是就是2θ。如果你想快速理解,记住一个结论:把一个半波片旋转θ,圆偏振光经过后,交叉圆偏振项会获得−2θ的相位因子;同偏振项不受影响。

所以只要我们控制纳米柱的θ从0到π变化,就能覆盖0到2π的相位范围。θ和Φ之间会出现一个“旋转两圈才回到原相位”的现象。这也是为什么需要格外注意相位包裹。

2.2 纳米柱怎样才叫“半波片”

纳米柱不是拿来就转的。它必须是一个很小的“半波片”,也就是对入射光的两个正交线偏振分量产生π相位差,并且振幅尽量相等。满足这个条件后,旋转柱子才能高效地把能量从一种圆偏振转换到相反圆偏振,同时产生PB相位。

具体怎么实现?用矩形截面的TiO₂纳米柱。设柱子在x方向的长度为L,y方向的宽度为W,高度为h。由于矩形截面的对称性,x偏振和y偏振在柱子里感受到的有效折射率不同,就会产生相位差。通过扫描L和W,找到一个组合使得透射的两个正交偏振分量的相位差接近π,同时两个分量的透射率都接近1。

我复现时扫描的具体范围是:柱高固定600nm,周期400nm,L从120nm到280nm,W从80nm到240nm,步长20nm。每个尺寸跑一次频域FDTD,用平面波垂直入射,监视器放在柱子下方,提取透射复振幅。最后找到L = 220nm、W = 140nm时,x偏振透射率为0.93,y偏振透射率为0.91,相位差为3.14rad,非常接近理想的半波片条件。注意这里我给出的是自己设备上跑出来的参考值,严谨的复现需要跟着自己环境重新扫一遍,因为材料的折射率色散模型、网格精度都会影响最优尺寸。

2.3 相位离散化与转角映射

透镜每个柱子位置所需的相位由聚焦波前决定。我们设定透镜在z方向、焦点位于正上方,焦距f = 40μm,那么对于透镜平面上的坐标(x, y),为了把平面波聚焦到焦点,需要补偿的光程差对应相位:

Φ(x, y) = -k₀(√(x² + y² + f²) - f)

其中k₀ = 2π/λ₀。这个公式看着复杂,本质就是“球面波相位分布”。因为我们要附加的相位是负的(让波前变成汇聚球面波),所以需要的柱转角θ = Φ/2,但要通过反正切换算到0到π之间。每根柱子只旋转转角,不做尺寸渐变,这就是几何相位透镜和传播相位透镜最大的区别——加工容差友好。

实际布阵的时候,还要处理一个离散化问题:透镜直径20μm,周期400nm,那么沿直径方向有50个单元,总单元数约1963个。每个单元的坐标是(m×P, n×P),m,n为整数,代入上述公式计算转角。然后把这些转角写入GDS版图或者脚本参数化模型。建议所有转角先统一转换成0到π弧度,避免FDTD建模时出现负角度造成的网格异常。

3. 超表面仿真的一步步实操

3.1 工具选型与仿真环境搭建

目前主流超表面仿真工具无非是COMSOL、Lumerical FDTD、FDTD Solutions,以及开源软件。我这次选的是Lumerical FDTD,理由是老牌、资料多、单元扫描和全局仿真可以共用一套脚本。COMSOL虽然也能做,但处理大尺度器件内存压力更大。如果学生党没有正版授权,可以用Ansys的免费试用或者学校集群资源,实在不行也可以用Python+MEEP,不过MEEP学习曲线要陡一些。

仿真环境搭建的核心要点:单元扫描阶段用周期性边界条件,沿x、y方向设置周期P,z方向用PML吸收边界。光源用平面波,入射偏振设为线偏振即可,因为我们要分别算x偏振和y偏振的透射;之后跑完整透镜时再换成圆偏振光源。监视器放在基底下方(出射面)和空气区域,把所有复场都保存下来。

一个容易犯的错:纳米柱材料模型该用“Sampled data”还是“Palik”还是“Sellmeier”?TiO₂在可见光波段折射率大约是2.43,但损耗因子和薄膜制备工艺强相关。论文里常用多晶TiO₂的Sellmeier拟合参数;如果直接用普通玻璃数据,相位扫描结果会差不少。我当时用文献里的拟合系数:

n² - 1 = 3.669n - 0.00972? 这里我记不太清,建议到论文补充材料里直接挖折射率表。总之,不要随手填一个常数n=2.4,色散会影响宽带结果,窄带632.8nm问题不大,但为了严谨还是用色散模型。

3.2 单元结构参数扫描

单元扫描的目标是找到同时满足高透射、半波条件的(L,W)。扫完整个L×W矩阵后,重点画两个图:第一是振幅图,两个偏振方向的透射率都要大于0.85;第二是相位差图,Δφ接近π。我最后选定的L=220nm、W=140nm,就是在这两幅图重叠区域挑出来的。

这里要强调一个容易被忽略的细节:扫描时网格精度至少要10nm,如果网格太粗,相位差误差会超过0.1π,最后聚焦效果直接崩。还有,光源和监视器的距离要足够,至少留500nm以上的间隔,避免近场效应污染结果。扫描得到的数据要保存为复数形式,不要把相位unwrap乱用。

如果是自旋选择透镜(只聚焦一种旋向),单元还要再确认另一个旋向的透射。我验证了LCP入射时,交叉偏振RCP的透射振幅接近1,这保证分束效率合格。

3.3 透镜阵列相位布局与脚本生成

单元确定后,开始生成透镜阵列。我用MATLAB算出每个坐标的相位Φ和转角θ,然后导出一个CSV文件,字段是x、y、θ。Lumerical可以读取CSV循环放置纳米柱模型。

写脚本时一个比较tricky的地方:每个柱子都是一个矩形(L×W),需要先复制一个基础柱,再以底面中心为轴旋转θ。如果直接用矩形,旋转会让矩形超出周期单元边界,导致相邻柱子重叠或者留缝。几何相位透镜其实不要求单元内柱子居中,但仿真为了避免串扰,最好每个柱子都放在自己周期单元的中心,旋转时保持中心不偏移。所以脚本里需要用“group”或“component”定义柱子,旋转中心放底面的几何中心。

接着是算相位布局的关键一步:由于Φ(x,y)的中心在透镜中心,但网格点坐标矩阵的散布是离散的,当坐标离中心越远,相位变化越快。尤其边缘区域,相邻单元相位差可能超过π,这时出现欠采样。判断标准是相邻单元相位差小于π/2,否则焦点会被栅瓣搞坏。我直径20μm、焦距40μm,NA约0.24,边缘最大相位变化率还没超,所以没问题。如果NA做到0.8,周期必须更小或者需要复杂设计。

3.4 全结构FDTD仿真与聚焦提取

全结构仿真模型如下:边长20μm×20μm的透镜区域,四周用PML吞掉散射光,光源是z方向传播的LCP平面波,监视器放在z = 40μm(焦点面)以及z = 30μm、z = 50μm处观察。由于透镜区域有约2000个柱子,网格大约需要1.6亿个网格点,单台16GB内存的机器跑不完。三个办法解决。

第一:把直径缩小到10μm。这个最简单,用来验证聚焦逻辑,但焦距要同步调小到20μm,NA不变。第二:利用透镜的圆对称性?可惜结构在θ旋转点上没有四分之一对称,只有每个转角随机排列,不能用对称简化。第三:用“局部周期近似+角谱叠加”,这不做全波仿真,而是把每个单元看成一个可旋转的半波片,然后把远场叠加起来。这个方法快很多,适合快速验证相位分布,但不能给出严格的近场耦合效应。我先把直径压到10μm跑了全波FDTD,确认聚焦点确实在f=20μm处、FWHM约0.8μm,和衍射极限理论值接近。如果只是为了复现Science文章现象,这已经够了。

焦点提取时,监视器记录E_z和E_x、E_y。圆偏振光入射后,交叉偏振分量RCP在焦点形成亮斑,同偏振LCP分量则被滤掉。后处理时要自己把电场投影到圆偏振基矢:对每个空间点,计算 E_rcp = (E_x - iE_y)/√2。这个式子里的符号取决于定义,很容易搞反。我一开始按某个教材用了(E_x + iE_y)/√2,结果交叉分量怎么调都出不来亮斑,后来换符号才正常。强烈建议先做一个单柱仿真验证投影公式:一个θ=0的半波片,入射LCP,透射RCP且相位2θ=0;若θ=π/2,透射RCP相位变成π。这样一验就知道符号对不对。

4. 常见问题与排查技巧实录

4.1 焦点对不上:相位符号和旋转方向不匹配

这是复现中最常见的坑。几何相位公式里有一个自旋符号σ和旋转方向的关系:如果入射光是LCP,那么交叉偏振RCP的相位是2θ;但如果你把旋转角方向定义反了,比如θ顺时针为正,那么公式会变成-2θ。由于数值仿真中转角是绕z轴正方向还是負方向决定符号。我强烈建议先做一个最简验证:用一排5×5柱子,全部转角θ=0或π/2,分别计算远场;或者干脆用单柱做“相位随转角变化”的小测试,记录θ从0到π每隔15°的交叉偏振相位,看斜率和截距是不是符合2θ。如果斜率为-2,说明光源定义或转动方向取反了。

另外一个类似的问题是透镜相位分布。我们设计Φ = -k₀(√(x²+y²+f²)-f)是“汇聚”相位,但如果实现的时候反号,透镜就变成发散透镜,焦点变成虚焦点,出射光为发散球面波。判断方法:在透镜出射面后放多个平面监视器,如果场最强出现在f位置且旁边有暗环,说明聚焦对了;如果越远越弱、横向展宽,就是反号。

4.2 左右旋偏振投影搞混

在FDTD仿真中,平面波光源的偏振设置必须明确。不同软件的偏振基定义可能不同,Lumerical里光源的polarization angle、phase lag后,输出的电场是复数。做圆偏振基提取时,你需要明确基矢定义。

我推荐一个自检方法:不做透镜,只放一个单独的半波片柱子,入射LCP,投出RCP的透射振幅应该是接近1,相位随θ线性变化;入射LCP,投出LCP的透射振幅应该接近0。如果反过来,说明你的投影公式或者光源手性写反了。这个小测试脚本花20分钟就能跑完,但能省下一个下午的迷茫。

4.3 FDTD内存爆炸的三类优化

全结构仿真当天我宿舍那台16G内存的工作站直接卡死。后来总结出三个有效手段。

第一是缩小孔径,前面说过,这是最简单最直接的办法。第二是降低网格精度,比如把全局网格从10nm放宽到12nm,单元扫描用10nm保证精度,全结构用12nm减少网格数。对于632.8nm波长和280nm宽的柱子,12nm网格也就80个网格每柱,足够了。第三是采用频域单波长仿真,而不是宽谱脉冲;FDTD时域计算宽谱会跑很长的模拟时间,单波长只需要几个周期就可以收敛,时间减少一半以上。

再激进一点,可以用“近场-远场变换”代替大监视器。也就是在靠近透镜出射面记录近场分布,再通过角谱传播到焦点面。这个方法的坏处是忽略了近场区和焦场区的多重散射,但对于开口率不高的透镜误差不大。我用它验证过焦距位置附近强度分布,和全波结果差别在5%以内。

4.4 聚焦效率太低:不是几何相位做不出来,是单元没优化到位

聚焦效率 = 焦斑半径内能量 / 入射总能量。我第一版设计出来的效率只有27%,远低于论文的60%以上。排查后发现元凶有两个:一是TiO₂柱的折射率色散数据不对,导致半波条件没有真正满足,大量能量留在了同偏振分量;二是柱子高度不够,600nm算下来确实能工作,但对宽谱和斜入射的容差差,最好按论文用更高间距。

对于固定波长,如果效率还是低,检查单元扫描结果:透射回波S11是否过大?通常TiO₂柱高600nm时,回波会有一些反射。可以在柱子和基底之间加一个抗反射层,比如厚度在几十纳米的SiO₂渐变层或者添加MgF₂涂层,但在仿真初期不建议过度优化。优先保证柱子的x、y偏振透射率均>0.9且相位差在π±0.05以内。

另一个误区:周期太大导致高阶衍射。前面选了400nm,对632.8nm来说,最大衍射角θ_max = arcsin(λ/(n (P)))? 当周期P > λ 时可能出现高阶衍射。400nm小于632.8nm,理论上没有高阶衍射,但如果NA高,入射角大,还是会有泄漏。建议至少保证P < λ₀/(2NA_max)? 这里不用管细,先按亚波长400nm走。

5. 版图输出与实验前准备

5.1 从仿真布局到GDS版图

如果仿真结果不错,下一步往往需要加工样品。把转角阵列转成GDS文件时,除了坐标和转角,还需要定义多边形层。电子束光刻一般要求多边形是矩形,且每个矩形不能跨越单元边界。由于旋转后的矩形可能超出所在单元,需要先用CAD程序裁剪。

实际操作中,我会用Python的gdspy库生成。每个柱子是矩形,中心在(mP,nP),角度θ。旋转后矩形的四个角可能超出周期区域,所以要在gds里直接保存旋转矩形,曝光时会受邻近效应影响,仿真时需要加邻近修正。在常规周期小于200nm时,邻近效应影响很大;但400nm周期相对较小,转角离散误差可以接受。仿真到流片之间,最好做一个“批量单元”仿真,模拟曝光显影后得到的圆角矩形,看相位变化是否在可接受范围。

5.2 制造容差围绕转角波动

几何相位透镜的容差比传播相位透镜好一点,因为尺寸固定,只需要保证旋转角精确。但旋转角哪怕误差5°,相位误差也只有10°,影响不大;而柱截面尺寸误差会导致半波条件偏离,相位误差可能非线性变大。加工时柱高的误差一般控制±20nm即可,TiO₂刻蚀的侧壁角度也要尽量垂直,否则等效折射率变化大。

我建议复现者如果只是为了做仿真,就不要过度焦虑制造问题;但如果你想写成报告,可以补一个蒙特卡洛容差仿真:让每个柱的L、W在±5nm随机变化,看聚焦效率的标准差。我测下来,5nm误差导致效率下降不到2%,说明设计本身是稳的。

6. 实操心得与后续可玩方向

复现完这个2016年Science金属透镜后,最大的体会是:几何相位超表面做聚焦就像拼积木,单元设计对了,整个透镜八成就成了。难点不在建模仿真,而在于每一个符号、每一处坐标系定义都要前后一致。很多人一上来就跑全透镜仿真,结果焦点不对就怀疑软件,其实第一步的单柱验证没做。

最后分享一个我后来一直用的小技巧:设计任何超表面之前,先在目标波长下跑一个“透过率-相位散点图”,把你需要的相位点标出来。如果这些点都落在高振幅区域,那布局基本可靠;如果有的点落在低振幅区,说明你的离散化采样不合理,需要减小周期或调整柱高。这个检查能避免后期反复重跑全结构。

另外,金属透镜的后续扩展方向很多:可以加上消色差设计,把多个波长同时聚焦;也可以利用几何相位对旋光敏感的特性,做一个双焦点透镜——左旋光聚焦到f1,右旋光聚焦到f2。只要把两个相位分布叠加到同一个超表面上,再分别对应不同旋光,就能实现模式分选。做仿真时,你甚至可以在焦平面加一个圆偏振分析器,直观看到自旋选择性成像。把这个做成一个动态演示脚本,比单纯复现一个透镜有意思多了。

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

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

立即咨询