分步傅立叶传播 - 光束传播方法

时间:2017-11-28 19:14:55

标签: matlab signal-processing fft physics image-scaling

你好我使用分步傅立叶方法有困难。假设我想在自由空间中传播高斯,我应该使用:

A(x,z) = F^-1 [exp((i*k^2*z)/(2*k_0))* F[A(x,0)]]

其中F是傅立叶,F ^ -1是反傅立叶。

我想要做的是绘制I(x,z = 0),I(x,z = 3)和x-z平面中的强度分布。

我尝试使用以下代码以数字方式(绘制I(x,z = 0),I(x,z = 3)):

lambda = 0.5*10^-6;
k0 = 2*pi/lambda;
w = 10*10^-6;
N=500;
a=0.4*10^-4;
dx=a/N;
x = -a/2:dx:a/2-dx;
Dk_x = 2*pi*N/a;
dk_x=2*pi/a;
k_x=-Dk_x/2:dk_x:Dk_x/2-dk_x;
N = (k_x.^2)/(2*k0);
z = 0:(5*10^-3)/length(N):5*10^-3;
z(end) = [];
% A0 = A(x,z=0)
A0 = exp(-x.^2/w^2);
I_0 = A0.*conj(A0);
% F_A0 is the fourier of A0
F_A0 = fft(A0);
% A3 = A(x,z=3)
A3 = ifft(exp(1i*N*3).*F_A0);
I_3 = A3.*conj(A3);
figure
plot(x,I_3,x,I_0)

然而,I_3不是我期望接收的,这是另一个强度较小的高斯。

另外,我不确定如何在x-z平面上绘制强度分布。他们建议使用imagesc功能,我想我会像以下一样使用它:

imagesc(x,z, abs(ifft(exp(1i*N.*z).*F_A0).^2)

但是第三个参数,应该是一个矩阵,是我写的一个载体..

有人可以帮我解决这个问题吗?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

这是分步自由高斯传播的一个例子:

N=2^9; % x grid points
L=100; % box length
dx=L/N; %position grid interval
x=(-L/2+1/N):dx:L/2; %define position grid (centered around origin)

dk=2*pi/L; %momentum grid interval
k=(-N/2+1:1:N/2).*dk; %define momentum grid

A_z=exp(-x.^2); % initial gaussian
dz=0.01; % propagation step
z=0:dz:3; % propagation vector

% do the propagation using split step
for n=1:numel(z)
    A_z=ifft(fftshift(  exp(1i*k.^2*dz).*fftshift(fft(A_z))  ));
    I_z(n,:)=abs(A_z).^2;
end

imagesc(x,z,I_z)
xlim([-20 20]);
xlabel('x'); ylabel('z')

enter image description here