☰
超表面空间板建模:从角度响应到等效自由空间传播
2026/10/14 7:57:44 网站建设 项目流程

做超表面空间板的建模,第一件事不是打开仿真软件画结构,而是搞清楚这个“空间板”和常见的超表面透镜、超表面波片不是一回事。它要模拟的是一段自由空间的传播效应:一束光经过一块只有几个微米厚的平板之后,各个平面波分量获得的相位变化,要尽可能等于它在真空中多走了几百微米甚至几毫米之后的效果。换句话说,这块板子不是把光“汇聚”到某个位置,而是让后续系统以为光路变长了。

这种器件在光学设计里非常实用:成像系统、光谱系统、干涉系统里经常需要几厘米的空气隙,但整机尺寸又卡得很死;如果把其中一段自由空间用超表面空间板替换掉,光学系统就能做得更紧凑。建模的核心也不只是画单元、扫参数、看相位,而是要准确描述“角度域”的响应,并且要把这种响应换算成自由空间传播函数。下面把我从项目里踩坑、改模型、重新拟合的完整过程整理出来,希望帮你少走几步。

1. 超表面空间板建模:先搞清楚“板”在模型里承担什么

1.1 空间板不是相位板

很多同学会把空间板理解成“一个相位板”,这恰恰是建模中最大的坑。透镜、全息片这类器件,给每个横向坐标上的单元设计一个相位,入射光垂直入射时,透过后相位按空间位置排布;空间板恰恰相反,它的单元是空间均匀的,相位响应不是随x、y变化,而是随入射角变化。它借助平面波角谱,把不同传播方向的光分量加上不同相位,从而等效成延长光程。所以建模的重点在角度域,不在空间域。

举个例子:一束光从物体表面发出,在到达探测器之前,不同方向的光线走了不同距离。自由空间中传播距离d后,一个以角度θ入射的平面波获得的相位是φ = k0·d·cosθ,其中k0=2π/λ。空间板需要做的,就是在保持横向位置不变的前提下,让每个方向的光获得一个接近k0·d·cosθ的附加相位。一块普通的均匀玻璃板当然也有角度响应,但它的色散关系很固定,物理厚度必须接近实际光程,压缩比很低。超表面空间板的价值在于,用亚波长结构去“设计”这种角度响应,让几微米的板子产生几十倍甚至几百倍于自身厚度的等效传播距离。

1.2 建模要交付哪些结果

空间板建模的最终输出不能只是一张“相位随入射角变化”的曲线,哪怕这条曲线看起来和目标曲线很像,也不够。真正可用的建模结果应该包含三样东西:

一是单胞的S参数,包括透射振幅和透射相位,并且要在不同入射角、不同偏振下都能拿到;二是根据S参数提取出的角度色散曲线,通常需要先做相位解卷绕,再和理想相位基准对比;三是误差评估,比如在目标角度范围内相位残差是多少、振幅损耗是多少、压缩比和带宽是多少。只有把这三样都完善了,后面做系统级光学仿真的时候才有底。

2. 建模前的参数体系:材料、单元、压缩比

2.1 从理想传递函数反推设计目标

空间板的理想传递函数可以写成H(θ)=exp(-i·k0·d·cosθ),这里的d就是我们要等效的自由空间距离。建模时一般先不直接仿真无限大的空间板,而是设计一个能被周期性边界描述的单胞,再去模拟不同斜入射角度下的响应。判断单胞好坏的标准很简单:提取出的幅相响应能否在给定角度范围内逼近这个理想传递函数。

设计目标要提前定好三个数:中心波长λ0、最大入射角θmax、等效传播距离d_eff。θmax决定了系统的工作数值孔径,d_eff决定目标相位曲线的斜率。这三个数不是拍脑袋定的,而是来自整个光路的系统设计。举个例子,如果系统里需要替代的空间距离是15 mm,工作波长1550 nm,最大入射角35°,那目标相位曲线就是在0°到35°之间从k0·15mm变化到k0·15mm·cos35°。

这里有个关键点:目标相位不是“绝对相位”而是“相对随角度的变化量”。仿真得到的绝对相位会受到参考面位置影响,所以建模中通常先拟合一个常数相位偏置,再比较角度变化的部分。

2.2 物理厚度和压缩比怎么定

压缩比C的定义是等效自由空间距离d_eff除以空间板的物理厚度t,C=d_eff/t。这个参数直接反映空间板的价值:普通玻璃板C≈1,而超表面空间板通常要做到几十甚至几百。C越高,设计难度越大,因为要在更短的距离内凑出同样大的角度色散。

我在建模时一般先从C=30到C=50起步,先把流程跑通,再逐步提高目标。如果一开始就盯着C=500去做,很容易陷入参数扫描死循环。物理厚度t的选取和材料平台有关系。介质超表面通常用几百纳米到一两个微米的柱状结构,金属-介质混合结构可以更薄,但欧姆损耗会影响透射效率。项目初期可以先不追求极限厚度,选一个现有工艺能加工的结构厚度,比如600 nm到1 μm,然后把d_eff设成30到50倍厚度。这样做的好处是单元结构自由度足够多,仿真迭代快,结果也稳定。

