To understand FT8, I read the FT8 paper, reviewed some of the WSJT-X source, and read some well-written articles online (see references at the bottom of the page). I tried to organize everything as clearly as possible here for my own learning. There are equations but I’ve tried to show all my work. I’m sharing this in the hope it might be useful to other people too. - Matt (KO6IUE)
If you look in Fortran source code for WSJT-X
(lib/ft8/ft8_params.f90) you’ll find the following
parameters which will help with our calculations.
parameter (KK=91) !Information bits (77 + CRC14)
parameter (ND=58) !Data symbols
parameter (NS=21) !Sync symbols (3 @ Costas 7x7)
parameter (NN=NS+ND) !Total channel symbols (79)
parameter (NSPS=1920) !Samples per symbol at 12000 S/s
Duration time () is calculated using:
where is the symbol rate.
where are the number of bits per symbol and is the gross bit rate (including channel coding overhead).
Here is the Fortran code in WSJT-X related to baud calculation
fs=12000.0 !Sample rate (Hz)
dt=1.0/fs !Sample interval (s)
tt=NSPS*dt !Duration of symbols (s)
baud=1.0/tt !Keying rate (baud)
which shows that and . Note the fortran variable for duration time () is dt.
Running the numbers we find…
| Comment | Value | |
|---|---|---|
| fs (sample rate aka symbol rate) | See WSJT-X fs param
above |
12000 Hz |
| dt (duration of time aka sample interval) | Simple inverse of fs |
1/12000 secs (1/12 ms) |
| tt (duration of symbols) | The duration () and tone spacing (6.25 Hz, discussed below) were designed to be orthogonal to minimize spectral overlap to improve detection. | 0.16 |
| baud rate | Simple inverse of tt.
|
FT-8 modulation is 8-tone continuous-phase frequency shift keying (CPFSK) spaced 6.25 Hz apart. Each these tones or channels provide 3 bits of information (FT4 uses 4 tones with 2 bits of information hence the names FT8 and FT4). The total occupied bandwidth of FT8 is .
When using WSJT-X you choose which 50 Hz transmit frequency you want
by typing into the Tx field or clicking at the top of on
the spectrum window. Ideally, each person transmits on a unique,
non-overlapping 50 Hz slice of the overall 3000 Hz USB bandwidth
(clicking Hold Tx Freq in wsjtx helps).
When transmitting FT8, you might notice your signal subtly “wiggle”
about every 160 milliseconds or so during frequency shift keying. Table
3 in the FT8 paper shows the bits associated with each channel symbol. I
flipped the table on its side to match what you’ll see on your waterfall
inside the 50 Hz slice of the FT8 spectrum you transmit on. For example,
if the frequency jumps left, you might be transmitting a
000 or 001 and if it jumps right you might be
transmitting a 101 or 111. If it’s in the
middle, maybe a 010 or 110.
Channel Width (Hz) 6.25 6.25 6.25 6.25 6.25 6.25 6.25 6.25 = 50 Hz total
Channel Symbol 0 1 2 3 4 5 6 7
FT8 bits 000 001 011 010 110 100 101 111
FT4 bits 00 01 11 10
To calculate the transmission length in seconds, we do the following calculation:
| Comment | Value | |
|---|---|---|
| Data Symbols | FT8 is [LDPC (174,91) code] with 77 information bits, a 14-bit CRC, and 83 parity bits. . One symbol = Three bits (see Table 3 above). | 58 symbols |
| Sync Symbols | Costas 7x7 arrays at the beginning, middle, and end of each transmission (see this [TED Talk] for an interesting discussion of Costas arrays). These sync tones are denoted and have the sequence . Total number of symbols is | 21 symbols |
| Total Channel symbols (NN) | Data + Sync Symbols. A completed set of the 79 transmission symbols would look like with and | 79 symbols |
| Number of Samples Per Symbol (NSPS) | ||
| Transmission length (seconds) | 12.64 seconds |
This means the FT8 transmission takes 12.64 seconds. FT8 transmission intervals are 15 seconds and occur at 00, 15, 30, and 45 seconds each minute. This means WSJT-X has seconds to decode and respond to transmissions. You can see this 2.36 second gap when looking at the FT8 waterfall. This highlights why synchronizing your clock is so important to effective digital communications. The whole FT8 world relies on accurate clocks to coordinate transmitting and receiving.
Bandwidth and SNR are proportional. Noise power is proportional to bandwidth (noise voltage is proportional to the square root of bandwidth).
For example, imagine you have a filter setup for SSB 2400 Hz with a noise level of S7. While listening, you hear a CW signal at S9. Your is therefore equal to or around 12 dB. To hear the CW signal better, you then switch to a 500 Hz filter and find your noise level drops by 6.8 dB () while your signal level remains the same assuming your filter includes the CW signal. Adding the filter caused the to jump from 12 dB to 18.8 dB ().
The FT8 paper reports supporting data transmission at an of around -21 dB (which varies of course on propagation conditions). Does this mean FT8 can process a signal that is below the noise floor? Of course not. As a matter of convention, a standardized bandwidth of 2500 Hz is used to compare different modes e.g. SSB, CW, RTTY, FT4, FT8, etc. even though they each occupy different bandwidths. FT8 has a bandwidth of 6.25 Hz. If we apply the same calculation as the example above and translate to a 6.25 Hz bandwidth, we find a jump of .
| Sound at this dB level | ||
|---|---|---|
| -24 | 2 | Near human hearing threshold |
| -18 | 8 | A pin drop |
| -12 | 14 | Sound of a person breathing |
| -6 | 20 | Rustling leaves |
| 0 | 26 | A whisper |
| 6 | 32 | Soft music |
| 12 | 38 | A babbling brook |
| 18 | 44 | Light rainfall |
| 24 | 50 | Moderate rainfall |
So when you’re making an FT8 QSO and your FT8 partner sends a signal report of -18 dB to you it means they heard your FT8 signal 8 dB above their noise floor. I’ve received signal reports of -24 dB a few times which is impressive and means the remote WSJT-X was able to process my signal at just 2 dB above noise. This is around the just-noticeable difference (JND) of human hearing but FT8 with source encoding is able to process about 5 words per minute at that dB level.