Link Budget & Propagation Link Budget Calculations A link budget calculation estimates whether a radio path between two nodes will work reliably before you deploy hardware. It's the single most useful tool for avoiding wasted installation trips and surprised failures. The link budget equation Received Power (dBm) = TX Power (dBm) + TX Antenna Gain (dBi) − TX Cable Loss (dB) − Free Space Path Loss (dB) − Obstruction Loss (dB) + RX Antenna Gain (dBi) − RX Cable Loss (dB) Link Margin (dB) = Received Power (dBm) − Receiver Sensitivity (dBm) A positive link margin means the link should work. As a common rule of thumb, a margin of 10 dB or more is treated as reliable (longer or mission-critical links often target a 15 - 20 dB fade margin). The author's recommended minimum is about 3 dB - below that a link is borderline and not recommended for permanent infrastructure. These are engineering conventions, not hard standards. Key values for LoRa at 915 MHz Receiver sensitivity by MeshCore preset Figures below are SX1262 datasheet values with Rx Boosted gain (standard gain is roughly 3 - 4 dB worse). They assume the bandwidth listed for each preset. Preset equivalent (SF / BW) Receiver sensitivity USA/Canada (SF7 / 62.5 kHz) ~−125 dBm Long Fast (SF11 / 250 kHz) ~−131 dBm Long Slow (SF12 / 125 kHz) ~−137 dBm Medium Slow (SF10 / 250 kHz) ~−129 dBm Lower sensitivity number = can receive weaker signals = more range potential. Long Slow gives the best sensitivity but at the cost of extremely low data rate. (Sensitivity figures near −141/−148 dBm only occur at very narrow bandwidths around 10.4 kHz, not at the 125 - 250 kHz bandwidths these presets use.) Free Space Path Loss at 915 MHz Practical form (distance in km, frequency in GHz): FSPL (dB) = 20×log10(d_km) + 20×log10(f_GHz) + 92.45. The 92.45 constant already folds in the 4π/c term for kilometres and gigahertz. In practical terms for 915 MHz: Distance Free Space Path Loss 1 km (0.62 mi) 91.6 dB 5 km (3.1 mi) 105.6 dB 10 km (6.2 mi) 111.6 dB 20 km (12.4 mi) 117.6 dB 50 km (31 mi) 125.6 dB Note: Free space path loss assumes clear line of sight with no obstructions. Real-world losses are always higher. Worked example: Rooftop repeater to ground-level node Scenario: 5 km path, rooftop repeater at 30m height, portable node at 2m height. Parameter Value TX Power (repeater) 27 dBm (requires external PA - see note) TX Antenna Gain +5 dBi TX Cable Loss (1m LMR-200) −0.4 dB Free Space Path Loss (5 km, 915 MHz) −105.6 dB Obstruction/Fresnel loss estimate −10 dB (mixed urban) RX Antenna Gain (portable node, 2 dBi) +2 dBi RX Cable Loss (none for portable) 0 dB Received Power 27 + 5 − 0.4 − 105.6 − 10 + 2 = −82.0 dBm Receiver Sensitivity (USA/Canada SF7) −125 dBm Link Margin −82.0 − (−125) = +43.0 dB Power note: common LoRa modules built on the SX1262 top out at +22 dBm conducted, so a 27 dBm example implies an external power amplifier - state it explicitly when planning. FCC Part 15.247 (902 - 928 MHz) caps conducted power at 1 W (30 dBm) and derives a 36 dBm EIRP ceiling, and requires a 1 dB reduction in conducted power for every dB of antenna gain above 6 dBi. At the +5 dBi gain used here no reduction is required, but higher-gain antennas would force the conducted power down. A 43 dB margin is very comfortable - this link will work reliably even with additional obstruction losses not captured in the estimate. (Because this example uses the SF7 sensitivity of −125 dBm, it is unaffected by the higher-SF sensitivity corrections above; a Long Slow / SF12 link at −137 dBm would have an even larger margin.) Fresnel zone clearance The Fresnel zone is an elliptical (football-shaped) region around the straight-line path between two antennas. Radio energy travels through this whole zone, not just the visual line, so obstacles near - not just directly on - the line still degrade the signal. Even in "clear" line-of-sight paths, the first Fresnel zone must be about 60% clear of obstructions for reliable communication. The first Fresnel zone radius at the midpoint of a path: r = 8.66 × sqrt(d_km / f_GHz) meters Where d = path length in km, f = frequency in GHz (This is the same as the form r = 17.3 × sqrt(d / (4·f)) used elsewhere: 17.3 / sqrt(4) = 8.66.) The radius scales with link length. For 915 MHz: 1 km path: r ≈ 9 meters 10 km path: r ≈ 28.6 meters So an obstruction within ~28.6 m of the direct path midpoint will partially block the signal on a 10 km link, but on a 1 km link the relevant zone is only ~9 m. Use the formula for your actual path length rather than a fixed radius. This is why hilltop-to-hilltop links work so well: the terrain clears the Fresnel zone naturally. For rooftop-to-rooftop links in cities, trees and building facades at path midpoints can add 10 - 20 dB of loss even when the antennas themselves have direct line of sight. When to use a link budget Before installing a repeater at a new site, calculate whether it can reach your intended coverage area When planning a point-to-point relay link between two specific nodes When a deployed link is underperforming - work backwards from measured RSSI to identify where the losses are When comparing two candidate repeater sites - small differences in height can produce large differences in link budget RF Propagation Planning Tools Several free tools can help you model coverage and plan repeater placement before deploying hardware. Using these tools can save wasted trips and help you choose between candidate sites. HeyWhatsThat (heywhatsthat.com) The fastest tool for estimating radio horizon from a specific point. Enter a location (address, coordinates, or click on map) Set the antenna height Get a visualization of the radio horizon: which areas have line-of-sight from that point How to use for repeater site selection: Go to heywhatsthat.com Click on your candidate repeater site on the map Set height to your intended antenna mounting height Click "Submit" and examine the color-coded visibility map Compare multiple candidate sites by opening each in a new tab Limitations: HeyWhatsThat uses SRTM elevation data, which is a Digital Surface Model, not bare earth - it partially captures building rooftops and tall vegetation (HeyWhatsThat's own documentation notes you may see "shadowy bumps and gaps" in cities because the elevation data includes rooftops). The real caveat is that SRTM is too coarse (~30 m) to model individual buildings or trees reliably, so treat the visibility output as terrain-dominated: actual coverage will still be lower than predicted in areas with tall buildings or dense forest that the coarse data cannot resolve. Radio Mobile Online (radiomobileonline.pe1mew.nl) More sophisticated link analysis tool with full path profile and link budget integration. The online version is hosted at radiomobileonline.pe1mew.nl. Enter transmitter and receiver coordinates, heights, antenna gain, TX power, and frequency Generates a path profile showing terrain elevation along the path Calculates predicted received signal level Shows Fresnel zone clearance along the path Radio Mobile is best for detailed analysis of specific point-to-point paths, not area coverage visualization. CloudRF (cloudrf.com) Professional-grade coverage prediction with a free tier. Features: SRTM + LIDAR terrain data (more accurate than basic tools) Can include clutter data (buildings, vegetation) for urban environments Overlay predicted coverage on Google Maps or OpenStreetMap Free tier: limited calculations per month; paid plans for heavy use Best for: precise coverage maps for presentations, permitting, or professional deployments. Overkill for casual site selection. Splat! (free, offline) Open-source RF propagation tool that runs locally on Linux/Mac. Uses SRTM terrain data. This is an advanced tool - it is not a copy-paste one-liner. Before you can run it you must (1) create .qth site-location files describing each transmitter/receiver (location, height, name), (2) download SRTM elevation data and convert it into SPLAT's own .sdf format using the srtm2sdf utility (SPLAT! does not read raw SRTM directly), and (3) set the operating frequency and other path parameters in an .lrp file - SPLAT! has no -f frequency command-line option (in SPLAT! the -f flag relates to Fresnel-zone clearance, not center frequency). # Install on Debian/Ubuntu (package availability varies by release; # you may need to build from source per the SPLAT! project site) sudo apt install splat # Download SRTM data for your region from dwtkns.com/srtm or usgs.gov, # then convert it to SPLAT's .sdf format: srtm2sdf N40W106.hgt # Create your tx.qth / rx.qth site files and a tx.lrp parameter file # (frequency, ERP, etc. go in the .lrp file, NOT on the command line). # Then generate a point-to-point path analysis: splat -t tx.qth -r rx.qth -d /path/to/sdf/data Splat! is overkill for most community mesh deployments but valuable when building professional-grade coverage documentation or integrating with GIS workflows. Note that the 0.5 W ERP figures used in such examples are not buildable on stock LoRa radios - the SX1262 chip maxes out at +22 dBm and an external PA would be required. Practical planning workflow For most community mesh network planning, this workflow is sufficient: Identify candidate sites Use topographic maps (USGS topo viewer, CalTopo) to identify hilltops, ridgelines, water towers, and tall buildings in your coverage area. Quick horizon check For each candidate site, run HeyWhatsThat at the proposed antenna height. Immediately discard sites with poor visibility to your target coverage area. Link budget for remaining candidates For the 2 - 3 best candidates, calculate link budgets to your target coverage area edges (farthest points). Compare margin values. On-site test before permanent install Set up a temporary antenna and node at the candidate site. Walk/drive your coverage area while monitoring RSSI/SNR. Real-world testing always beats prediction tools. Document the result Record the actual coverage performance after deployment. This data helps plan future expansion nodes. Interpreting RSSI and SNR from field tests The bands below are approximate field heuristics, not hard cutoffs - the actual decode limit depends on the modem preset (spreading factor). LoRa decodes below the noise floor: the relevant SNR threshold is the per-spreading-factor demodulator floor from the SX1262 datasheet - roughly −7.5 dB at SF7, −12.5 dB at SF9, −17.5 dB at SF11 (LongFast), and −20 dB at SF12 (Long Slow). A link that looks "weak" at SF7 may still decode reliably at SF11/SF12. RSSI SNR Link quality assessment >−90 dBm >+10 dB Excellent - reliable at all data rates −90 to −105 dBm +5 to +10 dB Good - reliable for all normal use −105 to −115 dBm 0 to +5 dB Marginal - may see occasional packet loss −115 to −120 dBm −5 to 0 dB Weak - intermittent; not suitable for infrastructure <−120 dBm <−5 dB Very weak - expect frequent failure (though SF11/SF12 can still decode down to roughly −17.5/−20 dB SNR) Key insight: In the noise-limited regime, what determines whether a packet decodes is whether the SNR exceeds LoRa's per-spreading-factor decode floor (e.g. −17.5 dB at SF11) - RSSI alone does not. Both metrics matter, though: when the signal is well above the noise floor, absolute received power (RSSI) becomes the limiting factor. A signal at −125 dBm with +5 dB SNR is more reliable than one at −100 dBm with −5 dB SNR (which is being swamped by noise). When diagnosing a noise-limited marginal link, prioritize improving SNR; when the link is power-limited, work on RSSI.