Category Archives: WSPR

Rant: WSPR and FST4W Timing — Why???

In this post I complain about the symbol-rate timing of the various FST4W rates.  I am adding WSPR and other FST4W rates to the Beacon Blaster ( which currently generates FST4W-120, see https://turnislandsystems.com/ for details) and am getting very annoyed with the timing variations.

So let’s start with WSPR.  The symbol rate is approximately 1.4648 baud (4FSK symbols per second), or exactly 12,000 Hz / 8192.  The FSK shift is the reciprocal of this, or about 0.6827 Hz.

OK, I have no complaints about this, the numbers are easy to work with and “8192″ is a nice power of two.  This makes it easy to use a timer-interrupt to run a digital filter at (say) 64x the symbol rate.  But really, any values for that 12,000 / 8192 fraction would be workable if WSPR were the only concern.

Now, look at the FST4W rates (from the wsjtx source code):

 if(mode=="FST4" or mode=="FST4W") { //FST4, FST4W
   if(trPeriod==15) txt=1.0 + 160*720/12000.0;
   if(trPeriod==30) txt=1.0 + 160*1680/12000.0;
   if(trPeriod==60) txt=1.0 + 160*3888/12000.0;
   if(trPeriod==120) txt=1.0 + 160*8200/12000.0;
   if(trPeriod==300) txt=1.0 + 160*21504/12000.0;
   if(trPeriod==900) txt=1.0 + 160*66560/12000.0;
   if(trPeriod==1800) txt=1.0 + 160*134400/12000.0;
 }

I assume “txt” means “transmit time”.  “160″ is the number of symbols in a message.  So the symbol rates are:

FST4-15:   12,000 / 720
FST4-30:   12,000 / 1,680
FST4-60:   12,000 / 3,888
FST4W-120: 12,000 / 8,200
FST4W-300: 12,000 / 21,504
FST4W-900: 12,000 / 66,530
FST4W-1800: 12,000 / 134,400

For the four FST4W rates, the divisors are 8200, 21504, 66540, and 134400.  The only common factor is 2.  And at that common rate of 12,000 / 2 there is no hope of programming the clock-generator chips, especially since the different symbol times drift past  each other.

Since the symbol-rate accuracy is critical to the kind of propagation measurements we are using FST4W for, I am stuck running different timer interrupt rates for each mode and speed, and only running one mode at a time.  Why didn’t they use something like this instead?

CXC4-15:   12,000 / 512
CXC4-30:   12,000 / 1,024
CXC4-60:   12,000 / 4,096
CXC4W-120: 12,000 / 8,192
CXC4W-300: 12,000 / 20.480
CXC4W-900: 12,000 / 61.440
CXC4W-1800: 12,000 / 122,880

Sure, in most modes the gaps between transmissions become a bit larger, but if this is an issue then pick some other numbers.  But at least have them related by a larger common factor!

*END OF RANT*

 

Latest Batch of Boards

I’ve just received another batch of QDX External Reference Interface boards.  More info at Turn Island Systems

Also, I just sent out boards for a four-channel RF Combiner / Splitter, which takes four 1W (or lower) signals (80, 40, 20, and 10 meters), and combined them into a single output for feeding a multiband antenna.  These provide at least 20dB port-port isolation, and less than 2dB loss.  If all works as planned, these will be used for Ionospheric research.

MC-CXC-Notch

RF Combiner Notch v0.1 top

And finally, here’s a 1W (approximately) power amplifier, using 74ACT04 digital integrated circuits to drive a wideband transformer.  This takes a 3.3V digital input between 3 and 30 MHz, and produces a 1W square wave output.  External filtering will be required, and the combiner shown above should provide adequate filtering.

OneWATT v0.1 top

There are “better” ways to make a 1W amplifier, but this is quick and easy, and requires no tuned circuits.  I can’t wait to test these designs!

A Little Amplifier

QWATT 0.2 top

In the process of turning my three-output Si5351-based “ClockBox” into a three-band simultaneous FST4W beacon, I decided I needed a small power amplifier to boost the (approximately) 10dBm square-wave outputs up to a 1/4-watt clean sinewave.  Rather than using FETs and transformers, or a Class-E design, I decided to try using the an 74ACT04 hex inverter as the power stage.  Each inverter output can deliver in excess of 25 mA  with about a 4.2V swing (+5V supply) so six of them in parallel looked promising.  And I happened to have a full tube of old 74ACT04 parts in DIP form (remember those?)

So I built one, tuned for the 15 meter ham band:

breadboard 1(Ignore those power-level numbers, I had a bad coax jumper)

I was worried about connecting the outputs directly, afraid that skew would result in excess output-stage current, but some tests showed low unloaded dissipation  up past 30 MHz.  Adding small resistors at each output might be a good tradeoff, but for now I decided not to waste the power.

I used a simple L/C impedance-matching network to transform the 50 Ohm load (antenna) down to about 3 Ohms which matched the ganged inverter output impedance.  Instead of a simple series inductor I used a series L/C, calculated to provide the correct reactance at the design frequency, but giving a high impedance at higher or lower frequencies, and a bit of extra filtering.  This also makes the design slightly more bulletproof — you can run any frequency into it without causing excess dissipation.

The output power of the test board was actually closer to 1/2 W, and the harmonics were slightly better than 40 dB below the carrier.

PNG2

 

The amplifier efficiency is about 60% and the temperature rise on the buffer was well within comfortable limits.  This is good enough that I am having some circuit boards made.  The only frequency-sensitive components are two capacitors, and one toroid inductor.  I would have liked to use small surface-mount inductors, and the board does provide for that option, but the toroid has much lower loss.  The board uses two surface-mount 74ACT04 parts, and a small buffer to drive the 12 inverter inputs.

Stabilizing the QDX

As has been mentioned before, the transmit frequency stability of the QRP Labs QDX transceiver isn’t quite good enough for some of the narrow-band modes.  It works fine for WSPR and FT8, but slower modes such as FST4W-300, -900, and -1800 require stability that the QDX’s internal TCXO just can’t provide.  Here is a plot of a FST4W-1800 transmission, showing the frequency drift as the QDX heats up during the long 30-minute transmit cycle:

FSTW4-1800 30m -v1.6.5 -5

In the plot above, the actual transmit frequency is about 10 MHz, but my measurement system has mixed it down to about 36 Hz in order to get higher measurement resolution.  Add 10.1402 MHz to frequency values shown on the plot.  We can see that the transmit frequency initially rises by about  +0.1 Hz, then eventually falls to -0.85 Hz.

FST4W-1800 has a FSK tone spacing of 0.089 Hz and does not track slow frequency drift, and so requires much better transmit stability than this.  And remember, this test was done in the 10 MHz (30-meter) ham band, the drift will be double that at 20 MHz, and half that at 5 MHz.

I spent some time looking at the causes and possible solutions for this drift.  First, I ruled out any software issues by measuring the output of the QDX internal 25 MHz TCXO.  Here’s a plot of the TXCO frequency vs ambient temperature, using a homebrew temperature chamber (the QDX was not transmitting during this test):

TCXO - QDX no case-idle 3

The top chart is frequency vs temperature, the middle one is frequency vs time, and the lower one is chamber temperature over time.  Again, here my measurement system is shifting the 25 MHz TCXO frequency down to 100 Hz in order to obtain higher resolution.  We can see that over a 6C to 60C temperature range the TCXO shifts over a range of 4.3 Hz.

We can also see the intriguing phenomenon of “retrace”, where the oscillator frequency exhibits a kind of thermal hysteresis.  All crystal oscillators exhibit this behavior to some extent, and this does limit the amount of correction that can be performed by measuring the temperature (one of the options contemplated for the QDX).

I attempted to slow the rate of frequency change by increasing the thermal mass of the TCXO (attaching a brass tab to the TCXO package), but the results were disappointing — the TCXO is too solidly attached to the circuit board and the heat transferred though the board from the QDX output transistors just couldn’t be escaped.

Setting aside any idea of a simple fix, I decided to bypass the TCXO entirely and provide an external clock.  There was room (barely) on the rear QDX faceplate for a SMA jack, and room inside for a small circuit board, do I designed and built a little reference clock multiplier:

schematic

This simple circuit uses a PLL chip to multiply an external reference clock (either 5 or 10 MHz) up to the 25 MHz needed by the QDX.   I will dig into more circuit detail in a later post. This circuit is powered by the QDX internal 3.3V supply, and provides a 0/3.3V logic-level output which is connected to the QDX clock buffer input (after removing the TCXO coupling capacitor):

schem-mod

Here’s the little board layout:

PCB

PCB 2

And as installed in the QDX:

RefMult2

I picked up +3.3V and ground from some testpoints on the QDX board, and having no microscopic coax, I used a twisted pair of #30 Kynar-insulated wirewrap-wire to connect the clock signal to the QDX board (two different-color wires would have made more sense, but I was in a hurry).  The twisted pair just managed to squeeze through another testpoint through-hole, and was then soldered to the PCB:

RefMult3

The yellow oval shows where the TCXO coupling cap (C 54) used to be.

Using a Bodnar GPSDO as my 10 MHz reference I ran some tests.  The 25 MHz output from my PLL was reasonably clean, as was the resulting  signal from the QDX.  Here are some plots of the transmitter, in the 20-meter band:

2

This is a 200 KHz span, 100 Hz resolution bandwidth scan, showing a bit of broadband noise and a discrete spur at -100 KHz (there is another near +100 KHz, not visible in this plot). This noise potentially affects the receiver performance, but initial measurements lead me to believe that other QDX noise sources are dominant.  These measurements only show us the transmit signal, and to determine how much of this output noise is due to the PLL will require further testing. In any case, this noise will have no significant impact on the transmit performance.  We can see how the noise falls off dramatically as we approach the carrier frequency — this is the characteristic of PLL noise under the loop-bandwidth frequency.  Here is a close-in plot:

comparison QDX ext ref

This level of noise is definitely acceptable.

And here are plots showing the transmitted FST4W-120 signal, transmitting on 14.09715 MHz:

FST4W-120 a

As expected, the transmit frequency is rock-solid.  And here is the modulation in FST4W-1800 mode:

FST4W-1800 b

On-the-air tests of the modified QDX, transmitting FST4W-120 show essentially perfect performance.

About the external reference:

The reference multiplier input can come from any stable source of 5 or 10 MHz.  I tested using a GPSDO, since I distribute that reference to much of my test equipment, but a stand-alone OCXO, or even stable TCXO will serve the purpose.  Obviously, if you already have a stable 25 MHz clock available (the Bodnar GPSDOs can be configured to provide this) you don’t need a clock multiplier — just a connection to the QDX circuit board.  Be sure to provide appropriate coupling and some type of input transient protection!

The 25 MHz clock not only drives the radio portion of the QDX, it also runs the microcontroller.  Without this clock the QDX will not run, and any interruption will likely cause bad things to happen.  The external clock source is the first thing I connect, and the last thing I disconnect.

 

 

WSPR With the QDX and QUADRA

While testing the newest QDX “Beta 1_06_005″ firmware, I hooked it up to the small/cheap inovato QUADRA  linux box and ran some WSPR on 20 meters.  This is what I got after a few hours with 4 Watts into a dipole (I’m currently in California, a bit north of San Francisco):

WSPR 20 metersI’ve always wanted to visit Ellesmere and South Georgia Islands!

The QUADRA is a nice replacement for the virtually unobtainable Raspberry Pi 3:

quadra

 

A Simple Matter of Software (SMOS)

A SMOS.  That’s what we hardware engineers (and management, too) call it when something needs to be fixed and the hardware is already out the door.  Fortunately, in this case it was indeed a software fix.

I’m talking about the QDX and the difficulty it had generating very small frequency shifts, as first noted by my friend Glenn (N6GN). I described the problem and my measurement techniques in these posts: http://wb6cxc.com/?p=244, and http://wb6cxc.com/?p=275

I became fascinated by this issue, and while adding some pretty useful features to my Time Interval Counter, the QDX gave me a great way to improve my measurement technique.  In the process I re-connected with an old ham friend, and met some new ones who I really respect.

I also got to know the WSJTX mode FST4W, which uses much smaller/slower FSK than FT8 or WSPR.  For example, a single transmission of FST4W-1800 takes a half-hour with a symbol period (Baud) of 11.2 seconds, using a 0.089 Hz tone spacing.  This requires extreme accuracy and stability on the part of the transmitter and receiver.  The FST4W (and WSPR) modes are being used to measure atmospheric Doppler shifts, among other things.  Here’s a description: https://physics.princeton.edu/pulsar/k1jt/FST4_Quick_Start.pdf

Measuring FSK patterns is one thing, but analyzing the actual audio-to-RF frequency generation behavior called for a more deliberate approach.  So, I set up my PC to generate a slow audio-frequency sweep (using the NCH Tone Generator program), and sent that into the QDX USB port.  Actually, first I sent it to my Icom IC-7200 USB port and measured that output to make sure that my audio sweep (and measurement technique) were suitable.  Here’s a 1000 to 1010 Hz sweep, transmitted on 20 meters:

IC7200 20m sweep 1000-1010As before, my counter is digitally shifting the 14 MHz signal down into the audio range and counting that.  Here, we see a smooth and linear sweep with only a little noise.

I then tried the same sweep input with the QDX:

QDX 20m sweep 1000-1010

Here you can see the uneven and quite large steps, roughly 1.25 Hz each.  This would work (barely) with the 1.465 WSPR tone spacing, but was completely unusable with the smaller tone-spacing modes.  Here’s what FST4W-300 looked like (0.56 Hz tone spacing):

FSTW4-300 30m -1

As you can see, one tone is being entirely skipped over, and the spacing on the others is incorrect.  Not surprising given the sweep results.

I posted my measurements to the QRP Labs groups.io discussion (https://groups.io/g/QRPLabs/topic/qdx_fst4w_300_transmits_only/95257422 and elsewhere), as did Glenn and others, and Hans (QRP Labs owner and designer) dug right in to solving the problem.  He quickly homed in on the algorithm that calculated the fractional divider values for the Si5351 clock generator chip used in the QDX, and he generously traded email with me, describing his progress and solution.  It turns out it was a combination of limited floating point resolution and integer size.  Hans also figured out a way to improve the algorithm by separating the carrier frequency calculations from the audio-offset calculations.  The result was spectacular!  Here’s the 10 Hz sweep using the new  Beta 1_06_005 firmware:

QDXv6.1.5 20m sweep 1000-1010 correct

And here is the QDX transmitting FST4W-1800 (0.089 Hz tone spacing):

FSTW4-1800 30m -v1.6.5 -4

This is perfect.  The frequency-setting is now amazingly good.

And it was all just a Simple Matter Of Software!

But, there is still work to do if we want to use the QDX on the slower FST4W modes.  The QDX transmit frequency drifts as the radio heats up during a long transmit cycle.  This doesn’t really affect modes like FT8 or WSPR, but the small drift (about 1 Hz in fifteen minutes on 20 meters) will cause FST4W-300 and higher modes to fail.  Here is the thirty-minute long FST4W-1800 transmit sequence (remember this is a tone-spacing of 0.089 Hz):

FSTW4-1800 30m -v1.6.5 -5

Probably the only reasonable way to get the needed stability is by using an external 25 MHz reference, probably a GPSDO (GPS Disciplined Oscillator).  The QDX can be easily modified to accept an external reference, and I will be trying this fairly soon.

But all in all, this was a gratifying experience, and I salute Hans and QRP Labs for the speedy and spectacular work in solving a problem that most of the QDX users would never have even noticed.  I now have two more QDX’s on order: https://www.qrp-labs.com/qdx.html

 

QDX Sensitivity Test

I still haven’t done a full evaluation of the QRP Labs QDX transceiver, but I did run a quick check of the receiver performance, comparing it to the Icom IC-7200 (which also has a native  USB interface for audio and CAT control):

ComparisonHere you see two instances of WSJTX, running FT8 on 20 meters.  My off-center-dipole was connected to a coax TEE, feeding both the QDX and the 7200.  No effort was made to match impedances, but since both radios are getting an identical signal that should be good enough for a comparison.  Obviously the transmitters were not activated during this test.

I let the programs run for fifteen minutes and then compared the logfiles.  The7200 logged 524 decodes, while the QDX logged  530.  The Signal/Noise ratio was generally the same, with the QDX showing one or two dB improvement on the stronger signals.  These small differences may be due to the AGC or the slightly narrower filters on the Icom rig.

This test was done if a fairly quiet location, with no nearby strong signals.

Conclusion:  So far, the QDX receiver is a good performer.