Skip to content

TX Audio Tools

KB2UKA edited this page May 22, 2026 · 3 revisions

TX Audio Tools

The TX Audio Tools tab in the Settings menu groups operator-side audio shaping for transmit.

What's on this panel

Top to bottom:

  1. TX chain rail — a brass-plate strip showing every audio-chain block (NoiseGate › EQ › COMP › EXCITER › BASS › REVERB › CFC) in signal-flow order, plus the red BYPASS button at the head. The button is the Audio Suite master bypass — one click disengages the entire plugin chain (NoiseGate / EQ / Comp / Exciter / Bass / Reverb) while leaving CFC untouched. Default on first install is engaged (chain inert); click it off to bring the chain alive. See the Audio Suite — Master Bypass section for the full story. To the right of the rail are the Audio Suite button (opens the floating window for reordering and tuning chain plugins) and Download Audio Suite (one-click install of the six bundled audio plugins).
  2. CFC panel — the rest of this page. WDSP's Continuous Frequency Compressor, runs after the Audio Suite, before the WDSP Leveler / ALC.

A placeholder slot for TX EQ is reserved on the same panel; a full TX EQ implementation is deferred pending the VST host work and is not yet functional.


What CFC does

A Continuous Frequency Compressor splits the TX audio into ten frequency bands and lets you compress each band independently. Compared to a single broadband compressor, this means you can lift weak vocal harmonics in the 1–2 kHz region without driving low-frequency rumble or high-frequency hiss into the limiter. Done well it's the difference between "sounds like a ham radio" and "sounds like commercial broadcast on the band." Used badly it's a quick path to over-processed mud — go gentle until you know how your microphone responds.

CFC sits between the Leveler and the ALC stages in the WDSP TX chain. Same exact slot Thetis and pihpsdr put it in.

Default state — OFF

CFC ships disabled by default. When the master Enabled toggle is off, the TX path is byte-identical to an OpenHPSDR Zeus build without this feature. If you run external analog audio processing (compressor / EQ / leveler in an outboard rack), you can leave CFC off and nothing in your existing setup changes.

Master controls

At the top of the CFC panel:

  • Enabled (toggle, default off) — master CFC on/off. Pushes SetTXACFCOMPRun(1/0) to WDSP.
  • Post-EQ Enabled (toggle, default off) — engages the post-compression EQ branch. Independent of the master Enabled flag — you can run CFC compression without the EQ branch, useful when first dialing in band gains.
  • PreComp (dB) (default 0.0, range -50 to +16) — frequency-independent gain applied before the per-band compressor. Raising this drives more signal into the compressor for a thicker, more processed sound; lowering it gives the compressor less to work with.
  • PrePeq (dB) (default 0.0, range -50 to +16) — frequency-independent gain applied to the EQ branch input. Only matters when Post-EQ is enabled.

The 10 bands

Below the master controls is a table with ten rows, one per band. Each row has three columns:

  • Frequency (Hz) — the centre frequency of this band. Operator-typed; type any value from 10 Hz to 9990 Hz. WDSP sorts the array internally if you enter non-monotonic frequencies, but the panel preserves the order you typed for display.
  • Compression (dB) (range 020) — how aggressively this band is compressed. Higher = more squash on peaks in this band.
  • Post Gain (dB) (range -20+20) — makeup gain applied to this band after compression. Positive boosts the band; negative cuts it.

Default band frequencies

The defaults mirror pihpsdr's classic SSB voice split:

Band Frequency Compression Post Gain
1 50 Hz 0 dB 0 dB
2 100 Hz 0 dB 0 dB
3 200 Hz 0 dB 0 dB
4 500 Hz 0 dB 0 dB
5 1000 Hz 0 dB 0 dB
6 1500 Hz 0 dB 0 dB
7 2000 Hz 0 dB 0 dB
8 2500 Hz 0 dB 0 dB
9 3000 Hz 0 dB 0 dB
10 5000 Hz 0 dB 0 dB

All frequencies are operator-editable — the defaults are just what you see on a fresh install.

How changes apply

Every edit (toggle click, frequency edit, gain change) takes effect immediately. The frontend optimistically updates the local store and POSTs the change to /api/tx/cfc; if the POST fails, the local change is rolled back. There is no Save button — the panel works the way the rest of the OpenHPSDR Zeus settings UI works. Unlike the NR2 settings panel, CFC settings are live-applied as you slide.

Settings persist globally — they apply regardless of band, mode, or VFO, and survive an OpenHPSDR Zeus restart. They live in the same LiteDB the rest of the DSP config uses. Per-mode and operator-saveable profiles are not yet supported (planned future feature).

Verifying CFC is actually compressing

If you want to confirm CFC is squashing peaks rather than just looking pretty in the UI:

  • The backend log emits a 1 Hz wdsp.tx.stage line while keyed. The new field is cfc pk=… av=… gr=….
  • cfc gr is the dB of gain reduction being applied right now.
    • cfc gr = 0.0 with CFC enabled means no compression is happening — the input level is below all per-band thresholds. Add PreComp gain or per-band compression to see activity.
    • cfc gr positive (typical 3–18 dB during voice peaks) = compression is active. Higher peaks → more reduction, exactly the expected behaviour.

Reference

  • pihpsdr src/cfc_menu.c is the canonical reference this implementation mirrors.
  • WDSP's cfcomp.c is the underlying DSP module — same module Thetis uses.
  • Architecture proposal in issue #123.

What's not in this release

  • Per-band compression meter bars — WDSP's GetTXACFCOMPDisplayCompression is bound on the backend but the live per-band squash bars are not surfaced in the UI yet. Planned follow-up.
  • TX EQ — the placeholder slot in the TX Audio Tools panel is reserved for an EQ feature that will arrive with the VST host work.
  • Operator-saveable profiles / presets — single global config for now. Pick your "broadcast voice" or "DX punch" config once and live with it; named profiles are a future addition.
  • Parametric Q-factor mode — OpenHPSDR Zeus uses the classic non-parametric mode (the same one pihpsdr uses). Recent Thetis introduced an optional parametric mode with per-band Q factors; that's intentionally not exposed here.

Clone this wiki locally