2.3 单元结构与参数化方案

超表面空间板的单元结构不需要像超表面透镜那样在每个横向位置都不同,它更常采用“全同周期单元”的建模方式。一个基本思路是:在基板上做周期性排布的介质柱或介质孔阵列,通过改变柱子的尺寸、间距、高度来调节角度色散。

我常用的单元是矩形截面介质柱,周期P取略小于工作波长,比如1550 nm时P取1200 nm左右,这样入射角到35°以内都不会出现高阶衍射。结构参数通常包括:柱子的长L、宽W、高H、周期P。把这些参数化之后,就可以用脚本做多参数扫描。需要注意,单元周期越小,等效介质描述越准确,但加工难度也越高;周期太接近波长,斜入射时会产生高阶衍射,效率会突然掉下去,相位也会出现明显的跳变。

3. 单元建模仿真:把角度响应提出来

3.1 单胞边界与斜入射端口设置

单元仿真要用周期性边界模拟无限大阵列。x方向和y方向设置周期性边界,z方向设置输入输出端口。斜入射时不能简单用普通周期边界,需要在边界条件中带上Bloch相位因子,也就是根据入射角度在周期边界上施加一个相位差。很多全波仿真软件提供了Floquet端口或周期性端口,直接指定θ和φ角,软件会自动处理斜入射下的边界条件。

我习惯把入射面设在x-z平面,这样极化可以用TE(电场沿y方向)和TM(磁场沿y方向)分开仿真。φ角固定为0°时,θ从0°扫到θmax,步长通常取2°或3°,先看整体趋势;确定候选结构后,再在相位变化剧烈的地方加密到1°。倾角扫描越多,仿真时间越长,但没有必要一开始就用0.5°步长。

端口到结构表面的距离也要统一。因为电磁仿真里的S参数包含端口处的一小段均匀空间传播,不同频率下这段相位会变化。为了让相位参考面位于超表面表面,建模仿真后需要做一次“去嵌入”。很多软件里的端口校准功能就是为了做这件事。如果忽略了这一步,你提取的相位曲线会莫名其妙地带上一个跟入射角相关的线性项,结果完全对不上理论曲线。

3.2 从S参数里拿相位,注意三个细节

在单元仿真完成后,能直接拿到S21的复数形式,也就是透射系数。注意下面三个细节:

第一,幅值不能只看某一个角度,要整条曲线扫描。空间板若只在中心角效率高,在应用里是没法用的,因为实际光场总是包含一定角度带宽。第二,相位要解卷绕。S21的相位是周期性往返的,直接画图会看到-180°跳到180°,不处理就没法跟理想曲线拟合作比较。第三步才是拟合目标相位曲线。

相位拟合时可以先把模拟得到的arg(S21)解卷绕,再减去一个常数偏置φ0,然后和目标相位k0·d_eff·cosθ比较。φ0的选取一般用最小二乘拟合,也就是让残差的平方和最小。不要直接拿仿真在0°角的相位当作φ0,因为这样会浪费一个自由度。

3.3 用相位拟合代替人工目测

人工目测“挺像”在设计报告里没有说服力。我习惯写一个简单的后处理脚本,把仿真相位和理想相位放在同一个坐标系里,算出最大误差、均方根误差。下面是一段很朴素但够用的思路:

import numpy as np wavelength = 1550e-9 k0 = 2 * np.pi / wavelength theta_deg = np.array([...]) # 仿真采样的入射角 phase_sim = np.array([...]) # 经过去嵌入和解卷绕后的 S21 相位 theta = np.deg2rad(theta_deg) d_eff = 5e-3 # 设计目标:等效 5 mm phase_ideal = -k0 * d_eff * np.cos(theta) # 注意符号和参考方向 # 拟合常数偏置 coeff = np.polyfit(np.cos(theta), phase_sim - phase_ideal, deg=0) phase_fit = phase_ideal + coeff[0] residual = phase_sim - phase_fit max_err = np.max(np.abs(residual)) rms_err = np.sqrt(np.mean(residual**2)) print("max error:", max_err, "rad") print("rms error:", rms_err, "rad")

这里把相位曲线写成cosθ的函数而不是θ的函数,是因为自由空间传播的相位本来就随cosθ线性变化。拟合出来的残差曲线如果是一条平缓的曲线,说明结构的角度色散和目标趋势一致;如果残差在某个角度突然跳起来,大概率是出现了高次模、瑞利异常或者相位解卷绕出错。

4. 从单胞到整体:阵列、口径与验证

4.1 空间板不需要逐像素排布相位

这一点和超表面透镜完全不同。透镜建模要生成一张二维相位图,再把每个像素映射到不同尺寸的单元上;空间板的响应是空间平移不变的,所有单元基本相同,不需要横向相位排布。因此,单胞仿真得到的角度响应可以直接视为整块空间板的透射函数。

