initial commit

This commit is contained in:
2026-08-07 15:56:42 +09:00
commit 91ad25aca9
1012 changed files with 159314 additions and 0 deletions
@@ -0,0 +1,63 @@
% FUNCTION [u_1, H, h, dH] = near_field_evolution(u_0, z, lambda, extent, use_ASM_only)
% Description: nearfield evolution function, it automatically swithch
% between ASM and Fraunhofer propagation
function [u_1, H, h, dH] = near_field_evolution(u_0, z, lambda, extent, use_ASM_only)
H = [];
h = [];
u_1 = [];
dH = [];
if nargin < 5
use_ASM_only = false;
end
extent = extent(:)' .* ones(1,2);
if z == 0
H = 1;
u_1 = u_0;
return
end
if z == inf
return
end
Npix = size(u_0);
xgrid = (0.5+(-Npix(1)/2:Npix(1)/2-1))/Npix(1);
ygrid = (0.5+(-Npix(2)/2:Npix(2)/2-1))/Npix(2);
k = 2 * pi / lambda(1);
% Undesamplling parameter
F = mean( extent.^2 ./ (lambda(1) .* z .* Npix ));
if abs(F) < 1 && ~use_ASM_only
% farfield propagation
warning('Farfield regime, F/Npix=%g', F )
Xrange = xgrid*extent(1);
Yrange = ygrid*extent(2);
[X,Y] = meshgrid(Xrange, Yrange);
h = exp(1i*k*z +1i*k/(2*z) * (X'.^2 + Y'.^2));
% this serves as low pass filter for the far nearfield
H = ifftshift(fft2(fftshift(h)));
H = H / abs(H(end/2+1, end/2+1)); % renormalize to conserve flux in image
else
% standard ASM
kx = 2 * pi .*xgrid / extent(1) * Npix(1);
ky = 2 * pi .*ygrid / extent(2) * Npix(2);
[Kx, Ky] = meshgrid(kx, ky);
dH = ( -1i*(Kx'.^2+Ky'.^2)/(2*k) );
H = exp( 1i*z*sqrt( k^2 - Kx'.^2-Ky'.^2)); % it make it a bit more sensitive to z distance
h = [];
end
u_1 = ifft2( bsxfun(@times, ifftshift(H), fft2(u_0)));
end