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: 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 Set center frequency to 915,000,000 Hz (915 MHz) 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). Enable WFM or Raw I/Q mode (you're looking at signal presence, not decoding) Enable the spectrum analyzer and waterfall displays 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: Tune to your network's center frequency Record 10-15 minutes of waterfall data Count the number of LoRa packet events per minute 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 SWR (Standing Wave Ratio) - How well your antenna is matched to 50 ohms at each frequency S11 / Return Loss - The reflection magnitude in dB, reported as a positive number (larger means a better match). It is mathematically related to SWR through the reflection coefficient (return loss = −20 log10|Γ|; SWR = (1+|Γ|)/(1−|Γ|)) and shows resonance as a dip Impedance (R + jX) - The complex impedance of the antenna at each frequency Smith Chart - Graphical representation of impedance; useful for matching network design 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): NanoVNA-H4 - $55-70, 4-inch screen, covers to 1.5 GHz. Best for comfortable field use. NanoVNA-F v2 - around $120; commonly listed with coverage to ~3 GHz and improved calibration (confirm the exact frequency ceiling against the manufacturer/vendor spec). Good if you also do 2.4 GHz work. Avoid no-name clones below $40 - calibration and accuracy are often poor. 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: Open the menu and select CAL → RESET to clear any previous calibration 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 Select CAL → CALIBRATE, then with the OPEN standard attached to the CH0 port, press OPEN Replace it with the SHORT standard; press SHORT Replace it with the LOAD (50 ohm) standard; press LOAD For antenna SWR (an S11-only, one-port measurement) you can skip the THRU and ISOLN steps - those apply to two-port (S21) measurements 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 Calibrate NanoVNA at the test port Connect antenna under test to CH0 Enable S11 display in SWR mode Set Y-axis to SWR 1-3 range for easy reading Identify the frequency where SWR dips to its minimum - that's the antenna's resonant frequency Read the SWR at 915 MHz specifically Interpreting Results SWR at 915 MHz Interpretation Action 1.0 - 1.5 Excellent match Deploy with confidence 1.5 - 2.0 Good match Acceptable; 89-96% power transfer 2.0 - 3.0 Fair match Investigate antenna type/connector 3.0+ Poor match Likely a wrong-frequency or damaged antenna, or a connector/feedline fault Flat (no dip anywhere) Open or short circuit Check 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: Resonant frequency too high (antenna resonates at 920 MHz instead of 915) - antenna is too short; lengthen it (a longer element or added wire). Trimming will not fix this case Resonant frequency too low (antenna resonates at 910 MHz) - antenna is too long; trim carefully in 2mm increments Re-measure after each change until resonant frequency matches 915 MHz