BPSK Basics
What is BPSK?
Transmitting BPSK
Tuning in a BPSK signal
Receiving BPSK with COHERENT
Bandwidth Considerations
SYNC and GRAB settings
TRACE mode
Miscellaneous notes on COHERENT
Glossary of BPSK terms
Binary Phase Shift Keying (BPSK) is a modulation technique that has proven to be extremely
effective for LowFER and MedFER operation, as well as for amateur HF work. It's very simple to
implement, yet it can allow reception of signals that are too weak to be detected by ear. Max
Carter and Bill de Carle were instrumental in bringing this technology within reach of the average
experimenter. In this article I'll attempt to provide a supplement to what Max and Bill have
already written on the subject.
What is BPSK?
General textbooks on communication techniques usually include a description of various forms
of Phase Shift Keying (PSK) and a performance comparison with other modulation techniques.
Unfortunately, I don't know of a specific reference text or article on BPSK that is readily available
through local libraries. A good description of BPSK as applied to operation in the 1750- meter
"LowFER" band is contained in an article by Max Carter entitled "Super Narrowband Techniques
Equalize Power Inequity on 1750 Meters". The article appeared in Communications Quarterly for
November, 1990, pages 99 through 113. Max describes how BPSK works and gives details on
hardware implementations for sending and receiving it.
In BPSK modulation, the phase of the RF carrier is shifted 180 degrees in accordance with a
digital bit stream. The digital coding scheme used is called NRZ-M. A "one" causes a phase
transition, and a "zero" does not produce a transition. That way you
don't have to worry about the polarity of the signal. The receiver performs a differentially
coherent detection process, in which the phase of each bit is compared to the phase of the
preceding bit. Better performance can be obtained with fully coherent PSK, but that requires an
absolute phase reference at each end, and no phase variations in the propagation path. Pretty
hard to achieve, even on LF. Because the output of the receiver's coherent detector swings from
+V to -V when there's a phase transition, rather than from +V to zero in the case of on-off keying,
BPSK offers a 6-dB advantage in signal-to-noise ratio over on-off keying for a given carrier level.
The hardware needed to transmit BPSK can be as simple as a stable frequency source followed
by an exclusive-OR gate to produce 180 degree shifts in the carrier phase. The receiving
hardware used to be pretty complicated, but now all it takes is a "sigma delta" (S-D) board and
the COHERENT software from Bill de Carle, VE2IQ. The COHERENT software, Bill de Carle's
utility software and the circuit diagrams I refer to below are all available free at Bill de Carle's BBS. Bill also sells S-D kits at little more than the cost of the parts. The S-D board takes the 800-Hz audio output of the receiver and performs analog to digital conversion, feeding the result as a serial bit stream to the computer's serial port. COHERENT software takes it from there. A 12-MHz PC AT will run the earlier versions of COHERENT. However, the most recent AFRICA software does require a Pentium-class processor.
There is another implementation of BPSK which uses a Motorola DSP board (in combination
with a computer) to receive and generate BPSK signals. I don't know many details other than
that Johan Forrer, KC7WW (forrerj@peak.org) has been using it with good success on the HF
ham bands.
One requirement of BPSK is that the transmitter and receiver have to be in very close frequency
agreement. For the 1-baud and 10-baud BPSK used by LowFERs, 1-Hz or better accuracy is
needed for best results. On the HF bands we find that higher baud rates actually work better
because of the rapid phase fluctuations in the received signal, and 40-baud BPSK has become
sort of a default speed. At that speed the frequency accuracy requirements are much less
stringent, although we still try to stay within 1 Hz. This seems like a very difficult requirement to
meet, but many of us are using IC-706 transceivers with very good results. It's best to have the
temperature stabilized crystal oscillator option, although I get by with a "stock" IC-706 even on
20 meters. BPSK operation on the ham bands has primarily been on 3.591, 7.081, 14.081 and
18.081 MHz. Subscribe to the BPSK reflector (bpsk@qth.net) for the latest news.
Transmitting BPSK
Most LowFER and MedFER BPSK beacons use very simple transmitters which have a
temperature stabilized crystal oscillator in the HF range, followed by a CMOS IC divider circuit,
an exclusive-OR modulator and a simple homebrew final amplifier. The diagram below shows an example of a BPSK modulator for the "Simple LowFER Transmitter". Before going any further, I want to make the following disclaimer: This type of modulator is OK for flea-power LowFER and MedFER transmitters, but should not be used on the ham bands because it produces some very bad "key clicks" as mentioned below.
The 180-degree phase shift modulation is achieved by feeding the BPSK output of the
computer or the VE2IQ keyer to one input of an exclusive-or gate, and the
RF signal from the exciter to the other input. Pin 1 of a 74HC86 receives the BPSK keying
signal, and pin 2 is the RF input. When used with the simple LowFER
transmitter, the RF input would come from pin 5 of the 74HC4060 divider.
Only two wires are needed between the computer's serial port and the
modulator. The BPSK output appears on the request-to-send (RTS) line,
which is pin 4 on a DB-25 connector or pin 7 on a DB-9 connector. The
ground connection for the computer serial port is pin 7 on a DB-25
connector or pin 5 on a DB-9. Resistor R1 is included to limit the input
swing (in combination with the internal gate-protection diodes in the
74HC86) so the circuit can be driven from either the computer's +/- 12
volt RS-232 signal or the VE2IQ keyer. When pin 1 of the 74HC86 is low,
the gate acts as a non-inverting buffer; when pin 1 is high, the gate
acts as an inverter. This is all that's needed to provide the necessary
180 degree phase-shift modulation. The output of the first gate (pin 3)
is fed to the three remaining gates of the 74HC86, which are wired as
non-inverting buffers. The three gates in parallel have more than enough
drive capability for the complementary-pair final. As in the original
circuit of the simple LowFER transmitter, a 180 ohm resistor should be
placed between the driver and final to limit the drive current. The value of the bypass capacitor from pin 14 of the 74HC86 to ground is not shown on the diagram because it is not at all critical. I typically use 0.1 uF or 0.22 uF monolithic ceramic capacitors for this purpose.
With a typical ham SSB transceiver, all you need to do is to feed a BPSK-modulated audio
signal to the transmitter input. The audio signal does not have to be at any specific frequency, as
long as it is stable and accurate. In my early HF BPSK experiments, I took the 1800-Hz square-
wave output of the 4060 divider chip on the S-D board, filtered it to produce a sine wave, and fed
it through a homebrew audio double balanced mixer to generate BPSK. The transceiver was
operated in the "split" mode; receiving in CW and transmitting LSB at a "carrier" frequency 1.800
kHz above the desired transmitting frequency. When using BPSK on the ham bands, it's
necessary to take steps to reduce the "key clicks" resulting from the phase transitions. This can
be done by passing the modulated audio signal through a bandpass filter before applying it to the
transmitter input. In my case, a low-pass filter in the digital keying line going into the double
balanced mixer achieved the same result by controlling the rise and fall times. An interesting
note: Intuitively, it would seem that the key clicks could be removed by making sure the phase
transitions occur at the zero-crossing points of the audio waveform. But it doesn't work that way.
The abrupt 180-degree phase transitions will cause "clicks" no matter where in the waveform
they take place.
Later versions of COHERENT can use the computer's sound card to generate a
nice, shaped, 800-Hz BPSK waveform. Some sound cards work; some don't. Bill de Carle has
also designed a companion circuit for the S-D board called the S-D DAC, which does the digital
to analog conversion, wave shaping and filtering to put out a clean 800-Hz BPSK signal. That
eliminates the problem of compatibility with the many versions of sound cards. A schematic for
the SD-DAC is available on Bill's Web site, and he also sells complete kits of parts. For LowFER
or MedFER beacon operation, Bill de Carle's EPROM-based identifier circuit is the simplest way
to generate the BPSK identifier. Simultaneous outputs are available for CW and for BPSK with
and without error-tolerant (ET) coding.
Tuning in a BPSK signal:
To receive BPSK, the receiver must be tuned precisely to the signal, so that the audio output
frequency is exactly 800 Hz. The best type of receiver to use is one which can tune and display
the frequency in one-Hz steps, which uses a single reference for all internal oscillators, and
which has a BFO adjustment that allows the CW pitch to be set to exactly 800 Hz. An IC-706
with the high-stability oscillator option has become popular among BPSK enthusiasts. Others like
Bill de Carle have used older rigs with a precise external reference oscillator in place of the one
built into the rig.
It is possible to tune in BPSK signals on receivers that don't have any of the desirable features
described above. My earliest BPSK reception efforts were with an ICOM IC-751A, which tunes in
10-Hz steps, displays frequency only to the nearest 100 Hz, and doesn't even have a BFO pitch
control. However, it does have an externally accessible "calibrate" control that fine tunes the
reference oscillator. To receive BPSK beacon "MAX", which at the time was transmitting on
175.250 kHz, I would set a stable signal generator to MAX's exact frequency, then tune the
receiver until the audio output was zero beat with an 800-hz reference signal. That was before
Bill de Carle came up with the "TUNER" utility, which makes it easier to set the receiver output to
exactly 800 Hz.
If a synthesized receiver or transceiver derives all of its internal frequencies from a common
reference, you can expect the frequency offset to be a constant percentage of the operating
frequency. Then it is only necessary to tune to a signal on any precisely known frequency to find
the offset (if any), and determine a correction factor to be applied to other frequencies. Here's
how I do it with my IC-706, which has neither the high-stability option or a reference frequency
adjustment: With the receiver in the CW mode, and running Bill de Carle's TUNER utility, I find
the frequency setting needed to center the TUNER indicator while listening to WWV at 10 MHz.
The last time I checked, the displayed frequency was 10.000.014 MHz; an offset of +14 Hz. The
correct setting for operation on 3.591 MHz would be an offset of 14 * 3.591 / 10 = 5 Hz. On LF,
the offset is only 0.26 Hz, so no correction is applied.
On LF, one way to get around the problem of coarse tuning steps in a receiver is to use an
upconverter with a fine-tuning adjustment on the crystal local oscillator. The oscillator can be
adjusted by tuning to a known LF reference such as WWVB on 60 kHz. Most NDBs are not
precise enough for use as an accurate frequency reference.
Receiving BPSK with COHERENT
The documentation provided with the COHERENT software covers all of the details of operation.
However, there are a lot of features and options which can make it a bit daunting to get things
running the first time. These notes are not intended as a substitute for reading the COHERENT
documentation, but as an aid to avoiding some common pitfalls. Much of what is said below is
redundant if you've studied the documentation carefully, although it sometimes helps to read
something twice. Here's an attempt to walk through the requirements for a typical operation like
trying to catch a distant LowFER beacon.
If you're a Windows user, the best advice for running COHERENT under Windows (even under
the MS-DOS prompt in Windows 3.1) is: "Don't!" COHERENT may sorta run under Windows 95.
(So far I've successfully evaded WIN 95 and can't speak from personal experience.) To avoid
problems, exit from Windows completely, and in the case of Windows 95, re-boot into DOS
mode. I understand that the procedure is to hit the F8 key during the boot process when "Starting
WIN 95" appears on the screen, then choose Option 6.
In order to receive BPSK signals, the receiver must be tuned to the exact frequency of the signal, and the COHERENT software must be set to the speed and error-correcting mode being transmitted. There is no way except trial and error to analyze the signal "on the fly" to determine whether it's MS25, MS50, MS100, etc., or if the coding is ASCII, ET 1 or ET 2. A trained ear might help in making an educated guess if the signal is strong enough; a luxury we rarely have on the LowFER band. Anyone who has tried the trial and error technique to lock on to a weak BPSK signal will agree that there are better ways to spend your time. That's why it is important to have up-to-date information on the frequency, speed and mode of LowFER BPSK signals. If you want to receive LowFER BPSK signals, subscribe to the lowfer reflector (lowfer@qth.net) and keep checking the Longwave Message Board for station schedule updates. For BPSK beacon operators, it is even more important to make sure that messages are sent to lwcanews@aol.com and to lowfer@qth.net if there are any changes to the beacon. Otherwise you are wasting your time because nobody will "hear" your signal!
We'll assume that the receiver is properly tuned, and that correct operation of the S-D board has
been verified using the TUNER utility or one of the FFT spectral display programs. We'll also
assume that the S-D board is connected to the COM2 serial port and that you want to receive at
MS25. (Defaults are COM1, MS100 if you don't enter anything on the command line.) The
command to start COHERENT with these settings would be (case insensitive):
COHERENT COM2 MS25
You can include other parameters on the command line, but the only one that's necessary is the
COM port setting, and then only if it is other than COM1. Everything but the COM port can be
changed by entering commands or using the mouse while COHERENT is running. After hitting
ENTER, the COHERENT display should come up on the screen. The screenshot below shows
what you would see if you had successfully synced on MedFER beacon "MIN" while it was
sending at MS25, ET1.
Here is what was done to get to this point: The COM port and speed were set on the DOS
command line, so no change was required after the program started. In the upper left corner of
the screen, just under the version number of COHERENT (I happened to be using v7.3b at the
time), there is a verification that we are set for COM2 and MS25. I toggled ET1 on by clicking the
left mouse button on the asterisk just to the right of where the screen says "ET1 ON". (When the
program first came up, the display said "ET1 OFF".) An alternative to using the mouse is to hit
the ESCAPE key to bring up the command mode, then type ET 1, followed by the ENTER key.
When entering commands with number arguments like ET 1, ET 2, or SYNC 30, it is necessary
to put a space between the command and the number. However, when changing the speed, you
do NOT use a space. For example, MS50, not MS 50 !! If you enter MS 50 (with a space),
COHERENT will dutifully show MS 50 in the status screen, but the speed will return to the default
value of MS100.
If the S-D board is connected to the correct COM port and is working, the "MARK Ampl:" and
"SPACE Ampl:" status indicators should show some numbers that vary with time, even if no
receiver is connected or if the receiver gain is turned all the way down. As you increase the
audio input to the S-D board, the numbers should get larger, and eventually the "AUTOTRACK"
indicator will start to flash the "CLIPPING" message. The receiver gain should be set at the point
where the CLIPPING indication flashes only occasionally. Now we need to tell COHERENT to try
to sync on the incoming signal -- it won't initiate the sync process by itself. A shortcut has been
provided to toggle the SYNC function on and off, which is very useful in multiple-party contacts.
Just hit the END key (not the one on the number pad, unless NUMLOCK is turned off). The
SYNC indicator should begin flashing, and characters should begin printing on the screen
immediately (unless you've synced to a strong station that's sending nothing but ASCII NUL
characters or spaces). Garbage characters will print even if no receiver is connected. However,
when you hit the ESCAPE key and bring up the command summary at the bottom of the screen
(as I had done in the screenshot above), printing of received characters is suspended until you
get out of the command mode.
If SYNC is flashing, the command summary is not visible, and still nothing is printing, check to
make sure that the MARK and SPACE amplitude fields aren't blank. They could be blank for
several reasons such as: S-D board got disconnected, lost power, or quit working. Or you might
simply have inadvertently entered the transmit mode. This can happen if you accidentally hit
almost any key on the keyboard. COHERENT automatically goes into transmit mode when you
start typing, and if the HANG function is ON (the default condition), it will stay in transmit mode
indefinitely. This is a convenient feature for two-way conversations, and keeps the transmitter
from switching off every time the output buffer is empty. However, if MUTE is ON (also a default
condition), the receive function is suppressed during transmit to keep from printing garbage on
the screen. You can exit from the transmit mode by entering a pound sign (#) with nothing else
following it, or by toggling HANG to OFF, either with the mouse or by hitting ESCAPE and
entering the HANG command. When HANG is OFF, COHERENT will exit from the transmit
mode as soon as the output buffer is empty (shown on the screen as OBUF: 0). In the most
recent versions of COHERENT, OBUF flashes to provide a visual indication that you are in the
transmit mode.
SYNC and GRAB settings
For very weak signals it can take a long time to achieve sync and start printing anything
intelligible. The default sync setting is SYNC(nothing) which will try to sync forever. When the
signal is fading, or if the beacon is sending alternating BPSK and CW, it may help to use a
shorter sync interval such as SYNC 30 (30 seconds). Determining optimum settings for the
frame grabber feature is also a matter of experience. The run length is fixed by the transmitter
identifier, but the number of historical samples can be set to any value (up to a certain point).
Generally, larger numbers give better results, but it doesn't help to use a "GRAB depth" (number
of samples) so large that the signal must be present forever for it to work. On MF, where signals
fade rapidly, GRAB depths of 3, 5, or 7 might be optimum at MS100, and larger numbers such
as 15 are worth a try at MS25. LF skywave signals fade much more slowly (groundwave signals
shouldn't fade at all) and it's possible to benefit from GRAB depths of 31 or greater even at
MS100. Odd numbers are preferred for the GRAB depth settings to avoid "tie votes" within
COHERENT.
Once sync is achieved and an intelligible message starts to appear on the screen, it is advisable
to toggle SYNC off by hitting the END key. This keeps COHERENT from trying to "improve"
things after it has already found the correct startbit phase. However, if the signal seems to drift
out of sync after a while, it may mean that the clocks at the transmitter and receiver are in
serious enough disagreement that COHERENT can't follow them. In that case, it may be
necessary to leave SYNC running all the time with a value like SYNC 30. I've also found that the
startbit phase may appear to jump around while receiving BPSK signals at rates of MS25 and
higher (that is, smaller numbers for the MS parameter). Once sync has been established,
increasing the time constant parameter from the default TC: 4 (4 seconds) to something like TC:
10 or TC: 20 should result in more stable operation. To vary the time constant, click the left
(increase) or right (decrease) mouse button on the asterisk next to the TC parameter.
Sometimes a repeated pattern of strange characters will appear on the screen. This isn't unusual
when using very large GRAB depths, because COHERENT is struggling desperately to find a
repeated pattern even if only noise is coming in. However, it's also possible for COHERENT to
lock on to the wrong startbit phase under certain conditions. If you think this is happening, turn
off SYNC and step through all possible startbit phases manually (using the up and down arrows
or the mouse buttons) to see if the correct pattern emerges. Sometimes it helps just to turn
SYNC off and back on.
Bandwidth Considerations
Because the COHERENT software performs a DSP filtering function with the optimum bandwidth
for the baud rate being received, it theoretically doesn't need any "help" from external filters. In
an ideal world where there is only white, Gaussian noise, this is probably true. There should be
little difference in copying an MS100 BPSK signal with a receiver bandwidth of 200 Hz or 2000
Hz. However, in real life we have to contend with carriers, modulation sidebands, and other
forms of interference that you might find almost any place in the radio spectrum. Even if
COHERENT could perform a perfect filter function that rejects all interference outside the
required passband, there could still be problems if the receiver IF bandwidth is too wide. Any
interfering signal within the IF passband can cause the receiver's automatic gain control (AGC)
circuit to reduce the sensitivity. In many receivers like the IC-706, the AGC cannot be turned off.
And without AGC, at some point the receiver's audio dynamic range will be exceeded if the
interfering signal is strong enough. The S-D board also has a dynamic range limitation, and the
DSP filtering action in COHERENT does not provide complete attenuation of signals outside the
desired passband. For this reason it usually helps to use some form of filtering ahead of the S-D
board. The general rule for receiving other kinds of signals applies to BPSK as well. If filtering is
needed, it should be as close to the "antenna end" of the receiver as possible.
To pass the main "lobes" of a BPSK signal, you need a bandwidth in Hz at least equal to the
baud rate. The baud rate is simply 1000 divided by the bit period in milliseconds, so for example
MS25 = 40 baud. There is considerable signal energy outside this passband, and if you use a
filter bandwidth of 100 Hz on a 40-baud BPSK signal, you are throwing away some of the signal
energy. However, you are reducing the noise energy as well. The optimum receiver bandwidth
will depend on what kind of "noise" is present. If there happens to be an interfering carrier near
by, the optimum bandwidth will be much narrower than it would be with only a background of
atmospheric noise.
My IC-706 has only the standard wide (2.3 kHz) and the narrowest available (250 Hz) CW filters.
That doesn't provide a lot of data points for filter experiments. However, I usually find that the
250 Hz filter is clearly best at keying speeds up to MS25. During tests of the TEXAS LowFER
beacon at speeds varying from MS100 to MS5, the break-even point for me seemed to be
someplace around MS10 (100 baud). At that point, it was hard to tell much difference between
the copy with 250 Hz and 2.3 kHz bandwidth. The wide bandwidth worked better at MS5.
TRACE mode
The TRACE feature of COHERENT is invaluable when trying to dig a very weak signal out of the
noise. After toggling TRACE on with the mouse or via the command sequence, COHERENT will
keep a log for several hours (up to 14 at MS100) showing everything that appeared on the
screen. Sure beats sitting up all night staring at garbage characters. A side benefit is that the
monitor can be turned off, eliminating a potential major noise source. At the end of the session,
make sure that you turn off the TRACE mode or exit COHERENT gracefully (with the Quit
command, rather than by turning off the computer) so that the TRACE file will be saved properly.
TRACE files are stored in the same directory where the COHERENT program is located, and are
given a sequential number extension. Examples are TRACE.015; TRACE.016, etc. The trace
files are plain ASCII text and can be viewed with almost any word processor or text editor. Time
stamps are provided at the beginning of each line so you can tell exactly when the signal came
up out of the noise. Bill de Carle's SEARCH utility will scan a trace file for a particular identifier
string and report how many times the string appears. The most recent versions of COHERENT
also generate a BLOCK file while in the TRACE mode, which gives a binary record of the input
data. BLOCK files have the same sequential number extensions as their corresponding TRACE
files. A utility called COHPLAY will analyze the BLOCK file and search for a particular identifier
after the fact, with variable settings for the GRAB and SYNC parameters. Even if your initial
settings were way off, you may still be able to find the signal in the noise. COHPLAY reports the
number of "hits" for each combination of GRAB and SYNC, which is very useful for estiminating
the optimum settings during your next "listening" session.
Miscellaneous notes on COHERENT
It isn't necessary to enter complete command words. All it takes are enough characters so that
there is no ambiguity about which command is being used. Only one command starts with the
letter "G", and that's all you need to enter for the GRAB command. SYNC can be SY; Quit can
be Q, etc.
The first half of the bottom line in the status screen contains control information (VFO, Amp and
Gain) for a dedicated LowFER BPSK receiver called the MAX800 designed by Max Carter. If you
have one of those receivers, you know what the settings mean. Otherwise, ignore them.
Unlike RTTY, COHERENT supports almost all keyboard characters (upper and lower case). If
you are transmitting and can type fast enough to keep the transmit buffer from getting empty,
using the backspace key will let you correct typing mistakes and nobody else will ever know. But
if the erroneous characters have already been transmitted, the receiving operator will see them
get deleted and replaced. Kind of eerie to watch. "The moving finger writes, and having writ,
backspaces?"
Glossary of BPSK terms
MS100, etc. -- Refers to the keying speed by giving the length of a bit period in milliseconds.
MS100 is 100 milliseconds per bit or 10 baud; MS25 is 25 milliseconds per bit or 40 baud.
Frame grabber or GRAB -- For repeated messages like beacon identifiers, the COHERENT
software will look at multiple repetitions of the ID cycle and choose the most likely characters.
Very useful for digging weak signals out of the noise. Two parameters associated with the frame
grabber are the run length (number of characters before the message repeats) and the depth, or
number of historical samples averaged. For example, beacon TEXAS has a run length of 6
characters (don't forget to count the "space"), and if you wanted to average over the previous 15
repetitions, the setting would be GRAB 6:15.
ET -- Error tolerant coding, which adds error-correcting bits to the normal 10-bit ASCII character
codes (7 data bits plus one start bit and two stop bits). ET1 adds 6 error-correcting bits for a total
of 16 bits per character, and ET2 adds 17 bits for a total of 27 bits per character. "No ET" refers
to straight ASCII without error correction. Besides the obvious advantages of error detection and
correction, the ET modes in COHERENT have a much more robust character synchronization
algorithm. With straight ASCII, COHERENT looks for a "110" pattern of stop and start bits.
Unfortunately, this pattern may occur within the data bits as well, and this makes it difficult to
detect the correct "startbit" phase. In the ET modes, COHERENT looks at the number of bit
errors that would have to be corrected to turn the data into valid character combinations. Under
noise-free conditions, only one startbit phase results in zero bit errors. All others give very large
numbers of errors if the sync function is performed over many characters.
Conclusion
This has been a very long "introduction" that probably makes BPSK operation
sound much more complicated than it really is. The best way to check it out is to build an S-D
board, download COHERENT, and start trying for those weak signals!