Skip to content

RADE: align filter passband with FreeDV waveform convention (750–2250 Hz) #3300

Description

@NF0T

Problem

activateRADE() currently sets the slice filter to the full passband edge:

  • DIGU: filterWidth(0, 3500)
  • DIGL: filterWidth(-3500, 0)

This does not match the accepted FreeDV / freedv-waveform convention. The RADE OFDM modem operates with its passband centred at 1500 Hz, with a 1500 Hz wide window — not starting from 0 Hz.

Expected behaviour

The filter should be set to match the modem's actual audio band:

Mode Low High
DIGU +750 Hz +2250 Hz
DIGL −2250 Hz −750 Hz

This is centre 1500 Hz ± 750 Hz, mirrored for DIGL.

Why this matters

  1. Correctness — the passband currently includes 0–750 Hz and 2250–3500 Hz, which the modem never uses. This lets in interference (mains hum, carrier leakage, adjacent signals) that the modem's actual audio band would exclude.
  2. Interference immunity — a tighter passband matched to the modem window reduces noise floor and adjacent-channel interference.
  3. Alignment with reference implementation — the freedv-waveform Docker container sets these exact filter edges. AetherSDR should match so both paths behave identically.

Fix

In MainWindow::activateRADE() (src/gui/MainWindow.cpp), change:

if (mode == "DIGL")
    s->setFilterWidth(-3500, 0);
else
    s->setFilterWidth(0, 3500);

to:

if (mode == "DIGL")
    s->setFilterWidth(-2250, -750);
else
    s->setFilterWidth(750, 2250);

Test plan

  1. Enable RADE on a USB band (e.g. 20m) — verify filter shows 750–2250 Hz in the slice filter display
  2. Enable RADE on an LSB band (e.g. 40m) — verify filter shows −2250 to −750 Hz
  3. Disable RADE — verify previous filter is restored correctly
  4. Confirm RADE audio path still functions end-to-end

Principle I (FlexLib / reference implementation authority).

Metadata

Metadata

Assignees

Labels

audioAudio engine and streamingenhancementImprovement to existing featuregood first issueGood for newcomersmaintainer-reviewRequires maintainer review before any action is taken

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