1. Introduction

WSPR (pronounced “whisper”) stands for Weak Signal Propagation Reporter. WSPR implements a protocol designed for probing potential propagation paths using low-power transmissions. Normal transmissions carry a station’s callsign, 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, with a mapping facility, archival storage, and many other features.

Like its sister programs WSJT, MAP65, WSJT-X, and WSPR-X, WSPR is part of an open-source project released under the GNU General Public License (GPL v3). If you have programming or documentation skills or would like to contribute to the project in other ways, please make your interests known to the development team. The project’s source-code repository is SourceForge, and most communication among the developers takes place on the email reflector wsjt-devel.

2. System Requirements

  • SSB receiver or transceiver, and antenna

  • Computer running Windows (XP or later), Linux, or OS X

  • 1.5 GHz or faster CPU and 100 MB of available memory

  • Monitor with at least 800 x 600 resolution (more is better)

  • Computer-to-radio interface using a serial port for T/R switching, or CAT control, or VOX, as required for your radio-to-computer setup

  • Audio device(s) supported by your operating system, capable of 48 kHz sample rate

  • Audio or equivalent USB connections between transceiver and computer

  • A means for synchronizing computer clock to UTC within ±1 second

3. Installation

3.1. Windows

  • Download WSPR from the WSJT Home Page. Click on WSPR at the left margin and then on the desired download link.

  • Execute the downloaded file and follow its installation instructions.

  • Install WSPR into its own directory rather than the conventional location C:\Program Files\WSPR. The suggested default directory is C:\WSPR.

  • All files relating to WSPR will be stored in the chosen installation directory and its subdirectories. You can uninstall WSPR by removing the installation directory and its contents.

  • The built-in Windows facility for time synchronization is usually not adequate. We recommend Meinberg NTP: see Network Time Protocol Setup for downloading and installation instructions.

Caution If you are using a sound card that is also the Windows default audio device, be sure to turn off all Windows sounds so they are not transmitted over the air.

3.2. OS X

NH6Z has made a binary available for download. Download and follow his instructions here.

3.3. Linux

For Ubuntu and other recent 32/64 bit Debian-based systems, you can download an installation file from another link on the WSPR Home Page. To install and execute WSPR, put the downloaded file in your home directory and execute the following commands from a command-prompt window, if necessary substituting the correct revision number for the one shown:

$ sudo dpkg --instdir=. -i wspr_3.00r2319_i386.deb
$ cd WSPR
$ ./wspr

3.4. Source Code

Building WSPR from source code is straightforward but takes time and requires some experience. Source code can be downloaded from here, the public repository at SourceForge. Detailed instructions are available in the Dev-Guide. You will need the following development tools:

  • Subversion

  • gcc or equivalent C compiler

  • gfortran

  • fftw3 (headers and libraries)

  • portaudio19-dev (headers and libraries)

  • samplerate (headers and libraries)

  • python3, python3-dev, python3-numpy, python3-pil or pillow, python3-tk python3-imaging-tk, autoconf, autotools-dev

  • hamlib utilities

4. Setup and Configuration

4.1. Station Parameters

  • Connect appropriate interface cables between radio and computer. Details will depend on your interface hardware; in general you will need to connect the radio’s audio output to the computer’s soundcard input, and for receive-only systems that’s all you need! If you will also be transmitting you must patch soundcard output to the radio’s microphone or data input. For T/R switching and CAT control you may need a serial data cable or cables.

  • Start WSPR and select Station parameters from the Setup menu. Enter your callsign and 6-digit grid locator, select audio input and output devices, and select your transmitter power in dBm. (See Appendix A for a Watts-to-dBm conversion table.) Compound callsigns such as PJ4/K1ABC, W7/VE3DEF, and WA2XYZ/37 are permitted but should be used only when necessary. Double-compound callsigns such as PJ4/K1ABC/P are not supported. SWLs should provide a unique identifier (up to 8 characters) in place of a callsign.

images/Station_Parameters.png
  • If you choose to transmit as well as receive, WSPR will control the T/R sequencing. Select the desired PTT method (DTR, RTS, CAT, or VOX). For DTR- or RTS-controlled switching, select a PTT port. For receive-only or VOX-controlled systems, set PTT port to None.

  • WSPR offers limited CAT control of your transceiver, usable for T/R switching and frequency setting. To use this feature check Enable CAT and fill in the remaining parameters. Consult the manual for your radio to determine necessary parameter values for the serial connection.

4.2. Fonts

You can control the fonts and colors used in WSJT. A text file named wsprrc.win (on Windows) or wsprrc (on Linux and OS X) is supplied with the following contents:

*font:                  Arial 8
*Label*font:            Arial 8
*Text*font:             "Courier New" 10
*Canvas*font:           "Lucida Console" 16
*background:            gray85
*Text*background:       white
*Entry*background:      white
*foreground:            black
*Listbox*foreground:    RoyalBlue

