Debug No Signal
A receiver that runs status: ok but produces silence or garbage has a DSP fault, not a crash. Find it systematically; do not randomly tweak parameters.
Method (systematic-debugging applied to RF)
- Reproduce and name the symptom. Re-run and state precisely what's wrong: silent audio, broadband noise, a tone at the wrong pitch, low level.
- See, don't guess. Render a
spectrogram(and/orpsd_plot) of the channelized capture — the stage right afterfreq_xlating_lowpass— andmeasureit. Most faults are visible there. - Check hypotheses cheapest-first, changing ONE thing per iteration:
- Wrong offset or sign. After channelizing, the target should sit at 0 Hz. If it's offset by ±X, your
center_offsetvalue or its sign is wrong (center_offset = target_freq − capture_center_freq). - Over/under-decimation. The post-decimation rate must be ≥ ~2× the signal bandwidth, and for FM must equal the demodulator's
quad_rate. Checksample_rate / decimation. - Filter too narrow/wide.
cutoffbelow the signal bandwidth clips it (muffled/silent); far too wide lets in neighbors (noisy). - Levels / wrong channel.
measurethe channelized capture: very low SNR means you channelized empty spectrum — re-check the target frequency from survey-spectrum. - Demod/rate mismatch. For
nbfm_rx,quad_ratemust be an integer multiple ofaudio_rate; awav_sinksample_ratemust match the audio stream rate.
- Wrong offset or sign. After channelizing, the target should sit at 0 Hz. If it's offset by ±X, your
- Re-verify after each change the same way build-receiver verifies. Stop when the output is correct.
- If no vocabulary block fixes it (e.g. the signal isn't FM at all), report the gap → escape-hatch.
Judgment
- One change at a time. If you change three params and it works, you've learned nothing and it'll break next time.
- Trust the spectrogram over your mental model of the math.