叉形光栅衍射生成涡旋光束代码
时间: 2023-07-10 21:07:00 浏览: 292
NormalVortex001.rar_涡旋_涡旋光_自己写的生成涡旋光的代码
生成涡旋光束的代码如下所示,其中使用了Python的NumPy库和Matplotlib库来进行计算和可视化:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义叉形光栅参数
P = 5e-3 # 光栅周期
a = 1e-3 # 光栅缝宽
d = 10e-3 # 光栅厚度
lam = 633e-9 # 入射光波长
k = 2 * np.pi / lam # 入射光波矢量
n = 1.5 # 光栅材料折射率
alpha = np.pi / 4 # 光栅交错角度
beta = np.arcsin(lam / (2 * n * d)) # 光栅衍射角度
# 定义坐标系
x = np.linspace(-10 * a, 10 * a, 1000)
y = np.linspace(-10 * a, 10 * a, 1000)
xx, yy = np.meshgrid(x, y)
# 计算光栅的透过函数
def T(x, y):
return np.cos(k * a * np.sin(alpha) * (x * np.cos(alpha) - y * np.sin(alpha))) ** 2 * np.sinc(k * a * np.sin(beta) / np.pi / d * (y * np.cos(alpha) + x * np.sin(alpha)))
# 计算衍射场
def E(x, y):
return np.exp(1j * k * (x * np.sin(beta) - y * np.cos(beta))) * T(x, y)
# 计算涡旋光束
def vortex_beam(x, y, l=1):
r = np.sqrt(x ** 2 + y ** 2)
phi = np.arctan2(y, x)
return np.exp(1j * l * phi) * np.exp(-r ** 2 / a ** 2)
# 计算总场
def total_field(x, y):
return E(x, y) * vortex_beam(x, y)
# 可视化结果
plt.imshow(np.abs(total_field(xx, yy)), cmap='gray', extent=[x.min(), x.max(), y.min(), y.max()])
plt.axis('off')
plt.show()
```
运行后会生成一个图像,展示出叉形光栅衍射生成的涡旋光束。
阅读全文