yao
Links
Main pageInstallation
Examples and Scripts
Performance
Data structures and parfiles
Controlling Features
Screenshots
Algorithms
Yao tk dynamic control
News/Weblog
Introduction
These pages present information about yao version 3.3.2 (released 2004aug02), a simulation tool for Adaptive optics (AO) systems. YAO is now at version 4.0, and includes a nice new GUI (pygtk based). I have not updated these pages accordingly, so some of this information might be obsolete, and these is a lot of missing things.
This package is loosely inherited from "simul.pro", an IDL set of routines that I wrote many years ago and have been put to use in a lot of places, but it is much more versatile and yet, faster. Yao is open source, although I have not yet bothered to put the legal license in there. You are welcome to use it, expand it and even distribute it, but please link back to this page, as I will be releasing updates regularly.
Main features
Yao is a Monte-Carlo AO simulation tool. It uses a number of custom developed functions to simulate the wavefront sensor (WFS), the deformable mirror (DM) and many other aspects of an AO loop.Highlights
- Coded in yorick, a open source scripting language similar to IDL or mathlab (powerful and free!). The core, CPU intensive routines are coded in C and make use of vectorial libraries to speed up calculations.
- Shack-Hartmann and Curvature WFS, on or off axis, are supported
- Stackarray (piezostack), curvature (bimorph), modal (zernike) and Tip-Tilt deformable mirrors are supported. The altitude of conjugation is adjustable.
- An arbitrary number of WFSs and DMs can be selected, with the possibility of mixing types. It is therefore possible (and easy) to simulate single DM systems, as well as single non-zero conjugate, GLAO and MCAO systems.
- It supports Natural and Laser Guide Stars (or a mix).
- It supports photon and read-out noise.
- It uses a multi-layered atmospheric model, with geometrical propagation only.
- The loop execution has been optimized for speed: the critical routines have been coded in C. Yorick is thus used as a convenient "glue" between lower levels optimized C calls. Overall, this is rather efficient: A simple 6x6 Shack-Hartmann system runs at up to 650 iterations per second on an apple dual 2GHz G5 (200 iterations/sec for a full diffraction propagation model). A 50x50 Shack-Hartmann system runs at about 3 iterations/s. A 188 curvature system runs at 25 iterations/s (see the performance page for more details).
- Straightforward scriptability to probe parameter domains
- "Toy" interface to change some of the system parameters while the loop is running (new in v3.0). This provides an educational approach to Adaptive Optics (newbies can play with the parameters and immediately sees how the system reacts) and can also provides a quick way to investigate the stability conditions for a newly designed system, before entering more serious Monte-carlo simulations.
The following other capabilities are supported:
- Partitioning of DMs and WFSs in independent subsystems
- 2 methods for Shack-Hartmann:
- Simple gradient average, no noise, very fast: This allow to do tests of the noiseless performance of a system, for quick performance evaluation of system dimensioning
- Full propagation, with subaperture image formation. Includes adjustable subaperture and pixel size, photon and read-out noise, bias and flat field errors, thresholding, convolution by a gaussian kernel and image elongation in the case of LGS
- Separately adjustable integration time for each sensor
- Anisoplanatism modes for MCAO
- DM Hysteresis
- DM saturation
- Separate loop gain per DM
- Adjustable DM sensitivity (micron/volt)
- Adjustable subaperture and actuator validation thresholds
- Adjustable condition numbers for the interaction matrix inversion
- Circular pupil with central obstruction
- Adjustable multi-wavelength, multi-position performance estimate
- Adjustable frame delay (in integer unit of the quantum loop time)
- "Skip and reset" along the phase screens at adjustable interval, to more quickly reach statistically significant performance estimates
- Uplink tip-tilt correction for LGS
- Adjustable LGS Elongation
- Rayleigh Fratricide effect for multiple sodium beacon systems
- Extrapolated actuators
- Centroid Gain optimization, using LGS dithering (only for LGS + Shack-Hartmann)
- Lots of internal variables are accessible from the outside of the program for debugging/implementation of new features
Other remarks and shorcomings:
- I have made use of fast FFT external libraries to significantly improve the speed of the aoloop core routines. Yao comes in two flavors: one uses the proprietary Apple vectorial libraries (veclib), the other uses FFTW (open source). The former obviously runs only on Apple hardware, while the later runs on almost everything (but requires that you install FFTW3, some instructions are provided).
- The set-up routines (aoinit) have not yet been optimized for speed, thus, in particular, inverting large matrices can take some time. This optimization may come in due time, if deemed necessary.
- There is no GUI to configure the systems. The parfile has to be edited manually, which in my view is not a big deal and actually allows for more compact & clever parfiles, as yorick loops can be used to set repetitive variables.
- Some work has been done with pyramid WFS but no has not been maintained and does not work in the current version
- Scintillation is not supported, as it has been shown by many studies to be negligible at NIR wavelengths.
- Command matrices are up to now computed as least-square estimates. Implementation of minimum-variance or MAP should come shortly.
Where to start?
Browse this site. Have a look at the Example & Scripts and Screenshots pages. If you like what you see, go to the Installation page and follow the instructions.Once the package is installed, follow the examples, and then edit your own parfiles to modelize your system.