Register Account

Login Help

PSK31 Spec


PSK31 is a digital communications mode which is intended for live keyboard-to-keyboard conversations, similar to radioteletype. Its data rate is 31.25 bauds (about 50 word-per-minute), and its narrow bandwidth (approximately 60 Hz at -26 dB) reduces its susceptibility to noise. PSK31's ITU emission designator is 60H0J2B. It uses BPSK modulation without error correction or QPSK modulation with error correction (convolutional encoding and Viterbi decoding). In order to eliminate splatter from the phase-reversals inherent to PSK, the output is cosine-filtered before reaching the transmitter audio input. PSK31 is readily monitored and the most popular implementation uses DSP software running on a computer soundcard inside an IBM PC-compatible computer.

There is a preamble at the start of each transmission and a postamble at the end. The preamble is an idle signal of continuous zeroes, corresponding to continuous phase reversals at the symbol rate of 31.25 reversals/second. The postamble is just continuous unmodulated carrier, representing a series of logical ones. This makes it possible to use the presence or absence of the reversals to squelch the decoder so that the screen doesnt fill with noise when there is no signal.


Different characters are represented by a variable-length combination of bits called Varicode. Because shorter bit-lengths are used for the more common letters, Varicode improves efficiency in terms of the average character duration. Varicode is also self- synchronizing: No separate process is needed to define where one character ends and the next begins, since the pattern used to represent a gap between two characters (at least two consecutive zeroes) never occurs in a character. Because no Varicode characters can begin or end with a zero, the shortest character is a single one by itself. The next is 11, then 101, 111, 1011, and 1101, but not 10, 100, or 1000 (because they end with zeroes), and not 1001 (since it contains two consecutive zeros). This scheme generates the 128-character ASCII set with ten bits.

The Varicode character set is shown following, starting with NUL and ending with DEL. The codes are transmitted left bit first, with 0 representing a phase reversal on BPSK and 1 representing a steady carrier. A minimum of two zeros is inserted between characters. Some implementations may not handle all the codes below 32. Note that the lower case letters have the shortest patterns and so are the fastest to transmit.

The Varicode Character Set


NUL 1010101011 DLE 1011110111
SOH 1011011011 DCI 1011110101
STX 1011101101 DC2 1110101101
ETX 1101110111 DC3 1110101111
EOT 1011101011 DC4 1101011011
ENQ 1101011111 NAK 1101101011
ACK 1011101111 SYN 1101101101
BEL 1011111101 ETB 1101010111
BS 1011111111 CAN 1101111011
HT 11101111 EM 1101111101
LF 11101 SUB 1110110111
VT 1101101111 ESC 1101010101
FF 1011011101 FS 1101011101
CR 11111 GS 1110111011
SO 1101110101 RS 1011111011
SI 1110101011 US 1101111111
SP 1 C 10101101
! 111111111 D 10110101
" 101011111 E 1110111
# 111110101 F 11011011
$ 111011011 G 11111101
% 1011010101 H 101010101
& 1010111011 I 1111111
101111111 J 111111101
( 11111011 K 101111101
) 11110111 L 11010111
* 101101111 M 10111011
+ 111011111 N 11011101
, 1110101 O 10101011
- 110101 P 11010101
. 1010111 Q 111011101
/ 110101111 R 10101111
0 10110111 S 1101111
1 10111101 T 1101101
2 11101101 U 101010111
3 11111111 V 110110101
  W 101011101
4 101110111 X 101110101
5 101011011 Y 101111011
6 101101011 Z 101111011
7 110101101 [ 1010101101
8 110101011 \ 111110111
9 110110111 ] 111101111
: 11110101 ^ 111111011
; 110111101 _ 1010111111
< 111101101 . 101101101
= 1010101 / 1011011111
> 111010111 a 1011
? 1010101111 b 1011111
@ 1010111101 c 101111
A 1111101 d 101101
B 11101011 e 11
f 111101 s 10111
g 1011011 t 101
h 101011 u 110111
i 1101 v 1111011
j 111101011 w 1101011
k 10111111 x 11011111
l 11011 y 1011101
m 111011 z 111010101
n 1111 { 1010110111
o 111 | 110111011
p 1111111 } 1010110101
q 110111111 ~ 1011010111
r 10101 DEL 1110110101


