← All tools

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.

B

PHY payload, 1–255 bytes. A LoRaWAN uplink adds 13 bytes to your application data.

sym

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.

Time on air
56.58 ms
preamble 12.5 ms + header + payload 44 ms
Bit rate
5469 bit/s
symbol time 1.02 ms
Minimum interval
5.658 s
between the starts of two packets
Messages per hour
636 max
transmit budget per hour: 36 s
Average throughput
28.3 bit/s
payload delivered over a full hour under the duty-cycle cap. The bit rate above does not change with it.
Payload symbols
43 symbols
preamble, including the fixed 4.25: 12.25 symbols
Low-data-rate optimisation
Off
symbol time at or below 16 ms
one packet · linear timeToA = 56.6 ms010 ms20 ms30 ms40 ms50 mspreambleheader + payload12.25 sym · 12.5 ms43 sym · 44 msthe same packet at SF7–SF12 · logarithmic timeLDRO20 ms50 ms100 ms200 ms500 ms1 s2 sSF756.6 msSF8103 msSF9185 msSF10371 msSF11741 msSF121.32 s

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

  1. 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.

  2. 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.

  3. 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.

  4. 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

Symbol duration
Tsym = 2SFBW
  • Tsym — symbol duration, s
  • SF — spreading factor, 7…12
  • BW — bandwidth, Hz (62 500, 125 000, 250 000 or 500 000)
Coded blocks (SX1276 datasheet, step 1 of 2)
nblocks = 8·PL − 4·SF + 28 + 16·CRC − 20·IH4·(SF − 2·DE)
  • 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
Payload symbols (step 2 of 2)
npayload = 8 + max( ⌈nblocks⌉ · (CR + 4), 0 )
  • 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
Time on air and duty cycle
ToA = (npre + 4.25 + npayload) · Tsym
  • 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

SF7, 125 kHz, coding rate 4/5, 20-byte payload, CRC on, explicit header
  1. Tsym = 27 / 125 000 = 1.024 ms
  2. Tpreamble = (8 + 4.25) · 1.024 = 12.544 ms
  3. npayload = 8 + ⌈176 / 28⌉ · 5 = 8 + 35 = 43 symbols
  4. Tpayload = 43 · 1.024 = 44.032 ms
  5. ToA = 12.544 + 44.032 = 56.576 ms, bit rate 5 469 bit/s
  6. 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

Sources & further reading

Related tools