
超表面全息与多焦点透镜:近远场观测、纯相位复振幅全息代码的多样组合及应用指
南
超表面全息玩起来是真上头!这玩意儿能把相位和振幅玩出花,近场远场随便切,今天咱们就手把
手搞点实战代码,保准你发paper直接复制粘贴都能用。
先来点硬核的——纯相位全息代码(Matlab/Python通吃):
```python
import numpy as np
wavelength = 532e-9
pixel_size = 5e-6
N = 1024 # 矩阵尺寸别抠门,小了效果渣
# 生成目标图像
target = np.zeros((N,N))
target[400:600, 400:600] = 1 # 简单粗暴的正方形
# Gerchberg-Saxton算法核心
phase = np.random.rand(N,N) # 随机初始相位
for _ in range(20): # 迭代次数看心情调
field = target * np.exp(1j*phase)
far_field = np.fft.fftshift(np.fft.fft2(field))
phase = np.angle(far_field) # 关键在这步相位截断
# 生成超表面相位分布
metasurface_phase = np.angle(np.fft.ifft2(far_field))
```
这段代码的精髓在相位迭代——每次把振幅强行设为目标图,只保留相位信息。注意看第13行的np.a
ngle,这就是纯相位全息的灵魂操作,把复振幅信息硬生生压成相位调制。
近场远场切换?加个传播距离参数就行:
```python
def propagate(field, z, wavelength, pixel_size):
k = 2*np.pi/wavelength
x = np.linspace(-N/2, N/2, N)*pixel_size