I’ve written up the first month of mailcast as a paper: Mailcast: one-way HF delivery of packet BBS bulletins with fountain codes. It’s long, so this post is the short version.

What mailcast is

UK packet BBSes pass bulletins to each other over slow connected-mode links, and every link carries every bulletin again. On HF that means fading, retries, and bulletins that take days to get through or never arrive because some BBS along the way isn’t set up to forward to the next.

Mailcast sends them one way instead. GB7RDG’s bulletins go out on 40 m in daylight, once an hour, as M0LTE. Each bulletin is compressed and cut into pieces with a RaptorQ fountain code, so a listener can rebuild it from any set of pieces slightly larger than the bulletin, heard in any slots, in any order. Nothing is ever sent back on air.

A small receiver program, on a Pi with a radio and a sound card or with no radio at all through a public web SDR, collects the pieces. When a bulletin is complete it hands it to the listener’s own BBS (LinBPQ, FBB or XRouter) as if it came from an ordinary forwarding partner, and the BBS’s own duplicate check throws away anything it already has. The only change a listener makes to their BBS is adding that one partner.

The signal is the MIL-STD-188-110D HF serial-tone waveform at 600 or 1200 bps, from pdn-soundmodem, centred on 7.0538 MHz and clear of the UK HF packet channels. The idea of using a fountain code came from Perry M0PYL.

What the month showed

From 6 October to 7 November the station ran 259 hourly slots and carried 465 bulletins. Two sources of evidence: a two-week survey of eight public web SDRs between 83 and 544 km away, and 131 daily reports from nine listeners, which come back to GB7RDG by ordinary packet mail.

  • The strongest web SDRs heard 70 to 80% of the frames sent and rebuilt 88% to nearly all of the bulletins. The best listeners heard about half.
  • Weak receivers heard only 13 to 25% of frames and still rebuilt a third to over half of the bulletins, because pieces from different hours add up. That’s the point of the fountain code.
  • For three listeners, mailcast delivered nearly every bulletin before normal forwarding did. Three others, on better-connected BBSes, already had nearly all of them.
  • A receiver in Sweden, 1,100 km away, heard frames in most daylight slots.

Every slot starts with a short sounding probe, which measures the path at each receiver down to about -15 dB signal to noise, often in slots where no data gets through. It showed a fairly gentle 40 m NVIS channel: a reflection about 270 km up, usually a second path 1.6 ms later, and a Doppler spread of about 0.3 Hz in October.

The week it went wrong

Reception fell sharply from 31 October until 8 November. It started during a geomagnetic storm, so it looked like the band. It wasn’t: the GPS-disciplined reference feeding the transmitter had lost lock while still reporting itself locked, smearing the signal by about 1 Hz. Nothing in the station’s own logs said so. The receivers did, because every site’s measured Doppler spread jumped at the same moment. A network of receivers measuring the channel turns out to be a good check on the transmitter, and I’ve since built a GPSDO display that checks the reference independently.

Other lessons

  • Sharing a radio is the hard part. Most listeners already run a packet node, and the receiver has to borrow the rig for each slot and put it back. Rig modes and receive filters narrower than the signal caught people out.
  • Getting the daily reports back is a routing problem. Several never reached GB7RDG because a BBS along the way wasn’t forwarding to the next.
  • Antennas and local noise mattered at least as much as the software. One listener went from a barely visible signal to 63 frames in a slot by connecting a bigger loop.
  • Web SDRs mean anyone can be a listener with no radio at all.

A second station

The paper ends with the plan for several transmitters. If two stations encode the same bulletin to the same bytes, a listener can combine pieces from both, so coverage adds up with no link between the stations. Bulletins have been sent in the required canonical form since 30 October.

Since the paper was written, that has started on air. John G8BPQ’s head end, GM8BPQ, in the north of Scotland, has been transmitting on 40 m at half past each hour since 11 November, on the same frequency as GB7RDG’s slots on the hour. The first slots showed a strong pilot tone but no data; by mid-afternoon the data was getting through, and my receiver heard 35 frames and completed a bulletin from one GM8BPQ slot, with the tone at 21 dB signal to noise. One listener’s receiver finished two bulletins from a GM8BPQ slot that it already held some pieces of, which is the combining the design is for.

Each station now sends a signed timetable of its slots, and from 12 November GB7RDG’s timetable also advertises GM8BPQ’s, so an up-to-date receiver switches to listen for John at half past without being told. A head end also sends pieces of bulletins it hasn’t finished rebuilding itself, so GM8BPQ can help stations that hear Scotland better than Reading even though its only bulletin feed is what it receives from mailcast. Receivers have a local API for fetching and adding pieces, for anyone who wants to try passing them around by other means.

Next: John plans to get QO-100 going from the same site, with two head ends sharing pieces, and each station’s choice of pieces now depends on the frequency too, so a listener hearing both HF and QO-100 gets more distinct pieces. The data also suggests the band opens for these paths around two hours after sunrise, so the timetables are getting seasonal start times.

Thanks to Perry M0PYL for the idea, to John G8BPQ, Steve G7TAJ, Eoin M0NVK, Anthony M7TAW, Jim GM4CXF and the other listeners who ran receivers and sent reports, to Daz SA6DAZ for his station in Sweden, and to the web SDR operators.

The paper has the full design, the data and the figures. The code, and how to run a receiver, are on the mailcast project page.