当前位置:   article > 正文

MATLAB角谱传播实现!FFT2光斑实际尺寸是多少?_matlab fft2

matlab fft2

作者B站ID“大洋咩咩咩咩”,投稿有对该代码的讲解视频(角谱传播),如果有那个地方有疑问可以去视频中寻找答案~

文章及代码解决三个问题:

  1. 夫琅禾费衍射(理想凸透镜成像)做FFT2后,仿真光斑的实际尺寸确定?

  1. 光场在自由空间传播一定距离z后的光斑什么样,怎么用FFT2做?

  1. 如何仿真泽尼克多项式光斑,例如慧差光斑,以及实际尺寸?

  1. clc,clear
  2. N_obj_sam=512; %采样频率
  3. D=2.5;%% 圆孔径mm
  4. plotW=4;%% 绘图宽度mm
  5. z=600; %% 衍射距离 mm
  6. lambda=632.8e-6; %% 波长mm
  7. N=6;%% 补零数
  8. %============================================
  9. %物光场
  10. plotW2=plotW/2;
  11. R=D/2;
  12. Obj_x=linspace(-plotW2,plotW2,N_obj_sam);
  13. [Obj_x,Obj_y]=meshgrid(Obj_x,Obj_x);
  14. Obj_A2=zeros(N_obj_sam);Obj_P=Obj_A2;
  15. Obj_A2((Obj_x.^2+Obj_y.^2)<=R^2)=1;
  16. Obj_E=Obj_A2.*exp(1i*Obj_P);
  17. %============================================
  18. %物光场补零
  19. Obj_Ezf=F_ZerosFilling(Obj_E,N_obj_sam,N*N_obj_sam);
  20. A=fftshift(fft2(fftshift(Obj_Ezf)));
  21. [m,n]=size(A);%% 角谱的规格
  22. dtheta=lambda/(N*plotW);%% 角谱角分辨率
  23. A_x=(-m/2:m/2-1)*dtheta;A_y=(-n/2:n/2-1)*dtheta;% 角谱的角分布
  24. [A_x,A_y]=meshgrid(A_x,A_y);%% 构造角谱
  25. %角谱传播
  26. k=2*pi/lambda;%波矢量
  27. H=exp(1i*k*z*sqrt(1-(A_x.^2+A_y.^2)));%自由空间光学传递函数
  28. B=A.*H;
  29. %逆变换成像传播
  30. Img_Ezf=fftshift(ifft2(fftshift(B)));
  31. Img_E=F_UnZerosFilling(Img_Ezf,N_obj_sam*2);
  32. subplot(231)
  33. F_2DPlot(Obj_A2,plotW2,'mm','mm',strcat('物透过率 R=',num2str(R),'mm'))
  34. subplot(232)
  35. F_2DPlot(Obj_P,plotW2,'mm','mm',strcat('物相位 \lambda=',num2str(lambda*10^6),'nm'))
  36. subplot(233)
  37. x_plot_obj=linspace(-plotW2,plotW2,N_obj_sam);
  38. plot(x_plot_obj,Obj_A2(N_obj_sam/2,:),'color',[0 0 0],'LineWidth',3)
  39. xlabel('mm');ylabel('I');xlim([-plotW2 plotW2]);
  40. title(strcat('通光孔径 D=',num2str(D),'mm'))
  41. subplot(234)
  42. Img_A2=F_NorOne(abs(Img_E).^2);
  43. F_2DPlot(Img_A2,plotW,'mm','mm',strcat('像面光斑 z=',num2str(z),'mm'))
  44. subplot(235)
  45. F_2DPlot(angle(Img_E),plotW,'mm','mm','像面相位')
  46. subplot(236)
  47. x_plot_img=linspace(-plotW,plotW,N_obj_sam*2);
  48. plot(x_plot_img,Img_A2(N_obj_sam,:),'color',[0 0 0],'LineWidth',3)
  49. xlabel('mm');ylabel('I');xlim([-plotW plotW]);
  50. title(strcat('艾里斑半径理论值 R_A_i_r_y= 1.22\lambdaz/D=',num2str(1.22*lambda*z/D),'mm'))
  51. function F_2DPlot(z,k,xl,yl,tl)
  52. %本函数目的:绘制3维曲面图,去边框,带标题和label
  53. %输入变量:k为放缩坐标轴的因子
  54. image([-1*k 1*k],[-1*k 1*k],z,'CDataMapping','scaled')
  55. xlabel(xl);
  56. ylabel(yl);
  57. title(tl);
  58. axis xy
  59. axis equal
  60. xlim([-1*k 1*k]);
  61. ylim([-1*k 1*k]);
  62. view([0 90]);
  63. end
  64. function MFill=F_ZerosFilling(MOnes,aOnes_F,NumPixcel)
  65. %子函数序号#7
  66. MFill=zeros(NumPixcel);
  67. [aOnes_T,~]=size(MOnes);%实际输入的波前函数,可以是366或367
  68. StartP=(NumPixcel-aOnes_F)/2;%获取规格差距
  69. MFill(StartP+1:StartP+aOnes_T,StartP+1:StartP+aOnes_T)=MOnes;
  70. end
  71. function O_A2_Plot=F_UnZerosFilling(O_A2,Samp_p)
  72. [a,b]=size(O_A2);
  73. O_A2_Plot=O_A2(a/2-Samp_p/2+1:a/2+Samp_p/2,b/2-Samp_p/2+1:b/2+Samp_p/2);
  74. end
  75. function A_n=F_NorOne(A)
  76. mA=min(A(:));
  77. A=A-mA;
  78. MA=max(A(:));
  79. A_n=A/MA;
  80. end

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号