You can edit this file with a text editor (such as Windows Notepad). For example, to make the on-screen fonts slightly larger you can increase the numbers on the first three lines to 9, 9, and 11. It might be wise to save a backup of the original file under a different name, in case you need to restore the original contents.

5. Basic Operation

Confirm proper operation of the WSPR decoder by opening a sample audio file recorded by WSPR. Select File | Open, navigate to the …\save\Samples directory under the installation directory, and open the file 091022_0436.wav. A total of six WSPR signals should be decoded, and your screen should look like the image below. You might find it interesting to listen to the sample file using Windows Sound Recorder or a similar utility program. The WSPR signals are barely audible, if audible at all, and the recording includes many atmospheric static crashes… and yet WSPR decodes the signals without errors.

images/Sample_File_Decoded.png

To prepare for on-the-air operation, proceed as follows:

  • Select an operating band from the Band menu. The default WSPR frequency will appear in the Dial frequency box. For example, you should see 10.138700 MHz for the 30 m band. Set your transceiver to this frequency in USB mode, or a USB-based data mode. If you have enabled CAT control, frequency setting should occur automatically. Select a desired Tx frequency by double-clicking somewhere in the graphical display area. Available Tx frequencies fall in the range 1400–1600 Hz above the dial frequency. Clicking near the bottom of the graphical area gives a frequency near the lower limit, and clicking near the top puts you near the upper limit.

  • WSPR uses two-minute time slots for transmitting and receiving. The slider labeled Tx fraction sets the average proportion of time allocated for transmitting. The default setting of 20% is a good compromise under most conditions: it means that you will transmit approximately once every ten minutes and receive the rest of the time. The exact T/R sequence will be randomized so as to maximize your chances of receiving other WSPR stations. For receive-only operation, set the Tx fraction slider to zero.

  • While in Idle mode, you may click the Tune button to produce a short unmodulated test transmission. Duration of the transmission (in seconds) is set by the Tx fraction slider.

  • If you have internet access and wish to upload your reports automatically to WSPRnet, check the box labeled Upload spots.

  • Be sure that your computer clock is correct to within about ±1 second.

  • To begin normal operation, clear the Idle checkbox. WSPR will then begin a receive sequence at the start of the next even-numbered UTC minute. After reception has started, use the computer’s sound mixer and/or the volume controls on your radio or soundcard interface to adjust the audio level (lower left corner of main WSPR screen) to about midscale.

  • At the end of each reception interval, the waterfall will update and any decoded WSPR messages will appear in the main text window. The decoder looks for all detectable WSPR signals in a 200 Hz passband and displays its results in a waterfall spectrogram, a text window, and a Band Map. The spectrogram covers a narrow frequency range (about 200 Hz) in the vertical direction; the last three digits of the received frequency, in Hz, are displayed on a scale at right. Time runs from left to right in the spectrogram. On a typical computer screen each two-minute interval is a strip about 1 cm wide. The times of your own transmissions are denoted by thin green vertical lines in the spectrogram.

images/Spectrogram.png
  • Each decoded WSPR signal produces text showing the UTC, measured signal-to-noise ratio in dB (in a 2500 Hz reference bandwidth), time offset DT in seconds, measured frequency in MHz, drift rate in Hz/minute, and the decoded message. Time offsets greater than about ±2 seconds indicate a significant timing error at transmitter or receiver, or possibly both. For best performance your computer clock should be kept accurate to within ±1 second. Apparent frequency drifts greater than ±1 Hz per minute can usually be traced to the transmitter, and should be corrected if possible. Of course, receiver drifts could also contribute to a measured drift — but they are easily recognized because nearly all signals will then appear to drift by the same amount.

images/Decoded_Text.png
  • Color coding is used in the Band Map to indicate elapsed time since a station was decoded. Calls in red have been seen within 15 minutes of the last line of decoded text; yellow callsigns are 15-30 minutes old, light gray 30-45 minutes, and darker gray 45-60 minutes. Callsigns more than an hour older than the most recent one are deleted from the Band Map.

images/Band_Map.png
  • For best performance the background noise level going into the computer should be set to show approximately midscale on the "thermometer" scale at lower left. Deviations as large as ±20 dB from nominal will not affect WSPR decoding capability significantly. The idea is to have the baseline noise level high enough for quantization noise to be negligible, but low enough to give adequate dynamic range. Signal levels reported for each WSPR decode are the measured ratio of signal power to average baseline noise power, scaled to a reference bandwidth of 2500 Hz. Within broad limits, this ratio is independent of the level setting.

  • Under most conditions a receiver bandwidth normal for voice SSB communication, say 2.4 kHz, is a good choice. Narrower bandwidths are perfectly acceptable if you have problems with strong signals well outside the 200 Hz WSPR passband. There is no particular advantage in using a bandwidth as small as 200 Hz, however, since WSPR does all necessary narrow-band filtering in software.

  • Usually it is not critical whether AGC is on or off. A good default procedure is to leave it on, and set the desired audio level by reducing the RF gain. In effect this means that AGC will be activated only when very strong signals are present in the passband. Slow-recovery AGC settings are generally not desirable for WSPR.

