hfmodemDocumentation

Binary FSK: the naval broadcast (STANAG 4481) and MIL-STD-188-110B 5.1

hfmodem.bateleur.fsk sends and receives binary FSK as STANAG 4481 (Edition 1) annex C gives it for NATO naval shore-to-ship broadcasts, with the characteristic frequencies and conventions of MIL-STD-188-110B 5.1 and 4.2. It was written from those texts. No other implementation was read, and no recording of a broadcast has been tested against it.

What the texts give

PartMode namesSource
Single channel, 850 Hz shift (±425 Hz), space the higher; the mark's offset ends in 75 Hz so that the carrier sits on 100 Hz; the pair about 2000 Hz (110B table IV, HF: mark 1575, space 2425) or about 1700 Hz75W, 75W/17004481 C.2; 110B 5.1.2, table IV
Single channel, 170 Hz shift about 2000 Hz75N, 50N110B 5.1.1, table IV
Multi-channel: sub-carriers at 255 + 170n Hz, n 1 to 16, each ±42.5 Hz; channel n twinned with n + 8 in diversity; channel 3 the one ships take as a single channel75V3, 75V3D4481 C.3
Mark is binary one and the lower frequencyall110B 4.2.2, table II
Rates: 50 Bd, or 75 × 2^m50–1200 Bd110B 4.2.1
PSK broadcasts: STANAG 4285 with its annex E, 75 bit/s and upMODE 4285 75L and the rest4481 C.4, C.5 (s4285)

What neither says, and what is chosen here

On the station, a mode is keyed only if its tones and keying sidebands lie in the span the station declares for bateleur (365–2985 Hz). So multi-channel sub-carriers 1, 15 and 16, and any pair twinned with them, are for offline work (offair) only.

The receiver

stream.ReceiverFsk streams, and fsk.receive runs it over a recording. The mode is set beforehand at both ends: nothing on the air says it.

How it is tested

Against itself only, through bateleur.sim's channels, scored by character error rate (edit distance over the message):

Three runs each, of a 159-character message:

ModeChannelOffsetCharacter errors
75Wwhite noise, 6 dB+25 Hznone
75W/1700white noise, 10 dB−30 Hznone
50Nwhite noise, 10 dB+12 Hz0–2.5%
75WCCIR good, 10 dB00–4%
75W, 75W/1700CCIR poor, 10 dB0 or −30 Hz2–11%
75WCCIR poor, 20 dB02–6%
75V3CCIR poor, 6 dB04–7.5%
75V3DCCIR poor, 6 dB00–0.6%

The poor channel's two paths, 2 ms apart, fade the mark and space tones independently, and nothing here is coded. Even read at the true timing, 75W there makes about 0.3% bit errors at 20 dB, which is several percent of ten-bit characters. Diversity (V…D) is the broadcast's own answer to that. Two minutes of noise start nothing. Fed in odd-sized pieces, back-to-back messages come out whole. On the station, a message from the host port keys through the arbiter, split across key-ups at 75 Bd, and decodes back; a replayed transmission reaches the host port.