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):


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.


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!