I am trying to simulate light propagation on python using FFT following the Fresnel diffraction equation given on Wikipedia:

Fresnel using fft

The problem with this is that the output matrix from the DFT would be given in coordinates $(p,q)$, which would inversely scale with my variable propagation distance $z$. To use the new $(x,y)$ coordinates to account for the values outside of the FFT I would need to factor out at least the $z$ value from my coordinate grid to get a 1-to-1 match, but doing so would increase my grid steps with increasing $z$.

What would be the normal solution to something like this? My current idea would be to convert the $h(x,y)$ section to $h(p,q)$ and then apply the evolution again(and use $z/2$ for each evolution), which should take me back to the same grid size. However, that would require applying FFT twice, which I would prefer to prevent if possible.

Any suggestion would be appreciated.

EDIT: Having thought about it a bit more, the two step fft might not work (I need to think about this more). The reason being that $p$ and $q$ being dependent on $z$ seems problematic on integration.

EDIT2: Never mind, it would be fine in this case simply because each integration is fixed with fixed distance $z$. Therefore I can treat it like a constant.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.