
这篇2019年APL文章做的中红外偏振成像超构透镜是我见过思路很干净的设计一个超表面两根正交偏振通道各聚焦各的天然就能拿来做偏振相机。复现这样的结构FDTD仿真是最关键的一步也是花时间最多的一步——网格、边界、相位库、效率口径每一处都可能让你跟论文数据对不上。下面我把从选文、建模、仿真到避坑的完整链路写一遍适合正打算做超表面仿真、想复现金属透镜模型的同学照着走一遍。1. 为什么选这篇论文偏振成像与偏振复用超表面1.1 论文解决的核心问题复现之前我一直觉得偏振成像是个重装备领域。传统方案要么在镜头前加旋转偏振片要么在探测器上贴像素级偏振阵列——前者要机械运动后者要特殊工艺而且在中红外波段可选的商用器件少得可怜。这篇2019年APL文章的思路完全不同只用一层超表面就把x偏振和y偏振分开处理让两者各自聚焦到不同位置从而在一个普通探测器上同时获得两个偏振通道的图像。这个思路等价于用空间分光替代器件堆叠。当一束包含多种偏振状态的光经过这个超构透镜时x偏振分量被送到焦点Ay偏振分量被送到焦点B探测器上会出现两个并排的像点。后续只要在数据端做简单的像素区分就能得到两个偏振态各自的图像从而提取目标的偏振差异信息。中红外波段做这件事意义很大——无论是气体检测、热成像还是工业视觉很多场景里目标和背景的温度对比不明显但偏振特征的对比却很清晰。对我来说复现这篇论文的最大吸引力在于它的物理模型非常明确不依赖复杂的逆向设计或神经网络靠的是经典的传播相位加双折射柱的相位复用。这意味着只要FDTD仿真做得够细结果应该能稳定复现。这正是检验自己超表面仿真能力的好题目。1.2 复现前要扫清的基础概念动手之前必须先想清楚三个概念否则后面建相位库时一定会糊涂。第一个是传播相位。光通过一根高折射率纳米柱时会积累额外的相位延迟近似为φ ≈ 2π·n_eff·h/λ其中n_eff是柱子的等效折射率h是柱高。柱子越粗等效折射率越高相位延迟越大。要想覆盖0到2π的完整相位范围柱高要有足够厚度经验公式是h ≈ λ/(n_pillar − n_cladding)。第二个是双折射柱。当柱子截面不是圆形而是矩形时x方向宽度Lx和y方向宽度Ly可以独立调制对应偏振态感受到的等效折射率。也就是说同一根柱子对x偏振和y偏振分别给出两个不同的相位延迟。这个一柱两相位的自由度正是偏振复用超构透镜的核心。第三个是相位分布本身。金属透镜的聚焦相位通常采用双曲型分布φ(x,y) −(2π/λ)(√(x²y²f²) − f)目的是让所有位置的光线到达焦点时干涉相长。偏振复用版本就是对这个公式做两次赋值x偏振用焦点位置A的相位分布y偏振用焦点位置B的相位分布然后在每个栅格位置找到一个(Lx, Ly)组合让它同时满足这两个相位要求。这三个概念串起来就是先做单元结构FDTD扫描得到柱子尺寸 → 双偏振相位的映射表再根据目标相位分布反查这个表最后把整片透镜放进FDTD里验证聚焦效果。2. 从论文图表到仿真模型结构参数反推2.1 材料体系选型中红外的约束比可见光多超表面仿真第一步是定材料。可见光波段大家习惯用TiO₂、Si₃N₄但到了中红外情况完全不同。论文标题里写着Mid-infrared我复现时把中心波长定在4 μm附近这个波段下很多常见材料要么吸收严重要么色散数据不全。我在复现时选的是硅柱体系单晶硅在中红外3~5 μm窗口内吸收很低折射率约3.4加工工艺也成熟。如果你的目标论文工作在8~14 μm长波红外硅就不行了得换锗或ZnSe因为硅在超过7 μm以后多声子吸收会迅速变强。材料换掉之后单元结构的尺寸要整体按波长比例缩放相位覆盖公式依然适用这一点可以通用。材料确定之后别偷懒用固定折射率。FDTD仿真软件里一般自带Palik等实测色散数据建议直接选用。硅在4 μm附近的折射率跟可见光波段的3.48并不是同一个值后面我会讲这个差异如何悄悄毁掉你的焦点。2.2 纳米柱结构与单元周期估计论文里如果给了SEM图或者结构示意图通常能直接读出设计参数。最典型的偏振复用结构是矩形截面纳米柱阵列三个关键参数周期P、柱高h、柱宽Lx和Ly。先说周期。周期必须足够小避免出现高阶衍射一般取工作波长的0.5~0.7倍。我复现的设置是λ 4 μm、P 2.2 μm这保证了透射光里只有零级衍射。柱子最宽尺寸不能超过周期太多否则相邻柱子之间没有工艺余量我扫的范围是0.3~1.8 μm。柱高要满足2π相位覆盖。用前面的估算式h ≈ 4/(3.4−1) ≈ 1.7 μm考虑到等效折射率的实际变化范围更窄通常要留余量。我最后固定在2.0 μm这个高度下柱子有一定深宽比FDTD里网格要稍微加密才能收敛。2.3 论文没给全参数时的处理办法复现时最尴尬的情况是论文正文只写了周期和材料柱高藏在补充材料里甚至根本没写。我的处理思路是先用渲染后的SEM图按比例尺测量柱子尺寸分布范围大致确定Lx、Ly的扫描区间然后固定其他参数把柱高从1.5 μm到2.5 μm以0.1 μm间隔做几组单元仿真观察相位覆盖范围是否超过2π、透射率是否保持在90%以上从中选出最优高度。这一阶段我的心得是千万不要追求完全复现论文参数。只要几何体系一致、物理机制一致柱高差个0.1 μm并不会改变设计方法反倒能让你对结构敏感度有更直观的认识。真正要严格对齐的是材料色散和工作波长这两者错了整条链路都会偏。3. 单元结构FDTD扫描相位库是这样建起来的3.1 单元仿真的边界条件、光源与监视器布局单元仿真的目的是获得不同尺寸柱子对x/y偏振光的透射率和相位这个映射。它假设每个柱子都处于无限周期阵列中因此仿真区域只需要一个周期单元x/y方向用周期边界或Bloch边界。这里我强烈建议用Bloch边界而不是简单周期边界因为Bloch边界支持带角度的入射光后续如果要仿真斜入射或聚焦光束的局部等效不用重做单元库。z方向上下用PML吸收边界PML离结构至少半个波长以上避免反射回来干扰结果。光源用平面波正入射放在结构上方。监视器放在衬底内部、结构下方记录透射场的复振幅。为了方便提取相位需要同时算一个没有柱子的参考单元用参考单元的透射场做归一化得到的复透射系数t的幅角就是柱子引入的额外相位。我自己复现时的单元仿真参数做了一个表方便你对照参考设置项我的取值说明仿真区域2.2 × 2.2 μmz方向10 μm单个周期单元x/y边界Bloch周期边界模拟无限周期阵列上下边界PML 8层吸收辐射波光源平面波正入射3.5~5.5 μm宽带一次算完可后处理多个波长透射监视器柱子底部以下1.5 μm处防止倏逝场干扰网格覆盖区30~50 nm覆盖整个柱子柱体内部必须加密自动关断1e-7高Q结构不能使用默认1e-5网格这块多说一句。中红外虽然波长是4 μm但高折射率硅柱内部有强烈的场局域柱子边缘的拐角处电场梯度很大。我用的是30~50 nm的局部加密网格普通区域用200 nm。这样算下来单元仿真的网格总数其实很小单次FDTD在GPU上几十秒就能跑完这也是单元扫描敢做几千个组合的原因。3.2 网格收敛性测试怎么算合格很多第一次做超表面仿真的朋友拿到结果就直接用从没验证过网格是否收敛。我这次专门做了一组对比同样一根柱子分别用100 nm、50 nm、25 nm的网格跑记录透射率和相位。结论很清楚透射率对网格不算敏感100 nm和25 nm的差异大约1%~2%但相位对网格很敏感100 nm和25 nm之间能差出20°~30°。对一个NA不高的小口径透镜来说20°的相位误差可能只让效率下降几个点但如果你做的是离轴双焦点、两套相位库叠加这个误差会在某些位置被放大最终焦点位置偏移甚至出现鬼像。我的收敛标准是把网格从50 nm细化到25 nm柱子的相位变化小于1°约0.006 rad同时透射率变化小于0.5%。达到这个标准后我才认为50 nm网格可用。实际扫描时我用35 nm网格作为精度和速度的折中。3.3 相位库扫描、去包裹与插值单元扫描本质是一个二维参数扫描在Lx、Ly的取值范围内把所有组合都跑一遍FDTD。每组仿真都能得到t_xx、t_yy两个复透射系数对应x偏振入射时的x偏振透射和y偏振入射时的y偏振透射。对纯矩形柱而言交叉偏振项通常可以忽略但扫描时最好还是记录完整的光学响应免得设计时想做旋转柱结构发现没有数据。扫描步长的选择很关键。如果直接用0.01 μm步长从0.3扫到1.8 μm那就是150×15022500组仿真每组哪怕只算30秒也要近8天谁也扛不住。我先用0.05 μm步长粗扫总共约900组跑一晚上出结果再用0.02 μm步长在透射率大于90%的区域内局部加密。这样整体控制在2000组以内兼顾精度和成本。仿真跑完后的数据处理很重要这步决定了相位库的质量。首先要做相位去包裹FDTD直接输出的相位是−π到π的折叠值如果直接插值2π边界处会出现人为跳变。我通常用numpy的unwrap对每一行、每一列分别做一维展开再对照相邻点的连续性检查一遍。其次要建立二维插值函数以(Lx, Ly)为自变量分别插值出透射率和相位场。插值方法我推荐二维三次样条线性插值在透射率急剧变化的共振区会产生明显误差。我的体会是相位库是整个复现工作的地基。地基没打牢后面整镜仿真做得再精细也是白费。所以我会额外做一步可视化——把透射率以色图的形式画出来低透射区域一眼就能看出来设计时主动避开。4. 双偏振焦点设计与整镜FDTD仿真4.1 目标相位分布计算与模型生成相位库建好之后设计整片透镜就是纯粹的查表工作。我先确定透镜参数口径30 μm半径15 μm焦距50 μm这样NA大约是0.3在4 μm波长下衍射极限焦斑FWHM大约7 μm左右是一个不难验证的量级。为了实现偏振成像我把x偏振的焦点设计在(8, 0)y偏振的焦点设计在(−8, 0)。两者关于中心对称这样前方偏振片旋转180°时两个焦点位置互换物理上更合理。每个位置的柱子需要同时满足两个相位条件我写了一段Python来生成目标相位分布并完成查表import numpy as np lam 4.0 # 工作波长, μm f 50.0 # 焦距, μm P 2.2 # 单元周期, μm xs np.arange(-15, 15 P/2, P) ys np.arange(-15, 15 P/2, P) X, Y np.meshgrid(xs, ys) def target_phase(fx, fy): r np.sqrt((X - fx)**2 (Y - fy)**2 f**2) return (-2*np.pi/lam * (r - f)) % (2*np.pi) phi_x target_phase(8.0, 0.0) # x偏振目标相位 phi_y target_phase(-8.0, 0.0) # y偏振目标相位拿到每个位置的(phi_x, phi_y)之后在相位库中搜索透射率大于90%且与目标相位相差最小的(Lx, Ly)组合。搜索时要注意由于柱子的相位响应不是完全独立的实际能覆盖的(φx, φy)二维区域有限部分位置可能找不到完美解。我的策略是允许一定误差但优先保证透射率相位误差控制在0.15 rad以内。生成完整个透镜布局后一定要把每个位置的(Lx, Ly)保存下来并且画一张分布图检查有没有异常跳变点。如果某个点到周围邻居的差值特别大说明查表时选错了分支需要回到相位库重新处理。4.2 整镜仿真的规模控制与近似策略很多人卡在整镜仿真的算力上。口径30 μm、波长4 μm的透镜FDTD仿真区域大约是30×30×12 μm。如果全域都用40 nm网格网格数会逼近2000×2000×300直接爆显存。我的做法是分层网格柱子层约2 μm厚用40 nm网格衬底和空气区域用200 nm网格中间用渐变网格过渡。这样网格总数能控制在4000万~6000万量级单卡GPU跑一次完整仿真在2~4小时左右属于可接受范围。如果内存实在紧张可以把透镜口径缩到20 μm再验证因为偏振成像验证的关键是相对位置、相对效率而不是绝对聚焦质量。还要提醒一点整镜仿真里的光源不能再用单元仿真时的无限周期平面波而是要用覆盖整个透镜口径的宽平面波光源尺寸比透镜大一圈避免边缘衍射造成的影响。如果需要算聚焦效率光源功率要提前归一化这样后面统计焦点功率才有意义的基准。4.3 焦点监视与聚焦效率、偏振消光比计算整镜仿真的输出监视器建议放两类。第一类是z方向一列二维监视器覆盖从透镜表面到焦点后方的整个区域用来确认焦点在哪第二类是在预估焦点位置附近放一个小范围的三维电场监视器用来精确统计焦斑能量。找到实际焦点后我测量的指标有三个。第一个是焦斑FWHM和理论衍射极限λ/(2NA)对比——如果偏差超过20%基本可断定相位库或材料设置有问题。第二个是聚焦效率我采用的口径是焦点处半径为衍射极限半径的圆内功率 / 入射到透镜口径的总功率。第三个是偏振消光比具体做法是用x偏振光源入射时统计x焦点处的能量与y焦点位置处能量的比值再用y偏振光源入射做交叉验证。消光比能直接反映两套相位通道之间有没有串扰是偏振成像器件最核心的指标之一。我这次复现得到的x焦点和y焦点位置都在设计坐标附近偏差在半个波长以内焦斑FWHM约8.1 μm两个正交偏振通道的消光比约15 dB。这个量级和论文里报道的趋势一致说明整条设计链路走通了。5. 复现中的坑与完整排查链路5.1 相位跳变导致柱子选型翻车第一次做查表时我直接在折叠相位上做最近邻搜索结果透镜布局图里出现大量散射状噪点。物理后果是焦斑周围出现明显的杂散光晕聚焦效率比预期低了将近一半。排查过程是这样的。我先检查了目标相位分布本身发现没问题接着画出布局图发现异常点集中出现在相位接近0和2π的边界区域。原因很快定位FDTD输出的相位经过unwrap之后虽然连续了但相位库不同分支之间可能存在多解——同一组(φx, φy)在库里有多个对应的(Lx, Ly)都满足条件我选的解跳到了透射率低的共振分支。修复方法是在搜索算法里加两个约束第一相位误差优先但透射率低于90%的候选直接排除第二对每个位置的解和周围已选格点做中值滤波抑制孤立跳变。改完之后布局图干净了很多焦斑光晕也消失了。这个教训告诉我相位库的可制造性和电气性能同样重要查表结果必须可视化检查。5.2 材料色散模型不同焦点漂移几十微米另一个大坑出在材料上。第一次整镜仿真时我贪方便直接在材料库选了固定折射率折射率选项n3.48。仿真出来的焦点位置比设计值偏了将近15 μm焦距明显变长效率也上不去。问题的本质是硅在4 μm波段的折射率并不是3.48实际值约3.42左右。单元相位库是基于3.48建的但整镜仿真如果用同一套错误折射率按理说应该能对上。问题出在我单元仿真用了色散材料、整镜仿真却用了固定折射率两段流程的基准不一致。相位库的中心条件和整镜仿真的物理条件必须严格一致否则积累的相位误差在边缘位置会超过π焦距自然漂移。解决方法是统一材料模型。我在Lumerical里对硅和衬底都改用Palik插值数据单元库重新扫了一遍整镜仿真再跑一次焦点回到设计位置附近。这也印证了我之前的观点材料色散不是小事尤其在标称宽带或特定波段的论文里固定折射率几乎必然导致定量对不上。5.3 单元周期假设失效近共振耦合效应单元仿真假设每个柱子都处在完全相同的周期环境中但真实透镜里不同位置的柱子尺寸差异很大相邻格点的耦合效应不可忽略。我这次验证方法是取透镜中一个典型局部区域把其中3×3个周期单元一起放进FDTD用周期边界跑一次比较阵列中柱子的实际响应和单元库预测值。结果发现凡是柱子尺寸靠近共振分支透射率快速变化区域的位置阵列仿真和单元库预测的相位偏差能到0.3 rad以上远离共振的位置偏差不到0.05 rad。所以设计时我有意避免让查表结果落在透射率曲线的陡峭区宁可选择透射率略低但是相位更稳定的区段。这就是为什么单元库扫描时不要只记录最优透射点要把整个参数空间的响应都存下来给设计留出取舍余地。5.4 PML、光源与监视器的小陷阱最后几个不起眼但能毁掉结果的细节。PML离结构太近会导致反射波叠加进透射监视器我的经验是PML内边界距最近的柱子至少1 μm以上。另外透射监视器如果紧贴在柱子底部界面会捕捉到大量倏逝波成分导致提取的相位反常变化我把监视器下移到衬底内部1.5 μm后相位才稳定。还有一个我差点忽略的点宽带平面波的光源偏振方向必须严格沿x或y轴有一点倾斜角度都会引入交叉偏振噪声进而污染消光比数据。6. 复现结果怎么对标论文以及我的几点体会6.1 对比口径与常见差异源复现论文时最头疼的其实是口径对齐。同样一个聚焦效率不同论文定义完全不同。我在对标前先把对比表的口径写清楚指标我的计算口径论文常见口径差异可能来源聚焦效率焦斑圆内功率/入瞳功率焦斑内功率/透过透镜功率口径分母不同焦斑FWHM焦点平面沿x方向强度半高宽有时按圆环平均一维/二维统计差异偏振消光比本征焦点/交叉焦点能量比可能用远场强度比近场/远场口径差异和论文数值对比时我会先把论文补充材料里的效率定义找出来再把自己的数据按同样口径重新算一遍。很多时候差异并不是仿真错了而是统计方式不同。6.2 超表面FDTD复现的几条经验跑完整个复现流程我最大的感受是FDTD本身不是瓶颈瓶颈在于你有没有一套可靠的数据管理习惯。单元扫描产生的几千个数据文件必须带版本号、带材料说明、带网格参数否则一旦发现结果不对根本不知道回溯到哪一步。第二点经验是速度优先的探索和精度优先的验证要分开。粗扫描用RCWA或FDTD都行目的是快速找到可用参数区间精验证再上全波FDTD。我这次的单元库粗扫用的是FDTD但如果你要扫上万组结构强烈建议先学会RCWA这类更快的方法筛一遍。第三点是仿真日志要当做论文来写。每次修改了什么参数、为什么修改、结果有什么变化全都记录下来。复现出问题的时候有日志的排查时间能缩短一半以上。最后再分享一个小经验我现在把单元仿真的复透射系数存成带版本号的CSV文件整镜仿真前会先跑一组基准单元验证当前版本的相位库是否完好。这个习惯帮我避免了很多次因为误改参数而白跑一整晚整镜仿真的尴尬。做超表面仿真稳定性比创意重要数据流比单次运行重要。