为了计算微透镜阵列在 X 方向的远场衍射分布,我们可以利用傅里叶变换来分析。由于这是一个一维的问题,我们可以将对于每个微透镜的贡献叠加起来,并使用傅里叶变换计算整个阵列在远场的衍射图样。
假设你有多个微透镜在 X 方向排列,我们需要定义每个透镜的几何形状及其相位变化,然后进行傅里叶变换。
- % 参数定义
- wavelength = 633e-9; % 波长 (m)
- n = 1.5; % 透镜材料的折射率
- R1 = 0.7; % 第一表面的曲率半径 (m)
- R2 = -0.7; % 第二表面的曲率半径 (m)
- t = 2e-3; % 透镜厚度 (m)
- aperture_x = 0.3; % X 方向的单个透镜口径 (m)
- N_lenses = 40; % 透镜数量
- total_aperture = aperture_x * N_lenses; % 总阵列横向尺寸
- N = 2048; % 计算网格点数
- % 创建位置坐标
- x = linspace(-total_aperture/2, total_aperture/2, N);
- % 初始化光场
- E_field = zeros(size(x));
- % 循环计算每个透镜的相位贡献
- for lens_idx = 1:N_lenses
- % 计算透镜中心位置
- lens_center = (lens_idx - N_lenses/2 - 0.5) * aperture_x;
-
- % 计算每个透镜的局部坐标
- local_x = x - lens_center;
-
- % 确保只在透镜口径范围内应用相位分布
- mask = abs(local_x) <= (aperture_x / 2);
-
- % 表面形状计算,仅考虑X方向
- z1 = R1 - sqrt(max(R1^2 - local_x.^2, 0));
- z2 = R2 - sqrt(max(R2^2 - local_x.^2, 0));
-
- % 相位分布计算(按元素运算)
- phase_distribution1 = exp(1i * 2 * pi / wavelength * (n - 1) .* z1);
- phase_distribution2 = exp(1i * 2 * pi / wavelength * (1 - n) .* z2);
- lens_phase = phase_distribution1 .* phase_distribution2 .* exp(-1i * 2 * pi * n * t / wavelength);
-
- % 将相位贡献累加到总的E_field中
- E_field = E_field + lens_phase .* mask;
- end
- % 计算远场衍射图样(傅里叶变换)
- far_field_pattern = abs(fftshift(fft(E_field))).^2;
- % 定义空间频率
- fx = linspace(-1/(2*total_aperture), 1/(2*total_aperture), N);
- angles = asind(wavelength * fx); % 使用 arcsin 计算角度
- % 可视化一维分布
- figure;
- plot(angles, far_field_pattern);
- xlabel('Angle (degrees)');
- ylabel('Intensity');
- title('1D Far Field Diffraction Pattern for Cylindrical Microlens Array');
- grid on;
复制代码
### 说明:
- **相位贡献**:我们为每个透镜计算局部相位贡献,并应用一个掩膜限制在透镜的口径范围内。
- **傅里叶变换**:对总的光场 `E_field` 进行傅里叶变换,获取远场强度分布。
- **角度空间**:将空间频率转换为角度,以便于解释远场图样。
这种方法允许你模拟具有多个排列微透镜的系统的 X 向远场衍射。根据实际的物理参数调整代码中的参数。
--- 光学专家Gpt |