拓冰建站拓冰建站
首页 / 资讯中心 / 正文

FDTD光栅仿真:衍射阶数与反射相位提取全解析

做光栅仿真的人十有八九都遇到过这个困惑FDTD里算出来的衍射效率挺正常但一涉及“相位”就抓瞎。尤其是反射型光栅不同衍射阶数之间到底差了多少相位、这个相位怎么从仿真里准确提取出来直接影响后面超表面设计、波前调控、偏振转换这些活儿能不能落地。这篇就专门聊聊FDTD仿真中光栅衍射阶数与反射阶数相位这个话题把原理、设置、提取方法和踩过的坑都捋一遍。这篇内容既适合刚接触FDTD、对着衍射级次一头雾水的同学也适合已经在做超表面或衍射光学元件、但被相位提取细节折磨过的工程师。我会尽量用实际可复现的参数和操作细节来讲而不是停留在“多试试就出来了”的层面。1. 先把衍射阶数和反射相位这层窗户纸捅破1.1 衍射阶数是怎么冒出来的任何周期性结构只要周期跟波长可比拟就会产生衍射。这个道理从光栅方程就能看明白[ \sin\theta_m \sin\theta_i m\frac{\lambda}{\Lambda} ]其中m就是衍射阶数取整数0±1±2……θi是入射角Λ是光栅周期λ是波长。右边一旦算出来绝对值超过1就说明这个阶数不传播了变成倏逝波能量全憋在结构表面附近。很多人第一次用FDTD算光栅时习惯性地以为“我设置一个周期边界就完事了”然后一看远场分布就懵——为什么角度对不上为什么透射效率加起来不是100%大概率是没把衍射阶数想明白。周期决定阶数数量波长决定阶数能不能传播入射角决定各阶次的出射方向。这三者是联动的想只调其中一个就把其余两个撇开必然出错。有个实用的经验法则当Λ/λ比较小比如小于1.5时通常只有0阶和±1阶传播高阶级次都截止掉了当Λ/λ很大时高阶数量明显增多远场能量分布会非常离散。做光栅设计时要看清楚目标阶次是哪个然后反推周期范围别一上来就乱扫。1.2 反射阶数相位为什么关键反射阶数相位听起来学术其实落到工程上非常直白设计反射型超表面时你要让不同位置的“像素”对入射光产生不同的相位响应从而形成波前调制。每个像素本质上是亚波长尺度的光栅或纳米柱它反射出来的0阶光或者某个特定衍射阶次的相位就是这个像素能给的“设计自由度”。这里要特别强调一点做超表面波前调控时一般关心的是特定衍射阶次的局部相位而不是把所有阶次的能量加在一起看一个“总反射相位”。总反射相位没有设计意义真正有意义的是目标级次比如反射0阶或-1阶对应的复振幅相位。FDTD里能不能把这个目标级次的相位干净利落地提取出来成为整个设计的命门。我记得第一次做反射型梯度光栅时就是把所有反射光的复数场加起来求了一个总相位结果跟理论设计值差了十万八千里。后面才意识到各阶次之间是“分洪”的每个阶次有自己的传播方向和相位必须用空间傅里叶分解把各阶次剥离开来。1.3 FDTD为什么适合算这类问题FDTD在光栅仿真里几乎成了默认工具原因不外乎三点一是它对结构形状几乎没限制矩形、圆孔、斜台、任意截面都能建二是它直接在时域里推进一次宽谱脉冲就能拿到宽波段响应三是它天然处理近场和远场的变换衍射远场分布可以直接投影出来。但FDTD也有“软肋”。相位信息藏在所有时间步的场演化里看起来每个监视器都能输出相位但不同的监视器位置、不同的提取方式拿到的相位定义完全不一样。有的人用频域监视器直接看场相位有的人用透射/反射监视器看复系数还有的人导出近场重新做傅里叶变换。这几种做法在概念上都是对的但在具体实现细节上稍有疏忽相位结果就相差π甚至完全没意义。所以说用FDTD算光栅衍射效率容易算反射阶数相位需要多一点讲究。下面我把整套流程拆开讲。2. 建模仿真前必须想清楚的几个核心配置2.1 周期、材料与结构尺寸的设定逻辑开始建模时先别急着画结构。先回答几个问题这个光栅是透射式还是反射式基底材料是什么工作波长范围是多少目标衍射阶数是哪一个以我常用的反射型介质光栅为例工作波长1550 nm基底硅Si光栅层用非晶硅a-Si周期Λ900 nm占空比f0.5光栅高度h500 nm。这个参数组合下1550 nm波长对应Λ/λ≈0.58严格来说允许的传播阶数很有限反射方向通常只有0阶和-1阶如果斜入射的话可能出现多个。这样反而好办级次少相位提取相对干净。材料设置在FDTD里要注意一点折射率虚部不能忽略。硅在1550 nm附近的吸收很小但虚部仍然存在。如果你只想看反射相位趋势虚部设成0影响不大但如果你要对比实验实测效率吸收必须算进去。我一般用Palik或Sellmeier模型来自动拟合材料避免手动填一个常数折射率带来的误差。结构尺寸上光栅高度是影响反射相位最敏感的参数。稍微改个20 nm0阶反射相位能偏出去几十度。所以扫参时高度步长得够细最好5~10 nm一档起步先粗扫定位再细扫精修。2.2 网格精度与边界条件的正确组合FDTD是空间离散的算法网格尺寸直接决定数值精度和内存开销。对光栅结构来说一个核心原则是结构的最小特征尺寸内至少要保证3~5个网格。如果你用的是矩形光栅齿齿的宽度方向最好有4个以上网格否则等效折射率会偏得离谱。推荐的做法是在光栅层局部使用网格覆盖区域mesh override region把网格加密到10 nm或更细而在基底和空气区域用默认网格。这样能兼顾精度和速度。我见过有人在全局把网格设到2 nm结果一个二维仿真跑了一整夜其实完全没必要。边界条件方面反射型光栅的典型配置是x方向周期方向Bloch周期边界条件y方向可选周期边界或PML取决于结构是否有y方向周期z方向传播方向上下用PML吸收边界这里有个大坑Bloch边界条件需要指定入射角度而且角度是以复数形式定义的。如果你用平面波斜入射扫描不同角度时Bloch边界里的k分量必须跟着一起变。很多人偷懒只改光源角度不改边界条件的波矢结果出来的相位一塌糊涂还以为是结构问题。2.3 光源类型与监视器位置的取舍算反射结构时我推荐用总场散射场光源TFSF或者直接用平面波光源配反射监视器。平面波的好处是宽谱一次性搞定缺点是它同时照亮了整个模拟区如果PML吸收不理想会有很讨厌的边缘反射。监视器方面反射监视器应该放在光源上方、结构上方足够远的位置至少要离开结构表面几个波长的距离。为什么因为倏逝波的振幅随距离指数衰减监视器贴太近会把不传播的高阶倏逝模式也算进去而它们根本不会传到远场。反射监视器一般要放到zλ以上但也不能太远太远了PML会开始吸收监视器区域外的场会被截断。远场监视器是用来做衍射阶数分解的它内部会把近场做傅里叶变换输出各角度的远场强度可以看各阶次角度和能量。不过要注意远场监视器输出的“相位”是投影到无限远处的相位和近场复振幅的相位不是同一个东西。提取衍射阶数相位时最好还是用近场监视器数据自己做空间傅里叶变换。3. 反射阶数相位的提取实操流程3.1 从监视器原始数据到复振幅级次分解这是全篇最核心、也最容易翻车的一节必须掰开了讲。假设我们做了一个二维反射光栅周期方向是x周期为Λ在反射监视器平面上取到电场Ex(x, z0)。这个场在x维度上是周期的可以展开成傅里叶级数[ \tilde{E}m \int{-\Lambda/2}^{\Lambda/2} E_x(x, z_0) \exp\left(-i\frac{2\pi m}{\Lambda}x\right) dx ]m就是衍射阶数。取|m|对应的能量百分比就是对应该阶数的反射效率取angle(Ɛm)就是对应该阶数的反射相位。这里的相位基准是监视器所在平面z0所以如果你换了监视器位置得到的相位会整体偏差一个传播相位kz·Δz这在后面跟理论模型对比时要还原。有人问为什么不用FDTD自带的“傅里叶变换监视器”因为傅里叶变换监视器给出的复数场是按全局坐标投影的如果入射角非零它输出的是以入射角为中心的角度谱而不是精确的阶次分解。所以更稳妥的做法是用频域功率监视器frequency-domain field monitor导出近场再在脚本里自己做一次空间傅里叶变换。Lumerical的脚本里可以直接用傅里叶变换函数也可以把数据导出到MATLAB/Python处理。我在实操中发现做这个空间傅里叶变换时x方向采样点必须覆盖整数个周期否则会出现严重的频谱泄漏各个阶次互相串扰。最稳妥的办法是让监视器的x方向跨度恰好等于一个周期Λ并在脚本里均匀采样。注意均匀采样的点数量要足够多至少200个点以上网格密度不足时高阶信息会丢。3.2 各衍射阶次的相位归一化与参考面换算拿到各阶次的复振幅后相位往往直接带着一个线性的传播因子。这个因子来自参考面的选取。通常我们想把相位定义到结构表面z0那么就要把监视器z0处的相位减去k_z·z0换算回去。公式很简单[ \varphi_m^{surface} \varphi_m(z_0) - k_{z,m} z_0 ]其中k_z,m sqrt( (2π/λ)^2 - (k_x 2πm/Λ)^2 )取实部即为传播波矢。如果这个阶次是倏逝波k_z,m是虚数相位定义就不太有意义了。这点尤其容易忽略提取级次相位前先检查一下这个级次的k_z,m是否实数不是实数就别折腾了。还有一个归一化的细节通常我们在意的是相位随结构参数的变化趋势不是绝对相位。所以只要每次保持参考面一致就可以横向对比。比如扫描光栅高度h从h200 nm扫到600 nm每个h都计算0阶反射相位画出一条“相位-h”曲线。这条曲线才是后面做超表面像素相位匹配的直接依据。实际操作时我习惯同时输出效率与相位。因为当某个结构参数下目标阶次的效率掉到极低比如1%以下提取出来的相位噪声会很大几乎不可信。效率低于5%的相位数据点建议直接标灰或者丢弃别硬画在曲线上误导自己。3.3 用Python做阶次分解的一个示例脚本FDTD软件里内置的脚本语言通用性差我一般这样处理在FDTD里用频域监视器导出近场数据然后在Python里做分解。这里给一个最小可用的参考脚本。假设你导出的是电场分量Ex复数x坐标数组是x_array监视器位置是z0周期是L。代码如下import numpy as np def get_diffraction_order_fields(Ex, x_array, L, m_list, wavelength, n_inc, theta_inc, z0): # Ex: shape (Nx,) complex # x_array: shape (Nx,) in meters k0 2 * np.pi / wavelength kx_inc k0 * n_inc * np.sin(theta_inc) # 均匀采样假设 dx x_array[1] - x_array[0] results {} for m in m_list: # 空间傅里叶级次投影单周期内积分 exp_term np.exp(-1j * 2 * np.pi * m * x_array / L) Am np.sum(Ex * exp_term) * dx # 归一化按周期长度归一 Am Am / L # 反射波的纵向波矢 kx_m kx_inc 2 * np.pi * m / L kz_m np.sqrt(k0**2 - kx_m**2 0j) if np.imag(kz_m) 1e-10: # 倏逝波不提取 results[m] None continue # 参考面换算到z0 phase_surface np.angle(Am) - np.real(kz_m) * z0 amp_surface np.abs(Am) results[m] {amp: amp_surface, phase: phase_surface, kz: np.real(kz_m)} return results这里的核心是空间傅里叶级次投影直接把近场按衍射阶次“拆开”比远场监视器更干净。参考面换算是为了把相位统一到结构表面方便和理论公式对比。要注意的是这个脚本假设监视器上的场已经收敛、网格间隔均匀。如果监视器的x方向范围不止一个周期你要么只取一个周期的子区间要么用完整的k空间采样理论做加窗处理。最稳妥的做法其实是从头到尾只用一个周期的模拟区这样监视器导出的一定是单周期场。3.4 相位连续性问题与算法处理相位是个循环量范围在(-π, π]之间。扫描参数时相位往往会连续跨越π或-π这时绘图会出现锯齿状跳变看着像噪声但其实只是2π卷绕。处理办法就是“解卷绕”在Python里用numpy.unwrap即可对一维相位曲线直接可用。但解卷绕有个前提相邻采样点的真实相位差不能超过π。如果你的扫参步距太大真实相位变化超过π解卷绕会解错。所以扫参时要注意控制步距。比如相位随h的变化率大概是每100 nm变化200°以上时步距就该压到20 nm以内保证相邻两点相位差小于π。这听着基础但我见过太多人在扫参时因为步距过大画出来的“相位突变”其实是假象还去怀疑结构设计纯粹浪费时间。另外在设计超表面时经常需要把相位限制在0~2π范围内做成“相位库”。这时要注意即使做了解卷绕最后映射到0~2π时也会存在跳变边界需要在库结构之间做插值或增加结构冗余。这个属于应用层面的处理后续单独开文这里先点一句。4. 网格、边界与监视器最常见的几类“相位刺客”4.1 边界条件与入射角不一致导致的相位漂移Bloch边界条件的波矢必须和光源角度严格一致。在Lumerical里平面波光源的角度是全局属性但Bloch边界条件中的k波矢也要手动设置。我见过一个案例光源设了30°斜入射Bloch边界里k的x分量却还是0仿真结果里反射各阶次角度全乱了相位更是完全不可信。排查方法很简单仿真结束后用模式展开监视器mode expansion monitor看各阶次的透射/反射角度。如果模式展开出来的角度和理论公式对不上十有八九是边界条件或光源角度设置出了问题。4.2 PML反射造成的小幅度相位波纹PML并不是完美吸收尤其在斜入射、宽谱情况下PML反射会形成驻波监视器上的场分布会出现周期性的波纹。这些波纹对效率影响可能只有1%量级但对相位影响不可小觑因为相位是最敏感的量一点点驻波扰动都能在相位上表现为几度的偏差。缓解办法有几个一是把PML设置成“steep angle”类型专门针对大角度吸收优化二是加厚PML层数从默认的8层加到12层或16层三是把监视器位置放在驻波节点附近。第三个办法听着玄其实就是在多个z位置放监视器对比几组数据找到波纹影响最小的参考面。我在实际项目里一般用两个参考面的监视器同时提取相位如果两者换算回结构表面后的相位差小于1°就认为PML反射影响可忽略如果差异明显我就调整PML参数重新仿真。4.3 网格色散对高角度级次相位的影响FDTD用的Yee网格会对波动方程引入数值色散导致不同传播方向的波速度略有差异。对于高阶衍射出射角度大数值色散更明显相位误差也随之增大。解决思路有两个方向一是网格尺寸做各向同性细化也就是x和z方向都用同样尺寸减少色散差异二是在结构平滑的区域使用高阶精度算法Lumerical里对应的是dielectric constant averaging和高阶stencil。这个误差不好直接“看见”但可以采用一个有效的自检方法用两种不同网格尺寸比如10 nm和5 nm跑同一个结构对比目标阶次的反射相位。如果两者差异超过2°说明网格还不够收敛需要继续加密如果差异很小就放心用粗网格跑大批量参数扫描。4.4 相位提取时忽视了背景场使用TFSF光源时反射监视器会同时记录“入射背景场”和“散射场”。理论上TFSF光源划分了总场区和散射场区放在散射场区的监视器应该只记录散射场。但实际操作中如果监视器平面延伸到了总场区就会混入背景场得到的“反射相位”实际上是背景光和反射光的干涉结果混乱不堪。处理方式反射监视器的横向范围必须严格落在散射场区内并且不要超过TFSF光源的边界。同时要检查监视器平面是不是完全覆盖了光源的投影区域。如果光源尺寸比模拟区小监视器边缘会有衍射边缘效应也会污染相位。宁可监视器短一点也不要在边缘上截断。5. 实操案例一维反射光栅的0阶反射相位扫描5.1 案例参数与仿真目标用一个具体案例把整个流程串一遍。假设要做一维反射光栅结构是硅基底上的a-Si矩形光栅条周期 Λ 900 nm占空比 f 0.5即齿宽450 nm光栅高度 h 从200 nm扫到600 nm步距20 nm入射光1550 nmTE偏振电场沿光栅条方向y正入射目标提取0阶反射相位随h的变化曲线并记录0阶反射效率这个案例虽然简单但能完整展示从建模到相位提取的每一步适合作为模板套用到其他结构上。5.2 仿真参数怎么设模拟区域在xz平面内x方向取一个周期900 nmz方向从基底-1000 nm到结构上方1500 nm。结构层h变化时z方向总长度跟着变或者直接固定z范围让结构在中间即可。网格设置光栅层和近表面区域加一个覆盖网格网格尺寸10 nm x 10 nm。基底部分可以用默认网格。光源用波长1550 nm的平面波正入射负z方向传播。x方向Bloch边界条件角度设为0z方向上下PML。监视器一个频域监视器放在结构上方z1000 nm处x方向跨一个周期均匀采样用于提取近场。一个反射监视器放在z1200 nm处计算总反射效率。如果需要验证级次角度再加一个远场监视器。5.3 扫参后相位曲线的预期形态与解读扫完h后0阶反射相位基本会随h线性增加因为光在光栅层里的光程随h近似线性变化。近似公式可以这样估算[ \Delta\varphi \approx \frac{4\pi}{\lambda} n_{eff} \Delta h ]其中n_eff是光栅层的等效折射率大约在2.5~3.0之间取决于占空比。把n_eff2.8代入h每增加100 nm相位变化约为 4π×2.8×100/1550 ≈ 2.27 rad ≈ 130°。所以相邻20 nm的相位变化约为26°远小于π解卷绕没问题。实际扫出来相位曲线会有轻微非线性。这来自于等效折射率本身随h变化以及光栅层内的多阶模式效应。如果相位曲线出现突然的台阶或跳变要回到效率曲线检查。一般来说出现“相位异常”时往往伴随效率谷值表示能量撬动到了其他级次或倏逝模式。5.4 和解析模型的对比验证为了确认仿真提取的相位是对的可以先用严格耦合波分析RCWA做一个同结构的对照。现在有很多开源RCWA工具比如S4、RCWA-Python可以快速算出各阶次的反射效率和相位。在简单光栅结构上RCWA和FDTD的结果应该高度一致。如果一致性差要先检查FDTD的设置而不是急着怀疑RCWA。另外也可以用“空基底”做基准校准把光栅层厚度设为0只留下一个裸硅平面仿真得到的0阶反射相位应该数学上等于-π对金属或高折射率基底具体值取决于材料。用这个基准去校准监视器的参考面位置能消除系统性的相位偏移。我每次做新结构的第一件事就是先跑一个“空结构”基准看看提取的相位是否在预期值附近。如果不一致说明建模里还有设置错误这时候去调其他参数都是白搭。6. 进阶话题从相位提取到超表面设计的连接6.1 不同结构类型下的相位覆盖能力光栅高度的扫描只是最简单的相位调控手段。实际超表面设计中常用结构是纳米柱/纳米鳍通过调节柱的直径、高度、旋转角度来实现相位覆盖。FDTD里扫这类结构时相位提取方法和刚才说的完全一样在结构上方取一个监视器平面做空间傅里叶分解提取目标阶次的相位。有一个经验数值供参考圆柱纳米柱直径从100 nm扫到400 nm对可见光波段来说相位覆盖大约能到270°左右如果想全0~360°覆盖要么加大高度要么使用几何相位Pancharatnam-Berry相位通过旋转纳米柱的方向角来实现。后面这种方案下提取相位时必须做偏振分解监视器要分别输出两个正交偏振的复振幅。6.2 多阶次相位平衡带来的挑战有些器件不只用0阶反射而是要用到-1阶或1阶。比如反射型光栅分束器需要同时控制0阶和-1阶的效率和相位差。这时监视器上的近场包含多个传播级次必须逐一分解不能只看总场。我踩过的坑是想设计一个1:1分束器要求0阶和-1阶效率各40%相位差恒定。用FDTD扫描时单纯看总反射监视器的效率有问题——它会包含0阶、-1阶、-2阶等所有级次的贡献根本分不清哪个阶次的效率是多少。后来改成用模式展开监视器mode expansion monitor它能直接给出每个级次的效率和复振幅相位省去了手动写脚本做傅里叶分解的工作。但模式展开监视器的相位定义依然受参考面影响使用时还是要做参考面换算。而且模式展开监视器要求指定模式列表最好是先用远场监视器确认有哪些级次在传播再填进去否则会漏掉模式。6.3 相位梯度光栅的快速验证做反射型相位梯度超表面时一个常见的快速验证方式是设计一个周期内包含多个不同结构单元的超晶胞supercell让每个单元的0阶反射相位按梯度排布从而把反射光“掰”向某个指定角度。这个方案里FDTD的模拟区不能只设一个光栅单元而要设整个超晶胞周期。这时监视器要覆盖整个超晶胞宽度空间傅里叶分解的级次数目会增多。“衍射级次”的物理含义也变了超晶胞的周期比单元周期大N倍因此衍射角度更密。提取0阶相位时要以超晶胞的周期为准做傅里叶分解而不是以单个单元的周期为准。这一点很容易搞混特别是在把单胞扫描数据直接迁移到超晶胞仿真时。我个人的习惯是单胞扫描阶段用单元周期做分解验证每个结构本身的相位超晶胞仿真阶段改用超晶胞周期做分解验证整体衍射行为。两套数据不混用各有各的参考面、各有各的傅里叶周期。6.4 大角度入射时的相位提取注意事项斜入射会给相位提取带来额外的复杂性。斜入射下Bloch边界的相位因子不再是0空间傅里叶分解的级次投影也要把入射波矢的切向分量算进去。换句话说前面公式里的kx_inc不能设为0必须用sin(θi)计算。大角度斜入射还有一个隐性坑某些高阶次会从传播变成倏逝或者从倏逝变成传播在扫描入射角时。每次级次“打开”或“关闭”时目标级次的相位经常会出现不连续跳变。这不是数值问题而是物理上的模式突变。看到这种跳变时别慌先确认是不是真的发生了模式裁剪。另外斜入射下监视器上的场分布在x方向往往有更强的振幅调制对网格精度更敏感。建议在大角度工况下将网格加密到8 nm或更细并把PML的角度吸收参数调得更保守一些。7. 我在这类仿真里攒下的几条实战建议7.1 先建“零结构”基线再做复杂设计无论做哪种光栅第一步都建议跑一个“零结构”仿真的基线把光栅层设成没有起伏的平整薄膜或者直接去掉结构只留基底。这个基线数据可以用来校准参考面、检查监视器位置、确认PML设置是否合理。没有基线的仿真结果后面出了相位偏差很难定位是结构问题还是设置问题。7.2 效率与相位要同时盯只盯相位不看效率容易掉进“相位好看但效率为零”的陷阱。高精度相位提取的前提是该级次有足够的能量。一份负责任的设计报告里应该同时给出目标阶次的效率曲线和相位曲线。如果效率曲线出现明显凹陷相位曲线在那里就尽量不要用来做设计否则最终器件效率会崩。7.3 别只依赖单一工具交叉验证更稳妥RCWA和FDTD的算法思路完全不同一个基于频域模式展开一个基于时域离散推进。两者在简单光栅结构上的结果如果不一致那不是“数值噪声”能解释的几乎必然是设置层面的问题。我用FDTD的同时会跑同一结构的RCWA做交叉验证。特别是相位结果RCWA算得快几步就能出一整条扫描曲线可以快速圈定FDTD设置错在哪。7.4 监视器位置和名称固定下来形成模板做大量参数扫描时仿真文件里监视器的位置千万不要随手乱改。相位提取对参考面极其敏感同一个结构把监视器抬高200 nm提取的相位就差了一大截。虽然公式能换算回去但每次都不一样很容易搞混。我习惯把所有模板统一为z1000 nm和z1200 nm两个监视器面扫描脚本里固定读取这两个面的数据。宁可多跑几次仿真也不要在数据分析阶段重复踩参考面不一致的坑。7.5 记录每一版参数时顺手记下仿真版本和核心设置这不是教条而是血的教训。有一次我对比两批不同时间跑的仿真数据发现同参数下的相位差了约30°怎么查都查不出原因。最后发现是Bloch边界条件的k波矢设置其中一批用的是被改动过的全局变量另一批用的是默认值。从那以后我在每次大规模扫描前都会把项目参数导出成一个文本记录包含网格尺寸、PML参数、光源波长、监视器坐标、边界波矢全部归档。后期出了问题先比对参数文件能省下大量排查时间。FDTD里算光栅衍射阶数和反射阶数相位听起来是个很小的方向真做起来其实牵扯到边界条件、网格精度、监视器位置、空间傅里叶分解、参考面换算这一整套链路哪个环节松一下结果就歪了。但反过来只要这条链路搭好了后面无论做反射式超表面、衍射分束器还是波前调控器件都能直接复用同一套方法。希望这篇把关键细节讲清楚了能让你在仿真时少走几段弯路。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门