- #1
stephen8686
- 42
- 5
- TL;DR Summary
- I am trying to code angular spectrum beam propagation in matlab, but I'm having trouble with the propagation factor.
I'm making a MATLAB code to propagate a gaussian field in the angular spectrum regime (fresnel number >> 1).
After Fourier transforming the field, you propagate it: $$U(k_x,k_y,z) = U(k_x,k_y,0)e^{ik_z z}$$
The thing that I am having trouble with is the propagation factor, I have looked at this thread: https://www.physicsforums.com/threads/code-of-the-angular-spectrum-method.823494/
and they say that
$$k_z = \frac{k_0 z}{\sqrt{x^2+y^2+z^2}}$$
where ##k_0 = 2\pi/\lambda##
But I've been following Goodman's Fourier Optics book which says that it should be (Eq 3-62)
$$k_z = k_0\sqrt{1-(\lambda f_x)^2-(\lambda f_y)^2}$$
And I don't see how they are equivalent.
But here is my real question. If I use Goodman's propagation factor, what are ##f_x## and ##f_y## computationally?
Say I have a square aperture length = 1m, and I sample it 2048 times along each axis. Then my x and y vectors go from -0.5 to 0.5 with 2048 points, in Matlab language:
x = -L/2:dx:L/2-dx;
So how do I get a ##f_x## vector? I feel like it should be ##2\pi/x## or something, but that doesn't work.
Hope my latex works. If you need more clarification just ask. Thanks
After Fourier transforming the field, you propagate it: $$U(k_x,k_y,z) = U(k_x,k_y,0)e^{ik_z z}$$
The thing that I am having trouble with is the propagation factor, I have looked at this thread: https://www.physicsforums.com/threads/code-of-the-angular-spectrum-method.823494/
and they say that
$$k_z = \frac{k_0 z}{\sqrt{x^2+y^2+z^2}}$$
where ##k_0 = 2\pi/\lambda##
But I've been following Goodman's Fourier Optics book which says that it should be (Eq 3-62)
$$k_z = k_0\sqrt{1-(\lambda f_x)^2-(\lambda f_y)^2}$$
And I don't see how they are equivalent.
But here is my real question. If I use Goodman's propagation factor, what are ##f_x## and ##f_y## computationally?
Say I have a square aperture length = 1m, and I sample it 2048 times along each axis. Then my x and y vectors go from -0.5 to 0.5 with 2048 points, in Matlab language:
x = -L/2:dx:L/2-dx;
So how do I get a ##f_x## vector? I feel like it should be ##2\pi/x## or something, but that doesn't work.
Hope my latex works. If you need more clarification just ask. Thanks