Drones / UAV · Friis equation (ITU-R P.525)
FPV Link Budget & Range Calculator
Compute theoretical and practical line-of-sight range for any FPV video or control link using the Friis equation. Accounts for TX power, antenna gains, receiver sensitivity, system losses and fade margin, plus 60% Fresnel zone clearance for long-range planning.
Inputs
tx_power_mwRequirednumber (mW)Transmitter Power
required · min 0.1 · max 50000 · default 1000
Common values: 25 mW (race / EU restricted), 200 mW (analog VTX low), 600 mW (DJI O3 max), 1000 mW (ELRS / Crossfire mid), 2500 mW (long-range).
required · min 0.1 · max 50000 · default 1000
Common values: 25 mW (race / EU restricted), 200 mW (analog VTX low), 600 mW (DJI O3 max), 1000 mW (ELRS / Crossfire mid), 2500 mW (long-range).
frequency_mhzRequiredenumFrequency
required · default "5800" · one of: 433, 868, 915, 1280, 2400, 5800
Lower frequency travels further at the same power. 900 MHz beats 5.8 GHz by ~16 dB of free-space loss at the same range.
required · default "5800" · one of: 433, 868, 915, 1280, 2400, 5800
Lower frequency travels further at the same power. 900 MHz beats 5.8 GHz by ~16 dB of free-space loss at the same range.
tx_antenna_gain_dbiRequirednumber (dBi)TX Antenna Gain
required · min 0 · max 30 · default 2
Stock dipole / linear: ~2 dBi. Pagoda: ~2.5 dBi. Patch (directional, not for craft side): ~8 dBi.
required · min 0 · max 30 · default 2
Stock dipole / linear: ~2 dBi. Pagoda: ~2.5 dBi. Patch (directional, not for craft side): ~8 dBi.
rx_antenna_gain_dbiRequirednumber (dBi)RX Antenna Gain
required · min 0 · max 30 · default 8
Goggle dipole: 2 dBi. Patch: 8–14 dBi. Helical: 11–14 dBi. Use the directional antenna you'll actually aim at the craft.
required · min 0 · max 30 · default 8
Goggle dipole: 2 dBi. Patch: 8–14 dBi. Helical: 11–14 dBi. Use the directional antenna you'll actually aim at the craft.
rx_sensitivity_dbmRequirednumber (dBm)Receiver Sensitivity
required · min -130 · max -50 · default -100
Analog VTX: −85 to −90. DJI O3: ~−105. HDZero: ~−97. ELRS @ 50 Hz: ~−112. ELRS @ 500 Hz: ~−105. Crossfire 150 Hz: ~−108.
required · min -130 · max -50 · default -100
Analog VTX: −85 to −90. DJI O3: ~−105. HDZero: ~−97. ELRS @ 50 Hz: ~−112. ELRS @ 500 Hz: ~−105. Crossfire 150 Hz: ~−108.
system_loss_dbRequirednumber (dB)System Loss
required · min 0 · max 20 · default 2
Cable, connector, polarisation mismatch losses. 1–2 dB for short, well-made setups; 3–5 dB if cables are long or connectors marginal.
required · min 0 · max 20 · default 2
Cable, connector, polarisation mismatch losses. 1–2 dB for short, well-made setups; 3–5 dB if cables are long or connectors marginal.
fade_margin_dbRequirednumber (dB)Fade Margin
required · min 0 · max 30 · default 10
Safety budget for multipath, atmospheric loss, and pilot orientation. 6 dB minimal, 10 dB sensible, 15+ dB for HD or BVLOS.
required · min 0 · max 30 · default 10
Safety budget for multipath, atmospheric loss, and pilot orientation. 6 dB minimal, 10 dB sensible, 15+ dB for HD or BVLOS.
Outputs
tx_power_dbmnumber (dBm)TX Power
eirp_dbmnumber (dBm)EIRP
link_budget_dbnumber (dB)Link Budget
theoretical_range_kmnumber (km)Theoretical Max Range (LOS)
practical_range_kmnumber (km)Practical Range (with fade margin)
fspl_at_practical_dbnumber (dB)FSPL at Practical Range
fresnel_zone_radius_mnumber (m)60% Fresnel Zone (midpoint)
verdictstringVerdict
Example request
curl -X POST https://toolsamurai.com/api/v1/drones-uav/fpv-link-budget-calculator \ -H "Authorization: Bearer sk_free_•••••••••••••••" \ -H "Content-Type: application/json" \ -d '{ "tx_power_mw": 1000, "frequency_mhz": "5800", "tx_antenna_gain_dbi": 2, "rx_antenna_gain_dbi": 8, "rx_sensitivity_dbm": -100, "system_loss_db": 2, "fade_margin_db": 10 }'
Example response
{ "ok": true, "tool": "fpv-link-budget-calculator", "domain": "drones-uav", "version": "1.0.0", "result": { "tx_power_dbm": …, "eirp_dbm": …, "link_budget_db": …, "theoretical_range_km": …, "practical_range_km": …, "fspl_at_practical_db": …, "fresnel_zone_radius_m": …, "verdict": "…" }, "meta": { "latency_ms": …, "request_id": "req_…" } }