DBBC VLBI plugin

The EDD.dbbc collection implements a software-defined VLBI backend. It can extract requested subbands from wideband voltage streams, package them as VDIF, record or transmit the result, and translate VLBI Field System commands into EDD Master Controller operations.

This page was verified against Galaxy collection version 1.0.1 and Python package version 1.0.0 in the supplied repository.

Signal chain

packetizer stream
       |
       v
DigitalDownConverter  -- DigitalDownConverter:1 streams -->  VDIFPacker
                                                                 |  |
                                                           disk VDIF  UDP VDIF

The VDIF packer can also accept compatible raw packetizer input when no digital down-conversion is required. A spectrometer can subscribe commensally to the upstream voltage stream when network and compute capacity permit.

Roles

EDD.dbbc.ddc_processor

GPU digital down-converter pipeline. Receives time-domain voltage data, mixes each requested local-oscillator frequency, performs rational resampling, and publishes upper and lower sidebands.

EDD.dbbc.vdif_packer

GPU VDIF packing pipeline. Requantizes input samples, creates VDIF frames, records them, transmits UDP, and optionally produces live spectra.

EDD.dbbc.field_system_interface

Persistent protocol bridge rather than a normal EDD pipeline. It exposes a KATCP health endpoint and emulates DBBC and Mark 5 control endpoints for the VLBI Field System.

EDD.dbbc.jive5ab

Deploys JIVE5ab for compatible VDIF recording or transport workflows.

EDD.dbbc.edd_dbbc and EDD.dbbc.installer

Shared image-build and collection-install roles; they are not observation products.

Digital down-converter

The DDC is a streaming pipeline. Its default input format is MPIFR_EDD_Packetizer:2 and its outputs use DigitalDownConverter:1. For every input stream and f_lo value, define two output streams: lower and upper sideband.

DDC configuration

Key

Default

Meaning

f_lo

[256e6] Hz

Mixer frequencies relative to the input stream.

output_samplerate

128 MHz

Sample rate of every output sideband.

output_type

["network"]

One or more output handlers, normally network and/or disk.

input_type

network

network or disk test input.

output_bit_depth

32

Output sample bit depth recorded in the stream description.

samples_per_heap

2048

Samples in an output SPEAD heap.

channel_id_start

0

First channel identifier assigned to generated sidebands.

dada_nslots

16

Slots in input and output DADA buffers.

minimum_size

16777216 bytes

Lower bound used while sizing processing buffers.

nonfatal_numacheck

false

Development escape hatch when no suitable NUMA-local GPU/NIC exists.

The input descriptor must provide sample rate, sync time, central frequency, band orientation, polarization, bit depth, and heap size. The DDC derives final output center frequencies, channel numbers, and timing during configure.

VDIF packer

The VDIF packer is a measuring pipeline for disk recording and can also stream continuously to a UDP consumer.

VDIF packer configuration

Key

Default

Meaning

output_type

["disk"]

Include disk and/or network.

thread_ids

"0"

Comma-separated string or list of VDIF thread IDs matching inputs.

station_id

0

Numeric VDIF station identifier.

digitizer_threshold

0.981599

Threshold used during low-bit quantization.

udp.dest_ip

127.0.0.1

Destination for network output. Set an intentional routable address.

udp.dest_port

4991

UDP destination, matching the recorder configuration.

udp.bind_ip

0.0.0.0

Sender address; an empty value allows automatic fastest-NIC selection.

udp.max_rate

1.1

Sender rate factor.

nfft / naccumulate

2048 / 2

Live-monitor spectral resolution and integration.

enable_monitoring

false

Produce and publish live spectral monitoring data.

measurement_prepare_default

empty fields

Default file_prefix, file_directory, and eddid for recording.

Example DDC-to-VDIF products

{
  "products": [
    {
      "id": "ddc_processor",
      "f_lo": [256000000.0],
      "output_samplerate": 32000000,
      "input_data_streams": [
        {
          "source": "dig_pack_controller:polarization_0",
          "format": "MPIFR_EDD_Packetizer:2"
        }
      ],
      "output_data_streams": {
        "p0_lower": {"format": "DigitalDownConverter:1", "ip": "auto", "port": 8125},
        "p0_upper": {"format": "DigitalDownConverter:1", "ip": "auto", "port": 8125}
      }
    },
    {
      "id": "vdif_packer",
      "thread_ids": [0, 1],
      "station_id": 1234,
      "output_type": ["disk"],
      "input_data_streams": [
        {"source": "ddc_processor:p0_lower", "format": "DigitalDownConverter:1"},
        {"source": "ddc_processor:p0_upper", "format": "DigitalDownConverter:1"}
      ]
    }
  ]
}

Field System interface

The interface runs three concurrent servers by default:

Field System endpoints

Port

Protocol

Function

7150

KATCP

Health and status monitoring

5000

DBBC dbbcn TCP

BBC and IF configuration commands

2620

Mark 5 mark5cn TCP

Scan and recording commands

The service is configured by a JSON file rendered by its Ansible role and mounted into the container. It does not register as an observational pipeline and does not use the standard Redis or Influx sidecars. Test command mapping, timeouts, station identity, and failure recovery with the site’s Field System before an experiment.

Monitoring and safety

The DDC reports output rate and DADA or receiver progress. The VDIF packer reports channel means and standard deviations, recording and sending state, current files, and optional spectra. Confirm VDIF station and thread IDs, timestamp epoch, frame rate, quantization statistics, destination, and recorder readiness before an experiment. A syntactically valid but incorrect VDIF header can make an observation unusable.

Testing

The repository contains Python and C++ unit tests, Field System integration tests, coherence checks, streaming tests, and provision tests for both DDC and VDIF pipelines. Run an end-to-end recording and validate the output with an independent VDIF tool before commissioning a mode.