Chirp Spread Spectrum
Understanding Chirp Spread Spectrum
CSS was originally developed for radar applications, where the linear chirp's time-bandwidth product provides processing gain for target detection. Semtech adapted this principle for communications in the LoRa modulation scheme, patented in 2014. Instead of encoding information in amplitude or phase of a carrier, CSS encodes it in the starting frequency of a linear up-chirp that sweeps across the entire channel bandwidth B (typically 125, 250, or 500 kHz). With spreading factor SF, each symbol carries SF bits of information and consists of 2SF chips (frequency steps), with the symbol duration Ts = 2SF/B.
Demodulation is elegantly simple: the receiver multiplies the received signal by a conjugate base down-chirp, converting the frequency-varying chirp into a single-frequency tone. The tone frequency directly indicates which of the 2SF possible starting frequencies was transmitted, and thus which SF-bit symbol was sent. An FFT of size 2SF identifies the peak bin. This de-chirping process provides processing gain proportional to the time-bandwidth product, enabling operation at very low SNR. Different spreading factors are quasi-orthogonal, so a single gateway can simultaneously receive signals at SF7 through SF12 on the same frequency channel, with each SF occupying a different time-bandwidth space. The key engineering trade-off is that higher SF increases range (better sensitivity) but decreases data rate and increases time-on-air, which affects battery life and regulatory duty-cycle compliance.
CSS / LoRa Key Equations
Ts = 2SF / B [seconds]
Bit Rate:
Rb = SF · B / 2SF · CR [bps, CR = coding rate 4/5 to 4/8]
Processing Gain (approximate):
Gp ≈ 10 · log10(2SF / SF) [dB]
Where SF = spreading factor (7 to 12), B = bandwidth (125/250/500 kHz), CR = forward error correction coding rate. At SF12 with 125 kHz BW and CR 4/5: Ts = 32.77 ms, Rb = 293 bps, Gp ≈ 25.1 dB.
LoRa Spreading Factor Performance
| SF | Bit Rate (125 kHz) | SNR Sensitivity | Time-on-Air (50 B) | Approx. Range |
|---|---|---|---|---|
| SF7 | 5,470 bps | -7.5 dB | 72 ms | 2 to 5 km |
| SF8 | 3,125 bps | -10 dB | 134 ms | 3 to 7 km |
| SF9 | 1,758 bps | -12.5 dB | 247 ms | 4 to 9 km |
| SF10 | 977 bps | -15 dB | 452 ms | 5 to 11 km |
| SF11 | 537 bps | -17.5 dB | 824 ms | 7 to 13 km |
| SF12 | 293 bps | -20 dB | 1,483 ms | 10 to 15 km |
Frequently Asked Questions
How does CSS encode data in frequency chirps?
The channel bandwidth is divided into 2SF frequency bins. Each symbol starts an up-chirp at one of these frequencies, sweeps to the upper edge, wraps to the lower edge, and continues back to start. The receiver multiplies by a conjugate down-chirp (de-chirping), converting each symbol into a single tone. An FFT of size 2SF identifies the peak bin, completing demodulation with inherent resilience to multipath and Doppler.
What is the trade-off between spreading factor, range, and data rate?
Each SF step adds roughly 2.5 dB of processing gain (30% more range) but doubles symbol duration, halving data rate. SF7 at 125 kHz gives 5.5 kbps and -7.5 dB SNR sensitivity. SF12 drops to 0.3 kbps but reaches -20 dB, enabling 15+ km rural links. Gateway receivers demodulate all SFs simultaneously because each SF is orthogonal to the others.
How does CSS compare to direct-sequence spread spectrum?
Both spread signals for processing gain, but CSS uses frequency chirps that are Doppler-tolerant and synchronize easily via FFT, while DSSS requires tight chip-level timing. CSS handles multipath better (reflections appear as additional FFT bins) but supports fewer simultaneous users (6 SFs vs unlimited PN codes). DSSS supports full CDMA; CSS relies on SF orthogonality.