SDR & Sub‑GHz: Signal Present but Wrong Decoder Block (URH vs SDR++)
Seeing energy in the spectrum or a “fat” trace in an analyzer does not mean your decoder chain matches the signal. Universal Radio Hacker (URH) and SDR++ are both excellent—but they organize demodulation, synchronization, and protocol interpretation differently. “It works in one app but not the other” is usually parameter mismatch, not a broken capture.
1) Same RF, different pipeline
FFT power proves something is there. Decoding requires the right sequence: filter → demod → clock recovery (if needed) → slicer/framer → protocol rules. If any stage uses the wrong bandwidth, wrong modulation family, or wrong symbol rate, the next block receives garbage—while the waterfall still looks “busy.”
2) URH: project model vs raw flowgraph
URH is built around signals as projects: you attach interpretation (bits, encoding, message types) after you’ve characterized the physical layer. It excels when you can nudge bit rate, tolerance, and message boundaries interactively.
- Autodetect is a hint: treat suggested parameters as starting points; verify against multiple bursts.
- “No bits” with a visible signal: often wrong modulation family (ASK vs FSK) or wrong samples-per-symbol.
- Import/export: use consistent sample rate and center when round-tripping IQ between tools.
3) SDR++: plugins, sinks, and manual wiring
SDR++ is a receiver workbench: you choose source, demodulator module, and downstream processing. If the demodulator expects FM voice and your signal is OOK pulses, you will get noise-shaped garbage that still “lights up” meters.
- Match demod to physics: narrowband digital modes need the correct digital mode path, not generic WFM.
- Bandwidth first: set channel filter width to roughly match the occupied bandwidth before chasing decoder plugins.
- Recorder sanity: confirm recorded baseband/IQ matches what URH expects (rate, format, endianness if raw).
4) Sub‑GHz-specific: OOK/FSK and timing
Garage-door and sensor remotes often use simple OOK or 2-FSK with tight timing. A decoder block tuned to the wrong baud or wrong encoding (NRZ vs Manchester-like) will fail even when the spectrum looks obvious.
- Measure symbol time: use a cursor on the demodulated trace or a period estimate before locking a slicer.
- Preamble hunting: some decoders need a stable preamble to lock; random mid-burst starts fail.
- Rolling / multi-frame: compare multiple captures—identical framing across presses suggests deterministic structure; changing frames suggest rolling security.
5) Parameter parity checklist
- Center frequency and sample rate identical (or properly shifted) between tools.
- Modulation family matches (ASK/OOK vs FSK vs FM).
- Bandwidth / channel filter wide enough for sidebands, narrow enough to reject neighbors.
- Symbol rate / bit length within a few percent of truth.
- Gain staging not clipping; overload mimics “no valid bits.”
6) A repeatable A/B workflow
- Record 10–20 seconds of IQ from a known lab source at fixed gain.
- Open the same file in URH and in SDR++ (or play through a file source in SDR++).
- Establish the simplest physical-layer success: stable eye or clean OOK envelope in one tool, then copy parameters.
- Only then add protocol interpretation (framing, checksums).
- Document the winning numbers (rate, bandwidth, modulation) in your lab notes.
Validation criteria
- The same IQ file decodes to consistent bits in one tool after parameter lock.
- You can explain mismatch between tools as pipeline differences, not “mystery RF.”
- Results reproduce on a second capture from the same lab setup.