Summary
Add a dedicated phase rotator stage to the PooDoo TX chain, slotted between EQ and COMP (or EQ and DESS), to reduce voice signal peak-to-average power ratio (PAPR) before compression. This is the same technique Thetis uses and is standard in broadcast audio processors (Optimod et al.).
Why
Voice waveforms are inherently asymmetric — glottal pulses produce positive peaks taller than negative peaks (or vice versa). A compressor sees those tall asymmetric peaks and pulls gain down to control them, which also drags average power down. Phase-rotating the signal decorrelates the harmonic phase alignment that creates those constructive peaks, without changing perceived loudness — peaks shrink, the compressor has less peak material to clamp, and average TX power can run 2-3 dB hotter before clipping.
This is a free-lunch loudness/intelligibility win for SSB voice that's well established in broadcast audio processing and was adopted by Thetis for amateur radio TX.
Current state
AetherSDR's TX chain order:
MIC → GATE → EQ → DESS → COMP → TUBE → ENH → TX
There is no PAPR-reduction phase rotator stage.
A phase rotator does exist in `src/core/ClientPudu.cpp` inside the PUDU exciter's Behringer mode (line 317), but it's a different use case:
- Post-compressor (inside the ENH stage)
- Low-band only (LPF-filtered signal)
- Single 2nd-order all-pass
- Parallel wet/dry mixed back into dry signal for transient emphasis
That existing rotator is not appropriate for PAPR reduction — wrong position in chain, wrong band scope, wrong topology.
Proposed design
New `ClientPhaseRotator` DSP module mirroring the other PooDoo stages:
- Cascade of 4-6 second-order all-pass filters at staggered frequencies (e.g. 300 / 700 / 1500 / 2500 Hz)
- Full-band, in-line on the main signal (not parallel/wet-dry)
- Atomic parameters for cross-thread updates per project DSP convention
- No allocations in `process()`, no exceptions, no locks
Chain position: between EQ and DESS, so it operates on EQ-shaped audio but before the dynamics processors:
MIC → GATE → EQ → PHROT → DESS → COMP → TUBE → ENH → TX
User-facing controls:
- Enable / Bypass — single toggle (Thetis exposes it this way)
- Stages — 0/4/6 (or just on/off — minimal exposed surface)
- Optional Asymmetry meter showing peak+/peak- ratio before/after, so the user can see the rotator working
Could be exposed as a draggable stage in the CHAIN tile (consistent with existing GATE/EQ/DESS/COMP/TUBE/ENH stages), with a small tuning knob row in the applet panel.
References
- Thetis source (TX/AudioProcessor implements the phase rotator)
- Bonny Bouvier, Improving SSB Speech Intelligibility — classic discussion of asymmetric voice peaks
- Orban Optimod 8000 series technical docs
Acceptance criteria
Notes
Filed in response to a user question after the Aether Audio TX chain video. The questioner correctly identified that Thetis offers this and AetherSDR doesn't.
Summary
Add a dedicated phase rotator stage to the PooDoo TX chain, slotted between EQ and COMP (or EQ and DESS), to reduce voice signal peak-to-average power ratio (PAPR) before compression. This is the same technique Thetis uses and is standard in broadcast audio processors (Optimod et al.).
Why
Voice waveforms are inherently asymmetric — glottal pulses produce positive peaks taller than negative peaks (or vice versa). A compressor sees those tall asymmetric peaks and pulls gain down to control them, which also drags average power down. Phase-rotating the signal decorrelates the harmonic phase alignment that creates those constructive peaks, without changing perceived loudness — peaks shrink, the compressor has less peak material to clamp, and average TX power can run 2-3 dB hotter before clipping.
This is a free-lunch loudness/intelligibility win for SSB voice that's well established in broadcast audio processing and was adopted by Thetis for amateur radio TX.
Current state
AetherSDR's TX chain order:
There is no PAPR-reduction phase rotator stage.
A phase rotator does exist in `src/core/ClientPudu.cpp` inside the PUDU exciter's Behringer mode (line 317), but it's a different use case:
That existing rotator is not appropriate for PAPR reduction — wrong position in chain, wrong band scope, wrong topology.
Proposed design
New `ClientPhaseRotator` DSP module mirroring the other PooDoo stages:
Chain position: between EQ and DESS, so it operates on EQ-shaped audio but before the dynamics processors:
User-facing controls:
Could be exposed as a draggable stage in the CHAIN tile (consistent with existing GATE/EQ/DESS/COMP/TUBE/ENH stages), with a small tuning knob row in the applet panel.
References
Acceptance criteria
Notes
Filed in response to a user question after the Aether Audio TX chain video. The questioner correctly identified that Thetis offers this and AetherSDR doesn't.