Also known as: p25_phase1_demod_mode, C4FM vs CQPSK, LSM mode selection
P25 demod-mode selection is the choice between GopherTrunk’s two P25 Phase 1
symbol-recovery paths — C4FM (FM-discriminator, the default) and
CQPSK (linear, for sites transmitting Linear Simulcast Modulation) —
set per system with p25_phase1_demod_mode, or per channel on a
wideband dongle when sites of one system differ. The
setting matters because the wrong path does not merely degrade the decode; a C4FM
discriminator cannot recover a linearly-modulated signal and vice versa, so the control
channel simply never locks or reads as poor.
The LSM myth
The single most damaging misconception — one GopherTrunk’s own docs, config comments, and web config-builder labels taught for a while — is that “simulcast site” implies “use CQPSK/LSM.” It does not. Simulcast is a transmitter coordination technique (timing and phase alignment across towers), not a baseband modulation. Many genuinely multi-tower simulcast sites transmit ordinary C4FM and decode reliably on the C4FM path; forcing CQPSK on them kills the decode entirely (#935). LSM is one specific way of running a simulcast cell, not a synonym for it.
Licensing databases cannot settle the question either: an emission designator such as
10K1D7W covers both C4FM and CQPSK, so no amount of reading the license tells you which
demod path a site needs (#935).
The rule
Choose cqpsk empirically, and only empirically: a signal that is demonstrably strong
and clean (verify with spectrum or another receiver) yet refuses to lock on the C4FM path
is the one legitimate trigger. Never infer it from “the site is simulcast,” from the
license, or from third-party site labels. Start with c4fm, and reach for cqpsk only
when the evidence forces you to.
| Symptom | Looks like | Actually | Fix / check |
|---|---|---|---|
| Site listed as simulcast | “Must need CQPSK” | Simulcast is transmitter coordination, not a modulation; most such sites decode in C4FM | Try c4fm first — it is the default for a reason |
| Strong, clean carrier; no C4FM lock | Weak signal or wrong frequency | Possibly a genuine LSM/linear site | Set p25_phase1_demod_mode: cqpsk and compare |
| No lock in either mode | Modulation mystery | Often gain: the value is in tenths of a dB, so a working ~36 dB from another app is gain: "363", not "36" |
Check gain units and front-end level — see SDR gain and overload |
| CQPSK site: CC locks but everything downstream is garbage | FEC or signal problem | Historically, an odd-rotation recovery bug that only the CQPSK path could trigger (see below) | Fixed; on current builds suspect signal or configuration |
In the originating report the site that “needed LSM” was Melbourne’s genuinely three-tower simulcast CBD cell — which decodes reliably in C4FM in both GopherTrunk and SDRTrunk. The actual blocker was the gain value; once translated correctly into tenths, the C4FM path locked and granted normally (#935).
Why the two paths really differ
The paths are not interchangeable front ends onto one decoder; they have different failure modes, which is why the choice must be explicit:
- The CQPSK path is a linear receiver and needs carrier recovery. Early builds had none — a differential decoder cancels constant carrier phase but not per-symbol rotation, and at P25’s 4800 baud even a small offset rotates symbols badly. Getting CQPSK to lock on real simulcast captures took carrier recovery, a multipath-gated frequency estimator, and a fractionally-spaced equalizer (#492).
- The C4FM discriminator path can only produce even constellation rotations, which coincidentally masked a sign error in rotation recovery for years: odd rotations — exactly the quadrant slips a CQPSK differential demod produces — came back with every dibit flipped, a failure that could only ever appear on simulcast/CQPSK sites (#297).
The practical consequence: “CQPSK doesn’t work on this site” historically had several causes that were bugs, not site properties. On current builds the empirical rule above is the whole procedure.
Per-channel overrides
Where sites of one system genuinely differ in modulation, set the system’s
p25_phase1_demod_mode to what most sites use and add a per-channel
p25_phase1_demod_mode: override on the exceptions in the wideband channels: list. The
override drives both the control-channel decode and the voice grants that tap issues. It is
keyed by frequency, not site identity, because the demod path must be chosen before the
control channel can lock — see wideband voice taps for
the details.
Provenance
- #935 — the LSM ≠ CQPSK correction, the emission-designator dead end, the gain-in-tenths root cause, and the per-channel override.
- #492 — what it took to make the CQPSK path lock on real simulcast captures.
- #297 — the odd-rotation recovery bug that only CQPSK quadrant slips could expose.