当前位置: 首页 > news >正文

超表面全息成像技术:GS算法在超透镜中的应用探究

超表面全息成像超透镜gs算法

超表面这玩意儿最近几年火得不行,尤其是做全息成像的哥们儿,谁手里没几个超透镜项目都不好意思说自己在搞光学。今天咱们就掰扯掰扯怎么用GS算法给超透镜整出个靠谱的相位分布——说人话就是让光波按咱们设计的路线走。

GS算法全名Gerchberg-Saxton,听着像德国啤酒牌子,实际就是个相位恢复的经典套路。原理简单来说就是目标图和相位来回倒腾,直到俩条件都满足。咱举个栗子,假设要生成个字母"H"的全息图:

import numpy as np import matplotlib.pyplot as plt N = 512 # 像素数 wavelength = 532e-9 # 绿光波长 pixel_size = 8e-6 # 超表面单元尺寸 k = 2*np.pi/wavelength # 创建目标图像 target = np.zeros((N,N)) target[N//2-20:N//2+20, N//2-5:N//2+5] = 1 # 中间竖条 target[N//2-5:N//2+5, N//4:3*N//4] = 1 # 横杠

这段代码先搞了个512x512的画布,手动画出字母H的形状。接下来进入GS算法的核心循环:

phase = np.random.rand(N,N) * 2*np.pi # 随机初始相位 for _ in range(50): # 迭代50次 # 正向传播到远场 field = target * np.exp(1j*phase) far_field = np.fft.fftshift(np.fft.fft2(field)) # 施加远场振幅约束(假设平面波入射) far_field_amp = np.abs(far_field) far_field = np.ones_like(far_field) * np.exp(1j*np.angle(far_field)) # 逆向传播回超表面 near_field = np.fft.ifft2(np.fft.ifftshift(far_field)) phase = np.angle(near_field) # 更新相位

这里有几个骚操作需要注意:远场振幅被强行设成均匀分布,相当于假设入射光是完美平面波。每次迭代其实就是把相位信息往目标图像上硬怼,相当于在实空间和傅里叶空间来回踢皮球。

跑完50轮之后,咱们得验证下相位分布的效果:

# 重建验证 reconstructed = np.abs(np.fft.fftshift(np.fft.fft2(np.exp(1j*phase)))) plt.figure(figsize=(12,4)) plt.subplot(131) plt.imshow(target, cmap='gray') plt.title('目标图像') plt.subplot(132) plt.imshow(phase, cmap='hsv') plt.title('优化后相位') plt.subplot(133) plt.imshow(reconstructed**0.3, cmap='gray') # Gamma校正 plt.title('重建效果') plt.show()

这里有个经验技巧——对重建结果做0.3次方的Gamma校正。因为光强分布动态范围太大,直接显示会糊成一片。实际做超表面加工时,得把连续相位量化到纳米结构的几何参数上,比如用纳米柱的高度或直径对应相位延迟。

超表面全息成像超透镜gs算法

不过GS算法也有翻车的时候,比如容易陷入局部最优。这时候可以试试在更新相位时加点噪声:

phase = np.angle(near_field) + 0.1*np.random.randn(N,N) # 加噪版相位更新

这招相当于给算法喂了瓶红牛,让它能跳出局部坑。但噪声强度得控制好,不然就成布朗运动了。

最后说个实战中的坑:超表面单元之间的耦合效应。仿真时假设每个纳米柱独立工作,实际相邻结构会互相影响。解决办法要么在算法里加耦合补偿项,要么留出安全间距。搞物理的兄弟经常因为这个和做算法的干架——仿真美如画,实测渣成狗的情况太常见了。

总之,GS算法就像炒菜的大勺,能不能做出满汉全席,还得看火候把控和佐料搭配。下次如果有人跟你说超表面设计就是调调相位,请反手甩他一脸傅里叶变换。

http://www.jsqmd.com/news/568175/

相关文章:

  • 昆仑通态屏幕制作实战:从零开始搞定串口通信与数据显示(附完整代码)
  • 手把手用逻辑分析仪调试SPI通信:从抓取波形到解决‘数据对不上’问题
  • 简单聊聊大模型推理与GPU显存的关系,非常详细收藏我这一篇就够了
  • PD/QC快充协议诱骗芯片IC PW6606,助你快速上手快充取电
  • Java虚拟线程配置实战手册(从Spring Boot 3.2到GraalVM原生镜像的12个关键配置项)
  • SEO_ 新手入门必看的SEO优化完整教程
  • 飞秒激光多脉冲烧蚀模型:Comsol模拟与激光烧蚀表面微织构讲解视频
  • RWKV7-1.5B-G1A助力前端开发:Vue组件文档自动生成工具
  • 一、电梯程序员的工控日常
  • 光谱分析效率翻倍!揭秘Matlab中去除包络线的3个高效函数与避坑指南
  • Java低代码组件如何通过等保2.0三级认证?某省级政务平台12类组件合规改造清单(含国密SM4集成细节)
  • Kubeasz快速部署k8s混合架构集群
  • 接口测试——pytest框架续集
  • 单片机编程核心思想:分层设计与时间片轮
  • 实战应用:基于快马平台快速开发一个运用图结构的社交网络关系分析工具
  • DSQC354 3HNE00065-1/05 编码器
  • Realistic Vision V5.1写实人像生成教程:如何用Negative Prompt强化职业特征
  • ChatTTS在老年关怀场景落地:大字版语音播报+慢速清晰发音定制教程
  • Agent设计模式学习(基于langchain4j实现)(6) - 组合复杂工作流
  • StarUML用例图绘制避坑指南:为什么你的图书馆借书流程图总是不通过?
  • 用快马AI五分钟搭建前端面试题库:交互式原型开发实战
  • 基于COMSOL电弧动态仿真模型的优化及应用:一种高收敛性且可修改的吹弧方案案例解析
  • Vortex: 高效管理游戏模组的智能部署方案
  • Pendulum
  • 最后的GIL堡垒正在崩塌:现在不掌握这6种无锁Python并发安全范式,你的微服务将在Q3大规模core dump
  • 【Java高性能计算新纪元】:向量API正式GA后,这3类业务必须立即迁移——金融风控、AI推理、实时图像处理
  • 高效实现A站视频下载:AcFunDown桌面客户端技术全解析
  • 【7天Java面试突击版】100集Java面试八股文,巧拿高薪offer神器!
  • 【Qt开发】信号与槽
  • 从“画图焦虑”到“教学自由”:大角几何如何用AI解放数学教师