aethersdr / aethersdr/AetherSDR
Aetherial Channel Strip TX output level too low to drive radio to full PEP without high Trim
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 221
- Forks
- 117
- Avg merge
- 2d 7h
- Merged PRs (30d)
- 299
Description
Report preparation
- I used the AI-assisted bug report tool (Help → Support → File an Issue)
- I have attached a support bundle or log file
What happened?
Disclaimer
This may be a radio configuration issue or user error on my part rather than an actual bug in AetherSDR. I am filing this because the investigation produced enough concrete data to suggest something might be off, and I would appreciate feedback on whether this is known/expected behavior or something to look into.
What happened
With Aetherial Audio Channel Strip as the sole TX processing (FlexRadio EQ and compressor disabled), default settings produce significantly lower-than-expected TX output power. To get close to the radio's rated PEP, Trim must be raised approximately +6.5 dB above default.
Measurements at normal speech levels with default Trim (+1 dB), limiter ceiling -3 dB, LIM on:
- Channel strip Final Output Stage: peaks at the displayed -3 dB ceiling occasionally, RMS around -20 dBFS
- Radio-side SC_MIC meter: -21 dBFS
- FWDPWR: approximately 100 W PEP from a radio rated 500 W
- TUNE (no audio processing involved): 500 W, confirming the RF chain and PA are healthy
Workaround that produces acceptable results: Trim +6.5 dB, limiter ceiling 0 dB, LIM off. Output reaches approximately 400 W PEP and a QSO partner confirmed clean audio.
Environment
- OS: Linux (Arch / KDE)
- Radio: FlexRadio AU-520 (500 W class)
- AetherSDR: built from current main
- Microphone: RØDE NT-USB
- FlexRadio EQ: OFF
- FlexRadio compressor: OFF
- DAX: OFF
- All TX processing performed in Aetherial Audio Channel Strip
Investigation
Two independent measurements were performed to narrow down where the level loss occurs.
1. Radio-side meter capture
I wrote a Python script that connects to the radio on TCP/4992 and reads every meter the firmware exposes via VITA-49 (PCC 0x8002), including meters that AetherSDR does not currently display: CODEC, TXAGC, SC_MIC, AFTEREQ, COMPPEAK, ALC, RM_TX_AGC, SC_FILT_1, SC_FILT_2, TX_AGC, FWDPWR.
With Trim +1 dB, normal speech, snapshot during TX:
SC_MIC -21.0 dBFS
CODEC -24.1
TXAGC -21.0
AFTEREQ -21.2
COMPPEAK -6.4 (compressor disabled, but post-comp tap reads this)
ALC -17.5
RM_TX_AGC -20.0
TX_AGC -20.1
FWDPWR 48.8 W
The radio TX chain passes the signal through correctly. FWDPWR is consistent with a signal arriving at SC_MIC near -21 dBFS. The radio's RF chain and PA are operating as designed.
2. Client-side PCM level capture
I added temporary debug logging in AudioEngine.cpp around line 4140 (the TX callback path), measuring peak and RMS of the int16 stereo PCM buffer at two taps:
- Pre-limiter tap (channel strip output, before applyClientFinalLimiterTxInt16)
- Post-limiter tap (same buffer that feeds the Opus encoder)
Results at normal speech levels:
Default settings (Trim +0 dB, LIM on, ceiling -3 dB):
- Pre-limiter peaks: typically -8 to -13 dBFS, best case -3 to -5 dBFS
- Pre-limiter RMS: -17 to -22 dBFS
- Pre and post taps essentially identical (limiter never engages)
With workaround (Trim +6.5 dB, LIM off, ceiling 0 dB):
- Pre-limiter peaks unchanged from above
- Post-limiter peaks regularly clip at 0.00 dBFS (LIM off, so hard clipping)
- Consistent +6.5 dB delta between pre and post taps confirms Trim is the only thing applied between them
This confirms that the channel strip output naturally lives 8 to 11 dB below the level the radio expects at SC_MIC. Trim cleanly applies that delta but has no other gain stage to do the work properly.
Related observation: WSJT-X via DAX1
A separate path observation, in case it indicates a shared upstream gain stage: WSJT-X TUNE through DAX1 with every volume slider at 100% produces only approximately 246 W. The radio's SC_MIC meter reads about -7 dBFS during the TUNE tone. This is a completely separate signal path (DAX float32, not Opus), so it should be independent of the Aetherial channel strip, yet it also shows an undersized input level relative to a full-scale tone.
Suggested fix
I do not know enough about the channel strip design intent to recommend a specific fix. Possibilities:
- Expected behavior, undocumented. The channel strip is intentionally conservative and Trim is the intended makeup gain. In that case, either the default Trim value should be higher, or documentation/UX should make it obvious that significant Trim is normal.
- Missing makeup gain stage. Some implicit gain stage that SmartSDR's built-in EQ/COMP provides is not replicated when those are off and Aetherial is in their place.
- One specific processor attenuating more than intended. Less likely, but worth checking with the individual chips bypassed.
I am happy to provide additional data:
- Raw debug log CSV from /tmp/asdr_tx_levels.csv
- The Python meter-capture script
- Additional measurements with different channel strip presets, or with individual chips bypassed
Suggested labels: audio, maintainer-review, bug (or enhancement if this is expected behavior and just needs documentation or a default change).
What did you expect?
What I expected
When the channel strip is configured to peak at the limiter ceiling (e.g. ceiling at -3 dBFS, signal peaking near that level), the radio should produce close to its rated PEP. Instead, even when the Final Output Stage meter shows peaks reaching the -3 dB ceiling, the radio only delivers approximately 100 W from a 500 W class radio. To actually reach close to rated PEP, an additional +6.5 dB of Trim is required beyond what the meter says is already a fully-driven signal.
In other words: the channel strip's "0 dBFS" reference point and the radio's expected input level appear to be misaligned by roughly 6 to 10 dB.
Steps to reproduce
Steps to reproduce
- Set up SSB TX with FlexRadio EQ and compressor OFF
- Enable Aetherial Audio Channel Strip with default settings (or any preset)
- Trim at default (+1 dB), limiter ceiling at default (-3 dB), LIM on
- Adjust mic gain so that channel strip Final Output Stage shows peaks at approximately -3 dBFS during normal speech
- Observe TX output power; it will be substantially below the radio's rated PEP
AetherSDR version
v26.5.2.1
Radio model & firmware
AU-520
Operating system
Linux
OS version and hardware
CashyOS
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
The report points to AudioEngine.cpp around line 4140 and applyClientFinalLimiterTxInt16; start by reproducing the TX callback measurements with the default channel-strip settings and comparing pre- and post-limiter levels. Trace the channel-strip output and radio SC_MIC path, then establish whether the gain mismatch is expected or a defect; done means a confirmed behavior with an appropriate code, default, or documentation change and verification of TX output.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- desktop
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100