Adding a Bodnar GPS Disciplined Oscillator to a KiwiSDR

With the release of WSJT-X 2.3.0 in September 2020, Steve Franke K9AN, Bill Somerville G4WJS, and Joe Taylor K1JT included a two new digital protocols called FST4 and FST4W. These two digital modes are the next evolution in low-power and long distance digital communications. These modes use four-level Gaussian frequency-shift keying (4-GFSK) modulation, which has smooth transitions between the four tones. This modulation is a bit easier to decode than regular WSPR, which uses 4-FSK modulation that has abrupt tone changes.

FST4 is designed for keyboard-to-keyboard QSOs (similar to FT8), and FST4W is designed for beacon transmissions like the regular WSPR protocol that we use for picoballoons. The time periods for a single transmission are 120, 300, 900, and 1800 seconds, with longer periods requiring less SNR for decoding.

In Spring 2022, Rob Robinett AI6VN included FST4W decoding in Version 3.0 of the wsprdaemon software, which is what I run for WSPR decoding at my home in San Francisco and in Inuvik, NWT. That's cool, I thought. I can just "check the box" in the configuration file and start decoding this new mode. Since the FST4W frequencies are very close to the WSPR frequencies, the same audio file that is used for WSPR decoding can also be passed to the FST4W decoder. Another KiwiSDR channel is not needed.

At that time, there were a handful of stations across the United States transmitting this new mode. And with my receiver at home in San Francisco receiving around 5,000 WSPR beacons per day from 80 to 10 meters, I figured it would be pretty trivial to decode this new protocol.

But no luck. After several weeks, I still hadn't received any FST4W beacons. Intrigued, I started poking around, and quickly found this table in the FST4 and FST4W Quickstart Guide (pdf).

FST4 and FST4W protocol parameters

This table shows the various parameters of the FST4 and FST4W protocol. FST4W-120 is very similar to regular WSPR, with the tone spacing at 1.5 Hz and the occupied bandwith around 6 Hz. As the transmission time (T/R period) gets longer, you can see the tone spacing decrease and (because it's 4-GFSK) the occupied bandwidth also decreases. With FST4W-1800, each tone is separated by only 0.089 Hz!

And that's why I wasn't receiving many beacons: at some point, the tone spacing becomes tighter than the frequency stability of the KiwiSDR. The frequency stability of the transmitter is also very important, and the ionosphere spreads the signal even more. So during the course of one transmission cycle, the crystal in the transmitter drifts a bit, the KiwiSDR also drifts a bit, and the ionosphere spreads the signal a bit, and eventually you have more drift than the tone spacing of the protocol, and the decode fails.

The only part of this that I can control is the receiver drift, so I might as well make that as small as possible. Hopefully the transmitter is also using a high-precision source.

But wait, you say! The KiwiSDR has an integrated GPS receiver that keeps the master oscillator precisely on frequency! Unfortunately, while the KiwiSDR's GPS works pretty well, it's just a GPS receiver that corrects the cheap crystal oscillator every few seconds. It's not a continuous closed-loop frequency calibration, or a phase-locked loop system. So while the integrated GPS works fine as a frequency reference for the WebSDR front end, and even works pretty well for WSPR decoding, it's just not good enough for receiving these very narrow modes.

Luckily, the KiwiSDR does include an External Clock input, allowing us to bypass the (relativity) poor crystal oscillator and inject a frequency reference into the LTC2240 A/D converter. So all I would need to do is buy a super-precise frequency reference and I should be able to maximize my chances of receiving FST4W beacons.

Bodnar Mini Precision Reference Clock

The Bodnar Mini Precision Reference Clock is a small, inexpensive GPS disciplined oscillator (GPSDO). It also has a TCXO in case GPS drops out for a bit. Output is an adjustable frequency square wave from 400 Hz to 800 MHz.

Leo Bodnar GPSDO external case

One thing I didn't realize until I got it in my hands is that it's really small, smaller than a deck of cards! The GPS receiver is also very sensitive, I ran it in my kitchen with no view of the sky and it had no problem decoding many satellites. Opening up the unit shows a relatively simple and elegant circuit.

Leo Bodnar GPSDO PCB

Also inside is a small 3v coin cell in the top center to keep the GPS almanac, a mini-USB port for power and configuration, and a status LED on the far right. Notice the TCXO in the upper right has the PCB cut away from it to reduce thermal conductivity, therefore saving power. Clever!

Programming the output frequency is relatively straightforward, the hardest part for me was finding a working Windows VM that could be used.

Leo Bodnar GPSDO programming software

For the frequency to set, the KiwiSDR internal crystal is 66.666 MHz. However, since this frequency can be set to anything, might as well make it easy for the Bodnar's divisor circuits, which are the numbers on the right side of the screenshot above. Users on the wsprdaemon email list, there are suggestions that 66.6 MHz is a good number.

There are various linux applications, but functionality is limited (if I could even get it working).

KiwiSDR Modifications

So now that I have a good reference source, how to get it into the KiwiSDR? Well, John Seamons thought about this and added pads for a clock input to the printed circuit board.

KiwSDR external clock input

The pads are for a U.FL connector, and I just happened to have some extras laying around Soldering it on was easy, although solder needed to be removed from the pads first. If you don't have a U.FL connector handy, you can just cut off a very thin coax and solder it to the pads.

KiwSDR with U.FL connector for external clock input

A simple U.FL to SMA pigtail adapter is used to connect the Bodnar GPSDO to the KiwiSDR.

KiwiSDR Configuration

Configuring the KiwiSDR for and external clock is easy. After changing these settings, the KiwiSDR server needs to reboot.

KiwiSDR external clock configuration

Just to make sure that the external clock is getting into the KiwiSDR and all the settings are correct, you can zoom way in on a known high-stability reference source (such as WWV and make sure it's on the marked frequency. Here is WWV on 10 MHz.

Screenshot of 10 MHz WWV using Bodnar GPSDO

Hopefully with this new high-precision GPS disciplined oscillator I can receive more FST4W beacons.

Special thanks to Gwyn Griffiths G3ZIL for suggesting that I needed a GPSDO, and for editing help.

links