LoRa is one of those technologies that sounds simple in marketing copy and turns out to be deceptively deep underneath. "Long range, low power, sub-GHz" — true, but those three words hide a chirp-modulation scheme borrowed from 1940s radar research, a clever forward error correction layer, and a careful regulatory framework that varies by country. Most blogs skim the surface. This post does not.
By the end of this article, you should understand how a LoRa packet is constructed at the symbol level, why processing gain lets a receiver decode signals well below the thermal noise floor, what RSSI and SNR actually mean, why 50 Ω impedance matters, and how to calculate whether a link will work before you build it.
1. LoRa Is a Modulation, Not a Protocol
LoRa stands for Long Range. It is a physical-layer modulation technique, originally developed by a French startup called Cycleo and acquired by Semtech in 2012. Semtech owns the patents and manufactures the transceiver ICs that sit at the heart of every LoRa module ever sold.
People often confuse LoRa with LoRaWAN. They are not the same:
- LoRa is the radio modulation. Raw, peer-to-peer, no MAC layer.
- LoRaWAN is the network-layer protocol built on top of LoRa — gateways, device classes (A, B, C), AES-128 encryption, OTAA and ABP activation, and adaptive data rate.
Two LoRa modules talking directly to each other do not need LoRaWAN. A fleet of sensors talking through a shared gateway to a cloud server usually does. The choice is architectural, not technical.
2. Chirp Spread Spectrum — The Core Idea
Conventional radio modulations like FSK and OOK transmit data on a fixed carrier frequency — the bits modulate the amplitude or frequency of a single tone. Narrow-band interference at that exact frequency wipes out the signal. Multipath fading at that frequency wipes out the signal. Doppler shift moves the signal off frequency.
LoRa does something different. It transmits a chirp — a sinusoid whose frequency increases linearly from f₀ to f₀ + BW over the duration of one symbol, then wraps back. Data is encoded in the starting frequency of each chirp. A receiver that knows the chirp pattern can correlate against it and recover the symbol even when the signal is buried in noise.
The technique is called Chirp Spread Spectrum (CSS). It was first used in radar in the 1940s — military radar systems chirp their pulses for the same reason: to extract weak echoes from noisy environments.
Symbol time and bit rate — the actual math
A LoRa symbol carries SF bits, where SF (Spreading Factor) is configurable from 7 to 12 in the standard mode. The duration of one symbol is:
T_sym = 2^SF / BW
Where BW is the channel bandwidth (typically 125 kHz, 250 kHz, or 500 kHz). This formula is the most important relationship in LoRa. Plug in numbers:
| SF | BW | Symbol time Tsym | Symbols/sec | Raw bit rate (SF × BW × CR / 2^SF) |
| 7 | 125 kHz | 1.024 ms | 977 | ~5.5 kbps |
| 9 | 125 kHz | 4.096 ms | 244 | ~1.76 kbps |
| 10 | 125 kHz | 8.192 ms | 122 | ~980 bps |
| 12 | 125 kHz | 32.768 ms | 30.5 | ~250 bps |
Each step up in SF doubles the symbol time, halves the bit rate, and adds approximately 2.5 dB of processing gain. This is the trade-off that defines LoRa: you buy range with airtime.
Processing gain — why LoRa decodes signals below the noise floor
Processing gain (Gp) is the ratio of chip rate to symbol rate, expressed in dB:
G_p = 10 × log₁₀(2^SF) ≈ 3.01 × SF dB
At SF12, that is roughly 36 dB of processing gain. Combined with the FEC coding gain and a coherent demodulator, this is what lets a LoRa receiver decode a signal whose power is roughly 20 dB below the thermal noise floor. No conventional FSK or OOK system can do this.
Coding rate and forward error correction
LoRa adds Hamming-style forward error correction (FEC) to every payload. The coding rate (CR) controls how much redundancy is added:
| CR | Notation | Overhead | Robustness |
| 4/5 | 1 | +25% | Detects 1 bit error per nibble |
| 4/6 | 2 | +50% | Detects 2, corrects 1 |
| 4/7 | 3 | +75% | Detects up to 3, corrects 1 |
| 4/8 | 4 | +100% | Detects up to 4, corrects 2 |
CR 4/5 is the default — fast, with minimal forward error correction. CR 4/8 doubles airtime but survives much higher bit error rates. Noisy industrial RF environments are the typical case for CR 4/8; clean rural deployments stay at CR 4/5.
Time-on-air — the formula every LoRa engineer must know
The total airtime of a LoRa packet (preamble + header + payload + CRC) determines duty-cycle compliance, collision probability, and battery life. The Semtech reference formula for payload symbols is:
n_payload = 8 + max( ⌈(8·PL − 4·SF + 28 + 16·CRC − 20·H) / (4·(SF − 2·DE))⌉ × (CR + 4), 0 )
T_packet = (n_preamble + 4.25 + n_payload) × T_sym
Where PL is payload length in bytes, CRC is 1 if CRC enabled, H is 0 if explicit header, DE is 1 if low-data-rate optimisation enabled (mandatory for SF11 and SF12 at BW 125 kHz). Most engineers do not memorise this — they use Semtech's LoRa Calculator spreadsheet. But you should understand that airtime grows fast with SF, which is why LoRaWAN's Adaptive Data Rate exists at all.
3. The LoRa Packet Structure
A LoRa frame is built in this order:
[ Preamble | Sync Word | Header (optional) | Payload | CRC ]
- Preamble — repeating up-chirps used by the receiver to detect, lock, and time-align. Default is 8 symbols; can be extended for low-power wake-on-radio.
- Sync word — 2 symbols. Distinguishes private LoRa networks (0x12 default) from public LoRaWAN networks (0x34).
- Header — present in "explicit header" mode. Carries payload length, coding rate, and CRC presence flag. Always uses CR 4/8 regardless of payload CR.
- Payload — the actual data, FEC-coded and whitened.
- CRC — 16-bit CRC for integrity check.
4. RSSI and SNR — Two Numbers, One Picture
Every LoRa receiver reports two metrics for every packet: RSSI and SNR. They mean different things and are easy to confuse.
RSSI — Received Signal Strength Indicator
RSSI is the absolute received power, in dBm, at the antenna input of the receiver. A typical LoRa RSSI ranges from about −30 dBm (very strong, transmitter is right next to you) to −137 dBm (at the absolute sensitivity floor). Each radio chip family has its own RSSI calibration — the SX1272 and SX1276 use a slightly different formula than the SX1262.
SNR — Signal-to-Noise Ratio
SNR is the ratio of signal power to noise power, in dB, after the chirp despreader. Because LoRa decodes signals below the noise floor, SNR can be negative — and routinely is. Values from +10 dB (clean signal) down to −20 dB (deep below noise, decoded only because of LoRa's processing gain) are normal.
Which one matters more?
SNR is the better predictor of link quality. RSSI tells you how loud the signal is — but if the noise floor is also loud (urban environments, nearby switching power supplies, cheap LED drivers), high RSSI does not guarantee a working link. SNR tells you how cleanly the signal stands above whatever noise actually exists at your receiver. Two practical rules:
- If SNR is below the demodulator threshold for your SF, the link will fail regardless of RSSI.
- If SNR is comfortable but RSSI is at the floor, you are at the edge of physical range — small environmental changes will drop packets.
The demodulator SNR thresholds (Semtech datasheet figures) are roughly:
| SF | Required SNR | Sensitivity (BW 125 kHz) |
| 7 | −7.5 dB | −123 dBm |
| 8 | −10 dB | −126 dBm |
| 9 | −12.5 dB | −129 dBm |
| 10 | −15 dB | −132 dBm |
| 11 | −17.5 dB | −134.5 dBm |
| 12 | −20 dB | −137 dBm |
Field debugging tip: a packet that consistently arrives with SNR within 3 dB of these thresholds is on the edge of working. Add antenna gain, reduce coax length, or step up the spreading factor before declaring the link "fine."
5. dBm — The Logarithmic Power Unit
RF power is quoted in dBm, not watts. The reason is range: a transmitter at 1 W and a receiver detecting picowatts span 12 orders of magnitude. Logarithms compress that into a manageable scale.
P(dBm) = 10 × log₁₀( P(mW) / 1 mW )
| 0 dBm | 1 mW |
| +10 dBm | 10 mW |
| +20 dBm | 100 mW |
| +30 dBm | 1 W |
| −100 dBm | 0.1 pW |
| −137 dBm | 200 attowatts (LoRa SF12 sensitivity) |
Rules of thumb:
- +3 dB doubles the power.
- +10 dB multiplies the power by 10.
- −6 dB halves the range in free space (because path loss is 20·log₁₀ of distance).
6. dBi and Antenna Gain — The Antenna Reshapes, Not Amplifies
dBi means "decibels relative to isotropic." An isotropic radiator is a theoretical point source that radiates RF energy equally in all directions — a perfect sphere. It does not exist physically, but it is a clean reference.
A 5 dBi antenna radiates 10(5/10) = 3.16× more power in its peak direction than an isotropic radiator fed with the same input. But — this is the part most beginners miss — antennas do not create energy. A passive antenna with gain in one direction must have less gain elsewhere. The antenna reshapes the radiation pattern.
In practice this means a 5 dBi omnidirectional antenna has a narrow vertical beamwidth (~30°) and a wide horizontal pattern. It is great for long-distance flat-terrain links. It is poor for talking to a node directly above or below it.
Approximate gain vs. beamwidth at sub-GHz
| Gain | Type | Vertical beamwidth | Typical use |
| 2.15 dBi | Half-wave dipole | ~80° | Portable nodes, indoor |
| 3 dBi | Extended whip | ~50° | Indoor gateways |
| 5 dBi | Fiberglass omni | ~30° | Outdoor flat terrain |
| 8 dBi | Tall collinear | ~15° | Rooftop gateway |
| 12+ dBi | Yagi / panel | ~20° beam | Point-to-point |
Near-field vs far-field — a calibration trap
Antenna gain figures are valid only in the far field, defined as distances greater than:
d_far ≈ 2 × D² / λ
Where D is the largest dimension of the antenna and λ is the wavelength. At 868 MHz, λ ≈ 34.5 cm; for a typical 5 dBi fiberglass antenna ~50 cm long, the far field begins around 1.4 m from the antenna. Closer than that, the field pattern is unpredictable and gain figures do not apply. Range tests done at 1 m are meaningless.
7. The 50 Ω Impedance Standard
Every LoRa transceiver, every antenna pin, every coaxial cable in the RF industry is designed for a 50 Ω characteristic impedance. The whole industry settled on 50 Ω in the 1940s as a compromise between the impedance that minimises loss in coax (~77 Ω) and the impedance that maximises power handling (~30 Ω). 50 Ω is the practical middle ground.
Connect a 75 Ω antenna (cable-TV standard) to a 50 Ω LoRa module and you create an impedance mismatch:
- Reflected power. Some transmit energy bounces back into the module instead of radiating outward.
- VSWR > 1. A perfect match has VSWR = 1.0; a good match is below 2.0; below 1.5 is excellent.
- Return loss degradation. 50 Ω driving 75 Ω has a return loss of about −14 dB — about 4% of TX power lost to reflection. Worse mismatches lose 30%–50%.
Never power up a high-power LoRa module without an antenna. When the antenna port is left open or shorted, the power amplifier drives an extreme impedance mismatch and most of the transmit energy reflects back into the chip. Sustained operation in this state can permanently damage the PA — particularly on +30 dBm modules where the amplifier is already running near its thermal limit. Connect the antenna first, power up second.
EIRP, ERP, and the difference
EIRP (Effective Isotropic Radiated Power) = TX power + antenna gain (dBi) − cable losses (dB). This is what regulators in most of the world use.
ERP (Effective Radiated Power) = TX power + antenna gain referenced to a half-wave dipole. ERP and EIRP differ by 2.15 dB (a half-wave dipole has 2.15 dBi gain). EIRP is always 2.15 dB higher than ERP for the same setup. India's regulations are written in ERP; FCC and most of Asia-Pacific use EIRP.
8. Frequency Bands by Region
LoRa operates in sub-GHz ISM (Industrial, Scientific, Medical) bands. These bands are licence-exempt — but each country defines its own band edges, max power, and duty cycle rules. A module sold for one region is not legal in another without reconfiguration.
| Region | Band | Max ERP/EIRP | Duty cycle / dwell |
| India (IN865) | 865–868 MHz | +30 dBm ERP | 1% per hour |
| Europe (EU868) | 863–870 MHz | +14 dBm ERP on most sub-bands | 1% (0.1% on some) |
| USA / Canada (US915) | 902–928 MHz | +30 dBm | 400 ms dwell, FHSS required |
| China (CN470) | 470–510 MHz | +17 dBm | Per MIIT rules |
| Japan / Korea (AS923) | 920–925 MHz | +13 dBm | Listen-Before-Talk |
| Australia / NZ (AU915) | 915–928 MHz | +30 dBm | FCC-style |
India — the IN865 specifics
India's current rule is the "Use of Low Power Equipment in the Frequency Band 865–868 MHz for Short Range Devices (Exemption from Licence) Rules, 2021", notified by the Department of Telecommunications through the Wireless Planning and Coordination wing on 10 December 2021. This supersedes the older 2005 rules that covered only 865–867 MHz and only RFID.
Key parameters for a designer in India:
- Band: 865 MHz to 868 MHz.
- Maximum ERP: +30 dBm (1 W) for higher-bandwidth categories, with lower categories at lower powers.
- Duty cycle: 1% per hour.
- LoRaWAN regional plan: IN865, with three mandatory channels at 865.0625 MHz, 865.4025 MHz, and 865.985 MHz, all 125 kHz bandwidth.
For peer-to-peer (non-LoRaWAN) deployments, any centre frequency inside 865–868 MHz is legal as long as the occupied bandwidth stays within the band edges. For LoRaWAN deployments, the three IN865 channels are mandatory.
433 MHz LoRa modules are widely sold but not licence-exempt for general use in India. The 433 MHz band is reserved largely for defence and certain government services. Use 865–868 MHz for any deployment, product, or commercial work.
India's +30 dBm ERP ceiling is one of the most generous in the world — matching the US and well above Europe's +14 dBm. A 1 W LoRa module is legal in India when operated inside 865–868 MHz, with appropriate device approval.
9. The Complete Link Budget
A link budget is the calculation that tells you whether a radio link will work, before you build it. It sums every source of signal gain and loss:
Link Margin = TX_Power
+ TX_Antenna_Gain
+ RX_Antenna_Gain
− Path_Loss
− Cable_Loss_TX
− Cable_Loss_RX
− Connector_Losses
− Polarisation_Mismatch
− Fade_Margin
− RX_Sensitivity
If link margin is positive, the link is theoretically workable; if negative, it cannot work even in free space.
Free-space path loss
FSPL(dB) = 32.45 + 20·log₁₀(f_MHz) + 20·log₁₀(d_km)
At 866 MHz over 5 km: 32.45 + 58.75 + 13.98 ≈ 105.2 dB.
Worked example
+27 dBm TX, two 5 dBi antennas, 0.5 dB cable loss each end, 866 MHz, 5 km clear LOS, SF10 receiver sensitivity −132 dBm, 6 dB fade margin:
Margin = 27 + 5 + 5 − 105.2 − 0.5 − 0.5 − 6 − (−132)
= 27 + 5 + 5 − 105.2 − 1 − 6 + 132
= +56.3 dB
A massive theoretical margin. In practice, real-world losses (foliage, buildings, atmospheric absorption, polarisation mismatch, ground reflection) cut deeply into this budget. Free-space math sets the upper bound; physical reality always falls below it.
10. The Quiet Killers Most Blogs Skip
Crystal frequency tolerance
LoRa transceivers use a TCXO (temperature-compensated crystal oscillator) or a plain crystal as their frequency reference. Cheap modules use plain XTAL with ±20 ppm tolerance. At 868 MHz, ±20 ppm is ±17.4 kHz of carrier offset. The receiver's automatic frequency correction window at SF12 / BW 125 kHz is only about ±25% of bandwidth, so a poorly-matched pair of cheap modules can fail to demodulate purely because their crystals drift apart in temperature. TCXOs (±2 ppm) eliminate this, which is why every serious LoRaWAN gateway uses one.
Polarisation alignment
A vertically mounted dipole is vertically polarised. A horizontally mounted dipole is horizontally polarised. Cross-polarised antennas have ~20 dB of attenuation between them. Mounting one node's antenna sideways for "convenience" is the single most common range-test failure.
Fresnel zone clearance
The first Fresnel zone is the elliptical volume of space between transmitter and receiver where most RF energy actually travels. Obstructions inside this zone — even non-blocking ones like trees — cause significant signal loss. The radius at midpoint:
F₁ = 8.66 × √(d_km / f_GHz)
At 866 MHz over 5 km, F₁ ≈ 20.8 m. A clear LOS with antennas at 1.5 m above ground means the Fresnel zone is heavily obstructed by the ground itself. This is why every meaningful long-range LoRa deployment puts antennas on poles or rooftops.
Duty cycle is not a suggestion
A 1% duty cycle limit means if you transmit a 1.3-second SF12 packet, you must stay silent for ~130 seconds afterwards. This is not just regulatory — it prevents your own deployment from saturating its own channel. LoRaWAN's Adaptive Data Rate exists specifically to push healthy links to lower SFs and shorter airtimes.
Closing
LoRa is straightforward at the surface and genuinely deep underneath. The numbers — symbol time, SNR thresholds, link budget, processing gain — are all knowable, and they predict real-world behaviour with surprising accuracy. The places real deployments fail are almost never the modulation itself. They are the antennas, the impedance matching, the ground planes, the polarisation, and the regulatory ceilings. Get those right and the physics will reward you.