我以往在学习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%在透射空间中画出圆形,圆形内部透射率为1for j =1:Lif x(i,j)^2+y(i,j)^2<=a%判断距离z1(i,j)=1;%透射率为1end 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:Lfor j =1:Lif x(i,j)^2+y(i,j)^2<=az1(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:Lfor j =1:Lif abs(x(i,j))<=a && abs(y(i,j))<=bz1(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;
%% --------------------------------------------------------------------------%%

运行结果中的一个:


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

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

基于Matlab——夫琅禾夫衍射以及菲涅尔衍射相关推荐

  1. matlab菲涅尔衍射_有问必答——SYNOPSYS安装体验课堂——可以设计菲涅尔透镜吗?...

    问:SYNOPSYS可以设计菲涅尔透镜吗? 答:在USS中有多种菲涅尔面型,用户输入参数即可. 问:SYNOPSYS中具有的输入方式? 答:大家总是有个误区,以为SYNOPSYS需要输入命令运行,其实 ...

  2. 【光学】基于matlab GUI菲涅尔系数计算【含Matlab源码 1165期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI菲涅尔系数计算[含Matlab源码 1165期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  3. MATLAB:菲涅尔公式(反射/透射公式)

    目录 案例1:光疏到光密介质 案例2:光密到光疏介质 案例1:光疏到光密介质 平面光波从空气(折射率为)入射到石英玻璃中(折射率为),用 MATLAB作出p.s分量的振幅反射率和振幅透射率以及它们的绝 ...

  4. Matlab 菲涅尔系数计算

    1 简介 Matlab 菲涅尔系数计算​ 2 部分代码 function varargout = Fresnel(varargin) % FRESNEL MATLAB code for Fresnel ...

  5. matlab波带片程序,Matlab编程快速实现振幅型菲涅尔波带片的设计

    维普资讯 http://doc.docsou.com 第 8卷 第 1 5期 20 0 8年 8月 科 学 技 术 与 工 程 V 1 8 No 5 o. .1 Au .2 0 g 08 17-89 ...

  6. matlab 伽马波带片,菲涅尔波带片

    满意答案 mbtf4535 2018.11.28 采纳率:52%    等级:8 已帮助:310人 菲涅尔透镜是是带通光学滤镜,被广泛使用在警报器和相机对焦屏上.菲涅尔波带片既有会聚透镜的作用,又有发 ...

  7. 菲涅尔定理及MATLAB实现

    ** 菲涅尔定理及MATLAB实现   本文是学习胡章芳<MATLAB仿真及其在光学课程中的应用>和赵凯华<光学>这两本书时所做笔记. 1. 菲尼尔反射与折射公式   一般来说 ...

  8. 基于Matlab模拟菲涅尔公式

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  9. MATLAB利用菲涅尔公式仿真光的折射

    从空气进入石英玻璃,计算振幅反射率.透射率和对应的绝对值: clear; close all;n1 = 1; %空气折射率 n2 = 1.45;%平板玻璃折射率 theta = 0:0.1:90;%角 ...

最新文章

  1. SQL Server 中,实现 varbinary 与 varchar 类型之间的数据转换
  2. buildroot 简要记录
  3. JHipster生成微服务架构的应用栈(三)- 业务微服务示例
  4. python注释_Python头条:python基础知识了解___注释、变量、Debug
  5. 计算机设备抽象,计算机系统原理(三) 金字塔形的存储设备、操作系统的抽象概念...
  6. 浅析拯救小矮人的 nlogn 算法及其证明
  7. 计算机网络( 二十二)-数据链路层(补充)
  8. 最全的BI工具选型指南!给你五大箴言要记住
  9. flask-mail异步发送邮件_使用 python 发送邮件
  10. Windows Server 2003下配置IIS6.0+php5+MySql5+PHPMyAdmin环境
  11. 【渝粤教育】国家开放大学2018年春季 0054-22T合同法 参考试题
  12. ANDROID中使用开源框架CITYPICKERVIEW实现省市区三级联动选择
  13. 关于CSDN怎么获得积分和C币的方法
  14. MNN(二):借助Opencv实现MNN推理
  15. npm下载和使用(超详细)
  16. 计算机打印字与印刷字的大小,字号与尺寸对表.doc
  17. 1688API item_search_img - 拍立淘搜索淘宝商品
  18. install pecl php_php – pecl install pecl_http没有提供任何版本
  19. [ZUCC 计网]BB-quiz-数据链路层测试-2020
  20. 人员梯度培养_人才梯队培养计划方案

热门文章

  1. LiveGBS国标GB/T28181前端设备录像历史视音频回放下载接口调用说明
  2. 重邮大学计算机基础考试试题及答案,重庆邮电大学《大学计算机基础(2015》考试试卷.pdf...
  3. 插件技术被浏览器抛弃,网银安全何去何从?
  4. 格雷码解析以及计算(仅供自己记录查阅)
  5. Python育儿系列-python生成竖式运算
  6. QGIS一键加载100万基础地理信息数据导出
  7. ACM为啥子这么难?怎么才能搞好它?
  8. 【vcpkg】vcpkg:用于 Windows、Linux 和 macOS 的 C++ 包管理器
  9. 怎样拒绝公司的offer, 才显得不卑不亢
  10. Score SDE 三种随机微分方程代码解读