这个特性大大简化了仿真。我们不需要在三维全波软件里把几百万个单元全部画出来,而可以把目光集中在两个层面:第一,无限大周期结构的角度响应,用单胞+Floquet端口得到;第二,有限口径带来的边缘效应,用光束传播法或者角谱法结合单胞响应去做系统级验证。

4.2 阵列验证的两种可行做法

有时还是要验证“有限尺寸”下的表现,尤其是板和前后光学元件靠得很近时。第一种做法是建一个口径较小但包含足够多个单元的“超胞”,比如10×10或20×20个周期,四周仍然用周期性边界或PML边界。这种做法能反映单元之间的耦合,但超胞太大时计算资源会不够,我个人一般只用来验证结构设计的稳定性。

第二种做法更实用:把单胞仿真得到的幅相响应当作一个角度相关滤波器,在角谱域直接对输入光场做处理。具体来说,把输入光场做二维傅里叶变换得到角谱,再乘上对应角度的S21,再做逆傅里叶变换,就得到透过空间板之后的光场。这种模型速度极快,而且能直接放在光学系统里做成像分析,特别适合做公差分析和前后面元匹配。

4.3 误差指标与效率

空间板设计完,我至少会看四个指标:透射效率、相位残差、压缩比、可用角度范围。透射效率一般用|S21|²在目标角范围内的平均值表示,低于50%的设计要用起来很费劲;相位残差是建模时最要命的指标,因为它直接决定成像质量。经验上,相位残差优于λ/20,也就是约0.3 rad时,对多数成像系统是够用的;如果要做干涉测量,最好控制在λ/40以内。

这里要特别提醒:相位误差和效率常常是矛盾的。为了在更大角度范围内凑出理想角度色散,单元的谐振可能越做越强,随之而来的是损耗变大。所以建模过程中不要只追求“相位完美”,而是要在同一张图上同时看效率曲线,把两个指标一起权衡。

5. 常见问题与排查思路

5.1 仿真相位和理想曲线总是差一个线性项

这是最常见的坑。表现是:你扫出来的相位曲线很平滑,但和目标曲线相比总有一个随cosθ变化的固定偏差。通常原因就是端口参考面没有统一,或者是斜入射端口校准没有做对。解决方法是先在0°入射角下做一组不同参考距离的仿真,确认相位随端口距离的变化关系,再去对目标曲线做常数偏置拟合。如果差的是一个“随cosθ线性项”而不是常数,还要检查是否把入射角定义成了与法线的夹角还是与界面的夹角。

5.2 斜入射时相位在某个角度突然跳变

跳变点通常对应高阶衍射的出现。周期P太大或者工作波长太短,会让某些高阶衍射波变成传播模式;一旦出现这种模式,能量会突然分走一部分,透射相位也会出现不连续。遇到这种情况,先检查P/λ是否满足避免高阶衍射的条件,通常要求P小于λ/(1+sinθmax)。如果确实是衍射模式导致的,把单元周期缩小即可。

5.3 TE和TM响应差异过大

空间板在成像系统中通常需要同时工作在两个偏振,或者至少对随机偏振有稳定的表现。如果TE和TM的相位曲线差得太多,设计就不能算成功。排查时先看单元结构是否具有对称性。采用正方形截面柱子或者交叉对称结构,可以让0°入射时两个偏振响应一致;但斜入射时TE和TM天然会不同,这是物理上的固有差异。建模时应该分别给TE和TM做误差评估,必要时把某一项的权重降低,但绝不能只仿真一个偏振就草草收场。

5.4 全阵列仿真内存爆炸

如果非要做几十微米级口径的全阵列三维仿真,内存很容易爆。我踩过几次坑之后,现在的方法是:先用等效介质模型跑系统级设计,确定关键参数;再用单胞Floquet仿真提取精确S21;最后用角谱法做系统级验证。除非要做边缘应力分析,否则没有必要让三维全波仿真直接吞下整个阵列。

6. 最后再分享一个建模习惯

做超表面空间板的建模,和做普通超表面透镜最大的区别,在于你必须时刻记住“角度响应”而不是“空间相位分布”。很多刚开始做的朋友改了几十版结构,就是因为在0°入射下相位很好,但角度扫描一开就全崩了。所以我建议,从第一个单元建模起就把角度扫描当成默认流程,哪怕一开始只扫几个点,也要保证设计目标曲线始终挂在模型旁边。

另外,模型文件里最好把目标相位曲线用注释或者后处理公式写清楚。这样别人拿到你的模型,第一眼看到的就是“该器件在5 mm等效距离、35°入射范围内,目标相位为k0·d_eff·cosθ”,而不是一堆没有任何物理意义的几何尺寸。项目做到后期,这种细节能省下大量沟通成本。实验测回来的S参数也别忘了和仿真放在一起解卷绕,实测结构总有工艺偏差,那才是建模真正要服务的对象。

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

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

立即咨询