Skip to main content

Using an SDR for 915 MHz Band Analysis

A Software Defined Radio (SDR) is one of the most useful tools for mesh network operators: it lets you visualize the actual RF environment your nodes operate in, identify interference sources, and verify that your nodes are transmitting on the correct frequencies.

Getting Started with RTL-SDR

The RTL-SDR (RTL2832U based USB dongle) is the most accessible SDR for mesh operators:

  • Cost: roughly $30 dongle-only, or about $40 with the dipole antenna kit, for an RTL-SDR Blog V4 (the current recommended version; MSRP as of 2026-06-08)
  • Coverage: 500 kHz to 1750 MHz - covers the entire 902-928 MHz ISM band
  • Software: SDR# (Windows), GQRX (Linux/Mac), SDRangel (cross-platform)
  • Antenna: The included whip antenna works at 915 MHz; a dedicated 915 MHz antenna improves sensitivity
# Install SDR# on Windows:
# Download from airspy.com/download, extract, run SDRSharp.exe

# GQRX on Ubuntu:
sudo apt install gqrx-sdr

Configuring SDR# for 915 MHz Observation

  1. Set center frequency to 915,000,000 Hz (915 MHz)
  2. Set sample rate to 2.4 MHz. Note this shows only ~2.4 MHz of spectrum at once (about 913.8-916.2 MHz at a 915 MHz center) — the RTL-SDR cannot display the full 26 MHz band simultaneously. To survey the whole 902-928 MHz band, step the center frequency across the band in ~2 MHz increments (or use a wideband SDR / scan feature).
  3. Enable WFM or Raw I/Q mode (you're looking at signal presence, not decoding)
  4. Enable the spectrum analyzer and waterfall displays
  5. Set FFT size to 32768 for high resolution

The waterfall shows frequency (horizontal) vs. time (vertical, scrolling). Each LoRa transmission appears as a faint chirp pattern - rising or falling tones, typically 250 kHz wide for the common Meshtastic presets (range 125-500 kHz depending on preset).

What to Look For

Normal LoRa Activity

LoRa transmissions are characterized by chirp spread spectrum - the signal appears as a diagonal streak in the waterfall (rising chirp = upchirp, falling = downchirp). A healthy mesh network shows occasional bursts of activity at the configured center frequency.

Interference Sources

  • Constant carrier (narrow spike): Could be a CW interferer, oscillator leakage, or a malfunctioning device
  • Wide noise floor increase: Could be FHSS device (900 MHz cordless phone), wideband noise from switching power supply
  • Pulsed narrowband: Smart meter AMI networks (itron, Landis+Gyr) often operate in 902-928 MHz; appears as regular narrow pulses
  • Broadband hash: Arc welders, brush motors, and variable-speed drives produce broadband electrical noise that raises the noise floor broadly

Measuring Channel Utilization Empirically

SDR# can be used to empirically measure how busy your mesh channel is:

  1. Tune to your network's center frequency
  2. Record 10-15 minutes of waterfall data
  3. Count the number of LoRa packet events per minute
  4. Estimate channel occupancy from the LoRa airtime, not from a raw bitrate. (LoRa data rate is low: SF9/250 kHz is only ~1.7-3 kbps, far below the 250 kHz bandwidth — do not confuse the two.) A typical ~50-byte packet at SF9/250 kHz has an airtime of roughly 150 ms, so 10 packets/min × 0.15 s ≈ 2.5% channel occupancy. Slower spreading factors (SF11/SF12) have much longer airtimes and reach high occupancy with far fewer packets.

The Meshtastic app reports Channel Utilization as a device metric (via the Telemetry module / node info, often shown as ChUtil) - check this before breaking out the SDR. The SDR is most useful when you suspect non-LoRa interference.