- #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