6. Advanced Setup

  • The Advanced dialog can be called up from the Setup menu or by typing F7. As shown in the screen shot below, a slider control allows you to reduce your Tx audio signal by a specified amount. The normal setting for full output is 0 dB (slider all the way to the right). You can reduce power by up to 30 dB by moving the slider to the left. Changes take effect at the start of the next transmission. It may be convenient to adjust this slider by setting Tx fraction to 100% and clicking the Tune button to produce a series of transmitted dashes. Each dash will then reflect any new slider setting.

images/advanced.png
  • If your licensing authority requires callsign identification in Morse code at specified intervals, you may set the interval in the CW ID (min) field. Your callsign will then be sent in CW at the end of WSPR transmissions, at the specified interval. Because CW at 25 wpm uses several times more bandwidth than a WSPR signal, it is strongly recommended that you not use the CW ID feature unless required to do so.

  • Users of homebrew receiving equipment may require a different BFO frequency than the standard 1500 Hz used for SSB transceivers. You can enter a nonstandard value in the field labeled Rx BFO (Hz).

  • Many modern transceivers use a master oscillator from which most other frequencies are synthesized. If the master oscillator is slightly off frequency, all dial readings may be high or low in a predictable way. Appendix C outlines a simple procedure for determining whether your radio can be calibrated in this way, and if so how to determine the calibration constants A and B. Then, if you are using CAT control, you can improve the accuracy of your transmitted and received frequencies by entering these values and checking Enable frequency correction on the Advanced setup screen. Frequencies sent to the radio will then be adjusted according to your calibration constants. The button labeled Measure an audio frequency may be useful in determining values for A and B. See Appendix C for details. If using CAT control, you can force a frequency-setting command by clicking Update rig frequency.

7. I-Q Mode

7.1. Basic Parameters

  • I-Q mode is intended for use with direct conversion receivers or transceivers like the SoftRock. To use such a radio select PTT method = CAT and Rig number = 2509 on the Setup | Station Parameters screen. Then select IQ Mode from the Setup menu or type F8, which will display the screen shown below.

images/IQmode.png
  • Depending on how you have wired your SoftRock, you may or may not need to check Reverse Rx I,Q or Reverse Tx I,Q. The parameter Fiq (Hz) determines the frequency offset between Dial frequency specified on the WSPR main screen and the frequency (times 1/4) of the SoftRock’s Si570 programmable oscillator. The default value for Fiq is 12000 Hz; this puts the 200 Hz WSPR band 12 kHz above mid-band. For example, when operating on the 30 m band you might set Dial frequency = 10.1387 MHz and Fiq = 12000 Hz. These settings result in a commanded Si570 frequency of (10.138700–0.012000) × 4 = 40.506800 MHz.

  • You will probably need to calibrate the frequencies produced by your Si570 oscillator. Use the procedure outlined in Appendix C.

Tip Remember that for most effective use of WSPR, you will want your frequencies to be correct within a few Hz.
  • If your direct conversion receiver has a fixed local oscillator frequency, compute the value of Fiq from the equation below. Be sure all values are in Hz, and remember that (unless you have changed it) the BFO frequency is 1500 Hz so the last two terms will cancel.

    +f~iq~ = f~dial~ – f~LO~ – f~BFO~ {plus} 1500.+

7.2. Image Rejection

WSPR 4.0 includes facilities for optimizing image rejection on transmit and receive. You should start by establishing whether Reverse Rx I,Q or Reverse Tx I,Q need to be checked. (With these boxes unchecked, the assumed routing of in-phase and quadrature signals to the soundcard is “I=Left, Q=right.”) A typical SoftRock should exhibit around 30 dB of unwanted sideband rejection without further adjustment. However, rejections of 60 dB or more can easily be achieved in WSPR. Here’s how.

To adjust Tx image rejection you need a separate communications receiver:

  • Start WSPR, select the desired band, check the Idle box, set Tx fraction to 100%, and click the Tune button. WSPR will send a series of long dashes at the selected frequency. * Tune in the main signal on the separate receiver; then find the unwanted image, which will be offset in frequency by twice the sum of Fiq and the Rx BFO frequency.

(For the example setup described above, the image is 27 kHz below the desired signal.)

  • While listening to the unwanted image, slowly adjust the sliders labeled Tx I/Q Balance and Tx Phase on the Setup | I-Q Mode *screen, seeking a null.

