角谱衍射&二维傅里叶变换
clc;clear
milli=1e-3;micron=1e-6;nano=1e-9;
lambda=532*nano;
k=2*pi/lambda;
z=50*milli;
pixel=1200;
Spixel=5*micron;
originpoint=ceil((pixel+1)/2);
totalsize=Spixel*pixel;
%% 坐标
xaxis=(1-originpoint:pixel-originpoint)*Spixel;
x=repmat(xaxis,[length(xaxis),1]);
yaxis=(1-originpoint:pixel-originpoint)*Spixel;
y=repmat(yaxis',[1,length(xaxis)]);
%% 光束约束
% r=1*milli; %圆孔
% aperture = heaviside(r-(sqrt(x.^2+y.^2)));
% aperture(aperture==0.5)=0;
% figure;imshow(aperture,[])
ax=x; %矩形
ay=y;
ax((-0.0005<ax)&(ax<0.0005))=1;
ay((-0.0005<ay)&(ay<0.0005))=1;
aperture=ax.*ay;
aperture((1<aperture)&(aperture<1))=0;
%%
beam0=ones(length(xaxis),length(yaxis));
beam1=beam0.*aperture;
figure;imshow(beam1,[])
beam2=beam1.*exp(-1j*k*(x.^2+y.^2)/(2*z));
figure;imshow(angle(beam2),[])
% img1=angulardiffraction2(beam1,totalsize,totalsize,z,lambda);
% figure;imshow(abs(img1),[])
%% 角谱衍射
dfx=1/totalsize;
dx=(1-originpoint:pixel-originpoint)*dfx;
dfy=1/totalsize;
dy=(1-originpoint:pixel-originpoint)*dfy;
[dx,dy]=meshgrid(dx,dy);
Beam1=fftshift(fft2(fftshift(beam2)));
H=Beam1.*exp(1j*k*z*sqrt(1-(lambda*dx).^2-(lambda*dy).^2));
img=fftshift(ifft2(fftshift(H)));
figure;imshow(abs(img),[])
%% 傅里叶变换
img1=fftshift(fft2(fftshift(beam1)));
figure;imshow(abs(img1),[])
function [img]=angularspectrum(obj,totalsizex,totalsizey,z,lambda)
k=2*pi/lambda;
[pixelx,pixely]=size(obj);
originpoint=ceil((pixelx+1)/2);
dfx=1/totalsizex;
dx=(1-originpoint:pixelx-originpoint)*dfx;
originpoint=ceil((pixely+1)/2);
dfy=1/totalsizey;
dy=(1-originpoint:pixely-originpoint)*dfy;
[dx,dy]=meshgrid(dx,dy);
fobj=fftshift(fft2(fftshift(obj)));
H=fobj.*exp(1j*k*z*sqrt(1-(lambda*dx).^2-(lambda*dy).^2));
img=fftshift(ifft2(fftshift(H)));
end