Spectrum Analysis and RF Tools

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:

# 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

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.

NanoVNA Guide for Mesh Antenna Work

The NanoVNA is an affordable vector network analyzer that every serious mesh network operator should own. It measures antenna SWR, impedance, and resonant frequency directly - letting you verify antennas before installation and diagnose field problems.

What a NanoVNA Measures

NanoVNA Selection

For 915 MHz work, any NanoVNA covering 300 kHz to 1.5+ GHz will work (prices as of 2026-06-08; verify current pricing and specs against the vendor listing):

Calibration Procedure

Calibration must be done before every measurement session, set for the exact frequency span you're testing. If you later change the sweep span (or any adapter or cable), you must re-run calibration:

  1. Open the menu and select CAL → RESET to clear any previous calibration
  2. Set the frequency span first: STIMULUS → START/STOP = 850 MHz / 980 MHz (bracket the 902-928 MHz band). Calibration is only valid for the span you set here
  3. Select CAL → CALIBRATE, then with the OPEN standard attached to the CH0 port, press OPEN
  4. Replace it with the SHORT standard; press SHORT
  5. Replace it with the LOAD (50 ohm) standard; press LOAD
  6. For antenna SWR (an S11-only, one-port measurement) you can skip the THRU and ISOLN steps - those apply to two-port (S21) measurements
  7. Press DONE, then SAVE to a calibration slot (e.g., SAVE 0)

Critical: Calibration is performed at the end of your test cable (the SMA port that will connect to the antenna). Every adapter or cable change - and every change to the frequency span - requires recalibration.

Measuring a Mesh Antenna

  1. Calibrate NanoVNA at the test port
  2. Connect antenna under test to CH0
  3. Enable S11 display in SWR mode
  4. Set Y-axis to SWR 1-3 range for easy reading
  5. Identify the frequency where SWR dips to its minimum - that's the antenna's resonant frequency
  6. Read the SWR at 915 MHz specifically

Interpreting Results

SWR at 915 MHzInterpretationAction
1.0 - 1.5Excellent matchDeploy with confidence
1.5 - 2.0Good matchAcceptable; 89-96% power transfer
2.0 - 3.0Fair matchInvestigate antenna type/connector
3.0+Poor matchLikely a wrong-frequency or damaged antenna, or a connector/feedline fault
Flat (no dip anywhere)Open or short circuitCheck connector and cable continuity

Tuning a DIY Antenna

If your DIY antenna resonates slightly off 915 MHz, correct it by changing the element length. Note that a too-high resonance requires adding length (you cannot fix it by trimming), while a too-low resonance is corrected by trimming: