CR 4/6
How the LoRa Coding Rate Works
LoRa physical-layer packets carry a configurable forward error correction strength expressed as a coding rate of the form 4/(4+n), where n ranges from 1 to 4. The four legal values are CR 4/5, CR 4/6, CR 4/7, and CR 4/8. In each case four data bits are encoded into 4+n transmitted bits, so CR 4/6 maps every four data bits onto six bits on air. The encoding is a shortened Hamming code combined with a diagonal interleaver that spreads each codeword across multiple LoRa symbols. This interleaving is the reason LoRa tolerates burst errors well: a deep fade or a colliding transmission that corrupts several adjacent chirps damages only one or two bits in any given codeword, which the parity can then repair.
Because every LoRa symbol carries a fixed number of bits determined solely by the spreading factor, adding parity bits does not change symbol size; it increases the symbol count. A CR 4/6 payload therefore occupies more symbols and more time on air than the same payload sent at CR 4/5. The trade is direct and predictable: stronger error correction in exchange for longer transmissions, higher energy per packet, and greater duty-cycle consumption. Network operators weigh this against the regional duty-cycle limits enforced on bands such as the European 868 MHz allocation.
CR 4/6 sits between the lightweight default and the heaviest protection. It gives one additional correctable bit per codeword over CR 4/5 without doubling the overhead the way CR 4/8 does, which makes it a practical choice for moderately noisy LoRaWAN links where occasional collisions degrade an otherwise adequate signal.
Time-on-Air and Code-Rate Equations
Rc = 4 / (4 + n) = 4 / 6 ≈ 0.667 (n = 2)
Payload symbol count (LoRa):
nsym = 8 + max( ⌈(8·PL − 4·SF + 28 + 16·CRC − 20·IH) / (4·(SF − 2·DE)) ⌉ × (4 + n), 0 )
Symbol duration:
Tsym = 2SF / BW
Where PL = payload bytes, SF = spreading factor, BW = bandwidth, CRC and IH = header flags, DE = low-data-rate optimize, and n = 2 selects CR 4/6. Larger n raises (4 + n), so 4/6 produces more payload symbols than 4/5 for identical PL and SF.
Coding Rate Comparison
| Coding Rate | Bits per 4 data | Effective rate Rc | Overhead | Burst error tolerance | Typical use |
|---|---|---|---|---|---|
| CR 4/5 | 5 | 0.80 | 25% | Lowest | Default; clean links, battery priority |
| CR 4/6 | 6 | 0.667 | 50% | Moderate | Intermittent interference, urban sites |
| CR 4/7 | 7 | 0.571 | 75% | High | Noisy channels, longer range |
| CR 4/8 | 8 | 0.50 | 100% | Highest | Worst-case links; fixed header coding |
Frequently Asked Questions
How much overhead does CR 4/6 add compared to CR 4/5?
CR 4/6 sends six bits for every four data bits, a 50% overhead and an effective rate of 2/3, versus CR 4/5 at five bits per four (25% overhead, 4/5 rate). Because LoRa symbols carry a fixed number of bits set by the spreading factor, the extra coded bits require more symbols, so moving from 4/5 to 4/6 lengthens time on air by roughly 20% for the same payload. The reward is correction of one additional bit error per codeword and better burst-error detection.
Does CR 4/6 change the LoRa preamble or only the payload?
Only the explicit-header and payload portions use the selected coding rate. The preamble is a fixed up-chirp synchronization sequence and is never Hamming-coded. In explicit header mode the header itself is always protected at the most robust 4/8 rate, so a CR 4/6 packet carries a 4/8-coded header followed by a 4/6-coded payload. In implicit header mode the coding rate must be pre-agreed because it is not signaled in the frame.
When should I select CR 4/6 instead of CR 4/5 or CR 4/8?
CR 4/6 is the middle ground for links with moderate interference where CR 4/5 drops too many packets but CR 4/8 wastes too much air time and battery. It suits urban or industrial sites with intermittent collisions on the shared sub-GHz ISM band. Since higher coding rates lengthen time on air and raise collision odds in dense networks, many deployments default to CR 4/5 and reserve 4/6 for the lowest data-rate, longest-range channels. Validate with packet-error-rate testing at the target spreading factor.