This plugin can be used to demodulate and decode FT8 signals. FT8 is used by amateur radio to perform contacts (QSOs) with very weak signals. It is used mostly but not limited to HF bands. The protocol and modulation details are described [here](http://www.rtmrtm.org/basicft8/)
The decoder code is based on [ft8mon](https://github.com/rtmrtmrtmrtm/ft8mon) code written by Robert Morris, AB1HL. The core of the decoder is stored in a separate `libft8` library in the `ft8` folder of this repository and is placed under the `FT8` namespace.
The excellent work of Robert Morris makes the decoder on par or even slightly better than the original [WSJT-X](https://wsjt.sourceforge.io/wsjtx.html) code.
Use the wheels to adjust the frequency shift in Hz from the center frequency of reception. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mouse wheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2.
The FT8 decoding sample rate of 12 kS/s is further decimated by powers of two for the spectrum display (B) and in RF filter limits. This effectively sets the total available bandwidth depending on the decimation:
There are 10 filters in the filter bank with indexes 0 to 9. This selects the current filter in the bank the filter index is displayed at the right of the button. The following controls are covered by the filter settings:
This AGC is based on the calculated magnitude (square root of power of the filtered signal as I² + Q²) and will try to adjust audio volume as if a -20dB power signal was received.
As AGC compresses the signals you have to experiment whether AGC or no AGC give the best result in decoding signals. With AGC on it is easier to adjust the volume (A.10) as the audio signal will be more stable.
This is the volume of the audio signal in dB from -10 (0.1) to 40 (10000). It can be varied continuously in 1 dB steps using the dial button. When AGC is engaged it is recommended to set a low value in dB not exceeding 3 db (gain 2). When AGC is not engaged the volume entirely depends on the RF power and can vary in large proportions. Hence setting the value in dB is more convenient to accommodate large differences.
This shows the level of the signal entering the FT8 demodulator and decoder and peaks (shown by the tiny red vertical bar) should never exceed 100%. In fact there is a 10% guard so 100% is actually 90% of the signal volume. Note that the decoder will work well even with a few % volume however you should try to set the volume (A.10) so that big signals reach at least ~20% to have the best dynamic range.
This is the spectrum display of the demodulated signal (SSB) or translated signal (DSB). Controls on the bottom of the panel are identical to the ones of the main spectrum display. Details on the spectrum view and controls can be found [here](../../../sdrgui/gui/spectrum.md)
Toggles the logging of messages. Messages will be logged in the same format as the original WSJT-X format. The splitting and naming of files is different however.
The baseband (audio) may be recorded as a 12 kHz mono PCM .wav file similarly to what can be done with the original WSJT-X program. Each record is the 15s FT8 period (180000 16 bit signed samples or 360000 data bytes). Files are stored in the system application data location (see above for details) in the `ft8/save` folder and have the following file name format:
<date>_<time>.wav
Where date is the slot date in YYYYMMDD format (in WSJT-X this is YYMMDD) and time is the slot time in HHmmss format.
<h3>C.10: Messages table</h3>
Displays the received messages in a table which columns are the following:
- **UTC**: UTC time in HHmmss format of the FT8 slot
- **P**: LDPC decoder pass index that was successful (0 to 2) as there are 3 passes
- **OKb**: Number of correct bits in the message before FEC correction. Maximum is 174 in which case no FEC would be needed.
- **dt**: Message start time shift in seconds from standard FT8 time slot
- **df**: Message frequency shift in Hz from base frequency. This is the shift of the lowest frequency symbol
- **SNR**: Signal to noise ratio in dB transposed in a 2.5 kHz bandwidth (WSJT-X standard). The actual SNR is this value plus 26 dB.
- **Call1**: This is the first call area and may contain the caller callsign, a CQ or a custom 13 character message in which case the second call and locator areas are empty
- **Call2**: This is the second call area and will contain the callsign of the responding station
- **Loc**: Locator area which contains the 4 character Maidenhead locator, a report, an acknowledgement (RRR) or a greetings (73 or RR73)
- **Info**: FT8 decoder information if any. This comes from he original `ft8mon` code
When processing the audio baseband several instances of the core decoder will be spawned in separate threads. This adjusts the number of threads. You have to experiment with it to find which is the best number for you. The default of 3 will normally yield good results comparable if no better to what is obtained with the original WSJT-X software.
<h4>C.1.2: Decoder time budget</h4>
This is the time in seconds after which the decoder threads will be prompted to stop. It can be varied from 0.1 to 5 seconds. You can imagine that the longer the decoder runs the more messages it will harvest however the default of 0.5s will be enough in most cases. You can still experiment with it to find what value is the best in your own case.
<h4>C.1.3: Band presets table</h4>
This table shows the band presets values that will appear in (C.5)
- **Name**: name of the preset (by default the band wavelength denomination) that will be shown in (C.5)
- **F (kHz)**: Base frequency in kHz. This is the RF zero frequency of the FT8 baseband
- **df (kHz)**: Channel offset in kHz from device center frequency.
You can edit these values by clicking on the cell in the table.
<h4>C.1.4: Add preset</h4>
Use this button to create a new preset. It will take the values from the row of the selected cell in the table (if selected) and put the new preset at the bottom of the table
<h4>C.1.5: Delete preset</h4>
Delete the preset designated by the selected cell in the table.
<h4>C.1.6: Move up preset</h4>
Move up the preset designated by the selected cell in the table.
<h4>C.1.7: Move down preset</h4>
Move down the preset designated by the selected cell in the table.
<h4>C.1.8: Restore defaults</h4>
This restores the default band preset values:
- **160m**: 1840 kHz
- **80m**: 3573 kHz
- **60m**: 5357 kHz
- **40m**: 7074 kHz
- **30m**: 10136 kHz
- **20m**: 14074 kHz
- **17m**: 18100 kHz
- **15m**: 21074 kHz
- **12m**: 24915 kHz
- **10m**: 28074 kHZ
- **6m**: 50313 kHz
- **4m**: 70100 kHz
- **2m**: 144120 kHz
- **1.25m**: 222065 kHz
- **70cm**: 432065 kHz
Channel offsets are all set to 0 kHz.
<h4>C.1.9 Commit changes</h4>
Click on the "OK" button to commit changes and close dialog.
<h4>C.1.9 Cancel changes</h4>
Click on the "Cancel" button to close dialog without making changes.