The QPSK mode reduces the error-rate while keeping the bandwidth and the traffic speed the same. There is a 3-dB SNR penalty with QPSK, because the same transmitter power is being shared by twice the signals. Therefore, the error-correction scheme has to be at least good enough to correct the extra errors which result from the 3 dB 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!

On-the-air testing shows that QPSK with the convolutional coding for error-reduction is usually better than BPSK, except where the signal was deliberately attenuated 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 which can be done in the linear part of the signal path. With the convolutional coding used in PSK31, a 5:1 improvement is typical, but it does depend on the kind of path being used. There may be times when one mode works better than the other, and other times when the reverse will be the case. The switch between straight BPSK and error-corrected QPSK modes in PSK31 is done with both the bandwidth and the data-rate remaining the same. Contacts tend to start on BPSK and change to QPSK if both stations agree. Although both stations have to be using the same sideband in QPSK, it doesnt matter for BPSK.


Convolutional coding is used to reduce errors in the QPSK mode. In a convolutional code, the characters are converted to a bitstream and then this bitstream is itself processed to add the error-reduction qualities. Since the convolutional code used in PSK31 doubles the number of data bits, it is a natural choice for the QPSK mode which provides double the bit-rate available with BPSK. The convolutional encoder generates one of the four phase-shifts, not from each data bit to be sent, but from a sequence of them. This means that each bit is effectively spread out in time, intertwined with earlier and later bits in a precise way. The more spread out, the better will be the ability of the code to correct bursts of noise, but too great a spread would introduce an excessive transmission delay. A time spread of 5 bits was chosen.

It is not quite correct to refer to the convolutional code system as error-correcting since the raw data is not actually transmitted in its 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, each quaternary symbol transmitted is derived from a run of 5 consecutive data bits. This means that each binary bit to be transmitted generates a 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 Convolutional Code

The left columns in the following table contain the 32 combinations of a run of five Varicode bits, transmitted left bit first. The right columns are the corresponding phase shifts to be applied to the carrier, in degrees. A continuous phase advance is the same as an HF frequency shift.


00000 180   01000 0   10000 +90   11000 -90
00001 +90 01001 -90 10001 180 11001 0
00010 -90 01010 +90 10010 0 11010 180
00011 0 01011 180 10011 -90 11011 +90
00100 -90 01100 +90 10100 0 11100 180
00101 0 01101 180 10101 -90 11101 +90
00110 180 01110 0 10110 +90 11110 -90
00111 +90 01111 -90 10111 180 11111 0

For example, consider the space symbol--a single 1 preceded and followed by character gaps of five zeroes each: 00000 100000. Overlaying a five-bit-wide window on 00000100000, and sliding it from left to right (one bit at-a-time) is illustrated in the following table.


0 0 0 0 0 1 0 0 0 0 0 Phase°
0 0 0 0 0               180
  0 0 0 0 1             +90
    0 0 0 1 0            90
      0 0 1 0 0          90
        0 1 0 0 0         0
          1 0 0 0 0     +90
            0 0 0 0 0   180

Representing 00000100000 would be the successive run-of-five groups 00000, 00001, 00010, 00100, 01000, 10000, 00000. This results in the transmitter sending the QPSK pattern 180, +90, 90, 90, 0, +90, 180. Note that a continuous sequence of zeros (the idle sequence) gives continuous reversals, the same as BPSK.


Viterbi decoding is used on the receiving side. It consists of 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. The one-way delay in PSK31 is 25 bits (800 ms) 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 official PSK31 Website is operated by Eduardo Jacob, EA2BAJ. The PSK31 software program may be downloaded from this site.

Steve Ford, WB8IMY, PSK31--Has RTTYs Replacement Arrived? QST, May 1999, pp 41-41.

Peter Martinez, G3PLX, PSK31: A New Radio-Teletype Mode, Radio Communication, December 1998 and January 1999.

PSK31 Gets Raves, The ARRL Letter, Vol. 18, No. 7, February 12, 1999.


This technical description was prepared by Steven L Karty, N5SK.


Donate Now


Instragram     Facebook     Twitter     YouTube     LinkedIn