Instructions for WSPR
                        ---------------------

WSPR is the name of a computer program.  It is pronounced "whisper",
and stands for "Weak Signal Propagation Reporter"; it implements
transmitting and receiving functions for a digital soundcard mode
called "MEPT_JT", which stands for "Manned Experimental Propagation
Tests, by K1JT".

WSPR generates and receives signals using structured messages, strong
forward error correction, and narrow-band 4-FSK modulation.  Its
principal design goal is reliable copy at very low signal levels.  In
practice it works well at signal-to-noise ratios down to -27 dB in a
reference bandwidth of 2500 Hz.  The present program, version 0.3, has
no frills, no graphics and no GUI.  It is executed from the command
line.

QUICK START
-----------

Download WSPR from the URL
http://physics.princeton.edu/pulsar/K1JT/WSPR.EXE and copy the
executable file into a suitable directory such as C:\wspr.  WSPR is
invoked by typing its name followed by zero or more arguments.  Open a
command-prompt window, CD into to that directory, and type "wspr"
(with no accompanying arguments) to see the following summary and
examples of program usage:

-----------------------------------------------------------------------
C:\WPSR> wspr

 WSPR Version 0.3 r90

 Usage: wspr Tx  f0 ftx nport call grid dBm [snr] [outfile | nfiles]
        wspr T/R f0 ftx nport call grid dBm pctx
        wspr Rx  f0 [infile ...]

        f0 is the transceiver dial frequency (MHz)
        ftx is the signal frequency (MHz)
        nport is the COM port number for PTT control
        snr is the S/N in 2500 Hz bandwidth (for test files)
        pctx is the percentage of 2-minute periods to Tx

 Examples:
        wspr Tx  10.1386 10.140100 1 K1JT FN20 30
        wspr Tx  10.1386 10.140100 0 K1JT FN20 30 -22 test.wav
        wspr T/R 10.1386 10.140100 0 K1JT FN20 30 25
        wspr Rx  10.1386
        wspr Rx  10.1386 00001.wav 00002.wav 00003.wav

 For more information see:
        physics.princeton.edu/pulsar/K1JT/WSPR_Instructions.TXT
-----------------------------------------------------------------------

In transmit mode there can be up to 9 command-line arguments after the
program name.  The arguments have the following meanings:

1. Tx    - signifies transmit mode
2. f0    - suppressed carrier frequency or "dial frequency" (MHz)
3. ftx   - center frequency of generated MEPT_JT signal (MHz)
4. nport - COM port number for PTT control (0 to disable PTT control)
5. call  - transmitted callsign
6. grid  - transmitted 4-character locator
7. dbm   - transmitter power (dBm)
8. snr   - generated S/N (for off-line testing only)
9. file  - output file name, or number of files to generate

On-the-air transmissions use only arguments 1 through 7; arguments 8
and 9 are used for generating wave files for local tests.

In receive mode the first two command-line arguments must be "Rx" and
the dial frequency f0, in MHz.  Additional arguments are treated as
file names, for local testing purposes.

A third operating mode, the "T/R" mode, allows one to specify the
percentage of 2-minute time slots to devote to transmitting.  All
remaining time slots will be used for receiving.  The percentage is
defined in a statistical manner; specific choices of Tx and Rx
intervals are randomized.  In this way you can put a signal on the air
for others to copy, and at the same time monitor the band to keep
track of who else is on.  In T/R mode the first 7 command-line
arguments have the same meanings as in Tx mode; the 8th argument
specifies the percent of 2-minute sequences you want devoted to
transmission.  In the example given above, 25% of 2-minute sequences
will be transmissions, while the remaining 75% will be used for
reception.


NORMAL OPERATION
----------------

Set your transceiver to USB mode and the dial frequency 1500 Hz below
the center of the desired 200 Hz band for reception.  For example, on
30 m the QRSS band is 10.140000 to 10.140200, so the dial frequency
should be f0 = 10.140100 - 0.001500 = 10.1386 MHz.  Be sure that your
computer clock is accurate to within a second or so.  In case your
computer has more than one sound card, please note that the program
will use the default Windows sound system.  (Support for selecting
which sound card to use will probably be added in a future program
release.)

TRANSMIT: To transmit, type in a command similar to the first example
above.  The third argument is your desired signal frequency.  I use
serial port COM 5 for PTT control.  Therefore, to transmit on
10.140150 with power 100 mW (20 dBm) I would enter the command

C:\WSPR> wspr Tx 10.1386 10.140150 5 K1JT FN20 20

Transmission will start at the top on the next even minute, and will
be repeated on even minutes until you stop it manually.  You can type
CTRL+C (hold down the CTRL key while striking C) to terminate program
execution.


RECEIVE: To receive, type in a command like the fourth example above.
The second argument is the dial frequency, 1500 Hz below the center of
the 200 Hz received passband.

C:\WSPR> wspr Rx 10.1386

Reception will begin at the top of the next even minute, and will
continue until you terminate it manually by typing CTRL+C.


T/R MODE: Type in a command line like the third example above:

C:\WSPR> wspr T/R 10.1386 10.140150 1 K1JT FN20 30 25

At the start of the next even minute the program will start a series
of transmission or reception intervals.  A random number generator
is used to determine whether a particular interval will be Tx or Rx;
on average, however, the percentage of transmission intervals will be
approach the number specified by argument #8.


LOCAL TESTS WITH TWO COMPUTERS
------------------------------

Be sure that both computer clocks are accurate to within a second or
so.

On the "transmit" computer, to send MEPT_JT data at S/N -26 dB, type
something like this:

C:\WSPR> wspr Tx 10.1386 10.140080 0 K1JT FN20 20 -26

The frequencies are arbitrary, but the frequency difference will
determine the audio tone generated.  Transmission will start at the
top on the next even minute, and will be repeated on even minutes
until you stop it manually.  (You can type CTRL+C to terminate program
execution.)

On the "receive" computer, type in a command like

C:\WSPR> wspr Rx 10.1386

The frequency is arbitrary.  Reception will begin at the top of the
next even minute, and will continue until terminated manually.

You can also do this test with a single computer.  Just open two
command windows, one for Tx and one for Rx.  Use an audio cable to
patch soundcard output into soundcard input, or simply use the speaker
to "transmit" and the computer mike to "receive".

LOCAL TESTS WITH ONE COMPUTER
-----------------------------

You can generate a set of three test files at S/N -26 dB by entering a
command like this:

C:\WSPR> wspr Tx 10.1386 10.140100 0 K1JT FN20 30 -26 3

These files may then be "received" by entering this command:

C:\WSPR> wspr Rx 10.1386 00001.wav 00002.wav 00003.wav


GENERATING A MULTI-SIGNAL TEST FILE
-----------------------------------

If you set snr = 10 on the command line, WSPR will generate a file
containing ten distinct signals at 20 Hz intervals, with progressive
time offsets of 0.1 s relative to the first one, and with S/N -21,
-22, ... -30 dB.  This feature was designed for testing the
multi-signal decoder.  Here is a complete example of its use:

C:\WSPR> wspr Tx 10.1386 10.140100 0 K1JT FN20 30 10 test.wav
  10.138600  10.140100  10.0  K1JT FN20 30            test.wav

C:\WSPR> wspr Rx 10.1386 test.wav
 UTC   Sync dB    DT     Freq    Message                  Noise
---------------------------------------------------------------
test    18 -21   0.0  10.140010  K1JT FN20 30              20.1
test    14 -23   0.1  10.140030  K1JT FN20 30              20.1
test     4 -23   0.2  10.140050  K1JT FN20 30              20.1
test     7 -25   0.3  10.140070  K1JT FN20 30              20.1
test    12 -25   0.4  10.140090  K1JT FN20 30              20.1
test     2 -26   0.5  10.140110  K1JT FN20 30              20.1
test     4 -28   0.6  10.140130  K1JT FN20 30              20.1
test     1 -29   0.7  10.140150  K1JT FN20 30              20.1
test     1 -29   0.7  10.140170  K1JT FN20 30              20.1


GENERATING A LIST OF TX TONE FREQUENCIES
---------------------------------------- 

As an aid to those wishing to build a hardware-based or
microprocessor-based transmitter for MEPT_JT signals, you can request
the program to output the list of tone frequencies corresponding to
the MEPT_JT signal carrying a particular message.  To do this, simply
set snr to 11 on the command line.  Shown below is a complete example
of this usage.  The table has one line for each of the 162 symbols in
an MEPT_JT transmission.  Column 2 gives the tone number (0-3) for
each 4-FSK symbol; column 3 gives the tone frequency in Hz.  Each tone
should last for 8192/12000 = 0.6827 seconds, and transitions between
tones should be done in a phase-continuous manner.

C:\WSPR> wspr Tx 10.1386 10.140100 0 K1JT FN20 30 11
  1  3  1502.197
  2  3  1502.197
  3  2  1500.732
  4  0  1497.803
  5  2  1500.732
  6  0  1497.803
  7  2  1500.732
  8  2  1500.732
  9  1  1499.268
 10  2  1500.732
 11  2  1500.732
 12  2  1500.732
 13  3  1502.197
 14  3  1502.197
 15  1  1499.268
 16  0  1497.803
 17  2  1500.732
 18  2  1500.732
 19  3  1502.197
 20  2  1500.732
 21  0  1497.803
 22  3  1502.197
 23  0  1497.803
 24  1  1499.268
 25  1  1499.268
 26  3  1502.197
 27  1  1499.268
 28  2  1500.732
 29  0  1497.803
 30  2  1500.732
 31  2  1500.732
 32  0  1497.803
 33  0  1497.803
 34  2  1500.732
 35  1  1499.268
 36  2  1500.732
 37  0  1497.803
 38  1  1499.268
 39  2  1500.732
 40  3  1502.197
 41  2  1500.732
 42  2  1500.732
 43  2  1500.732
 44  0  1497.803
 45  0  1497.803
 46  0  1497.803
 47  3  1502.197
 48  2  1500.732
 49  1  1499.268
 50  3  1502.197
 51  2  1500.732
 52  0  1497.803
 53  3  1502.197
 54  3  1502.197
 55  0  1497.803
 56  3  1502.197
 57  0  1497.803
 58  0  1497.803
 59  0  1497.803
 60  1  1499.268
 61  1  1499.268
 62  0  1497.803
 63  3  1502.197
 64  0  1497.803
 65  2  1500.732
 66  0  1497.803
 67  0  1497.803
 68  3  1502.197
 69  3  1502.197
 70  0  1497.803
 71  3  1502.197
 72  2  1500.732
 73  3  1502.197
 74  0  1497.803
 75  1  1499.268
 76  0  1497.803
 77  1  1499.268
 78  0  1497.803
 79  0  1497.803
 80  3  1502.197
 81  2  1500.732
 82  2  1500.732
 83  1  1499.268
 84  0  1497.803
 85  1  1499.268
 86  1  1499.268
 87  0  1497.803
 88  2  1500.732
 89  0  1497.803
 90  1  1499.268
 91  1  1499.268
 92  2  1500.732
 93  3  1502.197
 94  0  1497.803
 95  3  1502.197
 96  2  1500.732
 97  2  1500.732
 98  2  1500.732
 99  3  1502.197
100  2  1500.732
101  2  1500.732
102  2  1500.732
103  2  1500.732
104  2  1500.732
105  1  1499.268
106  0  1497.803
107  0  1497.803
108  1  1499.268
109  2  1500.732
110  0  1497.803
111  3  1502.197
112  1  1499.268
113  1  1499.268
114  2  1500.732
115  1  1499.268
116  3  1502.197
117  2  1500.732
118  0  1497.803
119  1  1499.268
120  1  1499.268
121  2  1500.732
122  1  1499.268
123  2  1500.732
124  0  1497.803
125  2  1500.732
126  1  1499.268
127  1  1499.268
128  1  1499.268
129  2  1500.732
130  0  1497.803
131  2  1500.732
132  2  1500.732
133  0  1497.803
134  3  1502.197
135  2  1500.732
136  3  1502.197
137  2  1500.732
138  0  1497.803
139  3  1502.197
140  1  1499.268
141  0  1497.803
142  0  1497.803
143  2  1500.732
144  2  1500.732
145  2  1500.732
146  2  1500.732
147  0  1497.803
148  3  1502.197
149  3  1502.197
150  2  1500.732
151  1  1499.268
152  2  1500.732
153  3  1502.197
154  1  1499.268
155  0  1497.803
156  2  1500.732
157  2  1500.732
158  1  1499.268
159  3  1502.197
160  2  1500.732
161  2  1500.732
162  2  1500.732