相干光衍射原理&衍射积分代码

本文介绍了相干光衍射积分的原理,重点讨论了角谱衍射计算及其在全息仿真、泊松亮斑和四步相移全息术中的应用。通过Maxwell方程组解释衍射基础,并提供了MATLAB代码示例。
摘要由CSDN通过智能技术生成

相干光衍射计算

  • 衍射计算
    • 摘要
    • 衍射积分简介
    • 衍射积分基础:Maxwell方程组
    • 代码对图片要求
    • 仿真四步相移全息
    • 仿真泊松亮斑
    • MATLAB代码部分

衍射计算

摘要

介绍相干光衍射积分的方法和原理,并附加角谱衍射积分代码、泊松亮斑仿真代码,四步相移共轴全息术代码。

衍射积分简介

衍射计算常被用于验证一些相干光现像。比如全息仿真,相位共轭仿真、全息重建等。衍射计算方法有诸多种,但是最准确的还是角谱衍射计算。角谱衍射的传输函数是麦克斯韦方程组(Maxwell方程组)的解析解,所以角谱衍射计算的准确性更高。因为Maxwell方程组有很多解释文章,所以一笔掠过。

衍射计算目前有: 基尔霍夫衍射积分、菲涅尔衍射积分、柯林斯积分、角谱衍射积分等等。目前最常用的是菲涅尔衍射积分和角谱衍射积分。而菲涅尔衍射积分要满足傍轴近似条件的,而且有些情况下,光学实验并不满足傍轴近似(经常遇到)。

衍射积分基础:Maxwell方程组

通过Maxwell(麦克斯韦)方程组可以计算光场分布。Maxwell方程组由四个部分组成:高斯定律、高斯磁定律、法拉第磁感应定律和全电流定律。

高斯定律:在静电场中,穿过任一封闭曲面的电场强度通量只与封闭曲面内的电荷的代数和有关,且等于封闭曲面的电荷的代数和除以真空中的电容率。
公式:
在这里插入图片描述(1)
高斯磁定律:磁场的散度等于零。
公式:
在这里插入图片描述(2)
电磁感应定律:电磁感应定律也叫法拉第电磁感应定律,电磁感应现象是指因磁通量变化产生感应电动势的现象,例如,闭合电路的一部分导体在磁场里做切割磁感线的运动时,导体中就会产生电流,产生的电流称为感应电流,产生的电动势(电压)称为感应电动势。
公式:
在这里插入图片描述(3)
全电流定律:任意一个闭合回线上的总磁压等于被这个闭合回路所包围的面内穿过的全部电流的代数和。
公式:
在这里插入图片描述(4)

根据公式(1)和(3),以及矢量计算中的关系:在这里插入图片描述(5)
可以得到如下公式:
在这里插入图片描述(6)
为了得到麦克斯韦方程组的解析解,可以从频域的角度入手。定义物体的复振幅分布为U0,像平面的复振幅分布为U。相应的频谱用A和A0表示。
在这里插入图片描述(7)
在这里插入图片描述(8)
将公式(7)和(8)代入公式(6)得到
在这里插入图片描述(9)
所以
自由空间相干传递函数在这里插入图片描述(10)
其中:
在这里插入图片描述
表示空间频率,高频信号沿着小角度传输,低频信号沿着大角度传输。角度α、β角度如图:
在这里插入图片描述

代码对图片要求

图片必须是方阵,即行列数量相等。如果不满足,可以自己用0元素扩充为方阵。

仿真四步相移全息

原图
在这里插入图片描述blog.csdnimg.cn/2020052321535435.png)
衍射图
在这里插入图片描述
图像传感器接收图
在这里插入图片描述
四步相移后重建图
在这里插入图片描述

仿真泊松亮斑

仿真泊松亮斑所用的圆形屏障
在这里插入图片描述
仿真的泊松亮斑(热图)
泊松亮斑
衍射圆形屏障半径1mm,衍射距离100mm。遮挡物后的中心有明显的光斑。

MATLAB代码部分

衍射函数本体

function [img]=angulardiffraction(obj,sizex,sizey,z,lambda)  
    [pixely,pixelx]=size(obj);                                              %obj 的行和列 
    if pixelx~=pixely
        error('Pixel width and length must be equal');
    end
    k=2.*pi./lambda;                                                        %定义波矢量
    %% 计算频域坐标和obj频谱
    originpoint=ceil((pixelx+1)/2);                                         %寻找0频率坐标
    dfx=1/sizex;
    fx=[1-originpoint:-1,0:pixelx-originpoint].*dfx; 
    fx=ones(pixelx,1)*fx;
    dfy=1/sizey;
    fy=[1-originpoint:-1,0:pixelx-originpoint]'.*dfy;%注意,fft2后,y方向频谱的正方向是向下的
    fy=fy*ones(1,pixely);
    fobj=fftshift(fft2(obj));                                               %傅里叶变换
    clear('obj');
    %% 计算像面频谱
    fimg=fobj.*exp(1j.*k.*z.*sqrt(1-(lambda.*fx).^2-(lambda.*fy).^2));      %原图与真空CTF作用
    clear('fobj');
    img=ifft2(ifftshift(fimg));                                             %逆傅里叶变换
end

衍射函数(GPU加速+采样条件检查),Matlab(2019a)的GPU加速目前只支持NVIDIA,如果没有硬件不符合,请将MaximunPixel赋值为NaN
所有涉及到的坐标系,x正方向为从左至右,y正方向为从上至下

function [img]=angulardiffraction(obj,sizex,sizey,z,lambda)  
    [pixely,pixelx]=size(obj);                                              %obj 的行和列 
    if pixelx~=pixely
        error('Pixel width and length must be equal');
    end
    k=2.*pi./lambda;                                                        %定义波矢量
    MaximumPixel=5000;                                                      %显存支持最大图片宽度
    gpuWork=false;                                                          %判断GPU加速的指示变量
    %% 计算频域坐标和obj频谱
    originpoint=ceil((pixelx+1)/2);                                         %寻找0频率坐标
    dfx=1/sizex;
    fx=[1-originpoint:-1,0:pixelx-originpoint].*dfx; 
    %按照原理,采样率为fs的频谱,其频谱范围为[0,fs),根据Nyquist采样定理,只有
    %[0,fs/2)有信息,[fs/2,fs)为对称谱。以256为例,则信息为[0,128)像素,即0%127,共128个像素点,频率为[0:127*df];对称一侧为[128,256),同为128个像素点,
    %频率为[128*df,256*df),即[
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值