Feature/issue 277 nb waterfall blanking#506
Closed
boydsoftprez wants to merge 4 commits into
Closed
Conversation
Client-side per-row impulse suppression for the waterfall display. When NB or NB2 is active for a slice and the blanker is enabled, incoming waterfall tile rows are inspected before rendering: - Compute per-row mean intensity from raw (pre-colourmap) VITA-49 bins - Maintain a 32-row rolling baseline via ring buffer - Rows exceeding baseline × threshold are replaced with noise-floor colour (Fill mode) or the last good row (Interpolate mode) - WF● indicator in spectrum area lights cyan when blanking fires - All settings persist via AppSettings (WaterfallBlanking*) - Auto-enable with WNB option (WaterfallBlankingAutoWithWNB) - Controls in Display sub-panel of SpectrumOverlayMenu No protocol changes — pure client-side post-processing on tile data. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
M7HNF-Ian
added a commit
to M7HNF-Ian/AetherSDR
that referenced
this pull request
Apr 19, 2026
MNR uses a decision-directed MMSE-Wiener filter with minimum-statistics noise floor tracking, accelerated by Apple Accelerate (vDSP / AMX). 512-point FFT at 24 kHz, 50% overlap-add, per-bin gain with temporal smoothing to suppress musical noise. Hardware-accelerated on Apple Silicon. Right-click the MNR button to open strength controls in DSP Settings. Quick-wins: - aethersdr#1503: Diversity button missing on Slice A at startup - aethersdr#1581: TNF/FDX indicators invisible in dark theme - aethersdr#1583: Date/Time status bar labels too dim - aethersdr#1576: Record/Playback buttons invisible in dark theme - aethersdr#506: Secondary text colour consistency (#506070 → #8aa8c0) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This was referenced Apr 19, 2026
M7HNF-Ian
added a commit
to M7HNF-Ian/AetherSDR
that referenced
this pull request
Apr 19, 2026
MNR uses a decision-directed MMSE-Wiener filter with minimum-statistics noise floor tracking, accelerated by Apple Accelerate (vDSP / AMX). 512-point FFT at 24 kHz, 50% overlap-add, per-bin gain with temporal smoothing to suppress musical noise. Hardware-accelerated on Apple Silicon. Right-click the MNR button to open strength controls in DSP Settings. Quick-wins: - aethersdr#1503: Diversity button missing on Slice A at startup - aethersdr#1581: TNF/FDX indicators invisible in dark theme - aethersdr#1583: Date/Time status bar labels too dim - aethersdr#1576: Record/Playback buttons invisible in dark theme - aethersdr#506: Secondary text colour consistency (#506070 → #8aa8c0) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ten9876
pushed a commit
that referenced
this pull request
Apr 21, 2026
Five small contrast/visibility fixes, applied from #1672 with the macOS MNR scope held back for separate review + on-platform testing. - #1576 — Record / Play buttons unreadable in dark theme. Record \`#804040\` → \`#d04040\`, Play \`#406040\` → \`#70b070\`, disabled state \`#303030\` → \`#505050\`. - #1581 — TNF and FDX status indicators invisible in active state on dark theme. Active color switched from \`rgba(255,255,255,128)\` (dim half-white) to \`#00e060\` (bright green), matching the TGXL/PGXL OPERATE indicator style. Inactive \`#404858\` unchanged. - #1583 — GPS date/time status labels and radio version label too dim. \`#607080\` / \`#506070\` → \`#8aa8c0\` to match the other status-bar labels. GPS date label was also at the wrong size (10 px vs the surrounding 12 px); now aligned. - #506 — Secondary-text colour consistency pass. \`#607080\` / \`#506070\` → \`#8aa8c0\` across MqttApplet, EqApplet, DxClusterDialog, WhatsNewDialog. - #1503 — Diversity button missing on Slice A at startup. Previous loop only touched the active pan's active VFO widget; now iterates every pan → every slice so every VFO widget gets the diversity- allowed flag set when the radio supports it. Scope creep held for a follow-up commit: the macOS MNR DSP path (MacNRFilter, AudioEngine integration, DSP-dialog tab, spectrum overlay MNR toggle, VFO MNR button). Will land separately after on-platform testing. One hunk from #1672 was skipped because its target no longer exists: the AppletPanel grip-handle label was retired with the old AppletTitleBar in ba61f48. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.
NB Waterfall Blanking
Closes #277
Overview
Client-side impulse suppression in the waterfall when NB or NB2 is active. Pure post-processing on VITA-49 tile data — no effect on radio DSP, audio path, or protocol.
Background
When NB is enabled, noise blanking suppresses impulse noise in the audio path — but the waterfall still shows bright horizontal streaks from the same impulses because the radio sends raw tile data unaffected by the DSP chain.
Implementation
The blanker runs inside
SpectrumWidget::updateWaterfallRow()between the tile decode step and the ring-buffer write. It maintains a 32-slot rolling ring buffer of per-row mean intensity values. When a new row's mean exceedsbaseline × threshold, it is classified as an impulse and replaced before being written to the waterfall image.intensityToRgb(baseline)— the current noise-floor colourThe ring buffer resets whenever NB is disabled, the blanker is toggled off, or the threshold changes — so the baseline re-warms cleanly on next enable rather than carrying stale data forward.
The Auto with WNB option links the blanker to the hardware WNB toggle in lockstep, so users who always run WNB don't need to manage the blanker separately.
New UI controls (Display sub-panel)
All four values persist to
AppSettingsper-pan:WaterfallBlankingEnabled_N,WaterfallBlankingMode_N,WaterfallBlankingThreshold_N,WaterfallBlankingAutoWithWNB_NFiles changed
src/gui/SpectrumWidget.cpp/.hsetWfBlanker*setters,setNbActive,loadSettingsround-tripsrc/gui/SpectrumOverlayMenu.cpp/.hsyncDisplaySettingsupdatedsrc/gui/MainWindow.cppwfBlankerEnabledChanged,wfBlankerModeChanged,wfBlankerThresholdChanged,wfBlankerAutoWithWnbChangedsignalssrc/core/LogManager.cpp/.hlcPerf/aether.perfcategory for render timingscripts/cpu-monitor.shscripts/render-profile.shlcPerflog output).github/workflows/windows-installer.ymlScreenshot
Test