WSPR (amateur radio software)
|Developer(s)||Joe Taylor, K1JT|
|Written in||Python (GUI), Fortran, C |
|Available in||English, Italian, Spanish, French, German, Japanese, Polish, Portuguese, Russian|
|Type||Amateur radio and DSP|
WSPR (pronounced "whisper") stands for "Weak Signal Propagation Reporter". It is a protocol, implemented in a computer program, used for weak-signal radio communication between amateur radio operators. The protocol was designed, and a program written initially, by Joe Taylor, K1JT. Software is now open source and is developed by a small team. The program is designed for sending and receiving low-power transmissions to test propagation paths on the MF and HF bands.
WSPR implements a protocol designed for probing potential propagation paths with low-power transmissions. Transmissions carry a station's callsign, Maidenhead grid locator, and transmitter power in dBm. The program can decode signals with S/N as low as −28 dB in a 2500 Hz bandwidth. Stations with internet access can automatically upload their reception reports to a central database called WSPRnet, which includes a mapping facility.
The WSPR Protocol
The type of radio emission is “F1D”, frequency-shift keying. A message contains a station's callsign, Maidenhead grid locator, and transmitter power in dBm. The WSPR protocol compresses the information in the message into 50 bits (binary digits). These are encoded using a convolutional code with constraint length K = 32 and a rate of r = 1⁄2. The long constraint length makes undetected decoding errors less probable at the cost, that the highly efficient Viterbi algorithm must be replaced by a simple sequential algorithm for the decoding process.
The standard message is <callsign> + <4 digit locator> + <dBm transmit power>; for example “K1ABC FN20 37” is a signal from station K1ABC in Maidenhead grid cell “FN20”, sending 103.7milliwatts, or about 5.0 Watts (legal limit for 630 m). Messages with a compound callsign and/or 6 digit locator use a two-transmission sequence. The first transmission carries compound callsign and power level, or standard callsign, 4 digit locator, and power level; the second transmission carries a hashed callsign, 6 digit locator, and power level. Add-on prefixes can be up to three alphanumeric characters; add-on suffixes can be a single letter or one or two digits.
- Standard message components after lossless compression:
- 28 bits for callsign,
- 15 bits for locator,
- 7 bits for power level,
- total: 50 bits.
- Forward error correction (FEC):
- non-recursive convolutional code with constraint length K = 32, rate r = 1⁄2.
- Number of binary channel symbols:
- nsym = (50 + K − 1) × 2 = 162.
- Keying rate is 12000⁄8192 = 1.4648 baud.
- Modulation is continuous phase 4 FSK, with 1.4648 Hz tone separation.
- Occupied bandwidth is about 6 Hz
- Synchronization is via a 162 bit pseudo-random sync vector.
- Each channel symbol conveys one sync bit (LSB) and one data bit (MSB).
- Duration of transmission is 162 × 8192⁄12000 = 110.6 s.
- Transmissions nominally start one second into an even UTC minute: e.g., at hh:00:01, hh:02:01, etc.
- Minimum S/N for reception is around –28 dB on the WSJT scale (2500 Hz reference bandwidth).
Other applications include antenna testing, frequency stability and frequency accuracy checking.
Usually a WSPR station contains a computer and a transceiver, but it is also possible to build very simple beacon transmitters with little effort.
Note - an accurate clock is essential both for transmission, and decoding of received signals (native Windows timing is usually inadequate).
WSPR was originally released in 2008.
- Joe Taylor, K1JT: WSPRing Around the World. QST November (2010), p. 30-32.
- G4JNT: The WSPR Coding Process: Non-normative specification of WSPR protocol http://www.g4jnt.com/Coding/WSPR_Coding_Process.pdf
- WSPR Beacon with Si 570 and Atmel AVR http://wsprnet.org/drupal/sites/wsprnet.org/files/si570wspr.pdf
- QRSS/WSPR Transmitter Kit https://qrp-labs.com/
- WSPR Beacon with Raspberry Pi https://gerolfziegenhain.wordpress.com/2013/04/13/raspi-as-wspr-transmitter/
- WSPR on Raspi Source Code https://github.com/JamesP6000/WsprryPi