← All posts
24 Oct 2026

Detecting fast radio bursts in CHIME baseband

Radio telescopes don't record images. Before any power is detected, they record complex voltages: every sample has an amplitude and a phase. A fast radio burst that crosses billions of light-years is dispersed by free electrons along the way, so lower frequencies arrive later, by a delay proportional to DM/f², where the dispersion measure DM counts the electrons. Inside one narrow frequency channel that dispersion is a chirp, pure phase structure, and a detector that throws the phase away cannot use it.

Our new preprint, Physics Front Ends with Small Learned Heads for Detecting Dispersed Bursts in CHIME/FRB Baseband Voltages, asks what kind of model detects these bursts best when it reads the complex voltages directly, and how small it can be.

A sign convention that broke our first detector

CHIME, the Canadian Hydrogen Intensity Mapping Experiment, is a radio telescope in British Columbia that observes the whole northern sky between 400 and 800 MHz every day; its FRB project finds several fast radio bursts a day. For 140 bursts of its first catalogue the collaboration released the beamformed complex voltages, called baseband data, in a public archive.

Within one 390.625 kHz CHIME channel, dispersion is a phase factor exp(±i φ(f) DM), and which sign is right depends on how the channel's spectrum is oriented. The first time we ran our complex dedispersion filters on real CHIME recordings, the score timelines peaked away from the known bursts.

We dedispersed the voltages with both signs and correlated the result with the dedispersed power that the CHIME archive provides. Over 30 channel-polarisations the median correlation was 0.988 for one sign and 0.06 for the other: CHIME baseband channels have the reverse frequency orientation to the textbook formula. A plausible cause is that CHIME samples its 400–800 MHz band in the second Nyquist zone, which inverts the spectrum, though we established the sign empirically rather than from the signal chain. The Parkes data for the Vela pulsar in the Breakthrough Listen open-data archive has a similar trap: the band is inverted although the header gives a positive bandwidth. With the header's channel order the folded pulse has a signal-to-noise ratio of about 1; with the order inverted, about 2,400 in 2 seconds. Getting the orientation of the data right mattered more than any modelling choice.

From a 65-parameter filter bank to a 47k hybrid

The data are 29 public CHIME/FRB baseband events, 53 GB of beamformed complex voltages, split by event into 19 for training, 5 for validation and 5 for testing. Synthetic dispersed bursts are injected into real noise and interference, and each test event gets its own detection threshold at a 1% false-alarm rate, calibrated on separate noise windows.

The hybrid detector: FFT, sixteen dedispersion filters, inverse FFT and power form a map of trial DM against time, read by three convolutions and a linear layer
The hybrid detector. The map in the middle is real: a CHIME noise window with one injected burst, after the front end. The burst is the narrow streak near DM 640.

On injected bursts in real noise and interference, detection probability at a 1% false-alarm rate:

DetectorParametersE = 100E = 200E = 200, 3 events never used in development
Energy detector (no phase)03%20%17%
Dedispersion at the true DM + boxcar011%51%48%
Real CNN on I/Q293k17%70%65%
Complex CNN296k19%73%68%
Chirp bank (linear read-out)6510%53%42%
Hybrid13k36%93%92%
Hybrid47k51%98%97%

These numbers are for synthetic bursts. The real question is what happens with real ones.

Ten real bursts, frozen in advance

We froze an evaluation on the real bursts of the ten events no model was trained on, with DMs from 113 to 1,395. Each model was trained twice, on the original Gaussian bursts and on a broader family with scattering tails, two-component bursts, partial band occupancy and spectral tilt, with no selection on these bursts. The test is offline: we slide each model over every good channel of a recording and ask whether the channel-summed score peaks where the burst is.

Streaming memory: the Vela phase-jump test

In Streaming is not memory we argued that a model that streams in constant memory does not necessarily remember. Here we tested memory directly on a pulsar. Vela emits a pulse every 89.4 ms, so predicting the next pulse requires remembering the phase.

We trained a small CNet streamer with Born attention and a fixed per-head decay, 114,688 complex weights, to predict the next token of a stream made from Parkes baseband: coherently dedispersed power in 1.17 ms tokens, so one pulse period is about 76 tokens. Then we cut tokens out of the stream mid-way: half a period, which breaks the pulse phase, or a full period, which keeps it.

These results are consistent with the model tracking the pulsar's phase in its fixed-size state, for a 76-token period with pretraining on synthetic pulse trains. On synthetic data the memory extends to periods of 1,222 tokens with a period curriculum and slow decay; on real data at that period we have too few pulses to say.

Code

CNet, our complex-valued framework, is open source at github.com/crasmarum/CNet, including the new dedispersion layers (ChirpFilter and BoxcarMax, with their finite-difference and GPU tests) and the CNet detector example. The PyTorch experiment code for this paper will follow.

All of it, including what went against us, is in the paper.