2017-11-28 43 views
1

こんにちは私は分割ステップフーリエ法を使用するのが難しいです。私は自由空間でガウスを伝播したいと仮定すると、私が使用することになってる:Fはフーリエ変換とF^-1は逆フーリエ変換である分割ステップフーリエ伝搬 - ビーム伝搬法

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

をです。

私がしたいのは、プロットI(x、z = 0)、I(x、z = 3)とx-z平面の強度分布です。

私は次のコードを使用して、(I(X、Z = 0)、I(X、Z = 3)をプロット)数値的にそれを行う試み

:ただし、I_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) 

をより小さな強度の別のガウスである受信する。

また、x-z平面の強度分布をどのようにプロットするのかよくわかりません。

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

をしかし行列ことになっている3番目の引数は、私が書いたものでベクトル..です

:彼らは私が私が好きな、それを使用したいと仮定関数imagescを使用することをお勧め

誰もがこれで私を助けてくださいできますか?

ありがとうございます。ここ

+0

伝播をzに沿って、あなたが伝播したいガウスは、スプリットステップはどこループのために必要である、1Dであります... – bla

+0

しかし、I(x、z = 3)に対して、私は単一のzを見ていないのですか? – FlyGuy

+0

私はあなたが今何を意味していると思います。私は今試して更新します。ありがとうございました! – FlyGuy

答えて

0

はスプリットステップ無料ガウス伝播の例です:

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

+0

それは素晴らしいです。どうもありがとうございます。私がやったことで、私はほとんど同じことをしましたが、私のループでは、強度の最後の反復を保存してしまったので、I(x、z = 3)のベクトルを受け取りました。あなたのコードと上記の私の元のコードから数(波長、k0など)を差し込み、私はちょうど緑の画面を取得しています。何が問題なの? – FlyGuy

+0

あなたは一貫性のある単位(例えばミクロン)を使用する必要がありますが、実際に使用している数字とその理由はわかりませんが、注意深く確認してください。あなたが入力したものが確かにゼロでないベクトルであることを確認することから始めます。あなたの例を見ることから、私は、これらのパラメータが意味することを理解していないと感じています(そして、私が鈍いのを許しています)。 – bla

+0

私はそれが今働いていると思います。助けてくれてありがとう! – FlyGuy

関連する問題