用matlab仿真平行光经过透镜聚焦后的光场分布

[复制链接]
匿名  发表于 2024-12-5 10:12:55
用菲涅尔衍射的方法计算聚焦位置的光强分布
回复 支持 反对

使用道具 举报

机器人Gpt 发表于 2024-12-5 10:13:06 | 显示全部楼层
wklnuli2024 发表于 2024-12-05 10:12
用菲涅尔衍射的方法计算聚焦位置的光强分布 ...


为了在透镜聚焦位置使用菲涅耳衍射方法计算光强分布,我们可以使用菲涅耳积分来研究从透镜传输到焦点的光场变化。通常,傅里叶变换简化了焦点位置的计算,但由于您想要使用菲涅耳衍射方法,这里是一个示例代码:

  1. % 参数设置
  2. wavelength = 500e-9; % 波长(单位:米)
  3. lens_radius = 0.005; % 透镜半径(单位:米)
  4. n_lens = 1.5;        % 透镜材料折射率
  5. N = 1024;            % 采样点数
  6. L = 0.02;            % 采样区域大小(单位:米)

  7. % 空间坐标系
  8. dx = L / N; % 采样间隔
  9. x = -L/2 : dx : L/2-dx;
  10. [X, Y] = meshgrid(x, x);
  11. R = sqrt(X.^2 + Y.^2);

  12. % 透镜的面型(例如,球面透镜)
  13. Rc = 0.02; % 曲率半径

  14. % 焦距计算
  15. focal_length = Rc / (n_lens - 1);

  16. % 光程差
  17. z = sqrt(Rc^2 - R.^2) - (Rc - lens_radius^2 / (2*Rc));
  18. phase_shift = 2 * pi / wavelength * (n_lens - 1) * z;

  19. % 避免透镜外部的相移
  20. phase_shift(R > lens_radius) = 0;

  21. % 初始平行光场
  22. U0 = ones(N); % 假定初始为均匀光场

  23. % 透镜的透过相位
  24. H_lens = exp(-1i * phase_shift);

  25. % 透镜后的光场
  26. U1 = U0 .* H_lens;

  27. % 传播到焦点位置的菲涅耳衍射计算
  28. k = 2 * pi / wavelength; % 波数
  29. z_focal = focal_length; % 焦距
  30. Fresnel_factor = exp(1i * k / (2 * z_focal) * (X.^2 + Y.^2));
  31. U_focal = fftshift(fft2(ifftshift(U1 .* Fresnel_factor)));
  32. U_focal = U_focal .* exp(1i * k * z_focal) / (1i * wavelength * z_focal);
  33. I_focal = abs(U_focal).^2; % 强度

  34. % 绘制聚焦位置的光强分布
  35. figure;
  36. imagesc(x, x, I_focal);
  37. xlabel('x (m)');
  38. ylabel('y (m)');
  39. title('Intensity Distribution at Focal Plane');
  40. colorbar;
  41. axis square;
复制代码


### 说明:

1. **菲涅耳衍射**:在透镜后应用菲涅耳因子来模拟从透镜到焦平面的光场传播。这里假设了菲涅耳近似仍适用。

2. **焦距计算**:根据透镜参数计算焦距,并在计算中使用这个焦距作为传播距离。

3. **光场计算**:通过对透镜后的出射光场进行傅里叶变换以及逐步传播因子的调整,得到焦平面上的光强分布。

这种方法假设离焦并不远,并且使用了较长的傅里叶变换来列出整个传播过程,从而展示聚焦位置的光强分布。
--- 光学专家Gpt
回复 支持 反对

使用道具 举报

匿名  发表于 2024-12-5 10:15:34
焦点处光强分布应该接近于一个点啊,结果显示光场分布看不出聚焦的状态啊。

另外,在每个程序前加上清楚变量和关闭窗口的指令。
回复 支持 反对

使用道具 举报

机器人Gpt 发表于 2024-12-5 10:15:52 | 显示全部楼层
wklnuli2024 发表于 2024-12-05 10:15
焦点处光强分布应该接近于一个点啊,结果显示光场分布 ...


为了计算在焦点位置的光强分布并清晰展示聚焦结果,我们需要确保菲涅耳衍射的模拟和参数设置得当。我们将通过适当的缩放和显示调节来保证光斑聚焦效果的展示。另外,我将添加清除变量和关闭窗口的命令以保持工作环境的整洁。

在通常条件下,由于数值计算中的离散采样和可视化限制,焦点可能会显得有些模糊或不够集中,但我们可以通过增加分辨率和调整显示比例来改善这一点。

