BPSK Transmitter
BPSK Transmitter
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 ([email protected]) 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 ([email protected]) 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.
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.
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 ([email protected])
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 [email protected]
and to [email protected] 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!