LoRa airtime calculator
Time on air is how long a LoRa packet occupies the channel. It follows from the spreading factor, the bandwidth and the payload length, and it decides how often a device may legally transmit. A 1 % duty cycle buys 36 seconds of transmission per hour. This calculator gives airtime, bit rate and the resulting message budget.
Each step up doubles the symbol time and buys roughly 2.5 dB of sensitivity.
Doubling the bandwidth halves the airtime and costs about 3 dB of sensitivity.
Forward error correction. 4/5 is the LoRaWAN default. 4/8 adds the most redundancy and the most airtime.
PHY payload, 1–255 bytes. A LoRaWAN uplink adds 13 bytes to your application data.
The preamble length you program into the radio. LoRaWAN uses 8. Leave out the modem’s fixed 4.25 symbols of sync word and frame delimiter, because this calculator already adds them.
ETSI limits in the 868 MHz SRD sub-bands: 0.1 %, 1 % or 10 %, depending on the channel.
Two panels with two different axes. The top one is a single packet on a linear time axis that runs from 0 to its own time on air, so the preamble and the header plus payload are drawn in proportion to their symbol counts, printed underneath. The bottom one compares the same packet at SF7 to SF12 on a logarithmic axis, the selected factor in green and amber marking the factors where low-data-rate optimisation switches on. Because the axes differ, a bar below is not the same length as the bar above. The duty cycle changes only the readouts, never the drawing.
PHY-layer timing per the SX1276 equations, which every published LoRaWAN airtime calculator uses. Low-data-rate optimisation follows the datasheet rule automatically. The duty cycle never touches the bit rate. It only limits how much of each hour the radio may transmit, which is what the minimum interval, the messages per hour and the average throughput report. Duty-cycle figures are the European SRD limits. Other regions cap dwell time or transmissions per hour instead, and network fair-use policies can be stricter than the law.
LoRa terms in one minute
Every term the inputs above use, in the order the modem meets them.
- Symbol
- The smallest thing LoRa sends. One symbol is a chirp across the whole channel carrying SF bits, so an SF7 symbol carries 7 bits and an SF12 symbol 12. It lasts 2SF / BW, and that duration is what every timing figure on this page is built from.
- Chirp
- A tone that slides steadily from one edge of the channel to the other. The data sits in the point where the sweep starts and wraps around. That is why a chirp still decodes far below the noise floor, where a plain FSK signal is long gone.
- Spreading factor (SF)
- How far one symbol is stretched in time, SF7 to SF12. Each step up doubles the symbol time and buys roughly 2.5 dB of sensitivity, so range grows and airtime grows with it.
- Bandwidth (BW)
- The width of the channel the chirp sweeps, usually 125, 250 or 500 kHz. Doubling it halves the airtime and costs about 3 dB of sensitivity, because the receiver takes in twice the noise.
- Coding rate (CR)
- How much forward error correction rides along with the payload, from 4/5 to 4/8. At 4/8 the modem sends twice as many bits as you gave it, which is the most robust setting and the slowest.
- Low-data-rate optimisation (LDRO)
- A modem setting for very long symbols. It drops 2 bits from every symbol so that crystal drift cannot corrupt the tail end of one. The SX1276 datasheet makes it mandatory above a 16 ms symbol time, and both ends must agree on it.
- Preamble
- The chirps in front of every packet that let a receiver find the signal and lock onto it. You program its length, LoRaWAN uses 8, and the modem always appends 4.25 more symbols for the sync word and the start-of-frame delimiter.
- Duty cycle
- The share of each hour a device may spend transmitting in a sub-band. 1 % is 36 seconds per hour. It caps how often you may send, never how fast the modem sends while it is sending.
How it works
- 01
Find the symbol time
LoRa spreads one symbol over 2SF chips sent at the bandwidth, so a symbol lasts Tsym = 2SF / BW. At SF7 and 125 kHz that is 1.024 ms; at SF12 it is 32.768 ms. Every step up in spreading factor doubles it, and nothing about the payload changes it.
- 02
Add the preamble
The transmitter sends the programmed preamble symbols plus a fixed 4.25 symbols of sync word and start-of-frame delimiter. With the LoRaWAN default of 8, the preamble is 12.25 symbols long. Every packet pays that fixed cost, however short the payload.
- 03
Count the payload symbols
The payload is bit-interleaved and coded, so its length in symbols depends on the payload bytes, the spreading factor, the coding rate, whether a CRC and an explicit header are sent, and whether low-data-rate optimisation is on. The datasheet formula below returns that count.
- 04
Check it against the duty cycle
Multiply the total symbol count by the symbol time to get time on air, then divide by the duty-cycle limit. A 1 % channel allows 36 seconds of transmission per hour, so a 56.6 ms packet may repeat every 5.66 seconds at best.
Formulas
- Tsym — symbol duration, s
- SF — spreading factor, 7…12
- BW — bandwidth, Hz (62 500, 125 000, 250 000 or 500 000)
- PL — PHY payload, bytes
- CRC — 1 with payload CRC, 0 without
- IH — 1 in implicit header mode, 0 with an explicit header
- DE — 1 with low-data-rate optimisation, 0 without
- CR — 1…4 for coding rates 4/5…4/8
- 8 — payload-prefix symbols every packet sends
- the max() catches short payloads, where the numerator above turns negative
- npre — programmed preamble symbols (8 in LoRaWAN), the value you enter above
- 4.25 — sync word and start-of-frame delimiter, added here, not by you
- tmin = ToA / D — shortest gap between packets at duty cycle D
- Nh = 3600 · D / ToA — packets per hour
Worked example
- Tsym = 27 / 125 000 = 1.024 ms
- Tpreamble = (8 + 4.25) · 1.024 = 12.544 ms
- npayload = 8 + ⌈176 / 28⌉ · 5 = 8 + 35 = 43 symbols
- Tpayload = 43 · 1.024 = 44.032 ms
- ToA = 12.544 + 44.032 = 56.576 ms, bit rate 5 469 bit/s
- At 1 %: 56.576 / 0.01 = 5.658 s between packets, 636 per hour
FAQ
- Why is SF12 so much slower than SF7?
- The symbol time doubles with every step, so an SF12 symbol lasts 32 times longer than an SF7 symbol. Each symbol also carries more bits, so the same 20 bytes fit into 28 symbols instead of 43. The two effects together make the packet about 23 times longer: 56.6 ms at SF7 against 1.32 s at SF12.
- What is low-data-rate optimisation (LDRO)?
- A modem setting that drops 2 bits from every symbol so that crystal drift over a very long symbol cannot corrupt the last bits. The SX1276 datasheet mandates it whenever the symbol time exceeds 16 ms, which means SF11 and SF12 at 125 kHz and SF12 at 250 kHz. It costs airtime, and transmitter and receiver must be set the same way.
- Is the payload here the same as my LoRaWAN payload?
- No. This is the PHY payload the radio sends. A LoRaWAN 1.0.x uplink spends 13 bytes of it on the MAC header, device address, frame control, frame counter, port and message integrity code, so 20 bytes here carry 7 bytes of application data. MAC commands in the frame options take more.
- What does a 1 % duty cycle allow in practice?
- One percent of every hour, so 36 seconds of transmission. A 56.6 ms packet fits 636 times, with at least 5.66 seconds between packet starts. The limit applies per sub-band, not per device, so spreading traffic over several channels helps. Network policies can be stricter. The Things Network allows 30 seconds of uplink airtime per device per day.
- Why doesn’t the duty cycle change the bit rate?
- Because the two answer different questions. The bit rate follows from the modem settings alone. Spreading factor, bandwidth and coding rate fix how many bits leave the antenna per second while a packet is going out. The duty cycle is a cap on how much of each hour you are allowed to spend transmitting at all. At 1 % you still send at 5 469 bit/s, but only for 36 seconds in the hour, and that is what the interval, messages-per-hour and average-throughput readouts show.
- Does 500 kHz bandwidth help?
- It quarters the airtime compared with 125 kHz at the same spreading factor, because the symbol time scales inversely with bandwidth. The receiver takes in four times the noise, so sensitivity drops by about 6 dB and range with it. Regional plans also restrict it. EU 868 uplinks are 125 kHz, with 250 kHz on a single channel.
Airtime tells you how often a node may speak. Whether the gateway hears it is a terrain question. Waveshed maps coverage over real elevation data, free in your browser.
Map your gateway coverage →Related guides
- Plan radio coverage — where to put a gateway once you know what the node can send
- LOS vs RF — which analysis do you need? — airtime decides how often you transmit, terrain decides whether it arrives
Sources & further reading
- Semtech SX1276/77/78/79 datasheet ↗ — section 4.1.1.7 "Time on air" — the symbol, preamble and payload equations used here, and the 16 ms rule for low-data-rate optimisation
- Semtech AN1200.13 — LoRa Modem Designer’s Guide (SX1272/3/6/7/8) ↗ — the same timing equations with worked design examples. Semtech now publishes it under the Documents tab of the SX1272 product page, listed as “AN1200.13 and AN1200.17: LoRa Modem Design” and served as a ZIP holding both notes
- ETSI EN 300 220-2 V3.3.1 — Short Range Devices (SRD), 25 MHz to 1 000 MHz ↗ — the harmonised standard behind the 0.1 %, 1 % and 10 % duty-cycle limits in the European 868 MHz sub-bands
- The Things Network — Duty Cycle ↗ — sub-band limits in practice, plus the fair-use policy that caps uplink airtime per device
Related tools
LoRa / Meshtastic range calculator
Maximum link distance from spreading factor, TX power, antennas and heights: free space, ground and horizon limits.
Noise floor calculator
Thermal noise (kTB), receiver noise figure and sensitivity.
Link budget calculator
Received power and fade margin from TX power, gains, losses and path loss.
Frequency ↔ wavelength calculator
λ = c / f, with the ITU band for any frequency.