Bien le bonjour,

je suis actuellement en train d'essayer de simuler la diffraction de Fresnel à l'aide de la formule qui donne l'amplitude de l'onde à une distance z de mon obstacle.

Pour ce faire j'ai écrit un code sous Matlab version R2017b, mais je pense que mon problème de FFT serait le même dans d'autre language de code.

Alors voilà mon problème c'est que dans ma simulation si je regarde l'amplitude en fonction de la distance , je ne vois pas le faisceau diffracté.
Cependant si je trace le profil d'intensité en fonction de x' j'obtient le bon profil d'intensité pour une fente donc cela me rassure.

je pense que le vrai problème vient du fait que lorsque j'utilise la FFT, je ne prend pas la valeurs correspondant au point donc ma question serait, comment écrire la FFT pour prendre sa valeur au point voulu?

le code de ma simulation est le suivant :
Code:
 
%%%%%%    Simulation of the Fresnel Diffraction, Matlab    %%%%%%%

%% Initialization %%

clear all
close all

%% Grating %%

for i_grating = 1:250			% creation of a rectangular aperture
    A_t(i_grating) = 0;
end
for i_grating = 251:350;
    A_t(i_grating) = 1;
end  
for i_grating = 351:601
    A_t(i_grating) = 0;
end  


%% Parameters %%
	  
Lambda = 795e-9;                % wavelength
k = 2*pi/Lambda;			    % the wave vector
z = [0.06 :0.01: 6];            % distance from the grating
dx = 20e-6;                     % size of a pixel in micrometer
x =[-6000e-6 :dx: 6000e-6];     % coordinate on the grating plane
x2 =[-6000e-6 :dx: 6000e-6];    % coordinate on the screen plane

plot(A_t)                       % show the amplitude just after the grating(z=0+)

%% Simulation %%

for i_z = 1:length(z)			 % first loop on the distance to the grating
  for i_x = 1:length(x)		 % loop on all point of the grating
    f(i_x)=A_t(i_x)*exp(1i*k*((x(i_x))^2)/(2*z(i_z)));
  end
  A = fftshift(fft(f)); 
  for i_x2 = 1:length(x2)		 % we do a loop for all point in the observing plane at z = cst
    C =(1/(1i*Lambda*z(i_z)))*exp(1i*k*(z(i_z)+(x2(i_x2))^2)/(2*z(i_z)));
    A_p(i_x2,i_z) = abs(C*A(i_x2));
  end
	
end

%% 2D Map %%

figure;
imagesc(A_p);
colormap jet;		 % color representing the light intensity

j'obtient les figures ci-dessous, la première représente l'ouverture que j'utilise, la deuxième l'amplitude de la lumière en fonction de z, l'abscisse correspond à la distance z, et l'ordonnée correspond à x', on voit que le faisceau ne diverge pas du tout ...
resultats.PNG

Merci à tous ceux qui auront pris le temps de lire ce post