当前位置:   article > 正文

Bessel光束经透镜的matlab模拟传输_光束传输方法的matlab模拟

光束传输方法的matlab模拟

哇咔咔,试着写了一个贝塞尔光束经过透镜传输的matlab模拟代码。

看了篇文献,感觉贝塞尔光束经过透镜蛮神奇的,就按照里面的参数模拟了一下,结果还是蛮一致的。

文献:梁晓晶. 贝塞尔光束的传输变换特性研究[D].天津大学,2016.

用了一个网格划分+ABCD系统的科林斯积分公式捏。

为了运算速度,使用了矩阵算法,大大加速了速度。参考了一下这个文献(matlab矩阵库yyds)

龚海龙, 李国俊, 陈琪, et al. 一种快速实现光场传输的算法研究[J]. 光学学报, 2016

然后顺便写了一节用于跑出视频并保存的代码,去掉注释即可食用(别忘了去掉上面一节的getframe那一句哦~)龚海龙

ps:当然,如果只是需要几个点的截图只要把循环去掉即可食用~

  1. %% 贝塞尔光束 经ABCD系统传输
  2. clc
  3. clear all
  4. close all
  5. %%
  6. N = 2000; %光源处取格点数
  7. N1=2000; %观测处取格点数
  8. lambda = 663e-6; %波长663nm
  9. front=2;%生成区间
  10. hind=2;%观测取间
  11. Z =100; %传输距离z mm
  12. f=50; %透镜焦距(mm)
  13. A=1-Z/f;
  14. B=Z;
  15. C=-1/f;
  16. D=1;%矩阵光学总矩阵
  17. hindx = linspace(-front,front,N); hindy = linspace(-front,front,N);
  18. [x1,y1] = meshgrid(hindx,hindy);
  19. [theta,r] = cart2pol(x1,y1);
  20. k = 2*pi/lambda; %波矢
  21. k_r = 119.175; %径向波矢
  22. k_z = sqrt(k^2-k_r^2); %轴向波矢
  23. z = 0;
  24. w=1;%束腰
  25. n = 1; %贝塞尔函数阶数n = 0,1,2,3。。。
  26. E1 = besselj(n,k_r*r).*exp(1i*k_z*z).*exp(1i*n*theta);%.*exp(-r.*r ./(w^2)) ;% 就问这束腰你要不要吧
  27. I = E1.*conj(E1);
  28. I = I/max(max(I)); %归一化
  29. figure
  30. plot(x1(1,:),I(N/2,:));
  31. title([num2str(n),'阶贝塞尔光束光强分布'],'fontname','华文中宋','fontsize',16);
  32. xlabel('x/mm','fontname','times new roman','fontsize',16);
  33. zlabel('归一化强度','fontname','华文中宋','fontsize',16);
  34. figure;mesh(x1,y1,I)
  35. set(gca,'fontname','times new roman','fontsize',16);
  36. colorbar;
  37. title([num2str(n),'阶贝塞尔光束光强分布'],'fontname','华文中宋','fontsize',16);
  38. xlabel('x/mm','fontname','times new roman','fontsize',16);
  39. ylabel('y/mm','fontname','times new roman','fontsize',16);
  40. zlabel('归一化强度','fontname','华文中宋','fontsize',16);
  41. view(0,90) %调整立体图的观察角度
  42. %% 矩阵 启动!
  43. figure
  44. for i=1:90
  45. Z =i*0.5+40; %传输距离z mm
  46. f=50;
  47. A=1-Z/f;
  48. B=Z;
  49. C=-1/f;
  50. D=1;%矩阵光学总矩阵
  51. gedianx = linspace(-hind,hind,N1); gediany = linspace(-hind,hind,N1);
  52. [x2,y2] = meshgrid(gedianx,gediany);
  53. M1=E1.*exp(1i*k*A/2/B *(x1.^2+y1.^2));
  54. M2=exp(1i*k*D/2/B *(x2.^2+y2.^2));
  55. Mx=exp(-1i*k/B *x2(1,:)'*x1(1,:));
  56. My=exp(-1i*k/B *y1(:,1)*y2(:,1)');
  57. E2=-1i/lambda/B *exp(1i*k*Z).*M2.*(Mx*M1*My); %.*(hind/N1).*(hind/N1) 咱不归一就得写这个;
  58. I1 = E2.*conj(E2); I1 = I1/max(max(I1));
  59. %这个是画立体图
  60. % mesh(x2,y2,I1)
  61. % colorbar;
  62. % set(gca,'fontname','times new roman','fontsize',16);
  63. % title([num2str(n),'阶贝塞尔光束经透镜传输',num2str(Z),'mm后光强分布'],'fontname','华文中宋','fontsize',16);
  64. % xlabel('x/mm','fontname','times new roman','fontsize',16);
  65. % ylabel('y/mm','fontname','times new roman','fontsize',16);
  66. % zlabel('归一化强度','fontname','华文中宋','fontsize',16);
  67. % view(0,90)
  68. %
  69. %这个是画截面图
  70. plot(y2(:,1),I1(:,N1/2));
  71. title([num2str(n),'阶贝塞尔光束经透镜传输',num2str(Z),'mm后光强分布'],'fontname','华文中宋','fontsize',16);
  72. xlabel('y/mm','fontname','times new roman','fontsize',16);
  73. zlabel('归一化强度','fontname','华文中宋','fontsize',16);
  74. drawnow;
  75. % pic1(i)=getframe(gcf);%获得当前帧(得到视频)
  76. end
  77. %% 出视频
  78. % now=VideoWriter("test1.avi"); %生成avi视频的名字
  79. % now.FrameRate=15; %帧数
  80. % open(now);
  81. % writeVideo(now,pic1);
  82. % close(now);

 跑完差不多是这么个样子:

                                       

                                     

 和文献上的图还是蛮吻合的捏就是说。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/288408?site
推荐阅读
相关标签
  

闽ICP备14008679号