Matlab:实现Fra单缝衍射仿真

本文基于光学原理,用Matlab实现夫琅禾费单缝衍射现象仿真。


Project Code
  • 算法核心机理:参看基于光的叠加原理——提出近似分析衍射的一种方法
% 作者:ZQJ
% 日期:2021.1.7 星期四

%***********************模拟单缝衍射图样**************************
% 注:单缝为竖直长条状  该仿真可以理解为:基于夫琅禾费衍射
clear,clc;
% 基本参数输入及处理*********************************
% 本例输入:Lambda = 632.8;  a = 0.2;  L = 1;  
Lambda = input('输入单色光的波长(单位为nm):');
Lambda = Lambda * 1e-9;       %波长单位转为:m
a = input('输入单缝的宽度(单位为mm):');
a = a * 1e-3;                 %缝间隙单位转为:m
L = input('输入缝到屏的距离(单位为m):');

Xmax = 2*Lambda*L/a;              %Xmax位置(边界)--单位为:m
x = linspace(-Xmax,Xmax,61);      %坐标取样61份
light_x = linspace(-a/2,a/2,61);  %单缝宽度上取61份点光源
y = zeros(1,61);

for num =1:61
    r = sqrt((x(num)-light_x).^2 + L^2);   %各波列到点的距离
    phi = 2*pi.*(r-L)./Lambda;             %相位差
    sumcos = sum(cos(phi));
    sumsin = sum(sin(phi));
    y(num) = (sumsin^ 2 + sumcos^2)./61^2;
end

% 衍射光强灰度分布图*************************
I = y * 255;                         %光强归一化 并转为255灰度值
subplot(2,1,1);
image(x,Xmax,I);                     %设置x和y的像素,显示数值
colormap(gray(255));                 %妆点灰度色彩
xlabel('空间坐标x');
title('衍射光强空间分布');

% 衍射光强函数分布图*************************
subplot(2,1,2);
plot(x,y,'*',x,y);
axis([-Xmax,Xmax,0,1]);
xlabel('空间坐标x'), ylabel('衍射光强度');
title('单缝衍射光强空间分布函数');
grid on;
仿真结果图:

Matlab:实现Fra单缝衍射仿真_第1张图片


专栏内容供作者本人或大家学习使用,多多指教 ~

你可能感兴趣的:(Matlab_光学,matlab,光学成像)