Report preparation
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
Report preparation
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:
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
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:
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:
Results at normal speech levels:
Default settings (Trim +0 dB, LIM on, ceiling -3 dB):
With workaround (Trim +6.5 dB, LIM off, ceiling 0 dB):
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:
I am happy to provide additional data:
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
AetherSDR version
v26.5.2.1
Radio model & firmware
AU-520
Operating system
Linux
OS version and hardware
CashyOS