WSPR PROTOCOL
Configuration, Operation & Message Format
A Technical Reference for the GCARC WSPR Network · W2MMD · Spring 2026
WSPR (Weak Signal Propagation Reporter, pronounced “whisper”) is a narrowband digital radio protocol designed by Nobel Prize laureate Joe Taylor (K1JT) specifically for automated, unattended propagation beacon operation at the lowest possible power levels. The protocol was first released in 2008 and has grown into a worldwide network of thousands of continuously operating beacons and receive stations.
The core objective is simple: encode the minimum information needed to identify a transmitting station and its location, then transmit that information in a way that can be decoded reliably even when the received signal is far below the audible noise floor. This is achieved through a combination of very slow transmission speed, continuous-phase 4-tone frequency-shift keying, and a powerful forward error-correcting code.
A WSPR beacon transmits 200 milliwatts on a two-minute cycle, around the clock, with no operator intervention. Receiving stations around the world decode the signal, log the spot, and upload it automatically to public databases. The result is a real-time, global map of which propagation paths are open — updated every two minutes, 24 hours a day.
WSPR uses USB (Upper Sideband) mode. In a conventional SSB transceiver setup, the radio is tuned to a specific “dial frequency” and WSPR audio tones are injected at approximately 1,400–1,600 Hz audio offset, placing the actual RF transmission 1,500 Hz above the dial frequency. In the TAPR HAT / Pi Zero 2W system, the Pi generates the RF signal directly — no SSB transceiver required. The configured frequency is the actual transmitted RF frequency.
The WSPR sub-band on each HF frequency is only 200 Hz wide, centered 1,500 Hz above the dial frequency. Multiple stations coexist within this 200 Hz window because each beacon picks a random transmit frequency within the window on each transmission cycle.
| Band | USB Dial (MHz) | TX Center (MHz) | TX Range | Notes |
|---|---|---|---|---|
| 2190m | 0.136000 | 0.137500 | ±100 Hz | LF — special license required |
| 630m | 0.474200 | 0.475700 | ±100 Hz | MF — Part 97.303 in USA |
| 160m | 1.836600 | 1.838100 | ±100 Hz | NVIS, night only |
| 80m | 3.568600 | 3.570100 | ±100 Hz | Regional NVIS, night DX |
| 60m | 5.287200 | 5.288700 | ±100 Hz | Check local allocation |
| 40m | 7.038600 | 7.040100 | ±100 Hz | Day + night, popular |
| 30m ★ | 10.138700 | 10.140200 | ±100 Hz | RECOMMENDED — most active WSPR band |
| 20m | 14.095600 | 14.097100 | ±100 Hz | Best global DX range |
| 17m | 18.104600 | 18.106100 | ±100 Hz | WARC — no contests |
| 15m | 21.094600 | 21.096100 | ±100 Hz | Solar-dependent DX |
| 12m | 24.924600 | 24.926100 | ±100 Hz | WARC — no contests |
| 10m ✓ | 28.124600 | 28.126100 | ±100 Hz | Technician OK — outstanding DX when open |
| 6m | 50.293000 | 50.294500 | ±100 Hz | Sporadic-E / Technician OK |
| 2m | 144.489000 | 144.490500 | ±100 Hz | Mostly local/aircraft scatter |
★ 30m note: The 30m band (TX center 10.140200 MHz) is the most active WSPR band worldwide. It is a WARC band — no contest operation, ever — ideal for a 24/7 unattended beacon. For GCARC members, the TAPR HAT dial frequency is 10.1387 MHz.
WSPR decoding requires the transmitter frequency to be accurate to within a few Hz. A 1 PPM error at 10 MHz equals 10 Hz of offset. Typical Pi Zero crystals are within ±1–2 PPM. The WsprryPi software includes a PPM correction parameter to compensate for individual crystal error.
WSPR divides time into two-minute slots synchronized to UTC. All WSPR activity worldwide operates on the same grid: slots begin at 00:00, 00:02, 00:04 UTC, and so on throughout the day.
Within each two-minute slot:
- T = 0:00 — Start of even UTC minute. All stations begin listening.
- T = 0:01 — Transmissions begin exactly 1 second after the even minute.
- T = 0:01 to 1:51 — Transmission in progress (110.6 seconds of continuous 4-FSK tones).
- T = 1:52 to 2:00 — Transmission ends. Decoder processes the received audio.
The TAPR HAT / WsprryPi system transmits on every two-minute cycle by default. This differs from the WSJT-X software implementation which typically uses a 20% duty cycle (one transmission in every five slots). Running every cycle maximises the propagation data contributed to the network.
Clock accuracy is critical. The decode algorithm will fail if the transmitter’s clock is off by more than about ±1 second from UTC. The Pi Zero 2W synchronizes via NTP over Wi-Fi. Internet connectivity must be maintained at all times during WSPR operation. NTP on a well-connected Pi is typically accurate to within 10–50 milliseconds.
WSPR uses 4-tone frequency-shift keying (4-FSK). The transmitter shifts between four discrete frequencies to encode data. The four tones are spaced 1.4648 Hz apart — the total occupied bandwidth of all four tones is about 6 Hz.
| Parameter | Value | Notes |
|---|---|---|
| Tone spacing | 1.4648 Hz | 12000 ÷ 8192 samples per symbol |
| Symbol duration | 0.6827 seconds | Reciprocal of tone spacing |
| Total symbols | 162 | (50 + 32 − 1) × 2 |
| Total TX duration | 110.6 seconds | 162 symbols × 0.6827 s/symbol |
| Total bandwidth | ~6 Hz | 4 tones × 1.4648 Hz spacing |
| Baud rate | 1.46 baud | Symbols per second |
| Bits per symbol | 2 bits | log₂(4) = 2 |
| Effective info rate | ~0.45 bits/sec | 50 info bits ÷ 110.6 sec |
Every standard WSPR transmission carries exactly three pieces of information: the transmitting station’s callsign, a 4-character Maidenhead grid square, and the transmitter output power in dBm.
WB2MNF is the callsign. FM29 is the Maidenhead grid square for Mullica Hill, NJ. 23 is 23 dBm = 200 mW (the TAPR HAT’s typical output).
The 4-character Maidenhead locator (e.g., FM29) identifies a rectangle approximately 2° longitude × 1° latitude — about 111 km × 111 km in the mid-latitudes.
| Characters | Grid Size | Precision | Example |
|---|---|---|---|
| 2 (field) | 20° × 10° | ~1,000 km | FM |
| 4 (square) | 2° × 1° | ~111 km | FM29 |
| 6 (subsquare) | 5′ × 2.5′ | ~5 km | FM29qe |
Power is reported in dBm in 3 dB steps ending in 0, 3, or 7. Valid values: 0, 3, 7, 10, 13, 17, 20, 23, 27, 30, 33, 37, 40, 43, 47, 50, 53, 57, 60 dBm.
| dBm | Milliwatts | Notes |
|---|---|---|
| 0 | 1 mW | Minimum |
| 10 | 10 mW | QRP |
| 20 | 100 mW | TAPR HAT minimum |
| 23 | 200 mW | TAPR HAT typical output ★ |
| 30 | 1 W | QRP transceiver |
| 37 | 5 W | Standard QRP limit |
| 50 | 100 W | Typical HF station |
| 60 | 1,000 W | Maximum |
The callsign, grid, and power are compressed into exactly 50 bits: 28 bits for the callsign, 15 bits for the grid locator, and 7 bits for the power level. The three values are packed into a single 50-bit integer.
The 50-bit message is fed into a rate-1/2 convolutional encoder with constraint length K=32. For every 1 input bit, 2 output bits are produced. Input: 50 info bits + 31 tail bits = 81 bits. Output: 162 coded bits. The long constraint length (K=32) provides very strong error correction, allowing reliable decoding at SNRs as low as −28 dB.
The 162 coded bits are reordered using bit-reversed addressing to spread any burst of interference across non-contiguous bit positions. This is a fixed, deterministic permutation — the same lookup table used by every WSPR encoder and decoder in the world.
A fixed 162-element pseudo-random sync vector is combined with the data bits. Each transmitted symbol is 2 bits: the sync bit is the most significant bit, the data bit is the least significant.
The 162 symbols are transmitted as 4-FSK tones. Symbol 0 = base tone, 1 = +1.4648 Hz, 2 = +2.9297 Hz, 3 = +4.3945 Hz. Each tone lasts 0.6827 seconds. Transitions between tones are continuous-phase. The transmitter begins exactly 1 second after the even UTC minute.
A WSPR signal sounds like a nearly continuous tone with a very slight, slow warble — or at typical SNRs, nothing audible at all. At the end of each 2-minute slot the decoder performs an FFT analysis of the received audio, correlates against the known sync pattern to find candidate signals, extracts the 162 symbol values, reverses the interleaving, and runs the convolutional decoder to recover the 50 information bits.
The decoder reports SNR in dB referenced to a 2,500 Hz noise bandwidth. Typical values range from about +10 dB (strong local signal) down to −28 dB (the theoretical decoding limit). The decoder also reports frequency drift in Hz/minute — a well-calibrated, thermally stable transmitter should show drift close to zero. Values larger than ±2–3 Hz/min will cause missed decodes at marginal SNRs.
Every successfully decoded signal produces a “spot” record uploaded to wspr.live and wsprnet.org:
| Field | Example | Description |
|---|---|---|
| timestamp | 2026-03-21 14:04:00 | UTC time of slot start |
| tx_sign | WB2MNF | Transmitting callsign |
| tx_loc | FM29 | Transmitting grid square |
| power | 23 | Reported TX power in dBm |
| rx_sign | K2ABC | Receiving station callsign |
| rx_loc | EL96 | Receiving station grid square |
| distance | 1,842 km | Path distance (computed) |
| snr | −18 | Received SNR in dB re 2500 Hz BW |
| freq | 10.140152 | Actual received frequency in MHz |
| drift | 0 | Frequency drift in Hz/min |
The wspr.live ClickHouse database stores all of these fields and is queryable via a free public SQL API at wspr.live. The wspr.rocks website provides a browser-based SQL query interface on the same database.
After installation, configuration is done through the WsprryPi web interface at http://[hostname].local. Key parameters:
| Parameter | Typical Value | Notes |
|---|---|---|
| callsign | WB2MNF | Your FCC callsign — must be exact |
| grid | FM29 | 4-character Maidenhead locator for your QTH |
| power | 23 | dBm — 23 dBm = 200 mW for TAPR HAT |
| frequency | 10.1387 | MHz — 30m for TAPR HAT / Pi system |
| ppm | 0 | Crystal frequency correction in PPM |
| ntp_server | pool.ntp.org | NTP time server — leave default |
To verify operation, go to wspr.rocks within 10–15 minutes of your first transmission and run:
| Parameter | Value |
|---|---|
| Protocol type | Continuous-phase 4-FSK |
| Information content | Callsign + 4-char grid + power (dBm) |
| Source bits | 50 bits (28 callsign + 15 grid + 7 power) |
| FEC | Rate-1/2 convolutional, K=32 |
| Channel symbols | 162 symbols of 2 bits each |
| Symbol duration | 0.6827 seconds (8192/12000) |
| Tone spacing | 1.4648 Hz (12000/8192) |
| Occupied bandwidth | ~6 Hz |
| Transmission duration | 110.6 seconds |
| Timeslot period | 2 minutes (120 seconds) |
| TX start time | 1 second after even UTC minute |
| Min decodable SNR | −28 dB (in 2,500 Hz BW) |
| 30m TX center freq | 10.140200 MHz (dial: 10.1387 MHz) |
| TAPR HAT output | 100–200 mW (23 dBm nominal) |
| Spot database | wspr.live (ClickHouse SQL, 4B+ records) |
| Live map | wspr.rocks |
| Software (Pi) | WsprryPi v2.x — github.com/lbussy/WsprryPi |
Additional Resources
- skunkworks.w2mmd.org — Full project documentation under Technical Resources
- wspr.rocks — Real-time WSPR spot map and SQL query interface
- wspr.live — Full ClickHouse SQL database, 4 billion+ spot records
- wsprnet.org — Original WSPR spot database
- tapr.org/product/wspr — TAPR Universal WSPR HAT kit ($32)
- adafruit.com/product/6008 — Raspberry Pi Zero 2W with headers ($15)
- github.com/lbussy/WsprryPi — WsprryPi software
- raspberrypi.com/software — Raspberry Pi Imager
