#### FST4W Symbol Rates - Common factors?

Paul WB6CXC (tech-blog: wb6cxc.com)

Does anyone have a handle on the numeric factors that define the symbol rates for the -120. -300, and -900 modes?

The published tone spacing values are close to the reciprocal values I would expect.  For example, -120 shows a symbol length of 0.683 sec, and a tone spacing of 1.46 Hz.  1/0.683 = 1.464128... so that's correct within two decimal places.

But where do the symbol lengths come from?  They don't have an obvious 120/300/900 relationship.  Somewhere in the WSPR documentation I found that the WSPR symbol length is 12,000 Hz / 8192 (1.464843... Hz), which matches the FTS4W-120 parameters.  I don't see an obvious relationship for the -300 and -900 modes.  If anyone can save me the trouble of digging through the WSJTX code I sure would appreciate it.

Rob Robinett

Joe Taylor's Quick Start guide is my only source of insight into FST4W:  https://wsjt.sourceforge.io/FST4_Quick_Start.pdf
This table is taken from that document:

On Tue, Mar 28, 2023 at 12:22 PM Paul WB6CXC (tech-blog: wb6cxc.com) <paul@...> wrote:
Does anyone have a handle on the numeric factors that define the symbol rates for the -120. -300, and -900 modes?

The published tone spacing values are close to the reciprocal values I would expect.  For example, -120 shows a symbol length of 0.683 sec, and a tone spacing of 1.46 Hz.  1/0.683 = 1.464128... so that's correct within two decimal places.

But where do the symbol lengths come from?  They don't have an obvious 120/300/900 relationship.  Somewhere in the WSPR documentation I found that the WSPR symbol length is 12,000 Hz / 8192 (1.464843... Hz), which matches the FTS4W-120 parameters.  I don't see an obvious relationship for the -300 and -900 modes.  If anyone can save me the trouble of digging through the WSJTX code I sure would appreciate it.

--
Rob Robinett
AI6VN
mobile: +1 650 218 8896

Gwyn Griffiths

Paul,

The 8192 for WSPR seems to have become 8200 in FST4W, at least in this group of if statements in fst4_decode.f90
The other lengths are below as well:

else if(ntrperiod.eq.120) then
nsps=8200
nmax=120*12000
ndown=205                 !nss=40,82,164,328
nfft1=7200*200   ! nfft2=7200=2^5*3^2*5^2
else if(ntrperiod.eq.300) then
nsps=21504
nmax=300*12000
ndown=512                 !nss=42,84,168,336
nfft1=7020*512   ! nfft2=7020=2^2*3^3*5*13
else if(ntrperiod.eq.900) then
nsps=66560
nmax=900*12000
ndown=1664                !nss=40,80,160,320
nfft1=6480*1664  ! nfft2=6480=2^4*3^4*5
else if(ntrperiod.eq.1800) then
nsps=134400
nmax=1800*12000
ndown=3360                !nss=40,80,160,320
nfft1=6426*3360  ! nfft2=6426=2*3^3*7*17
end if

Note that nsps for 1800 is not exactly double that for 900, and nsps for 900 is not exactly triple that for 300.

Gwyn G3ZIL

Paul WB6CXC (tech-blog: wb6cxc.com)

Thanks, Rob.  Yes, I've got that Quick Start Guide, but I am trying to understand the relationships.

Gwyn, that is exactly what I was hoping to find!  I suppose there is an underlying reason for those particular values, but I'm not seeing an obvious common denominator (or least common multiple?)
Anyway, using those numbers (12,000 Hz divided by [8200, 21504, 66560, 134400]) gives me the symbol rate, and the reciprocal gives the exact tone spacing.  This helps a lot.

I'm trying to turn my little Si5351 "Clockbox" into a simultaneous 3-band FST4W beacon.  Apparently this isn't particularly useful. but it's a fun challenge for me.

Rob Robinett

I think Bo supports 2 FST4W outputs on his RFZero and his open source code generates perfect tones, although no Gaussian transitions.

