[ko6iue.org] | [Grid Explorer 🌐] | [adi2kml] | [FT8 Can Hear a Pin Drop]

FT8 Can Hear a Pin Drop

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

Calculating FT8 [Baud rate]

Duration time (TsT_s) is calculated using:

Ts=1fsT_{s} = \frac{1}{f_{s}}

where fsf_{s} is the symbol rate.

fs=RNf_{s} = \frac{R}{N}

where NN are the number of bits per symbol and RR 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, fs=12000.0f_{s} = 12000.0.

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 (1/6.25=0.16 seconds1/6.25 = 0.16 \text{ seconds}) and tone spacing (6.25 Hz, discussed below) were designed to be orthogonal to minimize spectral overlap to improve detection. 0.16 secssymbol\frac{\text{secs}}{\text{symbol}}
(160 mssymbol\frac{\text{ms}}{\text{symbol}})
FT8 baud rate Simple inverse of tt. 1.0/0.16secssymbol1.0/0.16 \frac{\text{secs}}{\text{symbol}} 6.25symbolssec6.25\frac{\text{symbols}}{\text{sec}}

Understanding FT8 frequency modulation, transmission length, channels, and symbols

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 8×6.25 Hz=50 Hz8 \times 6.25\text{ Hz} = 50\text{ Hz}.

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. 77+14+83=174 bits77 + 14 + 83 = 174\text{ 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 SS and have the sequence [3,1,4,0,6,5,2][3,1,4,0,6,5,2]. Total number of symbols is 7×3=217 \times 3 = 21 21 symbols
Total Channel symbols (NN) Data + Sync Symbols. A completed set of the 79 transmission symbols would look like bn={S,MA,S,MB,S}b_{n} = \{S, M_{A}, S, M_{B}, S\} with MA={a0,a1,...,a28}M_{A} = \{a_{0}, a_{1},...,a_{28}\} and MB={a29,a30,...,a57}M_{B} = \{a_{29}, a_{30}, ..., a_{57}\} 79 symbols
Number of Samples Per Symbol (NSPS) 12000samplessecond×0.16 second symbol12000 \frac{\text{samples}}{\text{second}} \times \frac{0.16\text{ second}}{\text{ symbol}} 1920samplessymbol1920 \frac{\text{samples}}{\text{symbol}}
Transmission length (seconds) 79 symbols×0.16 secondsymbol79\text{ symbols} \times \frac{0.16\text{ second}}{\text{symbol}} 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 1512.64=2.3615 - 12.64 = 2.36 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.

FT8 Can Hear a Pin Drop

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 SNRdB\text{SNR}_{\text{dB}} is therefore equal to S9S7=2S-unitsS9 - S7 = 2 S\text{-units} 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 (10×log10(2400 Hz500 Hz)=6.8 dB10 \times \log_{10}(\frac{2400\text{ Hz}}{500\text{ Hz}}) = 6.8\text{ 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 SNRdB\text{SNR}_{\text{dB}} even more: 10×log10(2400 Hz250 Hz)=9.8 dB10 \times \log_{10}(\frac{2400\text{ Hz}}{250\text{ Hz}}) = 9.8\text{ dB}.

The FT8 paper reports supporting data transmission at an SNRdB 2500 Hz\text{SNR}_{\text{dB 2500 Hz}} 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 10×log10(2500 Hz6.25 Hz)26 dB10 \times \log_{10}(\frac{2500\text{ Hz}}{6.25\text{ Hz}}) \approx{} 26\text{ dB}.

Comparing the SNRdB 2500 Hz\text{SNR}_{\text{dB 2500 Hz}} reading you see in WSJT-X to SNRdB 6.25 Hz\text{SNR}_{\text{dB 6.25 Hz}}
SNRdB 2500 Hz{\text{SNR}}_{\text{dB 2500 Hz}} SNRdB 6.25 Hz{\text{SNR}}_{\text{dB 6.25 Hz}} 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.

References

  1. [The FT4 and FT8 Communication Protocols]
  2. [Signal/noise ratio of digital amateur modes]
  3. [WSJT-X User Guide]
  4. [FT8 Modulation and Decoding - A Dive into SNR interpretation N6MW 12/20/20]
  5. [Signal to Noise Ratio, definition and application to Radio Communications]
  6. [Amateur Radio Digital Communication Mode FT8]
  7. [Auditory intensity discrimination as a function…]
  8. [Wikipedia: FT8]

Last updated: 2026-03-22 UTC
Created with: [Pandoc] and [Terminal CSS]
© 2025 and licensed under CC BY-SA 4.0