FT8 Dataset Creator is a tool developed for research purposes to automate the creation of an FT8 dataset. Its core functionality can be summarized in the following steps:
- Listen to an FT8 band for a specified duration using the WSJT-X receiver.
- Transmit a CQ call on the same frequency.
- Query PSK Reporter to identify which stations received the CQ message.
- A radio transceiver that supports CAT (Computer Aided Transceiver) control and uses audio channels for transmission and reception.
- WSJT-X (version 2.7.0 or later).
- On Linux systems, you must install rigctld. For example, on Fedora you can directly use the package manager:
dnf install rigctld - Python (3.13 or later)
- Clone the repository
git clone https://github.com/miguelboing/ft8dc.git. - Install the required packages
pip install -r requirements.txt.
-
Connect your computer to the radio and check if rigctld is successfuly installed. For more information, see the Hamlib rigctl/rigctld documentation.
Note for Windows users:
You can use the WSJT-Xrigctldversion. For the following steps, userigctld-wsjtxinstead ofrigctld.rigctld -h
-
List supported radios using the command:
rigctld -l
Find the corresponding Rig number for your radio (e.g., Flex-Radio 64XX is 2036).
-
Run the
rigctlddaemon, passing the Rig number and the communication interface:- Using a serial port:
rigctld -m 2036 -s 115200 -r /dev/ttyUSB0
- Using a network socket:
rigctld -m 2036 -r 127.0.0.1:5002
- Using a serial port:
-
Verify the
rigctldconnection by reading the radio's frequency:rigctl -m 2 -r 127.0.0.1:4532 f
Note: Use
-m 2and-r 127.0.0.1:4532as these are the default interface values created byrigctld. -
Configure WSJT-X:
- Open WSJT-X and go to
Settings -> Radio - Use the configuration shown below:
- Open WSJT-X and go to
-
Set program behavior by editing the
config.tomlfile.Refer to the inline comments in the file for configuration guidance.
-
Run the main script:
python -m ft8dc
-
After the program finishes, collected data will be saved at:
ft8dc/dataset/output/serialized_samples/Each iteration generates a new sample file.
-
Convert samples to readable formats:
-
To convert a specific sample:
python to_readable_format.py ./dataset/output/serialized_samples/sample_name.pkl.gz
This creates a folder named after the sample and exports the data as
.csvand.txtfiles. -
To convert all samples at once:
python to_readable_format.py dataset/output/serialized_samples/*
-
Contributions are welcome! Please check the for ongoing tasks. If you’d like to contribute, you can fork the repository, make your changes, and submit a pull request with your modifications.
Version 1.0 introduces a new debug tool and SWR management functionality for the ATU (available exclusively for Flex radios). The ft8-dc application has been running reliably for several months, with only minor issues related to the FlexRadio API — these are supposed to be resolved when using firmware version v3.10.10 or later.
Version 0.1 is fully functional, but several components can be improved. Currently, the transmitter is implemented entirely in Python, while the receiver still relies on WSJT-X to capture packets. Future development aims to implement the receiving functionality in Python as well, removing the WSJT-X dependency.
For additional improvements, known issues, and feature requests, please refer to the issues page.
This project includes and modifies code from ft8.py, originally written by James Kelly (VK3JPK), licensed under GPLv3.
The FT8 protocol and algorithms are based on WSJT-X by Joe Taylor (K1JT). More information: WSJT-X
Additionally, this project includes code from py-wsjtx, specifically the file wsjtx_server/pywsjtx_packets.py, which is licensed under the MIT License. A copy of the original MIT license is included in the same directory as the used file (LICENSE).
All modifications and additions to this project are licensed under the GNU General Public License v3.0 or later.
