Advertisement
phy_bunny

Arbitrary screen diffraction

Aug 10th, 2023 (edited)
465
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.53 KB | Science | 0 0
  1. clear(用实时脚本打开)
  2. %%%%%%%衍射模板%%%%%%%
  3. N=500;                                %采样点 500*500像素
  4. m=N;
  5. n=N;
  6. R=zeros(m,n);                         %预设矩阵存放图像数据
  7. A = imread('picture.bmp');            %衍射屏图片 黑色为不透光 白色为透光(用photoshop制作,文件注意为bmp格式,放在同一文件夹即可)
  8. A=A(:,:,1);
  9. R=im2double(A);                       %屏函数
  10. %%%%%%%光波数据%%%%%%%
  11. lamda=632.2e-9;                       %波长(nm)
  12. U=ones(N);                            %正入射平行光
  13. dfx=1./m;
  14. dfy=1./n;
  15. xd=N;                                 %x方向采样点
  16. yd=N;                                 %y方向采样点
  17. F1=R.*U;                              %经过衍射屏得光波
  18. F2=fft2(F1);
  19. %%%%%%%衍射图案%%%%%%%
  20. Ui=fftshift(F2);                      %计算光波通过衍射屏后在频率域的复振幅分布
  21. d=1.5;                                %光波传播距离
  22. T=exp(j*d*2*pi/lamda)/(j*lamda*d);    %传递函数
  23. Ud=Ui.*T;                             %计算光波传播距离d后在频率域的复振幅分布
  24. U0=ifft2(Ud);                         %计算光波在观察屏的复振幅分布
  25. U01=(abs(Ud)).^2;                     %复振幅转化为光强
  26. U01=U01.*10^-16;                      %放大,使得衍射可视化
  27. %%%%%%%画图%%%%%%%
  28. subplot(2,2,1);
  29. imshow(R);
  30. subplot(2,2,2);
  31. imshow(U01);
  32. subplot(2,2,3);
  33. plot(U01(251,:));
  34. subplot(2,2,4);
  35. meshz(U01);
  36. (引流一下---B站up主:学物理的兔八哥)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement