Import standard modules:
In [ ]:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from IPython.display import HTML
HTML('../style/course.css') #apply general CSS
Import section specific modules:
In [ ]:
from IPython.display import display
from ipywidgets import *
from mpl_toolkits.mplot3d import Axes3D
import plotBL
In [ ]:
HTML('../style/code_toggle.html')
We have seen in $\S$ 4.4.1 ➞ that the visibility function is sampled in a particular way. Depending on the location of the interferometer (in latitude), the projected baseline w.r.t. the observed source and the time and frequency of observation, the $uv$ plane is sampled along tracks which can be derived from the expression of the projected baseline in the ($u$,$v$,$w$) reference frame. These $uv$ tracks are portions of ellipses. During the course of an observation, samples are accumulated along these tracks and form the $uv$ coverage. A precise knowledge of the sky requires the best possible knowledge of the visibility function and therefore a complete sampling of the $uv$ plane.
We will see, in this section, how the $uv$ coverage can be improved using multiple element interferometer ($\S$ 4.4.2.A ⤵) and using time ($\S$ 4.4.2.B ⤵) and frequency$\S$ 4.4.2.C ⤵ () integration.
Up to now, we only considered the case of a 2-element interferometer. In practice, interferometers are built from $N$ elements for which all cross-correlations are computed and amount to $\frac{N(N-1)}{2}$ independent cross-correlations (for each frequency channel, each time step and each polarization). For a N-element interferometer, the sampling in the $uv$ plane is then proportional to $N^2$.
In the following, we will show the characteristic $uv$ coverage of well-known radio interferometers, observed at a single frequency and a single time step (i.e. a snapshot observation). You may select the array of your choice from the list below:
In [ ]:
config = widgets.Dropdown(
options={'VLAa':'configs/vlaa.enu.txt',
'VLAb':'configs/vlab.enu.txt',
'VLAc':'configs/vlac.enu.txt',
'VLAd':'configs/vlad.enu.txt',
'WSRT':'configs/wsrt.enu.txt',
'kat7':'configs/kat-7.enu.txt',
'meerkat':'configs/meerkat.enu.txt'},
value="configs/vlaa.enu.txt",
Description="Antennas:")
display(config)
From the list define above, you can select different configurations corresponding to real instrumental layout. However, if you want to specify yourself the relative positions of the antenna in a $ENU$ reference frame, you can edit the following block and set the variable "custom" to "1".
In [ ]:
# you need to re-evaluate this box if you modify the array.
antennaPosition=np.genfromtxt(config.value)
In [ ]:
# Custom antenna distribution
custom=0
if (custom):
antennaPosition = np.zeros((10, 2), dtype=float)
antennaPosition[0,:] = [0,0]
antennaPosition[1,:] = [-4, 5]
antennaPosition[2,:] = [4, 5]
antennaPosition[3,:] = [-10,0]
antennaPosition[4,:] = [-8,-3]
antennaPosition[5,:] = [-4,-5]
antennaPosition[6,:] = [0,-6]
antennaPosition[7,:] = [4,-5]
antennaPosition[8,:] = [8,-3]
antennaPosition[9,:] = [10,0]
Let's plot the distribution of the antennas from the selected (or customized) interferometer:
In [ ]:
%matplotlib inline
mxabs = np.max(abs(antennaPosition[:]))*1.1;
# make use of pylab librery to plot
fig=plt.figure(figsize=(6,6))
plt.plot((antennaPosition[:,0]-np.mean(antennaPosition[:,0]))/1e3, \
(antennaPosition[:,1]-np.mean(antennaPosition[:,1]))/1e3, 'o')
plt.axes().set_aspect('equal')
plt.xlim(-mxabs/1e3, mxabs/1e3)
plt.ylim(-mxabs/1e3, (mxabs+5)/1e3)
plt.xlabel("E (km)")
plt.ylabel("N (km)")
plt.title("Antenna positions")
As for the previous simulations, we will simulate an observation using the VLA as the default case.
Observation configuration
In [ ]:
# Observation parameters
c=3e8 # Speed of light
f=1420e6 # Frequency
lam = c/f # Wavelength
time_steps = 1200 # time steps
h = np.linspace(-6,6,num=time_steps)*np.pi/12 # Hour angle window
# declination convert in radian
L = np.radians(34.0790) # Latitude of the VLA
dec = np.radians(34.)
The snapshot $\boldsymbol{uv}$ coverage
In [ ]:
%matplotlib inline
Ntimes=3
plotBL.plotuv(antennaPosition,L,dec,h,Ntimes,lam)
Depending on the number of elements and their relative distribution on the ground, the shape of the snapshot $uv$ coverage can be very different from on interferometer to the other. One may prefer an antenna distribution which maximizes an instantaneous coverage which spans all over the $uv$ plane (e.g. VLA in Fig. 4.4.15 ⤵) rather than a compact array which samples a smaller portion of the $uv$ plane. With the raw increase of the total sensitivity, improving the instantaneous $uv$ coverage is the main motivation which leads to increase the number of elements and to optimize their relative positions. A good $uv$ coverage can be obtained if the $uv$ plane is sufficiently and smoothly sampled. In the next section, we will see how the Earth contributes to enrich the $uv$ coverage with a variety of samples.
The observation of one source during several hours requires the tracking of this source with fringe (or delay) tracking. During the motion of the source in the sky, the projected baselines, as seen from the source, will continuously vary along the elliptical $uv$ tracks. If the time sampling is high enough, it is possible to sample each $uv$ track along the observation and accumulate a number of $\frac{N(N-1)}{2}\times N_\text{times}$ independent measurements.
The following experiment will give you the possibility to change the number of time steps collected during an observation, from a snapshot observation up to a 12 hour observation.
In the next block, a snapshot observation will be plotted. You can increase the duration of the observation with the slider which defines the total number of time steps for which the $uv$ coverage is computed. Upon a change on the slider, a new plot will be generated next to the previous one to enable visual comparisons.
(Test values of 2, $\sim$300, $\sim$1200 to see the effects on the $uv$ coverage. Allow some time to generate the plot, especially at large values of time samples).
In [ ]:
from ipywidgets import *
from IPython.display import display
def Interactplot(key,Ntimes):
print "Ntimes="+str(Ntimes)
plotBL.plotuv(antennaPosition,L,dec,h,Ntimes,lam)
slider=IntSlider(description="Ntimes",min=2,max=1200,step=100,continuous_update=False)
slider.on_trait_change(Interactplot,'value')
display(slider)
Interactplot("",2)
With an increasing number of time steps, you can see each individual baselines describing its own elliptic $uv$ track in the $uv$ plane. It is easy to understand that the longer the observation, the better the sampling of the visibility function.
We have seen in $\S$ 4.2 ➞ that the $u$, $v$, $w$ coordinates are usually normalized by $\lambda$. As a consequence, observing with the same interferometer but at a different frequency, give a different set of spatial frequencies. Sampling at a different $u$, $v$ coordinates results in a scaling of the uv coverage of the original frequency. Indeed, for the same snapshot $uv$ coverage at wavelength $\lambda_1$, the $uv$ coverage at $\lambda_2 < \lambda_1$ will be a shrunk version of that a $\lambda_1$.
If the distribution of frequencies is (quasi) continuous, e.g. if the observing system operates in a bandwidth [$f_\text{min}$,$f_\text{max}$], with $N_\text{freqs}$ channels, we can sample contiguously portions of the $uv$ plane with $\frac{N(N-1)}{2}\times N_\text{freqs}$ independent measurements. For each baseline, a radial track will be generated due to the frequency scaling effect of $u$ and $v$.
In the next block, a snapshot observation will be plotted. You can increase the number of contiguous frequency channels (at 10 MHz steps) with the slider. Upon a change on the slider, a new plot will be generated next to the previous one to enable visual comparisons (Note: allow some time to generate the plot).
(Test values of 1, 20, 200 to see the effects on the $uv$ coverage).
In [ ]:
df=10e6 # frequency step
f0=c/lam # starting frequency
lamb0=lam # starting wavelength
def Interactplot(key,Nfreqs):
print "Nfreqs="+str(Nfreqs)
plotBL.plotuv_freq(antennaPosition,L,dec,h,Nfreqs,lamb0,df)
slider=IntSlider(description="Nfreqs",min=1,max=200,step=1,continuous_update=False)
slider.on_trait_change(Interactplot,'value')
display(slider)
Interactplot("",1)
With an increasing number of frequency channels, you can see each individual baselines describing radial track in the $uv$ plane. It is easy to understand that the more frequency channels you allocate to the observation, the better the sampling of the visibility function (theoretically).
The $uv$ plane is an important quantity to monitor when observing with an interferometer. In an ideal case, this plane is the support of the visibility function, characteristic of the sky we want to observe. The $uv$ coverage of an observation is a way to know which portion of the visibility function has been sampled.
We have seen in $\S$ 4.4.1 ➞ that the sampling with one baseline take the form of elliptical trajectories which parameters can be predicted with the location of the interferometer on the Earth, the direction of the source and the baseline characteristics. Due to the motion of the Earth, the sampled spatial frequency (at coordinate $u$, $v$) will follow the $uv$ track.
In $\S$ 4.4.2 ⤵, we addressed three different ways of enriching the $uv$ coverage. First, we can increase the number of antennas and its distribution to improve the instantaneous spatial frequency coverage. Second, we can use the fact that the observed source are moving with the Celestial Sphere (due to Earth rotation). The continuous variation of the projected baseline, and therefore, of the $u$, $v$ coordinates, allow to sample portion of the elliptical $uv$ tracks, for each baseline. A long integration time allow to naturally cover the $uv$ plane without any additional expense than computing the signals correlation at a higher temporal rate (which depend on the desired temporal resolution of each sample). Third, with the use of broadband receivers, we can sample the visibilities at various frequencies by computing the cross-correlation in different frequency channels. With this principle, the $uv$ coverage can also be improved along radial $uv$ tracks. These methods however are facing limitation which will alter the sensitivity and the point source response of the instrument (see $\S$ 9.3 ➞).
In $\S$ 4.5 ➞ we will formulate more clearly all underlying hypotheses we assumed in the previous section. This section will be a prerequisites before addressing the subject of imaging in $\S$ 5 ➞.
Important things to remember
• The number of antennas and their non-redundant distribution are important factors of improvement of the snapshot $uv$ coverage.
• Time integration using Earth Rotation Synthesis builds up the elliptical $uv$ tracks of each baseline (but generates time smearing).
• Frequency integration by observing in a larger bandwidth composed of multiple contiguous channels also helps to cover the $uv$ coverage radially (but generate frequency smearing).