There are two sliders for each parameter — the upper one for coarse adjustments, the lower for fine. New settings are applied at the start of each transmitted dash.

  • When you have found the best null you may exit WSPR. The program will remember your last settings of Tx I/Q Balance and Tx Phase.

Rx image rejection is accomplished in a semi-automatic way. With another transmitter or stable signal generator, generate a moderately strong signal inside (or within ± 500 Hz of) the 200 Hz WSPR band you will be receiving.

  • Start WSPR, clear the Idle box, and set Tx fraction to 0.

  • After a reception interval starts, check the box Adjust Rx phasing and watch the numbers labeled Bal and Pha converge to stable values. This may take 30 seconds or so. You may then uncheck Adjust phasing and check Apply Rx phasing corrections.

The measured phasing parameters will then be applied to received signals at the end of each Rx interval. With this procedure, unwanted sideband suppression should be better than 60 dB. An example is illustrated by the following screen shot showing the WSPR waterfall for two successive Rx

images/Image_Rejection.png

At the start of the first interval the signal generator was set near the center of the WSPR band, producing the bright unmodulated carrier just above 200 Hz.

  • Adjust Rx phasing was checked at t = 10 s and unchecked at t = 50 s, by which time the Bal and Pha numbers had stabilized. * At t = 60 s, halfway through the 2-minute Rx interval, the signal generator was moved 27 kHz lower, to the image frequency. The partially suppressed image is visible on the waterfall just below 200 Hz. (The small frequency offset is twice the error in the SoftRock’s LO frequency setting.)

  • During the second Rx interval, the box Apply Rx phasing corrections was checked. As shown in the second waterfall segment, the newly determined phasing parameters suppress the unwanted signal enough to make it completely invisible. The measured suppression was more than 70 dB.

  • I-Q Phasing and balance parameters are saved and restored on a “per band” basis. Use button Save for this Band to save settings you have determined for the current band. You can make those settings the default for all bands by clicking Save for all bands.

8. Special Messages

Normal WSPR messages consist of a callsign, 4-digit grid locator, and power level in dBm. These messages are always preferred when appropriate. However, compound callsigns (i.e., callsigns with add-on prefix or suffix) cannot fit into the 28 bits allocated in a standard message. Similarly, 6-digit locators cannot fit into 15 bits. Messages using these components are therefore sent using a two-transmission sequence. For example, if the callsign is PJ4/K1ABC, the 6-digit grid locator is FK52UD, and the power level 37 dBm, the following messages will be sent in alternating transmissions:

PJ4/K1ABC 37
<PJ4/K1ABC> FK52UD 37

If you have special need to use a 6-digit locator with a normal callsign, check the box Force transmission of 6-digit locator on the Advanced setup screen. If the callsign is K1ABC, the 6-digit grid locator FN42AX, and the power level 37 dBm, the following messages will then be sent in alternating transmissions:

K1ABC FN42 37
<K1ABC> FN42AX 37

Callsigns enclosed in angle brackets are actually sent as 15-bit hash codes. If such a code is received by another station before the full callsign has been received, it will be displayed as <…> on the decoded text line. Once the full callsign has been received, the decoder will thereafter recognize the hash code and fill in the blanks. Two very different callsigns might have the same hash code, but the 15-bit hash-code length ensures that in practice such hashing collisions will be rare.

9. Band Hopping

WSPR 4.0 allows those with CAT-controlled radios to investigate propagation on many bands without user intervention.

  • Select Band Hopping on the Setup menu or type F9, and you’ll see the screen shown below. You can select any mix of active bands and Tx fractions. If you then check Band Hop in the main window, WSPR will switch bands randomly after each 2-minute interval. If the box labeled Tuneup is checked for a particular band, WSPR will transmit an unmodulated carrier for several seconds just after switching to that band and before the normal Rx or Tx period starts. This feature can be used to activate an automatic antenna tuner (ATU) to tune a multi-band antenna to the newly selected band. Check the box Coordinated hopping to enable sequential hopping through as many as ten bands, according to the schedule shown in the table below.

images/BandHopping.png

Coordinated hopping enables a sizable group of stations around the world to move together from band to band, thereby maximizing the chances of identifying open propagation paths.

Band (m)   160  80  60  40  30  20  17  15  12  10
UTC Minute  00  02  04  06  08  10  12  14  16  18
            20  22  24  26  28  30  32  34  36  38
            40  42  44  46  48  50  52  54  56  58

The band-selection schedule repeats starting at UTC minutes 20 and 40, for a total of three full ten-band sequences in each hour. If the designated band for a given time slot has not been checked as active, a random choice is made among the active bands. The algorithm for choosing whether to receive or transmit guarantees at least one transmission on each active band every two hours. If all ten bands are active, up to three transmissions may be made on a given band in a two hour period.

Depending on your station and antenna setup, band changes might require other switching besides retuning your radio. To make this possible in an automated way, whenever WSPR executes a successful band-change command to a CAT-controlled radio, it looks for a file named user_hardware.bat, user_hardware.cmd, user_hardware.exe, or user_hardware in the working directory. If one of these is found, WSPR tries to execute the command

user_hardware nnn

where nnn is the band-designation wavelength in meters. You will need to write your own program, script, or batch file to do the necessary switching at your station. I wrote a simple Python program for this purpose. One of my antennas is an all-band dipole fed with open-wire line through a 4:1 current balun and an automatic ATU. Other antennas include a shunt-fed tower for 160 m and a tri-band trap dipole for 20, 15, and 10 m. The desired antenna is selected automatically, by band. When the all-band dipole is selected, the ATU adjusts itself during the several seconds just before a transmission or reception period begins.

10. WSPR Command Line

Some special-purpose applications can benefit from a simple implementation of the WSPR protocol in a program driven from the command line. The standard WSPR 4.0 distribution includes a simple program WSPR0 for this purpose. As distributed, WSPR0 always uses the system default audio devices and it does not implement automatic uploading of spots, rig control, I/Q mode, or band hopping. The program runs in a single thread. Its source code is easy to modify as desired for particular applications. Full operational details are described in an accompanying document, WSPR0 Guide.

11. WSPRnet

To access the features of WSPRnet, point your browser to wsprnet.org. This excellent web site is designed and maintained by Bruce Walker, W1BW. It provides a chat facility, band-by-band counts of stations reporting or spotted in the past ten minutes, a world map showing active WSPR stations and open propagation paths, an interface to the historical database, and statistical summaries derived from the data. The map can be zoomed and panned, and you can set various criteria to determine what spots are shown. An example of the world-wide map is shown below:

align=

Appendix A: Watts to dBm

0 dBm

1 mW (milliwatt)

3

2

7

5

10

10

13

20

17

50

20

100

23

200

27

500

30

1 W (Watt)

33

2

37

5

40

10

43

20

47

50

50

100

53

200

57

500

60

1 kW (kilowatt)

Appendix B: Protocol Specs

  • Standard message: callsign + 4-digit locator + dBm

    K1ABC FN20 37
  • 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, for example:

    PJ4/K1ABC 37           K1ABC FN42 37
    <PJ4/K1ABC> FK52UD 37  <K1ABC> FN42AX 37
  • 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 for locator, 7 for power level, 50 bits total.
Tip Further details are contained in the source code, available at SourceForge
  • Forward error correction (FEC): convolutional code with constraint length K=32, rate r=1/2.

  • Number of binary channel symbols: nsym = (50+K-1)2 = 162.

    Keying rate: WSPR-2, 12000/8192 = 1.4648 baud
                 WSPR-15, 12000/65536 = 0.1831 baud.
  • Modulation: continuous phase 4-FSK, tone separation 1.4648 Hz (WSPR-2) or 0.1831 Hz (WSPR-15).

  • Occupied bandwidth: about 6 Hz (WSPR-2), 0.73 Hz (WSPR-15)

  • Synchronization: 162-bit pseudo-random sync vector.

  • Data structure: each channel symbol conveys one sync bit (LSB) and one data bit (MSB).

  • Duration of transmission:

    162 8192/12000 = 110.6s (WSPR-2)
    162 65536/12000 = 884.7 s (WSPR-15)
  • Transmissions nominally start one second into an even UTC minute, ie:

    hh:00:01, hh:02:01 … (WSPR-2) or one second into an even quarter-hour
    hh:00:01, hh:15:01 … (WSPR-15).
  • Minimum S/N for reception: around –28 dB on the WSJT scale (2500 Hz reference bandwidth) for (WSPR-2), –37 dB for (WSPR-15).

Further details on the structure of WSPR Messages

At the user level, WSPR messages can have one of three possible formats illustrated by the following examples:

Type 1:  K1ABC FN42 37
Type 2:  PJ4/K1ABC 37
Type 3:  <PJ4/K1ABC> FK52UD 37

Type 1 messages contain a standard callsign, a 4-character Maidenhead grid locator, and power level in dBm. Power levels will be rounded so as to fall in the sequence 0, 3, 7, 10, 13, …, 60. Type 2 messages omit the grid locator but include a compound callsign, while type 3 messages replace the callsign with a 15-bit hash code and include a 6-character locator as well as the power level. Lossless compression techniques squeeze all three message types into exactly 50 bits of user information. Standard callsigns require 28 bits and 4-character grid locators 15 bits. In Type 1 messages, the remaining 7 bits convey the power level. In message types 2 and 3 these 7 bits convey power level (in the restricted range 0 to 60 dBm) along with an extension or re-definition of the fields normally used for callsign and locator. Together, these compression techniques amount to “source encoding” the user message into the smallest possible number of bits.

