Skip to content

feat(tci): per-mode overflow handling with right-click slider menu#3065

Merged
ten9876 merged 1 commit into
mainfrom
auto/feattci-per-mode-overflow-handling-with-right-clic
May 24, 2026
Merged

feat(tci): per-mode overflow handling with right-click slider menu#3065
ten9876 merged 1 commit into
mainfrom
auto/feattci-per-mode-overflow-handling-with-right-clic

Conversation

@ten9876
Copy link
Copy Markdown
Collaborator

@ten9876 ten9876 commented May 24, 2026

The TCI TX path applied a hard ±1.0 saturating clamp unconditionally
after the gain stage, introducing harmonic distortion on any overshoot.
For well-formed digital-mode tones at -3 dBFS the clamp is a no-op, but
the asymmetry with the DAX path (which has no float-domain clamp at all)
made "100% client-side bypass" claims inaccurate.

Users now pick the regime via right-click on the TCI TX slider:

Clip — saturating clamp at ±1.0 (legacy default, defensive)
NaNGuard — zero NaN/Inf only; pass everything else bit-exact
Measure — pure passthrough; count overshoots for telemetry,
never mutate samples (downstream int16 conversion in
the radio-native DAX route still clamps)

Selection persists to TciTxOverflowMode (0/1/2). Default stays Clip so
existing users see no behavior change; WSJT-X / FT8 operators chasing
bit-exact tone fidelity can switch to NaNGuard or Measure.

Telemetry (peak / sumSq / clipSamples) preserved across all three
modes; Measure mode guards the math against NaN so a pathological
client can't poison the running stats.

Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com

The TCI TX path applied a hard ±1.0 saturating clamp unconditionally
after the gain stage, introducing harmonic distortion on any overshoot.
For well-formed digital-mode tones at -3 dBFS the clamp is a no-op, but
the asymmetry with the DAX path (which has no float-domain clamp at all)
made "100% client-side bypass" claims inaccurate.

Users now pick the regime via right-click on the TCI TX slider:

  Clip     — saturating clamp at ±1.0 (legacy default, defensive)
  NaNGuard — zero NaN/Inf only; pass everything else bit-exact
  Measure  — pure passthrough; count overshoots for telemetry,
             never mutate samples (downstream int16 conversion in
             the radio-native DAX route still clamps)

Selection persists to TciTxOverflowMode (0/1/2).  Default stays Clip so
existing users see no behavior change; WSJT-X / FT8 operators chasing
bit-exact tone fidelity can switch to NaNGuard or Measure.

Telemetry (peak / sumSq / clipSamples) preserved across all three
modes; Measure mode guards the math against NaN so a pathological
client can't poison the running stats.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@ten9876 ten9876 requested a review from a team as a code owner May 24, 2026 17:57
@ten9876 ten9876 enabled auto-merge (squash) May 24, 2026 17:57
ten9876 added a commit that referenced this pull request May 24, 2026
Headline entry next to TCI tx_gain + ALC since both touch the same
TCI TX path.  Commit count 138 → 139.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@ten9876 ten9876 merged commit 6eca0c5 into main May 24, 2026
4 checks passed
@ten9876 ten9876 deleted the auto/feattci-per-mode-overflow-handling-with-right-clic branch May 24, 2026 18:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant