WSJT-X FT8 Modulator – Scicos Simulation


In the previous posts I looked at MSK144 and FSK441 which are WSJT-X/WSJT digital communications protocols or so called “fast modes” used for Meteor Scatter. In this post I will look at FT8 (Ref.1 & Ref.2) which is part of the WSJT-X series of protocols used for weak signal communication over all the HF/VHF amateur bands. It is known as a “slow mode”. It allows long distance contact with simple antennas and low power.

Figure 1 shows the Message Frame format as taken from the latest WSJT-X 2.1 User Guide (Ref.3). This differs from the format described in the QST article of November 2017 where a user message of 75 bits and CRC of 12 bits are used with an LDPC (174,87) code (Ref.2). Here a larger user message of 77 bits is added to a larger CRC of 14 bits to give an augmented message of 91bits. This augmented message of 91 bits is applied to a Low Density Parity Check Code Generator Matrix to produce a code word of 174 bits. Three Costas Synchronization arrays are added at the beginning, middle and end to form a 237 bit message frame.

Fig.1 FT8 Transmit Message Frame

The FT8 modem design parameters are:
-SSB Transceiver_USB interface (300,2700)Hz = 2400Hz
-Baud Rate = 6.25bd Message Frame = 237bit = 79bd (3bits/bd)
-8-GFSK = 8 Level Gaussian Frequency Shift Keying
-Baud Rate = 6.25bd BW = 8*BR = 8*6.25 = 50Hz
-F0=Fc, F1=Fc+6.25Hz, F2=Fc+12.5Hz, F3=Fc+18.75Hz
-F4=Fc+25Hz, F5=Fc+31.25, F6=Fc+37.75Hz, F7=Fc+43.75Hz
-Costas 7×7 Array = Tones (3,1,4,0,6,5,2) (Ref.4 & Ref.5 )
-Frame Time = 79bd/6.25bdps = 12.64sec


Figure 2 shows the ScicosLab script file used to generate the 237 bit/79byte Message Frame. Since I am concentrating on the modulation process, I used random number generators to produce the random 174 bit Code Words (1,87) & (88,174). I added the 3 Costas bytes as detailed in (Ref.5). Figure 3 shows the 8 level signal used to drive the modulator. Note the 7 byte Costas Array at the beginning, middle and end.

Fig.2 FT8 Code Data
Fig.3 FT8 79 Byte Message Frame 12.64sec

Figure 4 shows the Scicos Block diagram used to implement the modulator. The modulator is a phase continuous VCO such that the lowest frequency f0=fc=1500Hz and the top frequency f7=1500Hz+7*6.25=1543.75Hz. The data pulses are smoothed by a Gaussian Pulse filter to ensure a clean output spectrum.

Fig.4 FT8 Modulator Block Diagram

Figure 5 shows the 8 level baud stream on the bottom trace, the 8 level smoothed baud stream on the middle trace and the FSK output on the top trace. Figure 6 shows the output spectrum starting at f0=1500Hz.

Fig.5 FT8 Modulator Output
Fig.6 FT8 Output Spectrum F0=Fc=1500Hz

Figure 7 is a test wave form to check each output frequency. Here the data is set at f0=fc=1500Hz, with the Costas Arrays added at the beginning, middle and end. Figure 8 shows the ouput spectrum line at 1500Hz.

Fig.7 FT8 Modulator Output for Data=f0
Fig.8 FT8 Output Spectrum at f0=fc=1500Hz
YouTube Channel
YouTube Channel


#1. “Work the World with WSJT-X, Part 1: Operating Capabilities”, Joseph Taylor K1JT & Steven Franke K9AN, ARRL QST Magazine Oct 2017

#2. “Work the World with WSJT-X, Part 2: Codes, Modes, and Cooperative Software Development”, Joseph Taylor K1JT & Steven Franke K9AN, ARRL QST Magazine Nov 2017

#3. “WSJT-X 2.1 User Guide”

#4. “Synchronization in FT8”, Mike Hasselbeck, WB2FKO

#5. “Synchronization in FT8”, Mike Hasselbeck, WB2FKO

#6. ScicosLab with Modnum Toolbox

#7. “Learn Telecommunications by Simulation” EBook

#8. “HF High Frequency Radio Telecommunications Learn by Simulation” EBook