MCCS Calibration

A station forms its beams by summing the signals from its 256 antennas. Each of those signals reaches the beamformer by its own path, through the antenna, its cable and the receiver electronics, and each path imposes its own phase and amplitude offset. Those offsets differ from antenna to antenna, vary with frequency, and drift over time. Uncorrected, the antennas do not add in phase, the station loses sensitivity and its beam does not sit where it was pointed. Calibrating a station means measuring those offsets and cancelling them, as a complex gain per antenna per channel.

The sky serves as the reference. The station’s channelised samples are correlated to give the visibility on every baseline, and the same sky at the same moment is modelled to predict what an ideally behaving station would have measured. Any disagreement between the two is attributed to the station itself, and the per-antenna gains that reconcile them are the calibration solution. Because the offsets drift, this is not done once. Sweeps are run on a schedule, each adding a fresh set of solutions. Solutions are stored rather than applied as soon as they are produced, so that they can be judged before being put into service, and are loaded onto the hardware when a subarray configures.

This document focuses on how the Tango devices in MCCS (Monitoring, Control and Calibration Subsystem) perform calibration functions.

Calibration splits into two halves: generation acquires data, solves it and stores the result, and application selects a stored solution and loads it onto the hardware.

@startuml

skinparam componentStyle rectangle
skinparam shadowing false
skinparam ArrowColor DarkSlateGray

rectangle "Generation" as Generation {
  rectangle "**Trigger**\na scheduled cron tick,\nor GenerateCalibrationSolution by hand" as Trigger
  rectangle "**Acquire**\nthe station correlates the sky it is seeing,\none channel at a time over a sweep" as Acquire
  rectangle "**Solve**\neach channel's visibilities are compared\nwith a model of the same sky, giving\na complex gain per antenna" as Solve
  rectangle "**Fit**\nphase is fitted across the swept channels,\nso gains can be interpolated" as Fit
  database "Calibration Database\nevery solution ever produced" as CalibrationDBWrite
}

rectangle "Application" as Application {
  database "Calibration Database\nevery solution ever produced" as CalibrationDBRead
  rectangle "**Configure**\na subarray configures and asks each\nof its stations to calibrate itself" as Configure
  rectangle "**Select**\nthe store picks the solution to use\nfor each frequency channel" as Select
  rectangle "**Load and apply**\ngains are written to the TPMs\nand take effect together" as Apply
}

Trigger --> Acquire
Acquire --> Solve
Solve --> Fit
Fit --> CalibrationDBWrite : store
Configure --> Select
CalibrationDBRead --> Select : read
Select --> Apply

@enduml

Please refer to the following links for their documentation on their part in the process:

  1. ska-low-mccs-calibration

    ska-low-mccs-calibration Documentation.

    The MccsSolver device interfaces with this library to compute calibration solutions.

  2. TPM Interface (SPS-TPM-API)

    ska-low-sps-tpm-api Documentation.

    The MccsTile device interfaces with this library to control the TPM (Tile Processing Module) boards.

Data Products

Reference material