Skip to content

Per-site p25_phase1_demod_mode (C4FM vs CQPSK/LSM) in wideband multi-site config #935

Description

@er-imagery

Feature request: per-site demod mode for wideband multi-site systems

Context

We've confirmed via ACMA emission designator data that within a single P25 system, individual sites use different modulation:

  • Melbourne CBD (RFSS 1/1): 10K1D7W = LSM/CQPSK (simulcast, multiple TX towers at 360 Elizabeth St / 101 Collins St / Rialto)
  • Geelong MMR (RFSS 1/8): 10K1D7W = LSM/CQPSK (simulcast)
  • Mt Anakie, Kinglake, Cottrell, Blackwood etc: 10K1F9W = C4FM (single-transmitter)

The current p25_phase1_demod_mode is a system-level setting. To cover all MMR sites on a single wideband device (or multi-device wideband config), you'd need C4FM for the rural/single-TX sites and CQPSK for the urban simulcast sites — which is currently impossible without splitting into separate system entries.

config.example.yaml already notes that p25_phase1_demod_mode: cqpsk also routes the voice chain through the LSM path (issues #275, #356) — so this isn't just a CC decode issue, voice grants on LSM sites will also time out without the correct per-site setting.

Proposed config shape

Something like a per-site override under the sites: list:

trunking:
  systems:
    - name: "MMR"
      p25_phase1_demod_mode: c4fm   # system default
      sites:
        - { rfss: 1, site: 1, name: "Melbourne", p25_phase1_demod_mode: cqpsk }   # LSM simulcast
        - { rfss: 1, site: 8, name: "Geelong",   p25_phase1_demod_mode: cqpsk }   # LSM simulcast
        - { rfss: 2, site: 7, name: "Mt Anakie" }                                  # inherits c4fm

Or alternatively a per-channel override on the wideband device's channels: list.

Why it matters

CBD has been showing control_channel_decode_quality: poor consistently regardless of hardware (tried Airspy R2 and RTL-SDR). Our hypothesis is that decoding an LSM site with C4FM is the root cause — C4FM's nonlinear demodulation can't correctly recover a linearly-modulated simulcast signal, producing the BER we've been seeing. If per-site CQPSK can be configured, we can finally verify this against the strongest signal in the system.

SDRTrunk supports per-channel LSM configuration which is why it can decode sites GT currently can't.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions