Skip to content

WSPR — measure your own antenna

WSPR (Weak Signal Propagation Reporter, pronounced «whisper») is not a mode for making contacts, it is a mode for measuring. Every few minutes a station sends its callsign, locator and power for just under two minutes — at so little power that the signal disappears into the noise. Receivers around the world dig it back out and report it to WSPRnet.

That answers what otherwise stays guesswork: does the new antenna reach further than the old one? In which direction? On which band?

HAM-Tools covers the whole path — receiving, transmitting, evaluating. WSJT-X is not required.

New in 1.44.0

The whole module is new. It closes the loop with the antenna simulator: model the antenna, build it, measure it with WSPR, compare — all in the same app, with the same radio.

Opening the module

WSPR sits in the sidebar among the main applications, below Winlink. Like the logbook and SSTV it takes over the whole window: operation on the left, results on the right. ‹ Overview takes you back.

Receiving within five minutes

  1. Set Audio → Input (RX) to the radio's USB codec — not the Mac microphone. On first start macOS asks for microphone permission.
  2. Choose Operation → Band. With a CAT connection the radio jumps to the right frequency by itself; otherwise an orange line tells you to set it by hand.
  3. Start reception.

Seeing «Waiting for the next even minute» afterwards is normal: WSPR starts exclusively on even UTC minutes. The first result takes at least two minutes, in the worst case just under four.

The dial frequency is not the transmit frequency

The WSPR window sits 1400–1600 Hz above the dial frequency. On 20 m the radio therefore reads 14.0956 MHz while the signals are around 14.0971 MHz. The mode is USB, or better USB-D (data mode) — there the audio comes from the USB codec instead of the microphone, with no compressor in the way.

Transmitting

Transmitting has two locks: it needs «Allow transmitting» and a transmit share above zero. Working through the settings therefore cannot key the PTT by accident.

  1. Set Audio → Output (TX) to the USB codec.
  2. Check Your details: callsign, four-character locator, power.
  3. Switch on Transmit → Allow transmitting.
  4. Send tuning tone and watch the ALC on the radio.
  5. Transmit once for the first attempt — it transmits in the next window, regardless of the transmit share.

While transmitting, a red TRANSMITTING badge lights up at the top right.

Setting the level

The tuning tone has the same amplitude as the later transmission. That is the trick: WSPR is 4-FSK with a constant envelope, so a continuous tone loads the modulator in exactly the same way. Whatever you set here holds for the beacon.

The rule is the same as for any data mode: turn it down until the ALC just begins to respond. Overdriving produces exactly the spurious emissions that 4-FSK is designed to avoid — and in the 200 Hz wide WSPR window the neighbours sit close.

The tuning tone occupies the band

It sits in the middle of the WSPR window and covers everything there for its duration. That is why it runs for at most 20 seconds and can be stopped at any time. Use it sparingly.

Transmit share

The share of windows in which you transmit. 20 % is the usual figure. Transmitting constantly means hearing nothing yourself and occupying the narrow band for everyone else.

Which windows are used is derived from the window number and your callsign — neither random nor rigid. A fixed rotation («every fifth window») would make all stations with the same setting transmit simultaneously and cover each other.

State the power honestly

WSPR transmits power in stepped values (0, 3, 7, 10 … 60 dBm). 23 dBm is 200 mW — the usual beacon level.

The figure ends up in other people's evaluations, so it should be right. Careful with percentage controls on the radio: on most sets the power scale is not linear, so 2 % is not reliably 2 % of rated power.

Band changing for multi-band antennas

To check an antenna on several bands, let it cycle: Band changing → Change bands automatically, tick the bands you want and set how many windows to stay on each.

The change applies to receiving and transmitting — both are measured on every band. Below the band list you see how long one full pass takes.

Dwell time

One window per band cycles fastest, but with a small transmit share it means a long wait for a transmission on each band: with three bands and 20 %, a given band gets a transmission only about every half hour. For a multi-band test, two or three windows per band are more practical.

The results

Above the table are three points of view:

I hearstations received here
Hearing mereports about your own beacon, from WSPRnet via wspr.live
Compareantenna comparison across two measurement periods

For the first two you can switch between list and map.

Map

Shows the paths as great circles — the direction in which a signal leaves the station is the crux of an antenna comparison, and a straight line in the map projection would be misleading there.

Colour follows signal strength across the range in which WSPR lives (−30 to 0 dB): cold for what barely arrives, warm for strong signals. Each station gets one dot with its best value; the number of reports is in the tooltip.

Top right: zoom, Show all, Whole world, and a toggle for the callsigns.

Who hears me

Hearing me → Fetch retrieves the reports from wspr.live, which serves the WSPRnet database.

Fetching happens on request only, never in the background: the service is run by the community and asks for no more than 20 queries per minute.

Alongside distance and bearing you get km/W — the figure that makes transmissions at different power levels comparable. 2900 km on 200 mW is about 14 500 km/W.

Antenna comparison

The evaluation that makes the whole exercise worthwhile.

How it works: run antenna A as a beacon for a while, rebuild, run antenna B for the same length of time. Then enter both start times and the shared duration under Compare, pick a band, and press Evaluate.

Why «twelve stations against eight» tells you nothing

Propagation changes more over a few hours than any antenna does. Measuring in the morning and comparing in the afternoon measures the ionosphere.

Only stations that heard both periods are therefore counted. The SNR difference is taken per shared station, and the result is their median. Stations that heard only one of the two periods are listed separately — interesting, but not evidence: someone missing from the second run may simply have switched their receiver off.

Next to the dB figure stands the number of shared stations. From five upwards the result counts as solid; below that, a single receiver with a shaky signal decides how the figure comes out.

The closer the two periods, the more meaningful. And evaluate each band separately — propagation on 40 and 10 m behaves completely differently.

Things you may notice in the list

Questionable callsigns

Entries with an orange warning triangle are most likely false decodes: the decoder works at the edge of what is possible, and on very weak signals a checksum occasionally works out by chance. They are recognisable by their structure — no assigned callsign begins with 0 or 1, and exactly one digit sits between prefix and suffix.

Such spots are marked, not hidden: for an antenna comparison you want to see how often this happens. A low single-digit percentage is normal.

«not yet known»

Not an error but WSPR type 3: these stations send a checksum instead of their callsign, to make room for a six-character locator. The name appears once the same station has been heard with its full callsign — HAM-Tools remembers that mapping permanently.

Clock warning

Appears at the top right when every received signal arrives offset. WSPR needs the window to about ±1 s. If the clock drifts further, the weak signals drop out first — and those are precisely the reason for running WSPR. Without this hint it would look like poor conditions.

The fix: check automatic time synchronisation in macOS System Settings.

Where the data lives

  • Spots: ~/Documents/HAM-Tools/WSPR/spots.sqlite
  • Decoder data: ~/Documents/HAM-Tools/WSPR/wsprd/

No logbook entries

WSPR spots are not QSOs — WSPRnet states this explicitly, and WSPR is neither a mode nor a submode in ADIF 3. They therefore go into their own store and never into the logbook.

Technical background

Modulation4-FSK, continuous phase
Symbol rate1.4648 baud, tone spacing 1.4648 Hz
Transmission110.6 s, starting 1 s after every even UTC minute
Bandwidth6 Hz
Payload50 bits: callsign, locator, power
Error controlconvolutional code K = 32, rate ½, with interleaving
Sensitivityaround −28 dB signal-to-noise ratio in 2500 Hz

The transmit path — encoding and modulation — is written in Swift and verified against the reference decoder. For decoding, wsprd from the WSJT-X project is bundled and runs as a separate process (like nec2c for the antenna simulator). That is deliberate: decoding at −28 dB requires a coarse search over time and frequency, a sequential decoder and several passes with subtraction — a home-grown decoder that finds the strong signals and misses the weak ones would look as though it worked. But WSPR lives on the weak ones.

Licence and provenance are listed under Settings → Licence → Third-party components.

HAM-Tools © HB9HJI · Funkwelt