FDTD全息超透镜几何相位-传播相位超表面成像,Gs算法优化,相位库建立,超透镜搭建。

最近在搞超透镜设计,发现这玩意儿真是把几何相位和传播相位玩出花了。咱们直接上硬货——用Python实现的G-S算法优化相位分布时,有个骚操作:用numpy的fft2实现快速迭代。比如这段核心代码:

for _ in range(20):  # 简单粗暴迭代20次
    amp = np.abs(target_image)  # 目标振幅约束
    phase = np.angle(np.fft.ifft2(current_field))
    current_field = amp * np.exp(1j*phase)  # 振幅替换操作
    current_field = np.fft.fft2(current_field)

这其实在玩光的波动性魔术:每次迭代都把振幅强行掰成目标图像亮度,相位信息则保留下来。记得去年做实验时,用这种骚操作硬是把衍射效率从30%怼到了68%,实验室的师兄直呼"这不科学"。

相位库建立才是真正的体力活,得先搞明白纳米柱结构参数和相位响应的映射关系。用Lumerical跑参数扫描时,我写了段自动遍历纳米柱尺寸的脚本:

for width = 50:10:150  % 纳米柱宽度扫描
    setup_model(width);  % 自定义建模函数
    run_simulation();
    extract_phase();    % 提取相位延迟
end

结果发现250nm高度的二氧化钛纳米柱,在1550nm波长下,长轴从80nm变到160nm时,几何相位能覆盖完整的2π范围。这数据后来被整理成相位字典,用起来跟查菜谱似的——想要什么相位直接按尺寸下单。

搭建超透镜时最坑的是传播相位和几何相位的叠加方式。有次用错坐标系公式,把左旋圆偏振光搞成了右旋,重构图像直接镜像翻转。后来在FDTD仿真里加了这段偏振检测代码才揪出bug:

Ex = get_field('Ex')  # 获取电场分量
Ey = get_field('Ey')
stokes = calculate_stokes(Ex, Ey)  # 计算斯托克斯参数
plot_ellipse(stokes)  # 画偏振椭圆

现在看师弟们还在用传统金属ens,忍不住安利超表面这黑科技。上周刚用传播相位做基底、几何相位当微调的方案,在硅基板上实现了0.3λ的聚焦效率。测试时用Zemax对比光斑,那锐利度堪比商业物镜——虽然离实用化还有距离,但这玩意的设计自由度真不是传统光学能比的。

最后吐槽下FDTD仿真的资源消耗,跑个3D模型动不动就上百GB内存。后来学乖了,先用2D近似找感觉,关键参数锁定后再上真家伙。这行当就是这样,得在物理直觉和计算资源间走钢丝,但每次看到仿真结果和实测数据吻合时,那种快感你懂的。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