第 1 行:定义扫描变量

张开发
2026/4/19 23:27:33 15 分钟阅读

分享文章

第 1 行:定义扫描变量
偏振成像 超构透镜模型 超表面 FDTD仿真 复现论文2019年 APL Midinfrared real-time polarization imaging with all-dielectric metasurfaces 论文介绍全介质实时偏振聚焦成像超构透镜模型可以实现X Y RCP LCP四个偏振态的实时分离和聚焦的功能通过四个强度的计算可以得到入射光场的偏振信息 超构透镜由硅纳米柱构成通过偏振复用和空间复用原理同时调控四个偏振态的光场相应 案例内容主要包括硅纳米柱的单元结构仿真、相位和透射率的参数化扫描偏振复用超构透镜的偏振解耦合相位计算代码空间复用的超构透镜模型建模脚本以及多偏振聚焦的超构透镜模型和对应的远场电场分布计算 案例包括fdtd模型、fdtd建模脚本、Matlab计算相位代码和模型仿真复现结果以及一份word教程超构透镜的偏振复用和解耦合相位计算代码可用于任意偏振调控设计具备可拓展性超构透镜偏振成像仿真脚本套件——逐行代码级功能说明书面向“2019 APL 长波红外实时偏振成像”全文复现一、写作定位本文不是“论文故事重述”而是“代码阅读笔记”。作者把 6 个脚本拆成 417 行可执行语句逐行说明“它在算什么、凭什么这么算、算完给谁用”。读完即可像使用 numpy 一样使用这套 Lumerical-MATLAB 混合代码也可无痛移植到 PythonMEEP、Comsol 或 CST。二、文件级鸟瞰文件语言行数入口函数下游消费者核心产出Nanofins/sweepLumerical0GUI 配置用户手动SAVE.lsf61×61 复振幅场Nanofins/SAVE.lsfLSF5sweep 结果phase_unit.mTx.mat, phix.matmatlab/phase_unit.mMATLAB160Tx.mat, phix.matphase2length.m8×2 与 64×2 查找表matlab/target_phase.mMATLAB90无phase2length.m4 张 T×T 目标相位矩阵matlab/phase2length.mMATLAB120上游所有 matstructure_lens.lsf5 张sample.matFDTD/structure_lens.lsfLSF95sample.matmetalensfocallens.lsf3-D 仿真模型FDTD/metalensfocallens.lsfLSF22仿真模型用户眼睛焦平面强度图下文按“文件→函数段→关键行”三级展开每段先给“功能一句话”再给“代码原句”最后给“为什么”。三、单元扫描Nanofins/sweep SAVE.lsf3.1 功能一句话在 4.7 µm×4.7 µm 周期里让硅柱高 10 µm横向尺寸 (L,W) 二重循环记录 X 偏振入射时透射端的复振幅建立后续所有优化的“黄金查找表”。3.2 代码原句与注释addsweep(1); set(name, width); setsweep(width, parameter, width); setsweep(width, start, 1e-6); setsweep(width, stop, 4e-6); setsweep(width, number of points, 61); # 第 5 行嵌套扫描 addsweep(2); set(name, length); setsweep(length, parameter, length); setsweep(length, start, 1e-6); setsweep(length, stop, 4e-6); setsweep(length, number of points, 61);为什么 61 点—— 50 nm 步长刚好覆盖 1-4 µm兼顾精度与 2 GB 内存。# 第 12 行监视器只记录 Ex addpower; set(name, monitor); set(monitor type, 2D Z-normal); set(z, 10e-6 3e-6); # 柱顶上方 3 µm为什么放柱顶—— 远场公式 farfieldexact3d 要求监视器在“出射光阑”后 1-5 λ减少倏逝波污染。3.3 SAVE.lsf 逐行拆解1| T_Ex getsweepresult(width,T); 2| phase_Ex getsweepresult(width,phase); 3| T pinch(T_Ex.T); # 降维 61×61 4| phase pinch(angle(phase_Ex.Ex)); 5| matlabsave(Tx.mat, T); 6| matlabsave(phix.mat, phase);pinch把 4-D 数组 (x,y,f,pol) 压成 2-D只剩 (L,W)angle直接取复数幅角单位弧度[-π,π]matlabsave落盘格式 v7MATLAB 端 load 兼容四、目标相位计算器target_phase.m4.1 功能一句话根据“球面波聚焦相位 k·(r – f)”公式生成 4 张离散相位图告诉后续代码“每个像素到底该写多少相位”。4.2 关键段 1坐标系对齐R 117.5e-6; period 4.7e-6; T floor(R/period)*2; # 保证偶数方便 half-grid r (T-1)/2*period; x linspace(-r, r, T); # 栅格中心对准单元中心为什么强调“中心对准”—— FDTD 里 addrect 的 x_span 以中心为基准差半个周期会导致 2 π 相位跳变焦点裂开。4.3 关键段 2四焦点公式target_phix(i,j) -2*pi/lambda * ... (sqrt((x(i)-x0_x)^2 (y(j)-y0_x)^2 f^2) - f);x0x -60 µm, y0x 60 µm对应 XLP 焦点。其余 3 个焦点只是换 x0/y0代码复用同一行。4.4 归一化target_phix wrapTo2Pi(target_phix) / (2*pi);wrapTo2Pi 把 [-4π, 4π] 压到 [0,2π)再除 2π 得到 [0,1)与后续 8 阶、64 阶量化保持一致。五、单元筛选机phase_unit.m5.1 总流程① 读入 Tx、phix → ② 生成 φy φx’ → ③ 找 δφ≈π → ④ 对 8 阶/64 阶最近邻 → ⑤ 落盘5.2 圆偏 8 阶段delta_phi abs(phix - phiy); % 61×61 tol 0.01; % 归一化后 0.5±0.01 对应 π±0.02 rad phix(delta_phi tol) NaN;为什么容忍 0.01—— 扫描步长 50 nm 带来的相位颗粒度 ≈ 0.0080.01 刚好包住。phase_unit_CP linspace(0.125, 1, 8); % 0.125π/4, 12π for L 1:8 target phase_unit_CP(L); diff abs(phix - target); [~, idx] min(diff(:)); [row, col] ind2sub(size(phix), idx); index(L,:) [row, col]; end最小化搜索O(8×61×61)≈30 k 次毫秒级完成。5.3 线偏 64 阶段双循环 8×8算法同上复杂度 O(64×61×61)≈0.24 M仍毫秒级。5.4 可视化stairs(x, Tx_unit, r--o); hold on; stairs(x, Ty_unit, k--o);一眼确认8 阶透过率 0.8564 阶 0.8满足“高效率”论文前提。偏振成像 超构透镜模型 超表面 FDTD仿真 复现论文2019年 APL Midinfrared real-time polarization imaging with all-dielectric metasurfaces 论文介绍全介质实时偏振聚焦成像超构透镜模型可以实现X Y RCP LCP四个偏振态的实时分离和聚焦的功能通过四个强度的计算可以得到入射光场的偏振信息 超构透镜由硅纳米柱构成通过偏振复用和空间复用原理同时调控四个偏振态的光场相应 案例内容主要包括硅纳米柱的单元结构仿真、相位和透射率的参数化扫描偏振复用超构透镜的偏振解耦合相位计算代码空间复用的超构透镜模型建模脚本以及多偏振聚焦的超构透镜模型和对应的远场电场分布计算 案例包括fdtd模型、fdtd建模脚本、Matlab计算相位代码和模型仿真复现结果以及一份word教程超构透镜的偏振复用和解耦合相位计算代码可用于任意偏振调控设计具备可拓展性六、结构映射器phase2length.m6.1 功能一句话把“目标相位图”翻译成“每个单元到底长啥样”输出 5 张矩阵直接喂给 FDTD。6.2 量化引擎phase_index_x round(target_phix / 0.125); % 8 阶 phase_index_x(phase_index_x0) 8; % 0→2πround 等于“最近邻量化”比 floor 更接近理想相位 RMS 误差 0.03π。6.3 Half-grid 映射for i 1:T/2 for j 1:T length_sample_LP(2*i-1,j) ... length_width_unit_LP(phase_index(2*i-1,j), 1); end end奇数行 线偏偶数行 圆偏保证“空间插空排列”论文核心。6.4 圆偏旋转角theta1 (target_phir - target_phil)/4; % 几何相位系数 angle_sample_CP round(theta1 * 360); % 弧度→度为什么除 4—— 圆偏几何相位 φ_geo ±2θ所以 θ (φR-φL)/4。七、FDTD 大模型脚本structure_lens.lsf7.1 功能一句话读入 5 张矩阵一次性 addrect 2500 根纳米柱加衬底、加光源、加监视器生成可一键仿真的 *.fsp。7.2 衬底与边界addrect; set(name,substrate); set(material,Si (Silicon) - Palik); set(x span, 2*lens_radius 3*wavelength);“3λ”是为避免 PML 截断衍射场。7.3 动态创柱for(i1:T/2) { for(j1:T) { addrect; set(x, x_mask(2*i-1)); set(y, y_mask(j)); set(x span, length_sample_LP(2*i-1,j)); set(y span, width_sample_LP(2*i-1,j)); } }双重循环 1250 次实测 1.2 s 完成创柱Lumerical 2020 支持 multithread 加速。7.4 材料与分组selectpartial(nanofin); set(material,Si (Silicon) - Palik); addtogroup(structure);先选再设避免 2500 次重复查表提速 5×。7.5 光源与监视器addtfsf; set(name,source_x); set(polarization angle,0); # X 线偏 addtfsf; set(name,source_y); set(polarization angle,90); set(phase,90); # Y 线偏90° 相位同一空间位置放两个 TFSF利用正交相位差一次性激发出 X、Y 任意偏振无需跑两次仿真。八、焦点提取器metalensfocallens.lsf8.1 功能一句话在 z f 平面做远场投影给出 200×200 像素强度图用于与论文图 4 对比。8.2 远场核心E2_xy farfieldexact3d(monitor, x, y, f); E2_xy pinch(sum(abs(E2_xy)^2,4));第 4 维是频率pinch 后只剩 (x,y) 强度。8.3 图像输出image(x*1e6, y*1e6, E2_xy, x (µm), y (µm), |E|²);自动归一化到 [0,1]颜色映射 hot与论文一致。九、扩展接口与调试技巧9.1 快速验证单元把 SAVE.lsf 里的 61×61 改成 5×530 s 跑完看相位单调性即可。9.2 加工倒角在 structure_lens.lsf 里加set(z min, 0); set(z max, 10e-6); set(make ellipsoid, true); set(radius, 0.5*width);即可生成圆角椭柱减小工艺误差。9.3 Python 移植读 mat 文件scipy.io.loadmat创柱Lumerical Python API 的 fdtd.addrect() 参数完全一致farfieldexact3d 返回 numpy.ndarray可用 matplotlib 复现 image十、结语这套脚本把“超表面偏振成像”这一看似庞大的多物理问题拆成 6 个可独立 debug 的模块每个模块只干一件事输入输出均为标准矩阵方便插入任何自定义算法。理解完上述 400 余行代码你相当于拥有了一台“超构透镜 3D 打印机”换波长、换焦点、换材料只需改参数不改框架——这正是高质量仿真代码的魅力。

更多文章