After source encoding, redundancy is added in the form of a strong error correcting code (ECC). WSPR uses a convolutional code with constraint length K=32 and rate r=1/2. The convolution procedure extends the 50 user bits into a total of (50 + K – 1) × 2 = 162 one-bit symbols. Interleaving is applied to scramble the order of these symbols, thereby minimizing the effect of short bursts of errors in reception that might be caused by QSB, QRM, or QRN. The data symbols are combined with an equal number of synchronizing symbols, a pseudo-random pattern of 0’s and 1’s. The 2-bit combination for each symbol is the quantity that determines which of four possible tones to transmit in any particular symbol interval. Data information is taken as the most significant bit, sync information the least significant. Thus, on a 0 – 3 scale, the tone for a given symbol is twice the value (0 or 1) of the data bit, plus the sync bit.

Some arbitrary choices define further details of message packing and the ordering of channel symbols. These choices are best described with actual examples, and by referring to the source code. To make it easy for others to implement the WSPR protocol, a Fortran program has been written to illustrate the encoding and decoding procedure and provide examples of each stage in the process. A compiled version of this program for Windows is available at WSPRcode.exe, and full source code can be found in the WSJT repository. An example of program invocation and output for the message “K1ABC FN42 37” is shown on the next page. A WSPR transmitter should generate frequencies corresponding to the numbers given for channel symbols, where 0 is the lowest frequency tone and 3 the highest.

WSPRcode Example:
C:\wspr> WSPRcode "K1ABC FN42 37"
Message: K1ABC FN42 37

Source-encoded message (50 bits, hex): F7 0C 23 8B 0D 19 40

Data symbols:
      1 1 0 0 1 0 0 0 0 0 1 0 0 1 0 1 1 1 0 0 0 1 1 1 0 1 1 1 1 0
      1 0 0 0 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 1 1 0
      1 1 0 1 1 1 0 1 1 0 1 0 1 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0 1
      1 1 1 0 1 1 1 0 1 0 1 0 1 0 0 0 1 1 0 1 0 0 0 1 1 1 0 1 1 0
      1 0 1 1 1 0 1 1 1 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1
      1 1 1 1 1 0 0 1 0 1 1 1

Sync symbols:
      1 1 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 1 0 0 1 0 1 1 1 1 0 0 0
      0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 1 0 0 1 1 0 1 0 0 0 1
      1 0 1 0 0 0 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0 0 1 0 1 1 0 0 0 1
      1 0 1 0 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1
      0 1 0 0 0 1 1 1 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 1 1 0
      1 0 1 1 0 0 0 1 1 0 0 0

Channel symbols:
      3 3 0 0 2 0 0 0 1 0 2 0 1 3 1 2 2 2 1 0 0 3 2 3 1 3 3 2 2 0
      2 0 0 0 3 2 0 1 2 3 2 2 0 0 2 2 3 2 1 1 0 2 3 3 2 1 0 2 2 1
      3 2 1 2 2 2 0 3 3 0 3 0 3 0 1 2 1 0 2 1 2 0 3 2 1 3 2 0 0 3
      3 2 3 0 3 2 2 0 3 0 2 0 2 0 1 0 2 3 0 2 1 1 1 2 3 3 0 2 3 1
      2 1 2 2 2 1 3 3 2 0 0 0 0 1 0 3 2 0 1 3 2 2 2 2 2 0 2 3 3 2
      3 2 3 3 2 0 0 3 1 2 2 2

Decoded message: K1ABC FN42 37            ntype: 37

Appendix C: Freq Cal

The digital frequency readouts of modern synthesized radios depend on a master oscillator for their accuracy. If the frequency of this oscillator is off by even a few parts per million (ppm), it can significantly degrade the accuracy of your WSPR spots and transmitting frequencies. WSPR 4.0 has built-in facilities that can help you measure and enable calibration constants for your radio, all done with software.

Quick two-frequency calibration procedure