On Tue, Mar 28, 2023 at 4:03 PM Paul WB6CXC (tech-blog: wb6cxc.com) <paul@...> wrote:
Thanks, Rob.  Yes, I've got that Quick Start Guide, but I am trying to understand the relationships.

Gwyn, that is exactly what I was hoping to find!  I suppose there is an underlying reason for those particular values, but I'm not seeing an obvious common denominator (or least common multiple?)
Anyway, using those numbers (12,000 Hz divided by [8200, 21504, 66560, 134400]) gives me the symbol rate, and the reciprocal gives the exact tone spacing.  This helps a lot.

I'm trying to turn my little Si5351 "Clockbox" into a simultaneous 3-band FST4W beacon.  Apparently this isn't particularly useful. but it's a fun challenge for me.

--
Rob Robinett
AI6VN
mobile: +1 650 218 8896

Paul WB6CXC (tech-blog: wb6cxc.com)

Interesting:  If that value for -120 was 8192 (as it is in WSPR) then all the FST4W values would have a greatest common divisor of 256.  I wonder why they changed it to 8200?

This doesn't really matter as far as my implementation is concerned, I'm just trying to find a suitable ISR rate that will work for all the speeds.  And if I need to use a fractional-resolution division (essentially dithering the timing) that's quite easy.

Paul WB6CXC (tech-blog: wb6cxc.com)

On Tue, Mar 28, 2023 at 04:42 PM, Rob Robinett wrote:
I think Bo supports 2 FST4W outputs on his RFZero and his open source code generates perfect tones, although no Gaussian transitions.
I've looked at Bo's code, and it is well-done.  I will probably grab his encoding routines, but I have my own freq control and scheduling code, as well as Gaussian filtering and GPS sentence parsing, which I will be reusing.  My Clockbox will require an external 10 MHz reference, and a serial-port interface to a GPS or computer for the time-sync.  If I had a GPS module on-board (like Glenn has) this stuff would be simpler and better, but I'm re-purposing a board of mine that's already working.  It's just a fun project, not something specifically designed for the beacon task.

Glenn Elmore

It may be that we can merge all of this,  Bo's code, your shaping, my Reference with the additional mixer/filter architecture I suggested, 2W PAs Clint found and 7-way combiner Elmer is looking at to create the "eclipse tx" for simultaneous multiband tx on bands of our choice.
The HW side can can be spun relatively quickly,  I think,  since libraries are in pretty complete shape. .  FW might be more of a challenge. I think it's all Arduino (if shaping is).
Maybe just " a small matter of programming" (:>)
Glenn

On Mar 28, 2023 6:40 PM, "Paul WB6CXC (tech-blog: wb6cxc.com)" <paul@...> wrote:
On Tue, Mar 28, 2023 at 04:42 PM, Rob Robinett wrote:
I think Bo supports 2 FST4W outputs on his RFZero and his open source code generates perfect tones, although no Gaussian transitions.
I've looked at Bo's code, and it is well-done.  I will probably grab his encoding routines, but I have my own freq control and scheduling code, as well as Gaussian filtering and GPS sentence parsing, which I will be reusing.  My Clockbox will require an external 10 MHz reference, and a serial-port interface to a GPS or computer for the time-sync.  If I had a GPS module on-board (like Glenn has) this stuff would be simpler and better, but I'm re-purposing a board of mine that's already working.  It's just a fun project, not something specifically designed for the beacon task.

Paul WB6CXC (tech-blog: wb6cxc.com)

On Tue, Mar 28, 2023 at 06:53 PM, Glenn Elmore wrote:
FW might be more of a challenge. I think it's all Arduino (if shaping is).
My Gaussian shaping is generic 'c' code, and I'm using the Arduino IDE to compile it.  My code is nothing particularly special, and can be tweaked to run at any desired sample rate.  I describe the filter architecture in my blog: http://wb6cxc.com/?p=126

I've given my filter code to Bo (he was curious), but I doubt that he's had an opportunity to dig into it.  It's not even obvious that it's really necessary (but it seems like the polite thing to do).

 1 - 9 of 9