菲涅尔衍射(Fresnel diffraction)是描述波前经过障碍物或孔口时产生的衍射现象,通常适用于较近的距离,其中波前的曲率不可忽略。菲涅尔衍射可以通过菲涅尔积分来描述,下面是通过 MATLAB 实现菲涅尔衍射的相对光强分布图和衍射图的示例代码。
一、菲涅尔衍射的光强分布
菲涅尔衍射的光强分布 I(x,y,z)可以通过菲涅尔近似公式进行计算
MATLAB 实现菲涅尔衍射的代码,假设光源是点源或均匀光源,并计算其衍射图和相对光强分布图。
% 清空环境
clear; clc; close all;
% 光源与衍射系统的参数
lambda = 650e-9; % 波长(单位:米)
z = 0.1; % 传播距离(单位:米)
L = 0.01; % 光源的尺寸(单位:米)
N = 500; % 仿真分辨率(网格数量)
xMax = 0.005; % 最大的x范围
yMax = 0.005; % 最大的y范围
dx = 2 * xMax / (N - 1); % 网格间距
dy = 2 * yMax / (N - 1); % 网格间距
% 生成坐标网格
x = linspace(-xMax, xMax, N);
y = linspace(-yMax, yMax, N);
[X, Y] = meshgrid(x, y);
% 入射波函数(简单的光源为点源或均匀光源)
U0 = ones(N, N); % 假设光源为均匀光源(可根据实际情况修改)
% 波数
k = 2 * pi / lambda;
% 菲涅尔衍射积分的计算
% 生成衍射场U(x, y, z)
U = zeros(N, N);
for i = 1:N
for j = 1:N
% 计算衍射积分的核部分
r = sqrt((X - x(i)).^2 + (Y - y(j)).^2 + z^2); % 传播距离
U(i, j) = sum(sum(U0 .* exp(1i * k * r) ./ r)); % 菲涅尔积分
end
end
% 计算光强
I = abs(U).^2;
% 绘制衍射图
figure;
imagesc(x, y, I);
axis equal;
colorbar;
xlabel('x (m)');
ylabel('y (m)');
title('菲涅尔衍射光强分布');
% 计算衍射中心的光强
figure;
plot(x, I(N/2, :));
xlabel('x (m)');
ylabel('光强 I(x, z)');
title('衍射中心处的光强分布');
grid on;