Free-Space Path Loss (FSPL): The attenuation of radio signal power as it spreads over a spherical wavefront in the absence of obstacles or reflections
FSPL Formula: FSPL (dB) = 20 log₁₀(d) + 20 log₁₀(f) + 20 log₁₀(4π/c) ≈ 20 log₁₀(d) + 20 log₁₀(f) − 147.55 (d in metres, f in Hz)
Inverse Square Law: Signal power decreases proportionally to the square of distance; doubling distance increases FSPL by 6 dB
Frequency Dependence: Higher frequencies experience more path loss at the same distance; 2.4 GHz suffers ~6 dB more FSPL than 900 MHz at equal range
dBm: Power measured in decibels relative to 1 milliwatt; used to express transmitted and received signal power
Received Signal Strength (RSS): The power of the signal at the receiver, calculated as Transmit Power (dBm) + Antenna Gains (dBi) − FSPL (dB)
Path Loss Exponent: The exponent n in the more general path loss model (PL ∝ dⁿ); n=2 in free space, n=2.7–3.5 in buildings
43.1 In 60 Seconds
Free Space Path Loss (FSPL) quantifies how radio signals weaken with distance: doubling the distance costs 6 dB, and doubling the frequency costs another 6 dB. The formula FSPL(dB) = 20log(d) + 20log(f) + 32.45 gives theoretical loss (d in km, f in MHz), while the log-distance model adds a path loss exponent (n=2 for free space, n=3-4 for urban, n=4-6 for indoor) to match real environments. This is the foundation for estimating Wi-Fi range, LoRa coverage, and BLE beacon placement.
43.2 Learning Objectives
By the end of this chapter, you will be able to:
Calculate free space path loss (FSPL) for various frequencies and distances
Apply the FSPL formula using both MHz/km and GHz/m conventions
Apply the log-distance path loss model for different environments
Interpret path loss exponents to characterize propagation environments
Estimate received signal strength from transmit power and path loss
For Beginners: Path Loss and Propagation
As a wireless signal travels through the air, it gets weaker with distance, just like a shout fades as you walk away from the person shouting. Path loss is the technical term for this weakening. Understanding path loss helps you figure out how far apart IoT sensors can be while still communicating reliably.
Sensor Squad: The Fading Shout!
“Why can’t I reach the gateway anymore?” Sammy the Sensor asked sadly. “It is only twice as far away as before!” Max the Microcontroller pulled out a chart. “That is path loss, Sammy. Every time you double the distance, your signal loses 6 dB of strength. And if you also double the frequency, that is another 6 dB gone!”
“Think of it like shouting across a field,” Lila the LED suggested. “Stand close and your friend hears you perfectly. Walk to the other end and they can barely hear a whisper. The sound does not disappear – it just spreads out in all directions, getting thinner.”
Bella the Battery explained further. “In a perfect open space with nothing blocking the signal, we can calculate exactly how much it weakens using the Free Space Path Loss formula. But in the real world – inside buildings, in cities, through forests – the signal fades much faster because walls and trees absorb it.”
“So that is why our building deployment failed!” said Sammy. “The spec said 100-meter range, but that was for open space. Inside, with all those walls, we only got 30 meters. Always calculate for your ACTUAL environment, not the ideal one!”
43.3 Introduction
Understanding wireless signal propagation is critical for IoT deployments. Whether placing Wi-Fi access points, estimating LoRa range, or debugging BLE beacon issues, engineers must understand how radio waves behave in real environments.
Time: ~15 min | Difficulty: Intermediate | P07.C15.U05a
43.4 Why Propagation Matters for IoT
Real-World Problem: A smart building deploys 200 Zigbee temperature sensors with gateway placement based on theoretical 100m range specifications. After installation, 40% of sensors fail to connect. Post-mortem analysis reveals walls attenuate signals by 8-15 dB, reducing effective range to 30-50m.
fspl_result = {const d_km = calc_distance /1000;const f_mhz = calc_frequency.value;const fspl =20*Math.log10(d_km) +20*Math.log10(f_mhz) +32.45;const rx_power = calc_tx_power - fspl;const link_margin = rx_power - calc_sensitivity;return {fspl, rx_power, link_margin, d_km, f_mhz};}html`<div style="background: #f8f9fa; border-left: 4px solid #16A085; padding: 1em; border-radius: 4px; margin-top: 0.5em;"><strong>Results at ${calc_distance} m (${fspl_result.d_km.toFixed(3)} km), ${fspl_result.f_mhz} MHz:</strong><br><table style="margin: 0.5em 0; border-collapse: collapse; width: 100%;"><tr><td style="padding: 4px 8px;">Free Space Path Loss:</td><td style="padding: 4px 8px; font-weight: bold;">${fspl_result.fspl.toFixed(1)} dB</td></tr><tr><td style="padding: 4px 8px;">Received Power:</td><td style="padding: 4px 8px; font-weight: bold;">${fspl_result.rx_power.toFixed(1)} dBm</td></tr><tr><td style="padding: 4px 8px;">Link Margin:</td><td style="padding: 4px 8px; font-weight: bold; color: ${fspl_result.link_margin>=10?'#16A085': fspl_result.link_margin>=0?'#E67E22':'#E74C3C'};">${fspl_result.link_margin.toFixed(1)} dB ${fspl_result.link_margin>=10?'(good)': fspl_result.link_margin>=0?'(marginal)':'(link fails)'}</td></tr></table><em>Double the distance: FSPL increases by ~6 dB. At ${calc_distance *2} m, RX power would be ${(fspl_result.rx_power-6.02).toFixed(1)} dBm.</em></div>`
43.6 Worked Example: Wi-Fi 2.4 GHz Range Calculation
Scenario: ESP32 Wi-Fi module transmitting at 2.4 GHz. What is the path loss at 50 meters?
Given:
Distance: d = 50 meters
Frequency: f = 2.4 GHz
Transmit power: 20 dBm (100 mW - typical ESP32)
Receiver sensitivity: -90 dBm (typical Wi-Fi)
Step 1: Calculate FSPL (using km/MHz formula)
Convert distance: 50 m = 0.05 km. Frequency: 2400 MHz.
Calculation
Result
What it means
Substitute values
L_FSPL = 20log10(0.05) + 20log10(2400) + 32.45
Use km and MHz because this version uses the 32.45 constant.
Evaluate log terms
L_FSPL = 20(-1.301) + 20(3.380) + 32.45
Short distance reduces loss; high frequency increases loss.
Final path loss
L_FSPL = 74.03 dB
The 50 m free-space Wi-Fi link loses about 74 dB before other losses.
Common Formula Pitfall: The two FSPL formula versions use different units. Using meters with the km formula (or GHz with the MHz formula) produces wildly wrong results. Always verify: which constant am I using? 32.45 requires km and MHz. 92.45 requires meters and GHz.
Step 2: Calculate received signal strength
Step
Result
Meaning
Received power
P_RX = 20 dBm - 74.03 dB = -54.03 dBm
The receiver sees a strong signal in ideal free space.
Sensitivity threshold
-90 dBm
Typical Wi-Fi can decode signals down to roughly this level.
Link margin
-54.03 - (-90) = 35.97 dB
Enough margin for walls, furniture, and fading in many small spaces.
Step 3: Compare to sensitivity threshold
Received signal: -54.03 dBm
Sensitivity threshold: -90 dBm
Link margin: -54.03 - (-90) = 35.97 dB (excellent!)
Interpretation: At 50 m in free space, Wi-Fi has ~36 dB of margin. This margin accommodates real-world losses: add 15 dB for a concrete wall, 5 dB for furniture, and 6 dB for fading, and you still have 10 dB of margin left. This is why Wi-Fi works across a house but fails reliably across a warehouse.
Putting Numbers to It
The “doubling distance costs 6 dB” rule comes directly from the distance term in the FSPL formula.
Comparison
Result
Original distance term
20log10(d)
Doubled distance term
20log10(2d)
Difference
20log10(2d) - 20log10(d) = 20log10(2)
Added loss
6.02 dB
For our ESP32 example at 50 m with -54 dBm received, doubling to 100 m adds 6 dB loss:
Distance
Approximate received power
Link margin vs -90 dBm
50 m
-54 dBm
36 dB
100 m
-60 dBm
30 dB
200 m
-66 dBm
24 dB
400 m
-72 dBm
18 dB
This shows why Wi-Fi can reach hundreds of meters in free space, yet still fail inside a warehouse once walls, racks, and people consume the margin.
43.7 Worked Example: LoRa Long-Range Link Budget
Scenario: LoRaWAN sensor in rural farm environment at 915 MHz. What is maximum range?
43.8 Worked Example: Comparing Protocols at the Same Distance
Understanding FSPL explains why different protocols have such different range specifications. Here is a side-by-side comparison of four IoT technologies at 100 meters line-of-sight.
Protocol
Frequency
TX Power
FSPL at 100 m
RX Power
Sensitivity
Link Margin
Wi-Fi
2,400 MHz
20 dBm
80.0 dB
-60.0 dBm
-90 dBm
30.0 dB
BLE
2,400 MHz
0 dBm
80.0 dB
-80.0 dBm
-95 dBm
15.0 dB
Zigbee
2,400 MHz
4 dBm
80.0 dB
-76.0 dBm
-100 dBm
24.0 dB
LoRa SF7
915 MHz
14 dBm
71.7 dB
-57.7 dBm
-124 dBm
66.3 dB
LoRa SF12
915 MHz
14 dBm
71.7 dB
-57.7 dBm
-137 dBm
79.3 dB
The ~8.4 dB FSPL advantage of 915 MHz vs 2.4 GHz, combined with LoRa’s extreme receiver sensitivity (-137 dBm at SF12 vs -90 dBm for Wi-Fi), gives LoRa a 49 dB advantage in link margin. Each 6 dB doubles the range, so 49 dB translates to roughly 280x the distance – explaining how LoRa reaches 10+ km where Wi-Fi reaches 100 m.
43.9 Log-Distance Path Loss Model
Real environments do not follow free-space propagation. The Log-Distance Path Loss Model accounts for obstacles and environment.
L_0 = Path loss at reference distance d_0 (typically 1 m)
n = Path loss exponent (environment-dependent)
d_0 = Reference distance (typically 1 m)
X_sigma = Gaussian random variable for shadowing (dB)
Path Loss Exponents by Environment:
Environment
Path Loss Exponent (n)
Interpretation
Free space
n = 2.0
Ideal conditions
Urban cellular
n = 2.7 to 3.5
Buildings, reflections
Indoor office
n = 2.5 to 3.0
Cubicles, furniture
Indoor factory
n = 2.0 to 3.0
Open floor vs machinery
Indoor residential
n = 3.0 to 4.0
Walls, floors
Obstructed urban
n = 4.0 to 6.0
Dense buildings, no LOS
Key Insight: Higher path loss exponent = signal degrades faster with distance.
Try It: Log-Distance Path Loss Calculator
Show code
viewof ld_distance = Inputs.range([1,500], {value:25,step:1,label:"Distance (meters):"})viewof ld_exponent = Inputs.range([1.5,6.0], {value:3.0,step:0.1,label:"Path Loss Exponent (n):"})viewof ld_l0 = Inputs.range([30,60], {value:40,step:1,label:"Reference Loss L\u2080 at 1m (dB):"})viewof ld_walls = Inputs.range([0,8], {value:2,step:1,label:"Number of walls:"})viewof ld_wall_loss = Inputs.range([2,15], {value:4,step:1,label:"Loss per wall (dB):"})viewof ld_shadow = Inputs.range([0,15], {value:6,step:1,label:"Shadowing margin (dB):"})viewof ld_tx = Inputs.range([-10,30], {value:20,step:1,label:"TX Power (dBm):"})
Show code
ld_result = {const log_term =10* ld_exponent *Math.log10(ld_distance);const wall_total = ld_walls * ld_wall_loss;const total_loss = ld_l0 + log_term + wall_total + ld_shadow;const rx_power = ld_tx - total_loss;const fspl_only = ld_l0 +10*2.0*Math.log10(ld_distance);return {log_term, wall_total, total_loss, rx_power, fspl_only};}html`<div style="background: #f8f9fa; border-left: 4px solid #3498DB; padding: 1em; border-radius: 4px; margin-top: 0.5em;"><strong>Log-Distance Path Loss at ${ld_distance} m (n=${ld_exponent.toFixed(1)}):</strong><br><table style="margin: 0.5em 0; border-collapse: collapse; width: 100%;"><tr><td style="padding: 4px 8px;">Reference loss L<sub>0</sub>:</td><td style="padding: 4px 8px;">${ld_l0.toFixed(0)} dB</td></tr><tr><td style="padding: 4px 8px;">Distance term (10 × ${ld_exponent.toFixed(1)} × log<sub>10</sub>(${ld_distance})):</td><td style="padding: 4px 8px;">${ld_result.log_term.toFixed(1)} dB</td></tr><tr><td style="padding: 4px 8px;">Wall losses (${ld_walls} × ${ld_wall_loss} dB):</td><td style="padding: 4px 8px;">${ld_result.wall_total.toFixed(0)} dB</td></tr><tr><td style="padding: 4px 8px;">Shadowing margin:</td><td style="padding: 4px 8px;">${ld_shadow.toFixed(0)} dB</td></tr><tr style="border-top: 2px solid #2C3E50;"><td style="padding: 4px 8px; font-weight: bold;">Total Path Loss:</td><td style="padding: 4px 8px; font-weight: bold;">${ld_result.total_loss.toFixed(1)} dB</td></tr><tr><td style="padding: 4px 8px; font-weight: bold;">Received Power:</td><td style="padding: 4px 8px; font-weight: bold;">${ld_result.rx_power.toFixed(1)} dBm</td></tr></table><em>Compare: Free-space model (n=2, no walls, no shadowing) predicts only ${ld_result.fspl_only.toFixed(1)} dB loss at this distance -- a ${(ld_result.total_loss- ld_result.fspl_only).toFixed(1)} dB difference.</em></div>`
43.9.1 Worked Example: Indoor Office Propagation at 2.4 GHz
Scenario: An ESP32 Wi-Fi sensor is deployed 25 meters from an access point inside an office building (n = 3.0). The path crosses two plasterboard walls. What is the expected received signal strength?
Given:
Frequency: 2.4 GHz
Distance: 25 m
Path loss exponent: n = 3.0 (indoor office)
Reference path loss at 1 m (L_0): 40 dB (typical for 2.4 GHz)
Wall attenuation: 4 dB per plasterboard wall, 2 walls = 8 dB
Shadowing margin (X_sigma): 6 dB (95% reliability)
Transmit power: 20 dBm
Step 1: Calculate log-distance path loss
Loss component
Calculation
Result
Reference loss at 1 m
L_0
40 dB
Indoor distance term
10 x 3.0 x log10(25 / 1)
41.9 dB
Two plasterboard walls
2 x 4 dB
8 dB
Shadowing margin
Design allowance
6 dB
Total path loss
40 + 41.9 + 8 + 6
95.9 dB
Step 2: Calculate received power
Step
Result
Meaning
Received power
20 - 95.9 = -75.9 dBm
Signal is above the Wi-Fi sensitivity threshold.
Receiver sensitivity
-90 dBm
Typical receiver threshold for this example.
Link margin
-75.9 - (-90) = 14.1 dB
Adequate, but not enough for many extra losses.
Step 3: Compare to receiver sensitivity
Wi-Fi receiver sensitivity: -90 dBm
Link margin: -75.9 - (-90) = 14.1 dB (adequate but thin)
Design implication: With only 14 dB of margin, adding a third wall (another 4 dB loss) and a person walking through the path (3-5 dB body loss) could reduce the margin to 5-7 dB, causing intermittent connectivity. For reliable coverage, either reduce the sensor-to-AP distance to 15 m or place the AP to avoid wall crossings.
Contrast with free-space prediction: Using the log-distance model with n=2.0, no walls, and no shadowing gives a path loss of only 68 dB and a received power of -48 dBm – a 28 dB overestimate that would lead to deploying sensors far beyond reliable range.
43.9.2 Why Does Frequency Affect Path Loss?
A common question is: why do higher frequencies lose more signal to free space? The signal energy does not actually change – the difference is in the antenna’s ability to capture it.
Radio waves spread spherically from the transmitter. At any distance, the signal energy is distributed over the surface of a sphere. A receiving antenna captures a fraction of that sphere proportional to its effective aperture (area). For a simple dipole antenna, effective aperture scales with the square of wavelength.
Frequency
Wavelength
Approximate effective aperture
Practical effect
915 MHz
33 cm
About 86 cm^2
Larger aperture captures more of the arriving wavefront.
2.4 GHz
12.5 cm
About 12 cm^2
Roughly 7x smaller aperture, so the received signal is lower.
The same energy arrives at the receiver, but the higher-frequency antenna captures less of it. This is why the FSPL formula includes the frequency term: it accounts for aperture difference, not actual energy absorption by the air.
Practical consequence: Sub-GHz protocols (LoRa at 868/915 MHz, Sigfox at 868 MHz) achieve longer range than 2.4 GHz protocols (Wi-Fi, BLE, Zigbee) partly because their antennas capture a larger fraction of the arriving signal, not because higher-frequency signals lose energy faster in free space.
Signal Degradation by Environment
Decision factor
Free space
Indoor office
Dense urban
Path-loss exponent
n = 2.0
n = 2.5 to 3.0
n = 4.0 to 6.0
Obstacles
None
Walls and furniture
Buildings and no line-of-sight
Design response
Normal margin
Extra APs or gateways
Site survey required
Common Pitfalls
1. Using FSPL for Indoor Range Calculations
FSPL models free-space propagation without obstacles. Indoor paths with walls, floors, and furniture have path loss exponents of 2.7–3.5, causing 10–20 dB more attenuation than FSPL predicts. Fix: use the log-distance path loss model with an empirically measured path loss exponent for indoor deployments.
2. Confusing dB and dBm in Link Budget Calculations
dB is a dimensionless ratio (gain or loss). dBm is an absolute power level. Adding 20 dB gain to 30 dBm gives 50 dBm — not 50 dB. Fix: always track units explicitly; start with dBm, add/subtract dB gains and losses, finish with dBm received power.
3. Forgetting That FSPL Increases With Frequency
Designers often assume that a higher-frequency radio is more capable, but higher frequency means more path loss at the same distance. Fix: calculate FSPL at your deployment frequency, not at a reference frequency, before comparing range specifications.
Label the Diagram
Code Challenge
43.10 Summary
Free Space Path Loss (FSPL) provides the baseline for wireless range calculations using the formula: FSPL = 20log(d) + 20log(f) + 32.45 (d in km, f in MHz)
Higher frequencies experience more path loss – a 2.4 GHz signal loses ~8.4 dB more than a 915 MHz signal at the same distance
Path loss exponent (n) characterizes the environment: n=2 for free space, n=3-4 for indoor, n=4-6 for obstructed urban
Theoretical range far exceeds practical range – real deployments must account for environmental losses
Link budget analysis determines if a wireless connection will work by comparing received power to receiver sensitivity