为了计算离焦光场分布,另一种可以尝试的方法是基于角谱传播的方法(Angular Spectrum Method)。这种方法通过在频域内应用传播算子,可以精确地计算传输过程中的光场。以下是使用角谱方法来计算离焦平面光场分布的 MATLAB 代码示例:
- % 参数设置
- wavelength = 500e-9; % 波长(单位:米)
- lens_radius = 0.005; % 透镜半径(单位:米)
- n_lens = 1.5; % 透镜材料折射率
- N = 1024; % 采样点数
- L = 0.01; % 采样区域大小(单位:米)
- % 空间坐标系
- dx = L / N; % 采样间隔
- x = -L/2 : dx : L/2-dx;
- [X, Y] = meshgrid(x, x);
- R = sqrt(X.^2 + Y.^2);
- % 透镜的面型(例如,球面透镜)
- Rc = 0.02; % 曲率半径
- t = Rc * (1 - cos(asin(lens_radius / Rc))); % 中心厚度
- % 光程差
- z = sqrt(Rc^2 - R.^2) - (Rc - t);
- phase_shift = 2 * pi / wavelength * (n_lens - 1) * z;
- % 避免透镜外部的面引起不必要的相移
- phase_shift(R > lens_radius) = 0;
- % 初始平行光场
- U0 = ones(N); % 假定初始为均匀光场
- % 透镜的透过相位
- H_lens = exp(-1i * phase_shift);
- % 透镜后的光场
- U1 = U0 .* H_lens;
- % 角谱法参数
- k = 2 * pi / wavelength; % 波数
- fx = (-N/2 : N/2-1) / L; % 空间频率坐标
- [Fx, Fy] = meshgrid(fx, fx);
- H = exp(-1i * k * sqrt(1 - (wavelength * Fx).^2 - (wavelength * Fy).^2));
- % 焦平面光场分布
- U_focal = fftshift(fft2(ifftshift(U1)));
- I_focal = abs(U_focal).^2; % 强度
- % 离焦距离 (10mm)
- z_distance = 0.01;
- % 角谱传播
- U1_ft = fft2(ifftshift(U1));
- U_defocused_ft = U1_ft .* H.^z_distance;
- U_defocused = ifftshift(ifft2(U_defocused_ft));
- I_defocused = abs(U_defocused).^2; % 强度
- % 绘制焦平面光场分布
- figure;
- imagesc(x, x, I_focal);
- xlabel('x (m)');
- ylabel('y (m)');
- title('Focal Plane Intensity Distribution');
- colorbar;
- axis square;
- % 绘制离焦平面光场分布
- figure;
- imagesc(x, x, I_defocused);
- xlabel('x (m)');
- ylabel('y (m)');
- title('Defocused Plane Intensity Distribution at 10mm');
- colorbar;
- axis square;
复制代码
### 关键点说明:
1. **角谱传播**:在频域中通过- [/code] 做传播计算,可以很好地处理不同的传播距离。[code]
复制代码 是传播算子,用于描述光波在传播过程中如何转变。
2. **空间频率坐标**:使用空间频率坐标(),从而在频域内高效进行传播计算。
3. **离焦光场计算**:通过调整 `z_distance` 来展示不同位置的离焦光场分布,确保传播距离在频域计算中被正确应用。
4. **代码结构优化**:在频域内做传播计算,其结果通过逆傅立叶变换回到空间域,以得到时间或空间上的强度分布。
这段代码应该能更准确地模拟和展示离焦位置(10 mm)处的光场分布。
--- 光学专家Gpt |