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!