以下是一个更新后的代码示例:

  1. % 清除变量,关闭所有图形窗口
  2. clear;
  3. close all;

  4. % 参数设置
  5. wavelength = 500e-9; % 波长(单位:米)
  6. lens_radius = 0.005; % 透镜半径(单位:米)
  7. n_lens = 1.5;        % 透镜材料折射率
  8. N = 2048;            % 增加采样点数以提高分辨率
  9. L = 0.01;            % 采样区域大小(单位:米)

  10. % 空间坐标系
  11. dx = L / N; % 采样间隔
  12. x = -L/2 : dx : L/2-dx;
  13. [X, Y] = meshgrid(x, x);
  14. R = sqrt(X.^2 + Y.^2);

  15. % 透镜的面型(例如,球面透镜)
  16. Rc = 0.02; % 曲率半径

  17. % 焦距计算
  18. focal_length = Rc / (n_lens - 1);

  19. % 光程差
  20. z = sqrt(Rc^2 - R.^2) - (Rc - lens_radius^2 / (2*Rc));
  21. phase_shift = 2 * pi / wavelength * (n_lens - 1) * z;

  22. % 避免透镜外部的相移
  23. phase_shift(R > lens_radius) = 0;

  24. % 初始平行光场
  25. U0 = ones(N); % 假定初始为均匀光场

  26. % 透镜的透过相位
  27. H_lens = exp(-1i * phase_shift);

  28. % 透镜后的光场
  29. U1 = U0 .* H_lens;

  30. % 传播到焦点位置的菲涅耳衍射计算
  31. k = 2 * pi / wavelength; % 波数
  32. z_focal = focal_length; % 焦距
  33. Fresnel_factor = exp(1i * k / (2 * z_focal) * (X.^2 + Y.^2));
  34. U_focal = fftshift(fft2(ifftshift(U1 .* Fresnel_factor)));
  35. U_focal = U_focal .* exp(1i * k * z_focal) / (1i * wavelength * z_focal);
  36. I_focal = abs(U_focal).^2; % 强度

  37. % 绘制聚焦位置的光强分布
  38. figure;
  39. imagesc(x, x, I_focal);
  40. xlabel('x (m)');
  41. ylabel('y (m)');
  42. title('Intensity Distribution at Focal Plane');
  43. colorbar;
  44. axis square;
  45. xlim([-1 1] * 1e-4); % 缩小显示范围以突出焦点
  46. ylim([-1 1] * 1e-4);
复制代码


### 改进和解释:
1. **清除与关闭**:在每次运行脚本前清除变量和关闭窗口,以确保没有残留的数据影响。
   
2. **分辨率提升**:增加采样点数到2048以提高计算精度,从而更有助于聚焦效果的模拟。

3. **显示调整**:通过缩小坐标轴的范围,只关注靠近中心的小区域,以更好地观察到聚焦效果。

请注意,数值模拟中的离散采样和显示分辨率可能会影响到光点显示的锐利程度。
--- 光学专家Gpt
回复 支持 反对

使用道具 举报

匿名  发表于 2024-12-5 10:17:35
还是没看出平行光聚焦后的效果
回复 支持 反对

使用道具 举报

机器人Gpt 发表于 2024-12-5 10:17:48 | 显示全部楼层
wklnuli2024 发表于 2024-12-05 10:17
还是没看出平行光聚焦后的效果


为了更准确地模拟和展示透镜的聚焦效果,我们需要从以下几个方面进行调整:

1. **更精确地模拟透镜的透射函数**:确保透镜对光场的相位调制完全正确。
2. **提高采样分辨率**:以捕捉细节。
3. **合理处理傅里叶变换过程**:确保焦平面光场计算中没有失真。
4. **适当缩小显示区域**:将注意力集中在焦点附近。

下面是改进后的代码示例:

  1. % 清除变量,关闭所有图形窗口
  2. clear;
  3. close all;

  4. % 参数设置
  5. wavelength = 500e-9; % 波长(单位:米)
  6. lens_radius = 0.005; % 透镜半径(单位:米)
  7. n_lens = 1.5;        % 透镜材料折射率
  8. N = 4096;            % 进一步增加采样点数以提高分辨率
  9. L = 0.01;            % 采样区域大小(单位:米)

  10. % 空间坐标系
  11. dx = L / N; % 采样间隔
  12. x = -L/2 : dx : L/2-dx;
  13. [X, Y] = meshgrid(x, x);
  14. R = sqrt(X.^2 + Y.^2);

  15. % 焦距计算,基于薄透镜公式
  16. focal_length = Rc / (n_lens - 1);

  17. % 定义透镜的相移函数
  18. phase_shift = -(pi/(wavelength * focal_length)) * (X.^2 + Y.^2);
  19. H_lens = exp(1i * phase_shift);

  20. % 避免透镜外部的相移
  21. H_lens(R > lens_radius) = 0;

  22. % 初始平行光场
  23. U0 = ones(N); % 假定初始为均匀光场

  24. % 透镜后的光场
  25. U1 = U0 .* H_lens;

  26. % 焦平面光场分布
  27. U_focal = fftshift(fft2(ifftshift(U1)));
  28. I_focal = abs(U_focal).^2; % 强度

  29. % 绘制焦点位置的光强分布
  30. figure;
  31. imagesc(x * 1e3, x * 1e3, I_focal);
  32. xlabel('x (mm)');
  33. ylabel('y (mm)');
  34. title('Intensity Distribution at Focal Plane');
  35. colorbar;
  36. axis square;
  37. xlim([-0.1 0.1]); % 将显示范围限制在焦点附近
  38. ylim([-0.1 0.1]);
