Skip to content

Compression Meter erratic/inverted behavior and non-linear response #1579

Description

@rnash2

What happened?
The speech compression (Gain Reduction) meter in AetherSDR (v0.8.15) is producing incorrect and erratic readings. The behavior appears to be inverted or improperly scaled relative to the actual microphone input:

Low Volume Levels: The meter shows a constant, high compression indication even when speaking softly or during low background noise.

High Volume Levels: As the input volume increases (approaching the point where compression should actually engage), the meter drops to zero or shows no activity at all.

Erratic Movement: The meter needle/bar jumps inconsistently rather than following the expected smooth ballistics of a gain reduction indicator.

What did you expect?
The compression meter should function as a Gain Reduction indicator. It should:

Stay at 0 dB (no reduction) when the input signal is below the processor threshold.

Deflect downward (increasing reduction) proportionally as the speech volume exceeds the threshold.

Display smooth "attack" and "decay" ballistics that accurately reflect the FlexRadio's internal processor state.

Note that over the air testing signal reports suggest that speech compression is actually working and that the issue is the compression meter.

Steps to reproduce
Connect AetherSDR to the FLEX-6600.

Enable the Processor (PROC) in the Transmit/Audio panel.

Observe the meter while remaining silent or whispering; note the constant/high indication.

Speak loudly or whistle into the microphone; observe the meter dropping to zero or showing no reduction.

Radio model & firmware
Model: FLEX-6600

Firmware: 4.1.5.39794

OS & version
OS: Windows (AetherSDR v0.8.15 / Qt 6.7.3)

Developer Notes
Based on the project's architecture, the compression meter logic likely suffers from a protocol mapping or mathematical inversion error.

Potential Root Causes:

Inverted Calculation: The code may be treating the raw meter value as a peak-reading value rather than a reduction value. In the Flex API, gain reduction is often expressed as a positive value representing "amount reduced," which needs to be subtracted from a maximum or displayed on a negative scale.

Example logic error: displayed_val = raw_val instead of displayed_val = 0 - raw_val.

Incorrect Meter ID: The ProtocolHandler may be subscribing to the wrong meter ID (e.g., a "Leveler" or "Mic Peak" meter) and attempting to map its 0–100 scale onto the compression meter's dB scale.

VITA-49 Scaling: If the meter data is coming via the VITA-49 status stream, the scaling factor (typically defined by the radio's meter desc command) might be ignored, leading to the "erratic" jitter if the raw integer is being used without normalization.

Related Files & Functions:

src/network/ProtocolHandler.cpp: Check the regex for meter status updates and ensure the correct meter_id is linked to the COMP UI element.

src/gui/widgets/MeterWidget.cpp: Review the setValue() logic specifically for meters marked as "Reduction" types.

src/core/radio/FlexRadio.cpp: Verify the initialization strings—ensure the client is requesting the correct meter IDs for the transmit chain.

Suggested Logging for Diagnostics:
Please enable the following in Help → Support:

radio.responses (To capture the meter stream raw values during high/low audio).

gui.updates (To see how the meter widget is being commanded to move).

support-bundle-20260417-110538.zip

Metadata

Metadata

Assignees

No one assigned

    Labels

    awaiting-responseWaiting for reporter to provide additional information

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions