# Computer-Generated Holography¶

Odak contains essential ingredients for research and development targeting Computer-Generated Holography.
We consult the beginners in this matter to `Goodman's Introduction to Fourier Optics`

book (ISBN-13: 978-0974707723) and `Principles of optics: electromagnetic theory of propagation, interference and diffraction of light`

from Max Born and Emil Wolf (ISBN 0-08-26482-4).
In the rest of this document, you will find engineering notes and relevant functions in Odak that helps you describing complex nature of light on a computer.
Note that, the creators of this documentation are from `Computational Displays`

domain, however the provided submodules can potentially aid other lines of research as well, such as `Computational Imaging`

or `Computational Microscopy`

.

## Engineering notes¶

Note | Description |
---|---|

`Holographic light transport` |
This engineering note will give you an idea about how coherent light propagates in free space. |

`Optimizing phase-only single plane holograms using Odak` |
This engineering note will give you an idea about how to calculate phase-only holograms using Odak. |

`Learning the model of a holographic display` |
This link navigates to a project website that provides a codebase that can learn the model of a holographic display using a single complex kernel. |

`Optimizing three-dimensional multiplane holograms using Odak` |
This link navigates to a project website that provides a codebase that can help optimize a phase-only hologram representing multiplanar three-dimensional scenes. |

## odak.learn.wave¶

This submodule is based on `torch`

, therefore the functions provided here are differentiable and can be used with provided optimizers in `torch`

.

Function | Description |
---|---|

odak.learn.wave.adjust_phase_only_slm_range | Adjust the range of a spatial light modulator. |

odak.learn.wave.band_limited_angular_spectrum | Optical beam propagation with bandlimited angular spectrum. |

odak.learn.wave.calculate_amplitude | Calculate amplitude of a complex field. |

odak.learn.wave.calculate_phase | Calculate phase of a complex field. |

odak.learn.wave.custom | Optical beam propagation with a custom complex kernel. |

odak.learn.wave.generate_complex_field | Generate a complex field from an amplitude and a phase value. |

odak.learn.wave.gerchberg_saxton | Phase-only hologram optimizasion using Gerchberg-Saxton algorithm. |

odak.learn.wave.gradient_descent | Phase-only hologram optimizasion using Gradient-Descent algorithm. |

odak.learn.wave.linear_grating | One or two axis linear grating. |

odak.learn.wave.phase_gradient | Regularization function to measure the variation of the phase. |

odak.learn.wave.point_wise | Phase-only hologram optimization using point wise integration method. |

odak.learn.wave.prism_phase_function | Prism phase function, a prism. |

odak.learn.wave.produce_phase_only_slm_pattern | Produce phase-only hologram for a spatial light modulator with given phase range. |

odak.learn.wave.propagate_beam | General function for optical beam propagation. |

odak.learn.wave.quadratic_phase_function | Quadratic phase function, a lens. |

odak.learn.wave.set_amplitude | Set amplitude of a complex field. |

odak.learn.wave.shift_w_double_phase | Shift a phase-only hologram by propagating the complex hologram and later apply double phase principle. |

odak.learn.wave.speckle_contrast | Regularization function to measure the speckle contrast. |

odak.learn.wave.stochastic_gradient_descent | Phase-only hologram optimization using Stochastic Gradient Descent optimization. |

odak.learn.wave.transfer_function_kernel | Optical beam propagation with transfer function kernel. |

odak.learn.wave.wavenumber | Wave number. |

## odak.wave¶

This submodule is based on `Numpy`

. This submodule existed much before `odak.learn.wave`

. Though this submodule contains more functions than `odak.learn.wave`

, it does not provide the flexibility in optimization provided by differentiation support of `torch`

.

Function | Description |
---|---|

odak.wave.adaptive_sampling_angular_spectrum | Propagate coherent beams with adaptive sampling angular spectrum method. |

odak.wave.angular_spectrum | Optical beam propagation with angular spectrum. |

odak.wave.add_phase | Add a given phase to a given complex field. |

odak.wave.add_random_phase | Add a random phase to a given complex field. |

odak.wave.adjust_phase_only_slm_range | Adjust the range of a spatial light modulator. |

odak.wave.band_extended_angular_spectrum | Optical beam propagation with band extended angular spectrum. |

odak.wave.band_limited_angular_spectrum | Optical beam propagation with bandlimited angular spectrum. |

odak.wave.calculate_amplitude | Calculate amplitude of a complex field. |

odak.wave.calculate_intensity | Calculate intensity of a complex field. |

odak.wave.calculate_phase | Calculate phase of a complex field. |

odak.wave.double_convergence | Provides an initial phase for beam shaping. |

odak.wave.electric_field_per_plane_wave | Return the state of a plane wave at a particular distance and time. |

odak.wave.fraunhofer_equal_size_adjust | Match physical size of field with simulated. |

odak.wave.fraunhofer_inverse | Adjoint model for Fraunhofer beam propagation. |

odak.wave.generate_complex_field | Generate a complex field from an amplitude and a phase value. |

odak.wave.gerchberg_saxton | Phase-only hologram optimization using Gerchberg-Saxton algorithm. |

odak.wave.gerchberg_saxton_3d | Phase-only hologram optimization using Gerchberg-Saxton algorithm for three-dimensional reconstructions. |

odak.wave.impulse_response_fresnel | Optical beam propagation with impulse response fresnel. |

odak.wave.linear_grating | One or two axis linear grating. |

odak.wave.prism_phase_function | Prism phase function, a prism. |

odak.wave.produce_phase_only_slm_pattern | Produce phase-only hologram for a spatial light modulator with given phase range. |

odak.wave.propagate_beam | General function for optical beam propagation. |

odak.wave.propagate_field | Propagate a given array of spherical sources to given set of points in space. |

odak.wave.propagate_plane_waves | Propagate a given plane wave in space and time. |

odak.wave.quadratic_phase_function | Quadratic phase function, a lens. |

odak.wave.rayleigh_resolution | Calculate Rayleigh resolution limit. |

odak.wave.rayleigh_sommerfeld | Optical beam propagation with Rayleigh-Sommerfeld integral. |

odak.wave.rotationspeed | Calculate rotation speed of a wave. |

odak.wave.set_amplitude | Set amplitude of a complex field. |

odak.wave.transfer_function_kernel | Optical beam propagation with transfer function kernel. |

odak.wave.wavenumber | Wave number. |