Use decision trees, comparison matrices, and interactive calculators to select the right LPWAN technology. The critical selection factors are: private network control (LoRaWAN), ultra-simple uplink-only sensors (Sigfox), carrier-grade reliability (NB-IoT), or mobile asset tracking (LTE-M). At 1,000+ devices over 10 years, private LoRaWAN costs $17.5K vs. NB-IoT’s $320K – but cellular wins when you need 99.9% reliability or global mobility.
20.1 Learning Objectives
By the end of this chapter, you will be able to:
Apply decision trees to select the right LPWAN technology based on deployment requirements
Compare and Evaluate LPWAN technologies across range, cost, reliability, data rate, and mobility dimensions
Calculate the 10-year total cost of ownership for private LoRaWAN vs NB-IoT vs Sigfox deployments
Justify technology selection decisions using quantitative link budget and cost analysis
Configure range calculators to estimate coverage for specific environments and spreading factor settings
Distinguish between LoRaWAN device classes (A, B, C) and select the appropriate class for a given use case
Diagnose mismatches between application requirements and LPWAN technology capabilities
For Beginners: LPWAN Selection Tools
These interactive tools help you choose the right LPWAN technology by asking about your requirements – range, battery life, data rate, cost, and coverage area. Think of it like an online shopping filter: you specify what you need, and the tool narrows down the options to the best-fit technologies.
Sensor Squad: The Technology Matchmaker
“I wish someone would just TELL me which LPWAN to use!” sighed Sammy the Sensor.
Max the Microcontroller showed him the decision tree. “Answer five questions, Sammy. One: how far does your signal need to travel? Two: how much data per message? Three: how often do you send? Four: what’s your battery budget? Five: do you have existing cell coverage?”
“If I need 15 km range, tiny messages once per hour, and 10-year battery life,” Sammy traced the tree, “I land on LoRaWAN. But if I need reliable indoor coverage in a city with larger data, the tree points me to NB-IoT.”
Lila the LED tried it too: “My smart streetlights need to receive on/off commands across a whole city. The tool suggests LoRaWAN Class C – because streetlights need reliable downlink commands, and Sigfox’s 4-downlink-per-day limit is far too restrictive for on-demand switching.”
Bella the Battery appreciated the practical output: “The tool even estimates battery life based on your transmission frequency and data size. No more guessing – just plug in your requirements and get a recommendation with numbers!”
20.2 LPWAN Technology Selection Decision Tree
⏱️ ~15 min | ⭐⭐ Intermediate | 📋 P09.C02.U03
Choosing the right LPWAN technology depends on your deployment model, coverage needs, and application requirements. Use this decision tree to guide your selection:
Figure 20.1: LPWAN technology selection decision tree by requirements
20.2.1 LPWAN Technology Comparison Matrix
Use this comprehensive comparison to evaluate LPWAN options for your use case:
• Asset tracking • Fleet management • Mobile devices • Voice support
Tradeoff: LoRaWAN Private Network vs Cellular LPWAN (NB-IoT/LTE-M)
Option A (LoRaWAN Private): Zero recurring connectivity cost, full data sovereignty, 2-15 km range per gateway. Upfront: 5 gateways x $500 = $2,500 + $15,000 sensors. 10-year TCO for 1,000 devices: ~$17,500 ($1.75/device/year). Requires gateway deployment and backhaul.
Option B (Cellular LPWAN): No infrastructure deployment, global roaming, 99.9% carrier SLA reliability. 10-year TCO for 1,000 devices: $20,000 hardware + $300,000 subscriptions = $320,000 ($32/device/year). Licensed spectrum eliminates interference.
Decision Factors: Choose LoRaWAN Private for fixed-location deployments (agriculture, utilities, smart buildings) where you control the premises and want minimal recurring costs. Choose Cellular LPWAN for mobile assets (fleet tracking, logistics), mission-critical reliability requirements, or deployments spanning multiple countries/regions where gateway deployment is impractical.
Tradeoff: LoRa Spreading Factor SF7 vs SF12
Option A (SF7): Data rate 5.5 kbps, airtime 56 ms for 20-byte payload, range 2-3 km urban, battery: supports hundreds of thousands of messages on 2×AA cells. Link budget: ~139 dB (14 dBm TX + 2.15 dBi antenna − (−123 dBm sensitivity)). Best throughput and capacity.
Option B (SF12): Data rate 0.25 kbps, airtime 1,319 ms for 20-byte payload (24× longer), range 8-15 km, battery: approx. 14× fewer messages than SF7 for same battery. Link budget: ~153 dB (14 dBm TX + 2.15 dBi antenna − (−137 dBm sensitivity)), a gain of ~14 dB over SF7. Maximum range.
Decision Factors: Choose SF7-SF9 for urban deployments with good gateway density, high-frequency reporting (>10 messages/hour), or when battery life is critical. Choose SF10-SF12 for rural deployments, deep indoor penetration, or when gateway infrastructure is sparse. Use ADR (Adaptive Data Rate) to automatically optimize: devices start at SF12 for reliability, network server adjusts downward as link quality permits.
Quick Check: Reading the Comparison Matrix
20.3 Interactive Tool: LPWAN Technology Selector
Use this interactive tool to determine the best LPWAN technology for your IoT deployment. Answer the questions below based on your requirements, and the tool will recommend LoRaWAN, Sigfox, or NB-IoT/LTE-M.
LPWAN Technology Selector Tool
Academic Resource: Stanford IoT Course - Energy Harvesting Sources for LPWAN
Stanford energy harvesting comparison table showing power density for different sources
Source: Stanford University IoT Course - Energy harvesting enables battery-free LPWAN sensors. Note the 1000× difference between indoor (10 uW/cm2) and outdoor solar (10,000 uW/cm2), explaining why most solar-powered IoT is outdoor.
Protocol Energy Efficiency Comparison
Understanding energy efficiency is critical for battery-powered IoT deployments. Energy per bit varies dramatically across wireless protocols, creating a 100× difference between the most and least efficient options:
Protocol
Energy (nJ/bit)
Range
Data Rate
Best For
Wi-Fi
50-100
~100m
54+ Mbps
High bandwidth, power available
BLE
15-30
~10m
1-2 Mbps
Short range, frequent small packets
Zigbee
40-60
~100m
250 kbps
Mesh networks, moderate data
LoRa
1000-5000
10+ km
0.3-50 kbps
Long range, infrequent data
NB-IoT
500-1000
Cellular
250 kbps
Licensed spectrum, reliability
Sigfox
500-2000
10+ km
100 bps
Ultra-low data, long range
Key insights:
Long range costs more per bit - LoRa uses 50-100× more energy per bit than BLE
Total energy matters - Sending 1KB via LoRa may still be efficient if it avoids gateway infrastructure
Protocol overhead varies - Consider header sizes for small payloads
Sleep current dominates - A device sleeping 99% of the time may use more energy sleeping than transmitting!
Key Insight: Energy per bit is NOT the whole story. Total energy consumption depends on your data volume and range requirements.
Example Scenarios:
Scenario 1: Smart Water Meter (1 reading/day, 12 bytes)
Wi-Fi: 12 bytes × 8 bits × 75 nJ/bit = 7,200 nJ/msg → Battery life: 1-2 years
LoRa SF12: 12 bytes × 8 bits × 1200 nJ/bit = 115,200 nJ/msg → Battery life: 10+ years
Why LoRa wins: Despite 16× worse energy/bit, LoRa's longer range means no Wi-Fi routers needed
Putting Numbers to It
Let’s calculate battery life for both technologies with realistic numbers:
The difference? Wi-Fi’s idle current (10 mA) dominates even with 1 transmission per day, while LoRaWAN sleeps at 5 µA—2,000× less idle power. This is why LPWAN excels for infrequent sensing.
BLE: 1000 bytes × 8 bits × 25 nJ/bit = 200,000 nJ/msg → Battery life: days (rechargeable OK)
LoRa SF7: 1000 bytes × 8 bits × 1000 nJ/bit = 8,000,000 nJ/msg → Battery life: weeks (not months!)
Why BLE wins: For continuous data, BLE's 40× better energy/bit matters more than LoRa's range
Decision Framework:
Low data volume (< 1 KB/day) + Long range needed → Choose LoRa/NB-IoT
Total energy dominated by fixed overhead (radio warmup, sync)
Higher energy/bit acceptable for infrequent transmissions
Example: Soil moisture sensor sending 20 bytes/hour across 5 km farm
High data volume (> 1 MB/day) + Short range acceptable → Choose Wi-Fi/BLE
Total energy dominated by data transmission
Lower energy/bit becomes critical
Example: Smartwatch syncing health data to phone every 5 minutes
Medium data (1-100 KB/day) + Medium range → Choose Zigbee/NB-IoT
Balance between energy/bit and range
Example: Smart thermostat updating temperature every 15 minutes
Rule of Thumb: Choose based on total energy for your data volume and range, not just energy/bit. A 100× worse energy/bit protocol can still have 10× better battery life if you only send 1/1000th the data.
Key Concepts
LPWAN Selection Tool: An interactive calculator or decision tree guiding technology selection based on inputs including message frequency, payload size, coverage area, downlink requirements, and budget.
Coverage Prediction Tool: Software tools (CloudRF, Radio Mobile, Splat!) using terrain data and propagation models to predict LPWAN coverage from proposed gateway positions.
TCO Calculator: A financial model comparing total cost of LPWAN technologies over a deployment lifetime, including hardware amortization, subscription fees, gateway infrastructure, and maintenance.
20.4 Pitfall: Assuming LPWAN Means “Always Low Power”
The Mistake: Believing that using LoRa or any LPWAN technology automatically guarantees multi-year battery life, then being surprised when batteries drain in weeks.
Why It Happens: LPWAN marketing emphasizes “10+ year battery life” without clarifying that this assumes proper power management: aggressive sleep modes, infrequent transmissions (1-4 per hour), and avoiding continuous sensing. Developers who poll sensors frequently or use Class C mode negate all power benefits.
The Fix: Calculate your actual power budget before deployment. A LoRa radio transmitting at SF12 consumes 120mA for 1.3 seconds per message. At 1 message per hour with proper sleep (1uA), you get 10 years. At 1 message per minute, you get 6 months. At continuous Class C listening (15mA), you get 2 weeks on 2xAA batteries.
Pitfall: Treating All LPWAN Technologies as Interchangeable
The Mistake: Selecting LPWAN technology based solely on range claims, then discovering fundamental protocol mismatches with application requirements (e.g., Sigfox’s 140 messages/day limit for a parking sensor that changes state 50 times daily).
Why It Happens: LPWAN technologies appear similar at a high level (long range, low power) but have vastly different design centers: LoRaWAN for flexibility and private networks, Sigfox for ultra-simple sensors with infrequent updates, NB-IoT for carrier-grade reliability and mobility.
The Fix: Match technology to your specific requirements: (1) Message frequency: Sigfox limits 140/day, LoRaWAN limited by duty cycle (~500-2000/day at SF10), NB-IoT unlimited. (2) Bidirectional needs: Sigfox allows only 4 downlinks/day, LoRaWAN and NB-IoT are symmetric. (3) Mobility: Only LTE-M and NB-IoT support handoff. (4) Coverage: NB-IoT requires carrier infrastructure, LoRaWAN can be self-deployed.
20.4.1 Cost Analysis Examples
Understanding total cost of ownership is critical for LPWAN selection:
Winner: LoRaWAN private (lowest cost for stationary, rural deployment)
Scenario 2: Fleet Tracking - 500 Trucks (5 years, global)
Option
Hardware
Infrastructure
Subscription (5yr)
Total Cost
LoRaWAN
$5K
$0
$0
$5K + ❌ No global coverage
Sigfox
$2.5K
$0
$5K
$7.5K + ⚠️ Limited coverage
NB-IoT
$15K
$0
$150K
$165K ✓ Best option
LTE-M
$20K
$0
$250K
$270K ✓ Fallback option
Winner: NB-IoT (only option with global mobility and reliable coverage)
Scenario 3: Smart City Parking - 10,000 Sensors (10 years)
Option
Hardware
Infrastructure
Subscription (10yr)
Total Cost
Reliability
LoRaWAN
$50K
$30K (20 gateways)
$0
$80K
85-95%
Sigfox
$30K
$0
$200K
$230K
95-98%
NB-IoT
$250K
$0
$3M
$3.25M
99.9%
Winner: Depends on reliability requirement - Best cost: LoRaWAN ($80K but 85-95% reliability) - Best reliability: NB-IoT ($3.25M but 99.9% reliability) - Compromise: Sigfox ($230K with 95-98% reliability)
20.4.2 Selection Checklist
Use this checklist to narrow down your LPWAN choice:
Understanding wireless range requires calculating the link budget - the difference between transmitted power and receiver sensitivity. This interactive tool helps you estimate range for different LPWAN technologies based on real-world parameters.
How to Use This Calculator
Select a technology: Choose from LoRa, Sigfox, NB-IoT, Wi-Fi, BLE, or Zigbee
Set TX power: Transmit power in dBm (typically 0-30 dBm)
Adjust antenna gain: Additional gain from antenna (0-10 dBi)
Choose environment: Different environments have different path loss exponents
The calculator uses a simplified path loss model to estimate range. Real-world range varies based on terrain, obstacles, weather, and interference.
Show code
viewof technology = Inputs.select( ["LoRa (SF12, 125kHz)","LoRa (SF7, 125kHz)","Sigfox","NB-IoT","Wi-Fi 2.4GHz","BLE 5.0","Zigbee"], {label:"Technology:",value:"LoRa (SF12, 125kHz)"})viewof txPower = Inputs.range([0,30], {value:14,step:1,label:"TX Power (dBm):"})viewof antennaGain = Inputs.range([0,10], {value:2,step:0.5,label:"Antenna Gain (dBi):"})viewof environment = Inputs.select( ["Free space","Urban (heavy obstruction)","Suburban","Rural (light obstruction)","Indoor"], {label:"Environment:",value:"Rural (light obstruction)"})rangeCalc = {const techData = {"LoRa (SF12, 125kHz)": {sensitivity:-137,frequency:868},"LoRa (SF7, 125kHz)": {sensitivity:-123,frequency:868},"Sigfox": {sensitivity:-126,frequency:868},"NB-IoT": {sensitivity:-141,frequency:800},"Wi-Fi 2.4GHz": {sensitivity:-90,frequency:2400},"BLE 5.0": {sensitivity:-97,frequency:2400},"Zigbee": {sensitivity:-100,frequency:2400} };const envFactor = {"Free space":2.0,"Urban (heavy obstruction)":3.5,"Suburban":3.0,"Rural (light obstruction)":2.5,"Indoor":4.0 };const t = techData[technology];const n = envFactor[environment];const linkBudget = txPower + antennaGain - t.sensitivity;// Simplified path loss formula: d = 10^((linkBudget - 20*log10(f) - 32.44) / (10*n))const fspl = linkBudget -20*Math.log10(t.frequency) -32.44;const rangeKm =Math.pow(10, fspl / (10* n));const rangeM = rangeKm *1000;return {linkBudget: linkBudget.toFixed(1),sensitivity: t.sensitivity,rangeKm: rangeKm.toFixed(2),rangeM: rangeM.toFixed(0),pathLossExponent: n };}md`### Range Calculation Results| Parameter | Value ||-----------|-------|| **Link Budget** | ${rangeCalc.linkBudget} dB || **Receiver Sensitivity** | ${rangeCalc.sensitivity} dBm || **Path Loss Exponent** | ${rangeCalc.pathLossExponent} || **Estimated Range** | ${rangeCalc.rangeKm} km (${rangeCalc.rangeM} m) |${parseFloat(rangeCalc.rangeKm) >10?"Long Range: Suitable for wide-area deployments":parseFloat(rangeCalc.rangeKm) >1?"Medium Range: Good for campus/neighborhood coverage":"Short Range: Best for building/room-level applications"}`
Interactive: LoRa Link Budget Calculator
This advanced calculator provides detailed LoRa link budget analysis including receiver sensitivity for each spreading factor, free-space path loss, and maximum range estimates across different environments. Use it to understand the trade-offs between data rate, range, and link margin in LoRa deployments.
Show code
viewof loraTxPower = Inputs.range([2,20], {value:14,step:1,label:"Transmit Power (dBm):",width:300})viewof loraAntennaTx = Inputs.range([0,6], {value:2.15,step:0.5,label:"TX Antenna Gain (dBi):",width:300})viewof loraAntennaRx = Inputs.range([0,6], {value:2.15,step:0.5,label:"RX Antenna Gain (dBi):",width:300})viewof loraFrequency = Inputs.select( [ {label:"868 MHz (EU)",value:868}, {label:"915 MHz (US)",value:915} ], {label:"Frequency Band:",format: x => x.label,value: {label:"868 MHz (EU)",value:868} })viewof loraSF = Inputs.select( [ {label:"SF7 (Fastest)",value:7}, {label:"SF8",value:8}, {label:"SF9",value:9}, {label:"SF10",value:10}, {label:"SF11",value:11}, {label:"SF12 (Longest Range)",value:12} ], {label:"Spreading Factor:",format: x => x.label,value: {label:"SF10",value:10} })viewof loraBW = Inputs.select( [ {label:"125 kHz (Standard)",value:125}, {label:"250 kHz",value:250}, {label:"500 kHz (Fastest)",value:500} ], {label:"Bandwidth:",format: x => x.label,value: {label:"125 kHz (Standard)",value:125} })// LoRa Link Budget CalculationsloraLinkBudget = {const sf = loraSF.value;const bw = loraBW.value;const freq = loraFrequency.value;const txPower = loraTxPower;const antTx = loraAntennaTx;const antRx = loraAntennaRx;// Receiver sensitivity formula for LoRa// Sensitivity = -174 + 10*log10(BW) + NF + SNR_required// NF (Noise Figure) typically 6 dB for SX127x// SNR required depends on SFconst snrRequired = {7:-7.5,8:-10,9:-12.5,10:-15,11:-17.5,12:-20 };const noiseFigure =6;// dB, typical for SX1276const thermalNoise =-174;// dBm/Hz at room temperatureconst sensitivity = thermalNoise +10*Math.log10(bw *1000) + noiseFigure + snrRequired[sf];// Data rate calculation// DR = SF * (BW / 2^SF) * CR// Assuming CR = 4/5 = 0.8const codingRate =0.8;const dataRate = sf * (bw *1000/Math.pow(2, sf)) * codingRate;// Time on air for 12-byte payload (typical sensor reading)// Simplified formula: ToA = (payload_symbols + preamble) * symbol_timeconst symbolTime =Math.pow(2, sf) / (bw *1000);const preambleSymbols =8+4.25;// Default LoRa preambleconst payloadBytes =12;const payloadSymbols =Math.ceil((8* payloadBytes -4* sf +44) / (4* sf)) * (1/ codingRate);const timeOnAir = (preambleSymbols + payloadSymbols) * symbolTime *1000;// ms// Link budgetconst eirp = txPower + antTx;// Effective Isotropic Radiated Powerconst linkBudget = eirp + antRx - sensitivity;// Free Space Path Loss at 1 km// FSPL = 20*log10(d) + 20*log10(f) + 32.44const fspl1km =20*Math.log10(1) +20*Math.log10(freq) +32.44;// Maximum range calculation for different environments// Using path loss exponent model: PL = FSPL(1km) + 10*n*log10(d)// Solving for d: d = 10^((linkBudget - FSPL(1km)) / (10*n))const pathLossExponents = {urban:3.5,suburban:3.0,rural:2.5 };const maxRange = {};for (const [env, n] ofObject.entries(pathLossExponents)) {const exponent = (linkBudget - fspl1km) / (10* n); maxRange[env] =Math.pow(10, exponent); }// Link margin at typical deployment distancesconst typicalDistances = [1,2,5,10,15];const linkMargins = typicalDistances.map(d => {const pl = fspl1km +10*3.0*Math.log10(d);// Suburban path lossreturn {distance: d,pathLoss: pl,margin: linkBudget - pl }; });// Sensitivity table for all SFs at current bandwidthconst sensitivityTable = [];for (let s =7; s <=12; s++) {const sens = thermalNoise +10*Math.log10(bw *1000) + noiseFigure + snrRequired[s];const dr = s * (bw *1000/Math.pow(2, s)) * codingRate;const lb = eirp + antRx - sens;const rangeSuburban =Math.pow(10, (lb - fspl1km) / (10*3.0)); sensitivityTable.push({sf: s,sensitivity: sens.toFixed(1),dataRate: dr.toFixed(0),linkBudget: lb.toFixed(1),maxRange: rangeSuburban.toFixed(1),selected: s === sf }); }return {sensitivity: sensitivity.toFixed(1),dataRate: dataRate.toFixed(0),dataRateKbps: (dataRate /1000).toFixed(2),timeOnAir: timeOnAir.toFixed(1),linkBudget: linkBudget.toFixed(1),eirp: eirp.toFixed(1),fspl1km: fspl1km.toFixed(1), maxRange, linkMargins, sensitivityTable, sf, bw, freq };}md`### Link Budget Results<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin: 20px 0;"><div style="background: linear-gradient(135deg, #2C3E50, #34495E); color: white; padding: 20px; border-radius: 10px; text-align: center;"> <div style="font-size: 0.9em; opacity: 0.8;">Receiver Sensitivity</div> <div style="font-size: 2em; font-weight: bold;">${loraLinkBudget.sensitivity} dBm</div> <div style="font-size: 0.8em; opacity: 0.7;">SF${loraLinkBudget.sf} @ ${loraLinkBudget.bw} kHz</div></div><div style="background: linear-gradient(135deg, #16A085, #1ABC9C); color: white; padding: 20px; border-radius: 10px; text-align: center;"> <div style="font-size: 0.9em; opacity: 0.8;">Link Budget</div> <div style="font-size: 2em; font-weight: bold;">${loraLinkBudget.linkBudget} dB</div> <div style="font-size: 0.8em; opacity: 0.7;">EIRP: ${loraLinkBudget.eirp} dBm</div></div><div style="background: linear-gradient(135deg, #E67E22, #F39C12); color: white; padding: 20px; border-radius: 10px; text-align: center;"> <div style="font-size: 0.9em; opacity: 0.8;">Data Rate</div> <div style="font-size: 2em; font-weight: bold;">${loraLinkBudget.dataRateKbps} kbps</div> <div style="font-size: 0.8em; opacity: 0.7;">${loraLinkBudget.dataRate} bps</div></div><div style="background: linear-gradient(135deg, #9B59B6, #8E44AD); color: white; padding: 20px; border-radius: 10px; text-align: center;"> <div style="font-size: 0.9em; opacity: 0.8;">Time on Air (12 bytes)</div> <div style="font-size: 2em; font-weight: bold;">${loraLinkBudget.timeOnAir} ms</div> <div style="font-size: 0.8em; opacity: 0.7;">Airtime per packet</div></div></div>### Maximum Range Estimates| Environment | Path Loss Exponent | Maximum Range | Notes ||-------------|-------------------|---------------|-------|| **Urban** (Dense buildings) | n = 3.5 | **${loraLinkBudget.maxRange.urban.toFixed(2)} km** | Heavy multipath, NLOS || **Suburban** (Mixed area) | n = 3.0 | **${loraLinkBudget.maxRange.suburban.toFixed(2)} km** | Moderate obstacles || **Rural** (Open terrain) | n = 2.5 | **${loraLinkBudget.maxRange.rural.toFixed(2)} km** | Near line-of-sight |### Link Margin at Distance (Suburban Environment)| Distance | Path Loss | Link Margin | Status ||----------|-----------|-------------|--------|${loraLinkBudget.linkMargins.map(m =>`| ${m.distance} km | ${m.pathLoss.toFixed(1)} dB | ${m.margin.toFixed(1)} dB | ${m.margin>10?"Excellent": m.margin>5?"Good": m.margin>0?"Marginal":"No Link"} |`).join('\n')}*Link margin > 10 dB recommended for reliable operation. Margin > 0 dB required for any link.*### Sensitivity Table: All Spreading Factors @ ${loraLinkBudget.bw} kHz| SF | Sensitivity | Data Rate | Link Budget | Max Range (Suburban) | Trade-off ||----|-------------|-----------|-------------|---------------------|-----------|${loraLinkBudget.sensitivityTable.map(row =>`| ${row.selected?"**SF"+ row.sf+"**":"SF"+ row.sf} | ${row.sensitivity} dBm | ${row.dataRate} bps | ${row.linkBudget} dB | ${row.maxRange} km | ${row.sf===7?"Fastest, shortest": row.sf===12?"Slowest, longest":"Balanced"} |`).join('\n')}### Data Rate vs Range Trade-offThe fundamental LoRa trade-off: **Higher SF = More range but less data rate**- **SF7**: Best for short-range, high-throughput (${loraLinkBudget.sensitivityTable[0].dataRate} bps)- **SF12**: Best for maximum range at cost of speed (${loraLinkBudget.sensitivityTable[5].dataRate} bps)- **Ratio**: SF12 provides ~${(parseFloat(loraLinkBudget.sensitivityTable[5].maxRange) /parseFloat(loraLinkBudget.sensitivityTable[0].maxRange)).toFixed(1)}x more range than SF7, but ${(parseFloat(loraLinkBudget.sensitivityTable[0].dataRate) /parseFloat(loraLinkBudget.sensitivityTable[5].dataRate)).toFixed(0)}x slower**Battery Impact**: Each SF increase roughly doubles airtime, doubling energy consumption per packet. SF12 uses ~32x more energy per packet than SF7.### Formulas Used**Receiver Sensitivity:**\`\`\`Sensitivity = -174 + 10*log10(BW_Hz) + NF + SNR_required = -174 + 10*log10(${loraLinkBudget.bw*1000}) + 6 + SNR(SF${loraLinkBudget.sf}) = ${loraLinkBudget.sensitivity} dBm\`\`\`**Link Budget:**\`\`\`Link Budget = TX Power + TX Antenna + RX Antenna - Sensitivity = ${loraTxPower} + ${loraAntennaTx} + ${loraAntennaRx} - (${loraLinkBudget.sensitivity}) = ${loraLinkBudget.linkBudget} dB\`\`\`**Free Space Path Loss (at distance d km):**\`\`\`FSPL = 20*log10(d_km) + 20*log10(f_MHz) + 32.44FSPL(1km, ${loraLinkBudget.freq}MHz) = ${loraLinkBudget.fspl1km} dB\`\`\``
20.5.1 Understanding the Link Budget
The link budget calculation determines maximum communication range:
Link Budget (dB) = TX Power + TX Antenna Gain - RX Sensitivity
Key Factors:
Receiver Sensitivity: Minimum signal strength the receiver can detect
LoRa SF12: -137 dBm (excellent sensitivity)
NB-IoT: -141 dBm (best cellular LPWAN)
Wi-Fi: -90 dBm (poor sensitivity)
Path Loss Exponent (n): Environment-dependent signal attenuation
Free space: n = 2.0 (ideal conditions)
Rural: n = 2.5 (light obstacles)
Suburban: n = 3.0 (moderate obstacles)
Urban: n = 3.5 (heavy obstacles, buildings)
Indoor: n = 4.0 (walls, multiple reflections)
Frequency: Higher frequencies have greater path loss
Sub-GHz (868/915 MHz): Better penetration, longer range
2.4 GHz: More attenuation, shorter range
Try These Experiments:
Compare LoRa spreading factors: SF12 vs SF7 shows sensitivity vs data rate trade-off
Urban vs Rural: Same technology has vastly different range in different environments
LPWAN vs Wi-Fi: See why LPWAN achieves 10-100× better range
Antenna gain impact: +3 dBi doubles range in free space
Range Estimates Are Theoretical
These calculations assume ideal conditions. Real-world range is affected by:
Interference: Other devices on the same frequency
Terrain: Hills, valleys, and obstructions
Weather: Rain, humidity, and temperature variations
Antenna orientation: Particularly important for directional antennas
Building materials: Metal, concrete, and reflective surfaces
Always conduct a site survey and pilot deployment before finalizing your LPWAN technology selection.
Decision Framework: Choosing Between LoRaWAN Device Classes
When deploying LoRaWAN, choosing the right device class (A, B, or C) impacts power consumption, downlink latency, and cost. Use this framework:
Factor
Class A (Lowest Power)
Class B (Scheduled RX)
Class C (Always Listening)
Power Consumption
Lowest (0.5-2 mAh/day)
Medium (2-10 mAh/day)
Highest (15-50 mA continuous)
Battery Life
10-15 years (2× AA lithium)
2-5 years
Hours to days (must be mains or solar)
Downlink Latency
High (seconds to hours)
Medium (0.128-4s windows)
Lowest (<2 seconds)
Downlink Reliability
Poor (narrow RX windows)
Good (scheduled windows)
Excellent (always ready)
Use Cases
Sensors (temperature, moisture, meters)
Asset tracking, environmental monitoring
Actuators (streetlights, valves, displays)
Device Cost
Lowest ($5-15)
Medium ($15-25)
Higher ($20-40)
When to Use
Battery-powered, infrequent updates
Need occasional commands, battery OK
Mains-powered, low-latency control required
Decision Tree:
START: Is device mains-powered or has energy harvesting?
├─ NO (battery-powered) → Do you need frequent downlinks (>1/day)?
│ ├─ NO → Class A (10-year battery, sensors)
│ └─ YES → Can you tolerate scheduled latency (0.5-4s)?
│ ├─ YES → Class B (2-5 year battery, tracking)
│ └─ NO → Reconsider if LPWAN is right (need <1s? use cellular)
│
└─ YES (mains/solar) → Do you need immediate commands (<5s)?
├─ YES → Class C (streetlights, actuators, displays)
└─ NO → Class A with more frequent uplinks (saves device cost)
Power Consumption Comparison (Realistic Sensor with 1 msg/hour):
Class A Device:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TX (1 msg/hour): 120 mA × 1s × 24 = 0.8 mAh/day
RX windows (2 × 1s × 24): 15 mA × 2s × 24 = 0.2 mAh/day
Sleep (23.98 hours): 5 µA × 24h = 0.12 mAh/day
Total: ~1.12 mAh/day
2400 mAh battery: 2400 / 1.12 = 2,143 days = 5.9 years
With 50% capacity fade: ~10 years realistic
Class B Device:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TX (same): 0.8 mAh/day
Beacon RX (128ms every 128 seconds): 15 mA × 0.128s × 675 = 1.3 mAh/day
Ping slot RX: 15 mA × 0.03s × 720 = 0.32 mAh/day
Sleep: 0.12 mAh/day
Total: ~2.54 mAh/day
2400 mAh battery: 2400 / 2.54 = 945 days = 2.6 years
Class C Device:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TX (same): 0.8 mAh/day
Continuous RX: 15 mA × 24h = 360 mAh/day (!)
Total: ~361 mAh/day
2400 mAh battery: 2400 / 361 = 6.6 days
Conclusion: Class C requires mains power (battery impractical)
Hybrid Approach: Some deployments use Class A devices that switch to Class C temporarily: - Normal operation: Class A (low power) - During firmware update: Switch to Class C for 1 hour to receive large downlink - After update: Return to Class A - Cost: ~8 hours of battery life per update (acceptable for yearly updates)
Key Lesson: Class choice should match your downlink requirement, not your uplink pattern. If you only need commands once per week, Class A with patient downlinks (wait until next uplink) is far more power-efficient than Class B’s continuous beacon listening.