MCCS Prototype Beam Weight Design

Note

This is a prototype design. Implementation details may differ.

WeightingStore

The WeightingStore is a central service used by multiple systems across the array. Its primary responsibilities include:

  • Providing weights for beamforming

  • Calculating station phase centres for pointing and delay calibration

MCCS uses the WeightingStore to compute the phase centre of a station during beam configuration. These values feed into the beam pointing system. It is also used to determine weight to apply to each antenna on a per channel basis.

According to THORN-198, the WeightingStore is also expected to be used by OSO (Observatory Science Operations), which requires an interface to add weights. In addition, TMC (Telescope Monitoring and Control) is likely to use the store to calculate substation phase centres as part of generating geometric delays for the CBF (Correlator Beam Former). After an ApplyCalibration attributes will be updated with the applied substation phase centeres, this can be bought up to an interface with TMC if needed.

There will be one instance of the WeightingStore for the entire array. This central database will be fronted by a TANGO device, named MccsWeightingStore.

@startuml
class MccsWeightingStore {
    +fetchWeight(weighting_key_ref)
    +displayweight(weighting_key_ref)
    +calculatePhaseCentre(antenna_locations, weighting_key_ref)

    -AddWeight(weighting_key_ref, weights)
    -RemoveWeight(weighting_key_ref)
}

StationBeam "0..*" ..> "1" MccsWeightingStore

@enduml

Command Flow

The main interaction with the WeightingStore occurs during the Configure command. TMC sends configuration parameters, including a weighting_key_ref. This reference is used to query the WeightingStore for the appropriate weights.

These weights are combined with the beamformerTable, which is set up during the Allocate and Configure commands, to compute a weight per channel, per antenna. These calculated weights are then applied to the SPS subsystem via the calibration-coefficients.

In parallel, the calculatePhaseCentre command is used to compute the phase centre of a station. This value is consumed by the MCCS pointing algorithms to steer the beams correctly.

A command flow diagram is provided below for reference:

@startuml

' Participants
participant Subarray
participant SubarrayBeam
participant StationBeam
participant WeightingStore
participant Station
participant StationCalibrator
participant SpsStation

' Configuration flow
Subarray -> SubarrayBeam: Configure()
SubarrayBeam -> StationBeam: Configure()
StationBeam -> Station: configure_channels() 


StationBeam -> WeightingStore: fetchWeight(weighting_key_ref)
WeightingStore --> StationBeam: antenna_weights
StationBeam -> Station: apply_weights(subarray_beam_id: [antenna_weights])

Subarray -> Station: ApplyConfiguration()

' Station internal processing
Station -> Station: Generate weighting matrix\n(256 x 384) using:\n - beamformerTable\n - antenna_weights \n using subarray_beam_id as link.
Station -> Station: Apply antenna mask:\n - Zero weights for masked antennas across all channels

Station -> Station: Create channel_gain_map \n (i.e reach out to calibrationStore) \n{antenna_id: [channel_gain]}

Station -> Station: Multiply channel_gain_map\nby weighting matrix (256 x 384)

note right of Station: Final result:\nPer-antenna, per-channel calibrated weights

' Calibration application
Station -> SpsStation: load_calibration_coefficients(coeffs)
Station -> SpsStation: ApplyCalibration (i.e switch bank)

@enduml

System Roles and Interfaces

System

Interaction with WeightingStore

MCCS

Fetches weights and calculates station phase centres

MCCS

Fetches weight to apply to the beams on a per antenna per channel basis

OSO

Adds weights to the store via API or device interface

TMC

Calculates substation phase centres to derive geometric delays for CBF