Feature
Implement client-side noise floor auto-adjust for the FFT display. When enabled, automatically adjusts min_dbm so the noise floor sits at a user-configurable position (0-100%) in the FFT display.
Background
- The radio reports
noise_floor_position and noise_floor_position_enable in display pan status
- These fields are read-only —
display pan set noise_floor_position=N returns 5000002D (incorrect parameter)
- SmartSDR must implement this client-side by measuring the noise floor from FFT data and adjusting
min_dbm/max_dbm
Current State
- UI controls (Floor slider + On/Off button) were built and removed — the auto-adjust algorithm needs tuning
- Initial implementation measured 20th percentile of smoothed FFT bins and adjusted
min_dbm every 10 frames
- Problems observed: oscillation, jitter, and incorrect floor tracking
Proposed Approach
- Use a slower update rate (every 50-100 frames instead of 10)
- Heavier smoothing on the noise floor estimate (exponential moving average)
- Hysteresis — only adjust if the error exceeds a threshold (e.g., 3 dB)
- Damped adjustment — move
min_dbm gradually toward the target, not in one step
Code Reference
src/gui/SpectrumWidget.h — m_noiseFloorEnable, m_noiseFloorPosition members (still present)
src/gui/SpectrumWidget.cpp — auto-adjust block in updateSpectrum() (still present, just unwired)
src/gui/SpectrumOverlayMenu.cpp — UI controls removed, signals still in header
src/models/RadioModel.cpp — setPanNoiseFloorPosition/Enable (can be removed, radio doesn't accept)
Related
🤖 Generated with Claude Code
Feature
Implement client-side noise floor auto-adjust for the FFT display. When enabled, automatically adjusts
min_dbmso the noise floor sits at a user-configurable position (0-100%) in the FFT display.Background
noise_floor_positionandnoise_floor_position_enableindisplay panstatusdisplay pan set noise_floor_position=Nreturns5000002D(incorrect parameter)min_dbm/max_dbmCurrent State
min_dbmevery 10 framesProposed Approach
min_dbmgradually toward the target, not in one stepCode Reference
src/gui/SpectrumWidget.h—m_noiseFloorEnable,m_noiseFloorPositionmembers (still present)src/gui/SpectrumWidget.cpp— auto-adjust block inupdateSpectrum()(still present, just unwired)src/gui/SpectrumOverlayMenu.cpp— UI controls removed, signals still in headersrc/models/RadioModel.cpp—setPanNoiseFloorPosition/Enable(can be removed, radio doesn't accept)Related
🤖 Generated with Claude Code