复制代码


### 重要改进说明

1. **增加分辨率**:通过增加到 4096 个采样点,更好地捕捉微小的光斑并提高计算的精细度。
   
2. **正确的透镜相移**:在透镜透过相位的计算中,直接根据薄透镜焦距公式应用合适的相位函数。

3. **显示调整**:通过缩小显示范围只关注中心区域,以便观察到光场的集中。

通过这些改进,您应该能够更清楚地看到聚焦效果。在较高的采样密度和合适的显示比例下,焦点处的集中效果会更加明显。如果仍然看不到效果,可能还需要针对特定的条件进一步调整分辨率和显示设置。
--- 光学专家Gpt
回复 支持 反对

使用道具 举报

匿名  发表于 2024-12-5 10:29:36
利用菲涅尔衍射的方法,计算距离球面波中心1mm的光场分布
回复 支持 反对

使用道具 举报

机器人Gpt 发表于 2024-12-5 10:29:48 | 显示全部楼层
wklnuli2024 发表于 2024-12-05 10:29
利用菲涅尔衍射的方法,计算距离球面波中心1mm的光场 ...


菲涅尔衍射可以用于计算从球面波发出的光场在特定位置的分布。为了计算距离球面波中心1 mm的光场分布,可以假设球面波从原点发散,并在传播过程中经过一个屏幕,计算其离焦状态下的光场。我们将使用菲涅尔衍射近似来实现这一点。

以下是如何通过 MATLAB 进行这种模拟:

  1. % 清除变量,关闭所有图形窗口
  2. clear;
  3. close all;

  4. % 参数设置
  5. wavelength = 500e-9; % 波长(单位:米)
  6. z_distance = 0.001; % 离球面波中心的距离1mm
  7. N = 2048; % 采样点数
  8. L = 0.01; % 采样区域大小(单位:米)

  9. % 空间坐标系
  10. dx = L / N; % 采样间隔
  11. x = -L/2 : dx : L/2-dx;
  12. [X, Y] = meshgrid(x, x);
  13. R = sqrt(X.^2 + Y.^2);

  14. % 初始球面波场
  15. k = 2 * pi / wavelength; % 波数
  16. U0 = exp(1i * k * R); % 球面波

  17. % 应用菲涅尔衍射计算离焦平面的光场
  18. Fresnel_factor = exp(1i * k * z_distance) / (1i * wavelength * z_distance) ...
  19.     * exp(1i * k / (2 * z_distance) * (X.^2 + Y.^2));
  20. U_defocused = fftshift(fft2(ifftshift(U0 .* Fresnel_factor)));
  21. I_defocused = abs(U_defocused).^2; % 强度

  22. % 绘制离焦平面光场分布
  23. figure;
  24. imagesc(x * 1e3, x * 1e3, I_defocused);
  25. xlabel('x (mm)');
  26. ylabel('y (mm)');
  27. title('Intensity Distribution at 1mm from Spherical Wave Origin');
  28. colorbar;
  29. axis square;
  30. xlim([-5 5]);
  31. ylim([-5 5]);
复制代码


### 代码说明

1. **菲涅尔衍射**:在频域中应用菲涅尔传递函数,计算球面波经过1毫米后的光场分布。
   
2. **球面波生成**:`U0` 表示在初始位置生成的球面波,相位为与距离相关的线性增长。

3. **采样设置**:使用较高的分辨率(2048个点)以确保足够的细节显示。

4. **可视化调整**:将显示区域设置得较小(例如 -5 mm 到 5 mm),以突出重点。
   
通过执行此代码,您应该能够看到球面波在离开原点1 mm后的光场分布。该场景模拟了一个球面波的近场衍射现象。
--- 光学专家Gpt
回复 支持 反对

使用道具 举报

123
发帖

快速回帖

您需要登录后才可以回帖 登录 | 立即注册 手机动态码快速登录

本版积分规则

关于楼主

匿名用户组
  • 主题

    50
  • 回答

    6
  • 积分

    50
联系客服 关注微信 访问手机版 返回顶部 返回列表