喜欢的话给小编点个关注点个赞呀
菲涅尔衍射基本原理
菲涅尔衍射是波动光学中的一个概念,描述了光波在通过一个小孔或障碍物后的传播行为。它与夫琅禾费衍射(远场衍射)相对应,适用于光源和观察屏之间的距离不是无限远的情况。菲涅尔衍射考虑了光波的近场效应,即衍射图案在靠近障碍物的地方形成。菲涅尔衍射积分表达式为:
则我们可以得到菲涅尔衍射的振幅扩散函数和光学传递函数:
本章内容我们将讨论平面波、高斯光束、拉盖尔高斯涡旋光束经矩孔和圆孔菲涅尔衍射实例。平面波为振幅为1的光束,源平面高斯光束的表达式为:
其中,E0为光场振幅(一般取1),w0为光束的束腰半径,r为对应的极坐标。
拉盖尔高斯涡旋光束是携带螺旋相位因子可写成exp(ilφ)且具有拉盖尔高斯振幅的光束,这种涡旋光束可承载lh/2π的轨道角动量,其光场表达式为:
其中,E0为光场振幅(一般取1),w0为光束的束腰半径,l表示光束的拓扑荷数。如图1所示,我们分别展示了平面波经圆孔,高斯光束和l=2,3的拉盖尔-高斯光束的光分布。
图1:三种不同光束的光强分布图
圆孔和矩孔的表达式分别为:
平面波经圆孔和矩孔菲涅尔衍射
在图2中,我们展示了平面波经圆孔和矩孔菲涅尔传播的实例,圆孔直径和矩孔边长均设置为0.005m,我们发现在z=1m靠近圆孔处形成衍射图案,而在z=10m远距离处衍射图已经变为类似高斯形式的图案。而矩孔衍射在20米处中间位置也趋于高斯形式。
图2:平面波经圆孔和矩孔菲涅尔传播的实例
高斯光束经圆孔和矩孔菲涅尔衍射
在图3中,我们展示了高斯光束经圆孔和矩孔菲涅尔传播的实例,高斯光束束腰设置为0.005m,圆孔直径和矩孔边长分别设置为0.3w0和0.5w0。我们发现在z=0.5米的时候均产生衍射图样,随着距离增加,均趋于高斯形式。
图3:高斯光束经圆孔和矩孔菲涅尔传播的实例
拉盖尔高斯涡旋光束经圆孔和矩孔菲涅尔衍射
在图4中,我们展示了拉盖尔高斯涡旋光束经圆孔和矩孔菲涅尔传播的实例,拉盖尔高斯涡旋光束束腰设置为0.0005m,圆孔直径和矩孔边长均设置为一倍束腰。我们发现在传播距离逐步增加的时候,衍射图样会发生一定的转动,但转到一定角度便不再发生变化。此外,不同拓扑荷数对应的衍射图样也不相同。
图4:拉盖尔高斯涡旋光束经圆孔和矩孔菲涅尔传播的实例
MATLAB仿真代码:
%t店:博士生牛马赚点小钱
%平面波、高斯光、涡旋光矩孔圆孔菲涅尔衍射
clear;clc;close;
%% 设置输入面网格
N = 512; % 网格数
L = 1.8e-2; % 网格边长 [m]
d1 = L / N; % 网格间距 [m]
[x1,y1] = meshgrid((-N/2 : N/2-1)*d1);%创建网格
[phi,r1] = cart2pol(x1,y1);
%光束参数
wvl = 632.8e-9; % 波长 [m]
k = 2 * pi / wvl;
w = 5e-4; % 高斯光束束腰 [m]
l=3;%拓扑荷数
z =100; % 传播距离 [m]
%% 输入光强
%平面波经过圆孔矩孔
Uinc = circ(x1, y1, 1*w);
Uinr = rect(y1,1*w).* rect(x1,1*w);
%高斯光束经过圆孔矩孔
UinGc = circ(x1,y1,0.3*w).*exp(-(r1.^2)./(w.^2));
UinGr = rect(y1,0.5*w).* rect(x1,0.5*w).*exp(-(r1.^2)./(w.^2));
%涡旋光束经过圆孔矩孔
UinLc = circ(x1,y1,1*w).*(sqrt(r1.^2)./w).^abs(l).*exp(-(r1.^2)./(w.^2)).*exp(1i.*l.*phi);
UinLr = rect(y1,1*w).* rect(x1,1*w).*(sqrt(2).*r1./w).^abs(l).*exp(-(r1.^2)./(w.^2)).*exp(1i.*l.*phi);
%% 输出光强
[x2, y2, Uoutc]= Fresnel_one_prop(Uinc, wvl, d1, z);
[x2, y2, Uoutr]= Fresnel_one_prop(Uinr, wvl, d1, z);
[x2, y2, UoutGc]= Fresnel_one_prop(UinGc, wvl, d1, z);
[x2, y2, UoutGr]= Fresnel_one_prop(UinGr, wvl, d1, z);
[x2, y2, UoutLc]= Fresnel_one_prop(UinLc, wvl, d1, z);
[x2, y2, UoutLr]= Fresnel_one_prop(UinLr, wvl, d1, z);
Ic=Uoutc.*conj(Uoutc);
Ir=Uoutr.*conj(Uoutr);
IGc=UoutGc.*conj(UoutGc);
IGr=UoutGr.*conj(UoutGr);
ILc=UoutLc.*conj(UoutLc);
ILr=UoutLr.*conj(UoutLr);
I=UinGr.*conj(UinGr);
%% 填入相应光强即可画图
figure
imagesc(ILc);axis off ;colormap("parula");axis square
喜欢的话给小编点个关注点个赞呀
有任何问题可以在评论区留言更多完整代码进T店博士生牛马赚点小钱