The following procedure should work for most modern radios. You will need access to two signals of known frequency — ideally one at a low frequency, say 3 MHz or less, and one at least several times higher. Good choices in North America would be WWV at 2.5 and 10 MHz, as illustrated below. In other parts of the world you can probably still access WWV at 10 MHz, and for a low frequency you could use a standard AM broadcast station. Many other choices are possible, of course.

  1. Put receiver in USB mode with RIT off, dial frequency f1 = 2.500 MHz (or whatever the known station frequency may be). The receiver should be thoroughly warmed up.

  2. Turn on RIT, set it to –1500 Hz

  3. With WSPR running in Idle mode, click Measure an audio frequency on the Advanced dialog screen.

  4. Subtract 1500 Hz from the measured audio frequency reported by WSPR in the console window, and record the result as dial error d1.

  5. Repeat steps 1–4 for a second standard-frequency station. You should now have two pairs of numbers: (f1, d1) and (f2, d2). Note that f1, f2 are in MHz but d1, d2 are in Hz.

  6. Now solve the following pair of simultaneous linear equations (which you learned how to do when in high school):

    • d1 = A + B f1

    • d2 = A + B f2

      The desired calibration constants are given by
    • B = (d2 - d1) / (f2 - f1)

    • A = d1 - B f1

      Example with numbers:
      The audio frequency measurements with my TS-2000 were 1505.49 Hz on the 2.5 MHz
      WWV signal, and 1515.01 Hz on the 10 MHz signal, thus:
    • f1 = 2.5

    • d1 = 1505.49 – 1500 = 5.49

    • f2 = 10.0

    • d2 = 1515.01 – 1500 = 15.01

      These values yield the results:
    • B = (15.01 – 5.49) / (10.0 – 2.5) = 1.269 ppm

    • A = d1 – B f1 = 2.32 Hz

  7. Alternatively, A and B can be calculated by using the fcal program (see the following section “More thorough calibration".

  8. When satisfied that your results are repeatable and reliable, enter the computed values of A and B in then Advanced dialog.

More thorough calibration

The figure reproduced below illustrates the results of about an hour’s work with my Kenwood TS-2000. I made measurements as described in steps 1–4 above, and repeated them for 68 different stations. The first 8 of these were the standard-frequency broadcasts of WWV (US) at 2.500, 5.000, 10.000, 15.000, and 20.000 MHz and CHU (Canada) at 3.330, 7.850, and 14.670 MHz. These measurements are plotted as filled circles in the graph. It’s easy to see that measurements of the eight standard-frequency signals make an extremely good fit to a straight line.

images/dial-error.png
Figure 1. Straight Line Fit

The remaining measurements were made for standard AM and shortwave broadcast stations, chosen more or less at random. In North America, assigned frequencies of AM broadcast stations are integer multiples of 10 kHz. Most shortwave broadcast stations also follow this pattern, although some are at odd integer multiples of 5 kHz. Useful stations are those that give measured audio frequencies close to 1500 Hz when the radio dial is set at the appropriate round number and RIT is set at –1500 Hz. Measurements for the 60 broadcast stations are plotted as small crosses in the figure. By my measurements, about two-thirds of the broadcast stations are within 1 Hz of their assigned frequency (a few are off by as much as 5–10 Hz). By rejecting the more discrepant measurements, you could calibrate reasonably well by using these or a similar group of broadcast stations.

A simple command-line program fcal is included with your WSPR installation. An example data file containing my own measurements of WWV and CHU is also included as the file fcal.dat. If you are comfortable running computer programs from the command line, open a Command Prompt window, change to the WSPR installation directory, and type the command “fcal fcal.dat”. The results should look like this:

C:\Radio\WSPR> fcal fcal.dat
    Freq      DF     Meas Freq     Resid  Call
   (MHz)     (Hz)      (MHz)        (Hz)
==============================================
   2.500    5.490   2.500005490    0.102
   3.330    6.410   3.330006410   -0.048
   5.000    8.610   5.000008610    0.000
   7.850   12.270   7.850012270   -0.012
  10.000   15.010  10.000015010   -0.042
  14.670   21.060  14.670021060   -0.009
  15.000   21.420  15.000021420   -0.074
  20.000   28.020  20.000028020    0.083

A:    2.17 Hz    B:   1.2885 ppm    StdDev:  0.067 Hz
err:  0.05            0.0040

Parameter A (measured in Hz) is the intercept of the best-fit straight line with the y-axis; B is the slope of the line, measured in parts per million. These results show that for my TS‑2000 the best-fit calibration constants are A=2.17 ± 0.05 Hz and B = 1.289 ± 0.004 ppm. The standard deviation of the measurements about the fitted line is less than 0.1 Hz, which shows that the measurements are very good and a linear correction to the radio’s dial frequency should be reliable.

You can use the file fcal.dat as a guide for preparing a file with your own calibration measurements. To obtain values for A and B, use your file name as a command-line argument to program fcal, for example:

C:\Program Files\WSPR> fcal mycal.dat

Click the button labeled Read A and B from fcal.out to transfer the fitted values to the entry fields for A and B.

Appendix D: Troubleshooting

  1. I don’t see any WSPR signals in the waterfall spectrogram. What solutions can I try to remedy this?

    • Is the Idle box is unchecked?

    • Have you selected the correct Audio-in device in the Station Parameters dialog?

    • Is audio reaching the computer?

    • The Rx Noise level displayed at bottom left of the WSPR window during a reception period should be at least –10 dB. If it is very low, e.g. –30 dB, you might need to adjust the volume level in your computer operating system and/or receiver.

    • Are any stations active on the selected band? For new users, the 30 meter band is a good starting band as it generally has high activity and good propagation. Check the WSPRnet Activity page to see both how many stations are active on a band, and where they are located.

    • Is your receiver is on the correct frequency and in USB mode? The readout frequency should be the one given in the Dial box. Use a standard-frequency signal such as WWV to determine your receiver’s calibration accuracy and then, if necessary, adjust the receiver dial frequency accordingly.

  2. Now I see WSPR traces in the spectrogram but no decodes. What should I try now?

    • Reboot your computer. When it has rebooted, see if WSPR is working before starting any other programs.

    • Is your computer clock is set accurately enough? WSPR’s time readout should be within about ±1 second of the correct UTC.

    • Is your receiver drifting in frequency? If most WSPR traces slope either upward or downward in the spectrogram, the receiver is probably drifting too much. Try waiting half an hour to see if it stabilizes.

    • If you are transmitting, additional heat generated by the transmitter may contribute to the drift. Try reducing your output power or reducing Tx fraction so that you transmit less often.

  3. Finally, I have started to see WSPR decodes, but none of my decoded signals are being reported on WSPR Home Page. What gives?

    • Perhaps your signal simply isn’t being received by anyone. A simple antenna and a few watts should allow you to decode other people’s signals, and vice - versa, on 30 m during daylight hours. Turning up your power level beyond 5 to 10 watts is not recommended, as lack of decodes on 30 m is most likely a setup issue and not related to your power level.

    • The WSPRnet Activity page can be used to see how many stations are active on a band and where they are located.

    • Is your transmitter switching to transmit? Check that you have selected the correct PTT method and PTT port or CAT settings. These parameters are configured in the Station parameters dialog.

    • Is your transmitter generating output? Use its metering features or a field strength meter or SWR bridge to ensure that you are generating a signal.

    • If you have no power output,check that you have selected the correct Audio out device in the Station parameters dialog. You may also need to adjust the sound output volume level in your operating system’s audio mixer, or a sound level setting in your transmitter (e.g. Mic level).

    • Are you transmitting in upper sideband(USB)in the specified 200HzWSPR frequency range? With a transceiver, if you don’t see WSPR signals in the waterfall or they are not evenly spread above and below the center frequency, your transceiver may not be set to the correct frequency, or its frequency readout is not calibrated accurately.

  4. My spots of other stations are not appearing in the WSPRnet.org database.

    • Have you checked the Upload spots checkbox? Be aware that if you have used the File menu features to decode saved files, Upload spots will have been unchecked automatically.

    • Are you successfully decoding WSPR signals? You should see WSPR messages in the large text box towards the bottom of the WSPR window, and callsigns in the Band Map at top right.

  5. My locator is displayed as only 4 digits in the WSPRnet.org database.

    • Have you entered a 6 digit locator in the Station parameters dialog? You should always enter a 6 digit locator here.

    • On the WSPR Home Page website,ensure that in your account details you have entered a 6 digit locator.

  6. CAT control is not working properly with my radio.

    • Your radio may require settings beyond those made available on the Setup screen. You can insert additional rig-control parameters by editing the Handshake line on the Station parameters screen. For example, if you need Handshake = Hardware and parity = Even, the Handshake line should read

      Hardware –C serial_parity=Even
    • Some radios(e.g.,YaesuFT-450, FT-950, and FlexRadio3000)do not like the default timing parameters used by the rigctl program. CAT control of these radios requires the following text on the Handshake line:

      Hardware –C write_delay=0

Contact Us

The following are the established communication channels for the WSPR Group:

General Information
Development Related
Community Related

Acknowledgements

Since 2005 the WSJT project (including programs WSJT, MAP65, WSPR, WSJT-X, and WSPR-X) has been “open source”, with all code licensed under the GNU Public License (GPL). Many users of these programs, too numerous to mention here individually, have contributed suggestions and advice that have greatly aided the development of WSJT and its sister programs.

Many people have contributed to the success and popularity of WSPR. Members of the WSJT Development Group, especially G4KLA, OH2GQC, VA3DB, W1BW, W6CQZ, and JCDutton have written code, particularly code addressing platform portability issues. The band-hopping features were first implemented by 4X6IZ. G3ZOD, LZ1BB, OZ1PIF, and VK3SB have spent many hours helping to debug beta releases and prepare distribution packages. G3ZOD drafted most of the troubleshooting hints in Appendix D of this manual. Many thanks to all for these efforts!

License

WSPR is free software: you can redistribute it and/or modify under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

WSPR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this documentation. If not, see GNU General Public License.

Copyright © 2001-2015 Joseph H Taylor, Jr, K1JT.