基于Matlab——夫琅禾夫衍射以及菲涅尔衍射

        我以往在学习F分析的时候,编写了一个作业代码,在此附上供大家学习交流。

 

引言:

    在傅里叶光学信息基础中,主要研究的是光在传播过程携带的信息如何去检测得到。如果光在自由空间(均匀介质)中的传播,那么光的性质(方向、频率)将不发生改变。我们易去得到它携带的信息,比如光强、频率。但是,当光在空间中遇到了障碍物(比如圆孔、矩形孔等),那么光的波动性将会显著表达。在接受屏上我们可以看到衍射现象,即光偏离原方向传播。在衍射现象中,我们一般分为夫琅禾夫衍射和菲涅尔衍射。从基尔霍夫衍射理论和角谱理论出发,实验现象和理论符合较好。针对圆孔和矩形孔,本文将用Matlab语言对夫琅禾夫衍射和菲涅尔衍射进行数值模拟。

理论:

    (1)菲涅尔衍射公式:

       观察平面距离z条件:

    (2)夫琅禾夫衍射公式:

       观察平面距离z条件:

代码:

%% --------------------------------------------------------------------------%%
%% 清除空间
clear;
clc;
%% 夫琅禾夫衍射--圆孔
%%  三维--解析法
a=8.5*10^-2;%半径
lambda=632*10^(-9);%波长
z=a^(2)/lambda*100;%距离
N=16;%空间范围
L=512;%采样点
[x, y]=meshgrid(linspace(-N,N,L));%网格
p=sqrt(x.^2+y.^2);%每个点直接的距离
m=2*pi*a*p/z/lambda;%自变量
j1=besselj(1,m);%贝塞尔
i_0=(2*pi*a^(2)/(2*z*lambda))^2;%初始光强
i=i_0*(2*j1./m).^2;%透射光强
figure()%画图
mesh(x,y,i);%三维
zlabel('强度')
xlabel('X方向')
ylabel('Y方向')
title('圆孔-夫琅禾夫衍射')
grid on;%上色
colormap;%显色
colorbar;%颜色棒
%%  三维--快速傅里叶变换
figure()
z1=zeros(L,L);%透射空间
for i =1:L%在透射空间中画出圆形,圆形内部透射率为1
    for j =1:L
        if x(i,j)^2+y(i,j)^2<=a%判断距离
            z1(i,j)=1;%透射率为1
        end 
    end
end
d=fftshift(abs((fft2(z1)).^2));%快速傅里叶变换,并移动坐标为原点
mesh(x,y,d);%三维
zlabel('强度')
xlabel('X方向')
ylabel('Y方向')
title('圆孔-夫琅禾夫衍射')
grid on;%上色
colormap;%显色
colorbar;%颜色棒
%% 下面参数基本相同不做标记
%% 二维--解析法
figure()
p_1=-10:0.0001:10;
m_1=2*pi*a*p_1/z/lambda;
j1=besselj(1,m_1);
i_1=(2*j1./m_1).^2;
plot(m_1,i_1)
xlabel('离几何中心距离')
ylabel('强度')
title('圆孔-夫琅禾夫衍射')
%% 二维--快速傅里叶变换
figure()
p_1=linspace(-8,8,L);
d=fftshift(abs((fft2(z1)).^2));
plot(p_1,d(L/2,:))
xlabel('离几何中心距离')
ylabel('强度')
title('圆孔-夫琅禾夫衍射')
%% 菲涅尔衍射-圆孔
%%  三维--快速傅里叶变换
figure()
z=a^(2)*pi/4/lambda*100;
z1=zeros(L,L);
z2=zeros(L,L);
for i =1:L
    for j =1:L
        if x(i,j)^2+y(i,j)^2<=a
            z1(i,j)=1;
            z2(i,j)=x(i,j)^2+y(i,j)^2;
        end 
    end
end
d=fftshift(abs((fft2(z1.*exp(1i*2*pi/lambda/2/z*z2))).^2));
i_2=d;
mesh(x,y,i_2);grid on;
zlabel('强度')
xlabel('X方向')
ylabel('Y方向')
title('圆孔-菲涅尔衍射')
colormap;
colorbar;
%% 二维--快速傅里叶变换
figure()
p_1=linspace(-8,8,L);
d=fftshift(abs((fft2(z1.*exp(1i*2*pi/lambda/2/z*z2))).^2));
plot(p_1,d(L/2,:))
xlabel('离几何中心距离')
ylabel('强度')
title('圆孔-菲涅尔衍射')
%% 夫琅禾夫衍射--方形孔
%%  三维--解析法
a=8.5*10^-2;
b=8.5*10^-2;
lambda=573.3*10^(-9);
N=32;L=1024;
z=a^(2)/lambda*100;
[x,y]=meshgrid(linspace(-N,N,L));
p1=x.*a/(lambda*z);p2=y.*b/(lambda*z);
i_0=(a*b/(lambda*z))^2;
i=i_0*(sinc(p1).^2).*(sinc(p2).^2);
figure()
mesh(x,y,i);grid on;
zlabel('强度')
xlabel('X方向')
ylabel('Y方向')
title('方形孔-夫琅禾夫衍射')
colormap;
colorbar;
%% 菲涅尔衍射-方形孔
%%  三维--快速傅里叶变换
a=2.25*10^-1;
b=2.25*10^-1;
lambda=573*10^(-9);
N=32;L=1024;
z=a^(2)*pi/4/lambda*500;
[x,y]=meshgrid(linspace(-N,N,L));
z1=zeros(L,L);
z2=zeros(L,L);
for i =1:L
    for j =1:L
        if abs(x(i,j))<=a && abs(y(i,j))<=b
            z1(i,j)=1;
            z2(i,j)=x(i,j)^2+y(i,j)^2;
        end 
    end
end
d=fftshift(abs((fft2(z1.*exp(1i*2*pi/lambda/2/z*z2))).^2));
figure()
mesh(x,y,d);grid on;
zlabel('强度')
xlabel('X方向')
ylabel('Y方向')
title('方形孔-菲涅尔衍射')
colormap;
colorbar;
%% --------------------------------------------------------------------------%%

运行结果中的一个:

        

 


(凑字数)傅里叶光学的本质就是利用线性叠加的正交坐标函数集去表述一个复杂的函数,从而更简单地去处理复杂函数所带给我们的信息。而在实际应用上,由于器件的限制,我们通常做的就是利用离散的器件以及狄拉克函数性质去描述一个空间点的信息,然后相加求和去近似的描述原本连续的函数关系,也就是实际效果,比如单缝衍射等。简而言之,就是利用离散描述连续,是傅里叶方法应用在光学处理上的核心。 

        同时大家觉得有什么问题和建议欢迎留言。

  • 11
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eyu.sir

谢谢。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值