lanner / experimental / illustrated protocol guide

Two tones.
Three ways to carry text.

RTTY sends a stream of characters. SITOR-B adds a checked seven-unit alphabet and sends each character twice. NAVTEX gives that broadcast stream a bulletin header, a body and an end marker.

hfmodem implements the character tables, waveform generation and passive decoders. Its console can monitor all three. These are experimental implementations with local software tests; no named independent on-air Lanner result is claimed. Every figure below is a schematic built from protocol and implementation constants, not a received signal.

01 / The physical channel

The same shift does not mean the same code

Both defaults use two audio tones 170 Hz apart. RTTY runs at 45.45 baud, with mark above space in the USB audio convention. SITOR-B runs at 100 baud: the higher tone is B and the lower is Y. In the seven-unit table B is stored as zero and Y as one; this differs from RTTY’s mark-as-one convention. A frequency shift is the distance between tones, not the signal’s occupied bandwidth.

45.45 BdRTTY · one unit ≈22.00 ms
100 BdSITOR-B · one unit =10 ms
170 HzTone separation in both defaults
RTTY and SITOR-B audio tone pairsRTTY space 1415 and mark 1585 Hz, centred on 1500. SITOR-B Y 1615 and B 1785 Hz, centred on 1700. Both pairs have 170 Hz separation. Positions show audio frequency, not a measured spectrum.RTTYSITOR-Bspace 1415mark 1585Y 1615B 178512001400160018002000 Hz
Audio-tone geometry from rtty.py and sitor.py. Vertical strokes identify tone centres; they are not spectral-power measurements.
Tone geometry in text
Implemented default audio frequencies
ModeLower toneCentreUpper toneSymbol rate
RTTYSpace 1415 Hz1500 HzMark 1585 Hz45.45 Bd
SITOR-B /NAVTEXY 1615 Hz1700 HzB 1785 Hz100 Bd

02 / Asynchronous characters

A start, five code units, and a stop

The default RTTY character has one space start unit, five ITA2 code units in order 1 through 5, and 1.5 mark stop units. That is 7.5 unit times: about 165.02 ms at 45.45 Bd, or 6.06 codewords per second before shift characters and other controls. There is no character checksum or retransmission in this framing. An incorrect but valid-looking character can print without a warning.

RTTY start, data and stop units

One schematic character. The five-bit code determines a letters/figures pair; the current shift state chooses what prints. The wider stop segment lasts 1.5 units.
Selected character’s units in text
Wire order and nominal timing
ElementValueToneDuration

03 / One alphabet, two cases

Shifts give five bits a larger vocabulary

Five bits have 32 combinations. Letter shift (LTRS, 11111 in transmitted unit order) selects letters; figure shift (FIGS, 11011) selects numbers and punctuation. The same 10101 code prints Y in letters and 6 in figures. A lost shift can affect a run of text, not just one character. The console defaults to US-TTY figures and unshift on space (USOS); --no-rtty-usos keeps figure state across a space.

LTRS → Y11111 → 10101
Print Y
FIGS → 611011 → 10101
Same code; print 6
SPACE00100
With USOS, restore letters
Y again10101
Print Y with USOS; 6 without

US-TTY and international ITA2 differ in eight figures entries; their letter codes agree. SITOR retains the shift idea but maps characters into its own seven-unit alphabet. See the full code tables for controls and both figures variants.

04 / Time diversity

SITOR-B separates two copies of each character

A SITOR word has seven units and exactly four B tones plus three Y tones. That ratio detects any single-unit inversion; it cannot detect every multiple-unit error. Seven units at 100 Bd occupy 70 ms. Direct (DX) and repeated (RX) slots alternate. Four other 70 ms slots lie between a word and its copy: a 280 ms clear interval, or 350 ms from one start to the next.

The receiver checks both copies. A valid copy can replace an invalid one; matching valid copies agree. Two different valid copies leave the character unresolved. hfmodem also uses soft tone evidence when both hard decisions are damaged; confidence thresholds and shift-state handling belong to its receiver implementation. This is time-diversity forward error correction, without a return-path acknowledgement.

SITOR-B DX and RX slots

Schematic timing, not a fade recording. RX means a repeated transmission slot here; it does not mean the receiver transmits a reply.
Slots and recovery decision in text
One direct/repeat pair at 100 Bd
SlotStart/endContentsPair role
00–70 msADirect copy
1–470–350 msFour other words280 ms spacing between copies
5350–420 msARepeated copy

The waveform starts with alternating phasing signals to establish slot alignment. The library default is 16 pairs, consistent with M.625’s minimum, and ends with idle-alpha signals in the DX stream. These defaults are not a complete NAVTEX transmitting schedule: broadcast-specific phasing and identification rules apply beyond basic waveform generation. Selective SITOR-B addressing and SITOR-A’s acknowledged 450 ms cycles are outside these console monitors.

06 / At the operating desk

Choose the text decoder and keep listening

hfmodem console rtty monitor
hfmodem console sitor-b monitor
hfmodem console navtex monitor
hfmodem console rtty monitor --no-rtty-usos

These use the rig’s current dial and leave sideband and receive-filter choices to the operator. Optional --freq KHZ tunes once. You may retune the radio itself while the monitor runs; tone acquisition can search audio up to 4 kHz. Read the monitor guide for audio-source selection, recordings, status output and KiwiSDR handling.

Tune both tones inside the receive passband. Incorrect rate, tone polarity or alphabet state can turn plausible signal energy into wrong text. RTTY does not supply delivery confirmation. SITOR-B may leave unresolved characters, and NAVTEX may need a complete later bulletin before it produces output. The library’s RTTY and collective SITOR-B transmit functions do not make these passive console entries a two-way terminal.

07 / Implement it yourself

Tables, timing and receiver decisions

The figures show wire order, tone centres and default timing. The files below contain complete tables and the implementation-specific acquisition and decision rules. The diagrams are explanatory schematics; the linked code remains the source for exact behavior.

Lanner implementation map
PartConstants or behaviorSource
ITA2All 32 codes, unit 1 first, 8 US figures overrides, shift stateita 2.py
RTTY45.45 Bd, 170 Hz shift, 1415/1585 Hz tones, 1.5 stop units; generation and frame recoveryrtty.py
Seven-unit alphabetFull traffic/service words, B/Y polarity and valid-word checksccir 476.py
SITOR-B100 Bd, 1615/1785 Hz tones, phasing, five-slot repeat distance, pair validation, soft recovery and lock/resume behaviorsitor.py
Common FSKSample rate, tone shaping, sample/clock and frequency fittingfsk.py
NAVTEXZCZC header, identifier validation, NNNN and partial-window assemblynavtex.py

Primary references: ITU-T S.1 specifies ITA2 and unit order. ITU-R M.625-4 defines the seven-unit alphabet, phasing, time diversity and copy checks; M.476-5 describes legacy equipment conventions. The US Coast Guard NAVTEX reference explains bulletin identity and boundaries.

See the implementation scope and software evidence. No successful live-radio result is inferred from these figures or from local round trips.