Instructions for PSK31 (DOS version) for DSP56002EVM with or without
the G3PLX boot ROM.
Peter Martinez G3PLX 17 Aug 1997
Updated to cover QPSK mode 15 Dec 1997

    |+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++|
    | Quick note if you are upgrading from a previous version:  |
    | The new QPSK mode should be used with the radio in USB.   |
    | If you need to use LSB, use the /r commandline parameter. |
    |+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++|

You should have the following files with this one:

To run PSK31:
PSK31.EXE       The executable
PSK31.CLD       The DSP load file
ALPHABET.DAT    The alphabet used by the PSK31 mode

To compile the Pascal for PSK31.EXE:
PSK31.PAS       The Pascal source for PSK31.EXE
EGAVGA.OBJ      VGA graphics object file

To compile the dsp assembler for PSK31.CLD:
PSK31.ASM
IOEQU.ASM
CODEQU.ASM

To make a boot ROM:
PLXBOOT.CLD

To read all about PSK31:
PSK31.TXT
VARICODE.TXT


Installation
============
Copy the following files to your hard-drive so that they are all in
the same directory:

PSK31.EXE	The exe file of the driver program
PSK31.CLD	The PSK31 DSP code
ALPHABET.DAT	The varicode alphabet

If you are upgrading from a previous version of PSK31, please DO NOT try
to run the new PSK31.EXE and the old PSK31.CLD together, or vice versa: the
two are not compatible.

Hardware:
The audio from the EVM to the tx comes from the left audio output jack.
The audio level is 3v p-p. Since the PSK31 signal needs to be linear, be
sure that this level does not overdrive the transmitter. IT's better to
have a high level from the EVM and attenuate it close to the transmitter
than to turn the level down in the software.

The audio from the rx to the EVM goes to the left audio input jack. The
level accepted can be up to 3v p-p, but it is not very critical.

The right audio output jack can be used to monitor the receive audio, or
headphones can be used in which case the left headphone monitors the
transmission and the right headphone monitors the received signal (through
the receive filter).

The transmitted audio is only turned on when transmitting, so the transmit/
receive changeover can be done using VOX on the transceiver, but the
PC3 and PB0 pins have PTT control voltage on them. These pins goes to +5v just
before the transmit audio comes on and goe to zero just after the transmit
audio goes off. Connect either of these pins to the gate of a small power
mosfet, or through a resistor to the base of a transistor. The drain/collector
can then be used to pull down the PTT line of the transceiver. If you use the
host port on the EVM, you will need to turn off the PB0 ptt control and
you can do that by changing the pb0ptt variable in the PSK31.ASM file.

The user serial port jumpers are not supplied with the EVM. If you have
not already done so, add two jumpers to J8. Fit them on the 4 empty pins
on J8, lined-up in the same way as the other two jumpers that are already
on J8. You will also need jumpers on pins PC0, PC1, PC2, PC6, PC5, PC8,
PC4, and PC7 to enable the SCI and the SSI. The J12 jumper should be in
the 16k position.


To start PSK31:        (this is the basic method)

1. Connect the EVM to the PC, using the OnCE port, and power it up.
   Run the EVM56K program supplied with the EVM. The red LED on the EVM
   should light and the EVM56K screen should appear. Type the command

   LOAD PSK31		(followed by the ENTER key)

   When the command prompt returns, type the command

   GO			(followed by the ENTER key)

   then the command

   QUIT			(followed by the ENTER key)

   These commands load the PSK31.CLD file into the EVM, start it running,
   and exit the EVM56K program back to DOS.

2. Now change the serial cable over to the USER port on the EVM, and run
   the PSK31 program. Before you do, you need to decide on the various
   commandline parameters. If you enter "PSK31" by itself at the DOS
   prompt, the program will run using COM1, and with "NoCall" as the
   callsign, the centre-frequency set to 1000Hz, with the system
   operating in full duplex mode, and with auto-linefeed enabled.
   To change any of these default options, add the following after
   the "PSK31 " command:

   /c followed by your callsign, for example  /cG3PLX

   /p followed by your COM port number, for example /p2

   /f followed by your choice of centre-frequency, for example /f800.0

   /s if you want the PSK31 program to work in simplex mode.

   /n if you want to disable the auto-linefeed mode.

   /r if you want to use LSB for the QPSK mode. (BPSK is don't-care)

   /b if you have a G3PLX boot ROM fitted (see the notes at the end)

   The full command to enter at the DOS prompt might be something like this:

      PSK31 /cG3PLX /f800.0 /p2 /s

   You could put this line into a .BAT file. If you use the full pathname of
   PSK31 (eg c:\PSK31\PSK31 /cG3PLX /b) then you can put this .BAT file in
   a different directory.


Operating PSK31:
===============

When PSK31 starts, the tuning display circle will be flickering at random,
even if there is no audio connected to the input port. Connect the audio
input to a receiver and find a steady carrier on USB mode, such as a BC
station carrier on a known accurate frequency. Set the receiver frequency
1 kHz below the expected carrier frequency. You should find that the tuning
display is now a single line. The left and right cursor keys will move this
line around the circle. The correct position to tune a steady carrier to the
middle of the passband is at the top, but you should be able to tune 15Hz
either side and still see the line round at the bottom, but it will break
up into noise if you try to tune it off more than that. Listen to the tone
in the right headphone. You will hear the carrier through the narrow
passband of the PSK31 receiver. Notice that the tone in the headphone moves
down and up in the same way that would happen if you were actually tuning
across the signal with a receiver which has a narrow audio filter centred
on 1 kHz.

Practice tuning in carriers, and note any error in the dial calibration of
your receiver when tuning-in, for example, frequency standard transmissions.
You may wish to offset the PSK31 transmit and receive frequencies by using
the /f commandline option, to compensate for such an error if you will be
working other PSK31 stations on specific frequencies.

For the next exercise, be sure to run PSK31 without the /s option. Loop
the left audio output back to the left audio input, and press the F3 key
so that the "NET OFF" legend is showing. PSK31 is now set for full duplex
operation, and will copy it's own output via the audio loop-back.

Key F5 to switch the transmitter on. If you are listening on headphones
you will hear the transmitter audio on the left headphone and the same
received audio on the right headphone. Notice that the tuning display line
is now at the bottom. The tuning display actually shows the amount of
phase-shift per bit, and the signal at this point is sending a polarity-
reversal on each bit, which is the same as 180 degrees phase-shift per
bit, so the tuning display is at 180 degrees. When you tune in a PSK31
signal that is idling like this, you should tune the line to the bottom.

You will also see that the label "DCD OFF" has changed to "DCD ON". This
shows that the PSK31 receiver has detected the continuous idle signal. Now
send some text on the keyboard and you will see the text appear on the main
screen and the tuning display will flicker between top and bottom. This
is what you will see when you tune in a signal off-air.

Notice that it is possible to tune in a signal "upside down" if it is
sending continuously and you are 15Hz off frequency. Try this by offsetting
the receive frequency by 15Hz with the < and > cursor keys. Learn to
recognise an "upside-down" signal by the way the tuning display goes to the
top when idling instead of the bottom.

All 7-bit ASCII characters can be sent over the air. The backspace key
sends a backspace code over the air and that will backspace the received
copy, but only as far as the beginning of the current line. The typed text
appears in the transmit window and you can see to correct your typing errors 
in this window before the text has been transmitted.

Press F5 again and the transmitter tone will change to a steady note for
1 sec, the tuning display will go to the top, the "DCD ON" will change to
"DCD OFF" and the tone will go off. This continuous tone (no phase-shifts)
is detected by the receiver as the signal to disable the screen output. The
F2 key can be used to force the DCD to change if, for example, the signal
you are getting is too weak to pull in by itself, or you have tuned-in
during the middle of a transmission that is sending at full speed with no
idles, or if a carrier has come right on top of the signal you were copying
and that has made the DCD drop out. Or you can use F2 to stop rubbish
building-up on the screen if the DCD did not drop out properly at the end
of a transmission. It is probably wrong to call this a DCD (Data Carrier
Detect), because it just toggles one way when it detects the idle signal
and toggles the other way when it detects a continuous tone, and could
stay for ever in either state otherwise, whether the signal is sending
continuous traffic or there is only random noise present.

Try changing from BPSK mode to QPSK mode by pressing F1. The idle signal is
the same, but when you type, the display changes to a random cross pattern
instead of a flipping vertical line. Notice that although in BPSK it is
possible to incorrectly tune the signal "upside-down", in QPSK there are now
two more possible tuning positions which will give garbled copy. The
copy is also slightly delayed after you type. There is no easy way to
experiment with the error-reduction in a bench test like this. Switch back
to BPSK for the next test by pressing F1 twice.

Now feed the left audio to the transmitter and set the transmitter to
upper sideband (or LSB if you use the /r option on the commandline).  Note
that the BPSK mode can be used on either sideband: like CW, it doesn't
matter which way round you tune it, but QPSK is like FSK and you need to
be the same keying polarity as the other station and it is recommended to
use USB so that everyone will be the same on QPSK. Either enable VOX or
connect the PTT line interface, or switch the transmitter on manually. If
you have a scope you can look at the RF envelope and check that the peaks are
not clipped and the envelope looks like a two-tone test. If you have no scope,
set the drive level so that the ALC is just beginning to operate. If you have
a speech processor, make sure it is switched off. The average RF power
when the signal is idling will be 50% of your normal continuous key-down
single-tone level. When you type text it will flicker upwards towards the
single-tone value, and will go to the single-tone value for 1 sec when you
end the transmission with the F5 key or send a CW ident with the F6 key.
Remember that, unlike FSK, the PSK31 signal needs to be kept linear through
the transmitter. If you overdrive the transmitter the copy at the other end
will not suffer, but the band users either side might complain!

Note that the PSK31 program works in full duplex, so it can copy it's own
output. When operating on the air in simplex, if the receiver audio is
muted completely when you are transmitting, there will be no copy of your
own transmission on the main screen, only the small transmit window will 
show what you are sending. If the transceiver has some feed of transmitter
audio back to the receiver, then you will see your own transmitted text on
the main screen, so long as you are transmitting on the same tone frequency
as you are receiving. If your transceiver does not feed transmitted audio
back, you may like to set the /s option on the commandline so that the
receive-side is muted completely when you are transmitting and the
transmitted text is copied to the screen by software instead.

You are now ready to operate on the air, but first learn the functions of
the other F-keys:

F1 switches the transmitted and received code between BPSK and QPSK. On
this version the system starts on BPSK, and while QPSK is new, it is
recommended that you call CQ in BPSK and only switch to QPSK when you
know that the other station is equipped with QPSK and you are both tuned-in
correctly. The ASCII mode which was fitted to earlier versions of PSK31 is
no longer available on this version.

Alt-F1 sends a CQ call: 3 CQ's plus 3 callsigns on 3 lines. The callsign
is taken from the /c commandline parameter that you entered when you
started the program. The call ends with a CW ident using the same callsign.
If the CQ call is still scrolling across the transmit window, you can abort
it by pressing any key.

F2 has already been mentioned, and will force the receiver to switch between 
"muted" and displaying received text.

F3 controls the way that the transmitter frequency is set. As the
program starts the "NET ON" label is showing and the transmit tone frequency
is "netted" to the receiver frequency. Adjustment of the cursor keys will
change both frequencies together. When you switch to "NET OFF" by 
pressing F3, the transmitter frequency then stays fixed and is not affected
by any further change to the receiver frequency. To bring the transmitter
to the receiver frequency, press F3 again to set "NET ON". For most two-
way and multiway simplex contacts you will keep NET ON so that you will
always reply on the same frequency as you are called. You will only need to
switch NET OFF when intentionally working split frequency.

F4 enables or disables the AFC. The label "AFC OFF" changes to "AFC ON"
when you press F4. When the AFC is on, the receiver frequency will try to
follow any slow drift in the signal, but only if the DCD is on and only
if the transmitter is off, so the AFC will not try to follow your own
transmitter frequency if you have audio looped back. Note that if you have
NET ON as well as AFC ON, the transmitter frequency will track the drift
of the station you are working as the contact proceeds. This is fine in a
two-way contact or a multiway contact if everyone is copying everone else,
but be careful if you transmit after a station who cannot be heard by the
others, especially if he is drifting! The maximum error that can be corrected
at the start of a transmission is 7.8 Hz on BPSK and 3.9 Hz on QPSK. This is
another reason to start a QSO or a sked with BPSK and switch to QPSK when
contact has been established if required.

F5 has already been mentioned and switches between receive and transmit. A
short period of continuous phase-shifts is inserted as the transmitter
comes on, and a period of continuous carrier as it goes off, to switch on
and switch off the distant receivers. Note that if you type very fast, or
send a file from disk and then press F5, or use alt-F1 to call CQ, there
will be a delay while the stored text is sent to the transmit buffer before
the "TX ON" legend changes to "TX OFF" and a further delay while the
transmit buffer empties before the transmitter actually does go off.

F6 sends a CW ident. If the transmitter was on, it switches it off at the
end of the CW ident, so this key can be used instead of F5 at the end of a
transmission. Note how soft the keying is: it goes through the 31 baud
cosine filter too, and is narrower in bandwidth than most CW transmissions!

alt F6 switches the mode to MORSE. In this mode, CW can be sent from the
keyboard, but there is no CW receive-side. Press F1 to leave this mode.

F7 turns on/off the PC speaker, sounding a tone that is the same frequency
as the centre-frequency of the receiver. If you have a musical ear, you can
use this to help you to tune the main receiver dial until a weak signal
is close enough to to the PSK31 receiver passband for you to find it on the
tuning display or hear it in the right headphone. However, some PC speakers
are very distorted and the harmonics can make this difficult.

F8 turns on/off the logging of received text to a file called PSK31.LOG.
The label "LOG OFF" changes to "LOG ON" when you press this key. It will
also change back to LOG OFF by itself if there was a disk problem. The file
will be placed in the directory where the PSK31.EXE file is located.

F9 is used to send a text file to the transmitter. A prompt appears into
which you type a filename. The file is then transmitted and you will see
it scroll across the transmit window as it goes into the transmit buffer
in the EVM. The file will be searched-for from the current directory. To
abort sending of a file, press F9 then the ESC key.

F10 Exits the program back to DOS.

Notes:
   Loading PSK31.CLD via the OnCE port with EVM56K takes about 1
   minute, and it is a nuisance to have to swap the serial port cable.
   An alternative method, which does not need the OnCE cable, nor EVM56K,
   and only takes 1 second, is to fit the G3PLX BOOT rom. If this is
   installed, then just reset the EVM, fit the serial cable to the USER port,
   and add the parameter  /b  to the commandline. This tells PSK31 to load
   via the bootstrap. If you have a FLASH rom and are familiar with
   programming it, run the PLXBOOT.CLD program via EVM56K to make a copy
   of the G3PLX bootstrap, but remember that this will probably overwrite
   other programs that you may have in the FLASH ROM. The G3PLX bootstrap
   code may not be compatible with programs written by other people, and
   other bootstrap ROM code may not be compatible with PSK31.

   This program accesses the serial port hardware direct, and implements
   a hardware-driven interrupt handler. I can not guarantee that PSK31 will
   run in a multi-tasking environment such as WINDOWS, although several
   people have said that it does.



Background: The PSK31 philosophy.
===========================

PSK31 is the result of my belief that the present batch of "data" modes
have left a gap in amateur radio operating, the gap that was previously
filled by AMTOR or even traditional RTTY, in which two or more operators
chat to each other on an open channel. Modes such as packet radio, Pactor,
and others, are highly complex, are unsuited to multiway conversations, and
in particular, the long block lengths introduce an unacceptable delay in
the processing of text such that even normal conversation is unpleasant
and quick-break question/answer sessions are impossible. The move to
automated unattended message forwarding has left a gap in the person-to-
person communication field, and PSK31 is an attempt to remedy this situation
with a simple but efficient code structure coupled with the narrowest
possible bandwidth, and with only enough error-correction to match typical
typing-error rates, and with no time-consuming synchronisation, changeover,
and ARQ processes.

The 31 baud BPSK modulation system used in PSK31 was introduced by
SP9VRC in his SLOWBPSK program written for the EVM. Instead of the
traditional frequency-shift keying, the information is transmitted by
patterns of polarity-reversals (sometimes called 180-degree phase shifts).
This process can be thought of as equivalent to sending information by
swapping-over the two wires to the antenna, although, of course, the keying
is more usually done back in the audio input into the transceiver. A well-
designed PSK system will give better results than the conventional FSK
systems that amateurs have been using for years, and is potentially capable
of operation in much narrower bandwidths than FSK. The 31 baud data rate
was chosen so that the system will just handle hand-sent typed text easily.

There is a problem with PSK keying which doesn't show up with FSK,
and that is the effect of key-clicks. We can get away with hard FSK keying
at moderate baudrates without generating too much splatter, but polarity
reversals are equivalent to simultaneous switching-off of one transmitter
and switching-on of another one in antiphase: the result being keyclicks
that are TWICE AS BAD as on-off keying, all other things being equal. So if
we use computer logic to key a BPSK modulator such as an exclusive-or gate,
at 31 baud, the emission would be extremely broad. In fact it would be about
3 times the baudrate wide at 10dB down, 5 times at 14dB down, 7 times at 17dB
down, and so on (the squarewave Fourier series in fact)

The solution is to filter the output, or to shape the envelope amplitude of
each bit which amounts to the same thing. In PSK31, a cosine shape is used.
To see what this does to the waveform and the spectrum, consider transmitting
a sequence of continuous polarity-reversals at 31 baud. With cosine shaping,
the envelope ends up looking like full-wave rectified 31Hz AC. This not
only looks like a two-tone test signal, it IS a two-tone test signal, and
the spectrum consists of two pure tones at +/-15Hz from the centre, and no
splatter. Like the two-tone and unlike FSK, however, if we pass this through
a transmitter, we get intermodulation products if it is not linear, so
we DO need to be careful not to overdrive the audio. However, even the worst
linears will give third-order products of 25dB at +/-47Hz (3 times the
baudrate wide) and fifth-order products of 35dB at +/-78Hz (5 times the
baudrate wide), a considerable improvement over the hard-keying case. If
we infinitely overdrive the linear, we are back to the same levels as the
hard-keyed system.

There is a similar line of reasoning on the receive side. The equivalent to
"hard-keying" on the receive side is a BPSK receiver which opens a gate at
the start of a bit, collects and stores all the received signal and noise
during the bit, and then "snaps" the gate shut at the end. This process
gives rise to the receive-side equivalent of key-clicks, namely sidelobes
on the receiver passband. So, although this "integrate-and-dump" method is
100% efficient in the task of sorting out signal from noise, it will only
reject signals by 10dB at 3 times the baudrate wide and so on, the same
spurious rejection figures that we got as spurious emission figures for the
transmit side. The PSK31 receiver overcomes this by filtering the receive
signal, or by what amounts to the same thing, shaping the envelope of the
received bit. The shape is more complex than the cosine shape used in the
transmitter: if we used a cosine in the receiver we end up with some signal
from one received bit "spreading" into the next bit, an inevitable result
of cascading two filters which are each already "spread" by one bit. The
more complex shape in the receiver overcomes this by shaping 4 bits at a
time and compensating for this intersymbol interference, but the end result
is a passband that is at least 64dB down at +/-31Hz and beyond, and doesn't
introduce any inter-symbol-interference when receiving a cosine-shaped
transmission.

Note that the transmitter and receiver filters have to be "matched" to
each other for the ISI performance to be right. Some systems like this use
a pair of identical receive and transmit filters which are matched. If I
did this and someone else came along wanting to improve the performance,
they would have to get everyone else to change their transmit filters. I
have therefore chosen to use the simple cosine shape for the transmitter
and match that in the receiver. This leaves the way open for others to
develope better receivers without new transmitters being incompatible
with old. This is slightly different from the SP9VRC approach.

To summarise: PSK31 has been designed not only to give all the weak-signal-
in-white-noise advantages that PSK has to offer, but to go further and
optimise the performance in the presence of other signals, to reject them
on receive and not to interfere with them on transmit. PSK31 is therefore
ideally suited to HF use, and would not be expected to show any advantage
over the hard-keyed integrate-and-dump method in areas where the only thing
we are fighting is white noise and we don't need to worry about interference.

A separate issue is the one of information coding. This is covered fully
in the VARICODE.TXT file.


THE QPSK MODE
=============

In December 1997, PSK31 introduced the QPSK mode. In this mode, instead of
just keying by phase reversals, that is, 180-degree phase-shift, an
additional pair of 90 and 270 degree phase-shifts are possible. If you
thought of BPSK as reversing the polarity of the signal, then QPSK can be
thought of as two BPSK transmitters on the same frequency but 90 degrees
out of phase with each other. By thinking of the receiver as being two
BPSK demodulators at 90 degrees, we have two channels sharing the same
frequency, but of course, with only half the transmitter power in each.
We therefore have twice the bit-rate but at 3dB less signal-to-noise
ratio. We could use this feature to transmit data at twice the speed with 3dB
less noise margin.

The PSK31 philosophy is to stay at the speed needed to handle hand-keyed
text, so why do we condider QPSK at all? The answer is that we can use the
extra capacity to reduce the error-rate while keeping the bandwidth and the
traffic speed the same. Note that because we have a 3dB SNR penalty with
QPSK, any error-correction scheme we introduce has to be at least good
enough to correct the extra errors which result from the 3dB SNR penalty,
and preferably a lot more, or it will not be worth doing. By doing
simulations in a computer, and tests on the bench with a noise generator,
it has been found that when the bit error-rate is less than 1% with BPSK,
it is much better than 1% with QPSK and error-reduction, but when the BER
is worse than 1% on BPSK, the QPSK mode is actually worse than BPSK.
Therefore, if we are dealing with radio paths where the signal is just
simply very noisy, there is actually no advantage to QPSK at all!

However, all the tests we have done on the air show that QPSK with the
chosen error-reduction scheme is better than BPSK, except where we have
deliberately attenuated the signal to make it artificially weak. Typical
radio circuits are far from being non-fading with white noise. Typical radio
paths have errors in bursts rather than randomly spread, and error-reduction
schemes can give useful benefits in this situation in a way that cannot be
achieved by anything we can do in the linear part of the signal path. With
the code used in PSK31, a 5:1 improvement is typical, but it does depend on
the kind of path being used. For this reason it is worth keeping both modes
available and remembering that there may be times when one mode works better
than the other and others when the reverse will be the case.

When comparing PSK31 with other modes, remember that the switch between
"straight" and "error-corrected" modes in PSK31 is done with both the
bandwidth and the data-rate remaining the same. In most other systems
that can switch, either the bandwidth or the data rate changes when the
system switches, and the figures for error-rate improvement can be
misleading unless they are carefully compared.

The error-reduction code chosen is one of a type known as convolutional
codes. The code systems used in the past have been block codes, where
each character is a fixed-length code, and a fixed number of extra bits are
added to make a longer block, and this longer block is capable of correcting
errors within itself. These extended blocks are then transmitted as a serial
bitstream. In a convolutional code, the characters are converted to a
bitstream and then this bitstream is itself processed to add the error-
reduction qualities. There is no relationship between the boundaries between
characters and the error-reduction process. Since the channel errors
are also not related in any way to the character boundaries, convolutional
codes are better suited to serial links than block codes, which were
originally designed for protecting errors in memory banks and similar
structures.

It is not quite correct to refer to the convolutional code system
as "error-correcting", since the raw data is not actually transmitted in
it's original form and therefore it makes no sense to talk about it being
corrupted by the link and corrected in the decoder. In PSK31, the raw data
is transformed from binary (1 of 2) to quaternary (1 of 4) in such a way
that there is a precisely known pattern in the sequence of quaternary
symbols. In the code used in PSK31, the pattern of quaternary symbols is
derived from a run of 5 consecutive data bits. For example, if we label the
four phase-shifts as A, B, C, and D, and suppose that the transmitter sends
continuous A's when the raw datastream is sending continuous 0's. Because
the convolutional encoder works on a run of five bits, when the datastream
sends ..000010000..., the transmitter actually sends ...AAAADCCBDAAAA...,
that is, each binary bit to be transmitted results in a unique 5-symbol
sequence, overlapping with the sequences from adjacent bits, in a
predictable way which the receiver can use to estimate the correct sequence
even in the presence of corruptions in parts of the sequence.

The decoder, known as a Viterbi decoder after the man who thought of it,
is not really a decoder at all, but a whole bank of parallel encoders, each
fed with one possible "guess" at the transmitted data sequence. The outputs
of these parallel encoders are all compared with the received symbol-stream.
Each time a new symbol is received, the encoders need to add an extra bit to
their sequence guesses and consider that the new bit might be a 0 or a 1.
This doubles the number of sequence guesses, but a clever technique allows
half of all the guessed sequences to be discarded as being less likely than
the other half, and this means that the number of guesses being tracked
stays constant. After a large number of symbols have been received, the
chances of a wrong guess at the first symbol tends to zero, so the decoder
can be pretty sure that the first bit was right and it can be fed to the
output. In practice this means that the decoder always outputs decoded data
bits some time after they have been received. This delay in PSK31 is 20 bits
(640mS) which is long enough to make sure that the decoder has done a
good job, but not so long that it introduces an unacceptable delay in
displaying the received text.

The source code which you may have with this distribution is freeware,
provided it is used only for amateur purposes. If you have suggestions for
improvements, or you find bugs, please report them back to me and do not
broadcast your own modifications or bug-fixes.

Peter Martinez G3PLX
High Blakebank Farm
Underbarrow
Kendal
Cumbria LA8 8BN
United Kingdom

peter.martinez@btinternet.com
