Field Guide · term

Also known as: AMBE+2 tone frame, Knox tones, call-alert tones

AMBE+2 tones are a special class of AMBE+2 frame that carry signalling tones instead of speech. When the fundamental index b_0 lands in its top range, the frame is not a voice frame at all: the remaining bits index a single tone, a DTMF pair, or a vendor-specific “Knox” or call-alert dual-tone, and the decoder synthesises a sum of sinewaves rather than running the harmonic model.1 Tone frames let a digital-voice system carry in-band signalling — keypad digits, alert tones — over the same 2400 bps channel as speech.

single tones 5–122 DTMF 128–143 Knox / alert 144–163 b0 & 0x7E == 0x7E flags a tone frame; out-of-range index → silence
A tone frame's index selects a single tone (5–122), a DTMF pair (128–143), or a vendor Knox / call-alert dual-tone (144–163); any other value is treated as silence.

The tone-frame indicator

A frame is a tone frame when b_0 & 0x7E == 0x7E — that is, when b_0 is 0x7E (126) or 0x7F (127). In that case the ordinary voice-parameter layout is abandoned: b_1 becomes an 8-bit tone index and b_2 an 8-bit amplitude, both drawn from a different bit-scatter pattern than a voice frame uses. The top three bits of the tone index come from three small lookup tables (toneT5/toneT6/toneT7) driven by three of the frame’s bits; mbelib annotates these bits as partly verified against captured frames and partly derived from the DTMF tone-index mapping. The remaining index bits are read directly from the frame, and the amplitude index b_2 sets how loud the synthesised tone plays. Because tone frames recur every 20 ms for the duration of a tone, the decoder carries the sinewave phase forward from one frame to the next so a held tone or DTMF digit sounds continuous rather than clicking at each frame boundary.

Index ranges

The tone index b_1 partitions into well-defined ranges. GopherTrunk validates it and routes an out-of-range index to silence rather than voicing noise:

Index range Meaning Frequencies
5 – 122 single tones published
128 – 143 DTMF dual-tones ITU-T Q.23
144 – 163 Knox / call-alert dual-tones vendor-specific, undocumented
all others silence

DTMF pairs decode against the standard ITU-T Q.23 frequency assignments, so they are fully determined by the index. The single-tone range is likewise published.

Knox and call-alert tones

The 144–163 range is the awkward one. These “Knox” or call-alert dual-tones are vendor-specific: Motorola TRBO, Hytera, and generic AMBE+2 implementations each pick slightly different (frequency_a, frequency_b) pairs for the same indices, and the public AMBE+2 specification does not document the frequencies at all. Without a reference table the decoder cannot know what to synthesise, so GopherTrunk routes these indices through silence by default and exposes a runtime override: SetKnoxTone (and a named-KnoxPreset bundle over it) lets an operator or an in-tree test register the (freqA, freqB) pairs for a specific vendor, sourced from open receivers like DSD-FME or a service manual and cited in a comment. Once registered, a Knox frame synthesises the same summed-sinewave dual-tone the decoder produces for DTMF, with phase continuity across consecutive tone frames.

Relevance to SDR

Tone frames are woven through real AMBE+2 traffic — a DMR or P25 Phase 2 call may open with a call-alert tone or carry DTMF overdial mid-conversation — so a decoder that treated every frame as voice would render these as garbage. GopherTrunk’s tone branch short-circuits the harmonic synthesizer, validates the index, and either emits the correct dual-tone or falls back to a clean silence path. The Knox override is the pragmatic answer to an under-specified corner of the standard: rather than guess undocumented frequencies, it stays silent until an operator supplies a citation-backed table, keeping the default decode honest.

Sources

  1. Dual-tone multi-frequency signaling — Wikipedia, on the DTMF frequency pairs (ITU-T Q.23) that AMBE+2 dual-tone frames reproduce. 

See also