To understand how FT8 works, 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. I’m sharing this in the hope it might be useful to other people. Feel free to reach out if you find any errors. - Matt (KO6IUE)
If you look at the 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 the WSJT-X sample rate, .
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
(160 ) |
| FT8 baud rate | Simple inverse of tt.
|
FT-8 modulation is 8-tone continuous-phase frequency shift keying (CPFSK) spaced 6.25 Hz apart. Each of 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 FT8 3000 Hz USB bandwidth
(clicking Hold Tx Freq in WSJT-X helps).
When transmitting FT8, you might notice your signal waveform subtly
“wiggle” about every 160 milliseconds during frequency shift keying (see
[sigidwiki] for nice
images to show this). Table 3 in the FT8 paper shows the bits associated
with each channel symbol. I flipped the table on its side to match the
horizontal aspect of your transciever display or waterfall when
transmitting. For example, if the frequency subtly 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
As an aside, these bits are not binary but rather the [gray code] of the channel symbol.
To calculate the transmission length, 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 box above with channel symbols and bits). | 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 |
Base on this calculation, FT8 transmission takes 12.64
seconds. FT8 transmission intervals are 15 seconds and occur at
00, 15, 30, and 45 seconds each minute (if Tx even/1st is
checked in WSJT-X, you will transmit at 00 and 30 and receive at 15 and
45; vice versa if unchecked). This means WSJT-X has
seconds to decode and respond to transmissions. This 2.36 second gap can
clearly be seen in 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 the filter preserves the CW signal). Using an even tighter filter of 250 Hz would increase the even more: .
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 21 dB below the noise floor? Of course not. As a matter of convention in amateur radio, 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, the intensity of a pin drop.
I’ve received signal reports of -24 dB which is impressive because it means the remote WSJT-X application was able to process my signal at just 2 dB above the remote noise level, softer than a pin drop. This is near the just-noticeable difference (JND) of human hearing yet FT8 with source encoding is able to process about 5 words per minute at that low SNR level.