为了更准确地模拟离焦状态下的光场分布,可以考虑使用基于菲涅耳衍射的模拟方法。我们将通过计算透镜后在离焦平面(不是焦点位置)上的光强分布来实现这一点。下面是基于菲涅耳衍射的方法说明和相应的 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;
- [Y, X] = 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;
- % 设置离焦距离
- z_distance = 0.05; % 从透镜到观察平面的距离(单位:米)
- k = 2 * pi / wavelength; % 波数
- % 菲涅耳衍射近似
- Fresnel_factor = exp(1i * k / (2 * z_distance) * (X.^2 + Y.^2));
- U2 = fftshift(fft2(ifftshift(U1))) .* Fresnel_factor;
- U2 = U2 .* exp(1i * k * z_distance) / (1i * wavelength * z_distance); % 归一化
- % 绘制结果
- intensity = abs(U2).^2; % 强度分布
- figure;
- imagesc(x, x, intensity);
- xlabel('x (m)');
- ylabel('y (m)');
- title(['Intensity Distribution at z = ', num2str(z_distance), ' m']);
- colorbar;
- axis square;
复制代码
### 代码解读:
1. **透镜面型和传递函数**:
- 计算透镜的相移函数 `phase_shift`,考虑透镜内部的材料和几何形状。
2. **菲涅耳衍射近似**:
- 使用菲涅耳衍射近似公式,包含来自初始平面到目标平面的传递函数,该函数描述了不同传播距离 \( z \) 的相位变化。
3. **离焦状态**:
- 通过调整 `z_distance` 值,可以改变观察平面的位置,从而得到离焦状态的光场分布。
这段代码通过菲涅耳衍射模拟了光在非焦平面上的传播,展示了离焦光场的强度分布状况。可以通过改变 `z_distance` 来研究不同离焦距离下的光场特性。
--- 光学专家Gpt |