fix(rade): align filter passband with FreeDV waveform convention#3301
Merged
Merged
Conversation
Set RADE slice filter to 750–2250 Hz (centre 1500 Hz, width 1500 Hz) instead of 0–3500 Hz, matching the freedv-waveform Docker reference implementation. DIGL mirrors at −2250 to −750 Hz. Fixes aethersdr#3300. Principle I. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
jensenpat
approved these changes
May 31, 2026
jensenpat
left a comment
Collaborator
There was a problem hiding this comment.
Confirmed this is localized to RADE activation. The diff only changes the setFilterWidth values inside MainWindow::activateRADE after RADE chooses DIGU/DIGL, and it does not touch the shared DIGU/DIGL filter handling used by regular digital modes like FT8.
Regular digital USB/LSB still flows through the existing mode/filter controls, including VfoWidget presets/manual edges, spectrum filter changes, EQ cutoff conversion, and SliceModel::setFilterWidth. Those paths keep their existing offsets and presets; only the RADE-specific activation passband changes to the FreeDV waveform convention.
6 tasks
jensenpat
pushed a commit
that referenced
this pull request
Jun 2, 2026
…keyboard nav (#3303) Companion to #3288 (Phase 2 accessibility audit), per maintainer guidance from @jensenpat. Addresses all four issues from the @jensenpat review on the previous iteration. ## What's in this PR ### Phase 2a — `setAccessibleName` on previously unnamed widgets All changes are additive, no behavioral risk. **MeterApplet** (`MeterApplet.cpp`): PA temperature, supply voltage, main fan speed gauges **AmpApplet** (`AmpApplet.cpp`): Forward power, SWR, drain current gauges — rebased onto the new row-label/ballistics layout from #3301 **TunerApplet** (`TunerApplet.cpp`): Forward power, SWR gauges + C1/L/C2 relay bars — rebased onto the same row-label refactor **SpectrumWidget** (`SpectrumWidget.cpp`): "Panadapter spectrum display" **TciApplet / DaxApplet**: RX 1–N gain sliders, TX gain slider (named in loop) ### Phase 2b — Live accessibility announcements **VFO frequency** (`VfoWidget.cpp` / `VfoWidget.h`): - `updateFreqLabel()` now routes through `scheduleFrequencyAnnouncement()` — a 300 ms single-shot debounce timer that fires once the frequency settles, preventing VoiceOver from being asked to speak ~20 times/second during active wheel tuning - LOCKED state announces immediately (user-triggered, infrequent) but suppresses repeats while the 500 ms lock-feedback gate is active **S-meter** (`SMeterWidget.cpp`): - `setFocusPolicy(Qt::TabFocus)` added — widget is keyboard-reachable - `setLevel()` announces the *displayed* value, not raw dBm: in S-Meter Peak mode the event value is derived from `m_peakDbm` (what the needle and text readout show), not `m_levelDbm`; formatted as "S7, -79 dBm" to match the painted readout exactly **MeterSlider** (`MeterSlider.h`): - `setFocusPolicy(Qt::TabFocus)` added — DAX/TCI gain sliders are now keyboard-reachable - `keyPressEvent` handler: Left/Down −5%, Right/Up +5% — gain thumb is adjustable without a mouse ### Phase 2c — VFO tab bar: `QLabel` → `QPushButton` VFO tab labels were `QLabel` with a click event filter; VoiceOver could not activate them. Replaced with `QPushButton` throughout (`VfoWidget.cpp`, `VfoWidget.h`). ### Phase 2d — Keyboard navigation: RelayBar + PhaseKnob - `RelayBar` gains arrow-key support (Left/Right step through relay positions) - `PhaseKnob` excluded from the tab order (it is already accessible via the paired ESC sliders) ## Test notes On macOS with VoiceOver: 1. Tab to the S-meter — subsequent signal level changes should be spoken as "S7, -79 dBm" etc. 2. Tune the VFO wheel quickly — VoiceOver speaks once after tuning settles (not on every step) 3. Lock the VFO — VoiceOver speaks "LOCKED" once 4. Tab to a DAX/TCI gain slider — Left/Right arrows move the thumb 5. VFO tab bar buttons ("DSP", "USB", "X/RIT", "DAX") are activatable via VoiceOver — AI5OS (@w9fyi)
G6PWY-Chris
pushed a commit
to G6PWY-Chris/AetherSDR
that referenced
this pull request
Jun 22, 2026
…hersdr#3301) Limit the RADE activation filter to the FreeDV waveform passband: 750-2250 Hz for DIGU and -2250 to -750 Hz for DIGL. This change is localized to MainWindow::activateRADE and does not alter the regular DIGU/DIGL filter handling used by modes such as FT8.
G6PWY-Chris
pushed a commit
to G6PWY-Chris/AetherSDR
that referenced
this pull request
Jun 22, 2026
…keyboard nav (aethersdr#3303) Companion to aethersdr#3288 (Phase 2 accessibility audit), per maintainer guidance from @jensenpat. Addresses all four issues from the @jensenpat review on the previous iteration. ## What's in this PR ### Phase 2a — `setAccessibleName` on previously unnamed widgets All changes are additive, no behavioral risk. **MeterApplet** (`MeterApplet.cpp`): PA temperature, supply voltage, main fan speed gauges **AmpApplet** (`AmpApplet.cpp`): Forward power, SWR, drain current gauges — rebased onto the new row-label/ballistics layout from aethersdr#3301 **TunerApplet** (`TunerApplet.cpp`): Forward power, SWR gauges + C1/L/C2 relay bars — rebased onto the same row-label refactor **SpectrumWidget** (`SpectrumWidget.cpp`): "Panadapter spectrum display" **TciApplet / DaxApplet**: RX 1–N gain sliders, TX gain slider (named in loop) ### Phase 2b — Live accessibility announcements **VFO frequency** (`VfoWidget.cpp` / `VfoWidget.h`): - `updateFreqLabel()` now routes through `scheduleFrequencyAnnouncement()` — a 300 ms single-shot debounce timer that fires once the frequency settles, preventing VoiceOver from being asked to speak ~20 times/second during active wheel tuning - LOCKED state announces immediately (user-triggered, infrequent) but suppresses repeats while the 500 ms lock-feedback gate is active **S-meter** (`SMeterWidget.cpp`): - `setFocusPolicy(Qt::TabFocus)` added — widget is keyboard-reachable - `setLevel()` announces the *displayed* value, not raw dBm: in S-Meter Peak mode the event value is derived from `m_peakDbm` (what the needle and text readout show), not `m_levelDbm`; formatted as "S7, -79 dBm" to match the painted readout exactly **MeterSlider** (`MeterSlider.h`): - `setFocusPolicy(Qt::TabFocus)` added — DAX/TCI gain sliders are now keyboard-reachable - `keyPressEvent` handler: Left/Down −5%, Right/Up +5% — gain thumb is adjustable without a mouse ### Phase 2c — VFO tab bar: `QLabel` → `QPushButton` VFO tab labels were `QLabel` with a click event filter; VoiceOver could not activate them. Replaced with `QPushButton` throughout (`VfoWidget.cpp`, `VfoWidget.h`). ### Phase 2d — Keyboard navigation: RelayBar + PhaseKnob - `RelayBar` gains arrow-key support (Left/Right step through relay positions) - `PhaseKnob` excluded from the tab order (it is already accessible via the paired ESC sliders) ## Test notes On macOS with VoiceOver: 1. Tab to the S-meter — subsequent signal level changes should be spoken as "S7, -79 dBm" etc. 2. Tune the VFO wheel quickly — VoiceOver speaks once after tuning settles (not on every step) 3. Lock the VFO — VoiceOver speaks "LOCKED" once 4. Tab to a DAX/TCI gain slider — Left/Right arrows move the thumb 5. VFO tab bar buttons ("DSP", "USB", "X/RIT", "DAX") are activatable via VoiceOver — AI5OS (@w9fyi)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
activateRADE()previously set the slice filter to the full 0–3500 Hz range, which does not match the RADE OFDM modem's actual audio passbandTest plan
Fixes #3300. Principle I.
🤖 Generated with Claude Code