The descriptions on this page are rather anemic at the moment, so please read this pdf explanation of how this is all done
WARNING As of this writing, if you run a simulation a second time with the same name, you will apply the noise twice, even if you delete foo.noisy.ms (simdata in fact does that for you). We're working on understanding and correcting this problem 2002/02/23.
noise_thermal, t_sky, and tau0 allow you to add thermal noise from the atmosphere and from the ALMA receivers according to current ALMA specifications according to observing band. At time of writing, simdata knows the receiver temperature specifications for ALMA and EVLA, and a little about the altitude and pressure at the ALMa site.
For more flexibility and control, use the sm tool. run simdata without noise, and niter=0 to not produce a clean image. Optionally make a copy of the noise-free measurement set, and then do the following:
sm.openfromms("my.ms") sm.setnoise( ... options ... ) sm.corrupt() sm.done()
sm.setnoise takes as arguments the atmospheric and ground/ambient temperatures, antenna efficiencies, site characteristics, etc. There are three modes:
- simple: specify simplenoise="1Jy" to get random Gaussian noise with 1Jy RMS
- tsys-atm: use environment temperatures, antenna parameters, and the aatm library to create a model of the troposphere and add random noise of the appropriate magnitude to the visibilities
- tsys-manual: specify atmospheric brightness temperature and optical depth yourself (rather than let aatm calculate it for you) and apply noise of the corresponding magnitude.
- see the pdf mentioned above for the precise equations used
For any of the sm corruption methods, an actual calibration table can be written out, and plotted with plotcal to make sure you're introducing the magnitude and type of corruption that you desire.
Atmospheric Phase Noise
The troposphere is refractive, so introduces a phase delay, and is not uniform, so that phase delay differs between antennas. Excessive phase noise decorrelates the signal. In CASA, you can use sm.settrop to corrupt your measurement set with phase noise in two different ways:
Full corruption will make your data look worse than real ALMA data should look. ALMA will use Water Vapor Radiometers (WVRs) to correct for the atmospheric phase delay in real time during the observation. Once the full hardware and software system is operational, the residual phase errors should be small (a few microns of equivalent PWV variation), roughly Gaussian, and independent on each antenna, so a more realistic portrayal of that may be to use sm.setgain with the real part of the gain equal to zero, or to use mode="individual" below. The full phase screen treatment is interesting to explore the full uncorrected corruption, to test other telescopes, and to test heuristics for WVR calculations. For more information, please see ALMA memos 587, 582, 573, 568, 535, 523, 515, 496, 495, 491, 490, 451, 415, 404, 361, 332, 252, 210, 209, 176 ...
- mode="individual": the delay varies with time according to fractional Brownian Motion (fBM), or generalized 1/f noise. This mathematical description is very good for many natural stochastic processes, and used very widely for e.g. CGI simulations of fractal landscapes, turbulent motions and structures in clouds and water, electronic gain drift, etc.
- mode="screen": a 2-dimensional phase screen is generated with the same fBM mathematical model, and blows across the array at the specified wind speed. This creates much more realistic correlations in time and space between antennas. In practice, what is created is a fluctuation of precipitable water vapor (PWV) screen, and then the aatm library and tropospheric model is used to calculate the corresponding phase delay as a function of frequency.
old method, unsupported, YMMV: Rob Reid wrote a python script to add phase noise, noisify_alma.py. noisify_alma gets its parameters from the ALMA specifications where it can, and an approximate Komolgorov model of the atmosphere such that the phase difference between two antennas increases with baseline length.
- note that noisify_alma.py also does thermal noise. don't add twice as much as you intended.
- mode="random" generates random Gaussian complex gains with the given real and imaginary RMS
- mode="fbm" generates a fractional Brownian Motion complex gain drift or time-dependent variation, independently for each antenna
Leakage a.k.a. Cross-polarization
- random Gaussian (time-independent) complex cross-polarization leakage terms, with specified real and imaginary amplitudes, and an optional systematic offset from zero
- at time of writing, sm and simdata only calculate cross-polarization in the linear approximation (i.e. your cross-hands will change but Stokes I should not). Full treatment will be added in the future.
see also alma memo 288