Skip to content

Claudio-Sjo/rtlsdr-ft8d

Repository files navigation

rtlsdr-ft8d -- Single-Band HF FT8 transceiver based on RTL receiver

rtlsdr-wsprd

Project Status Workflow Status Last commit Commit activity

TL;DR

This project aim at decoding FT8 signals using an RTL device, usually connected to a Raspberry Pi and exploiting the RPi for generating the FT8 signal. Note that it requires proper License and HW for fulfilling the relevant rules. To install and use your dongle on a Raspberry Pi with a Raspberry Pi OS, follow these steps but first be sure that the proper firmware is up to date, if not run

sudo rp-update

echo "== Install dependencies"
sudo apt-get update && sudo apt-get -y install build-essential clang cmake libfftw3-dev libusb-1.0-0-dev libcurl4-gnutls-dev ntp git

echo "== Install rtl-sdr library (on RPi, don't use your distro package)"
git clone https://github.com/rtlsdrblog/rtl-sdr-blog
cd rtl-sdr-blog/
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DDETACH_KERNEL_DRIVER=ON -Wno-dev ../ -DINSTALL_UDEV_RULES=ON
make
sudo make install
sudo cp ../rtl-sdr.rules /etc/udev/rules.d/
sudo ldconfig
echo 'blacklist dvb_usb_rtl28xxu' | sudo tee --append /etc/modprobe.d/blacklist-dvb_usb_rtl28xxu.conf
cd ../..

#git clone https://github.com/steve-m/librtlsdr
#cd librtlsdr
#mkdir -p make
#cd make
#cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DDETACH_KERNEL_DRIVER=ON -Wno-dev ..
#make
#sudo make install
#cd ../..

echo "== Install rtlsdr-ft8d"
git clone https://github.com/Claudio-Sjo/rtlsdr-ft8d
cd rtlsdr-ft8d
git clone https://github.com/kgoba/ft8_lib
git submodule update --init --recursive
make
sudo make install

echo "== Start/test rtlsdr-ft8d"
rtlsdr_ft8d -f 2m -c A1XYZ -l AB12cd -g 29

Overview

This is an interactive RTx application allows automatic reporting of FT8 messages on Internet with PSKreporter. The initial idea was to allow a small computer like a Raspberry Pi and a RTL-SDR device to send FT8 reports for VHF/UHF bands. This kind of lightweight setup could run continuously without maintenance and help to get additional propagation reports. This code is just a glue between RTL libs and an FT8 open source library based on Karlis Goba (YL3JG) work.

The Transmitter is based on Si5351 chip for signal generation and related Power Amplification and filtering, the circuit diagram is to be added. Interface between RPi and Si5351 goes via I2C by means of WirePi library.

This application written in C does:

  • A time alignment (15 sec, required NTPd to run on the OS)
  • Start the reception using the RTL lib
  • Decimate the IQ data (2.4Msps to 3200 sps)
  • Decode FT8 signals
  • Report any CQ spots on PSKreporter (thanks to kholia https://github.com/kholia/rtlsdr-ft8d with small adjustment)
  • Repeat, again and again...
  • ft8 > /dev/null 2>1

Documentation

The service creation is described here: https://linuxhandbook.com/create-systemd-services/

Installation

  1. Install a Linux compatible distro on your device.

    For Raspberry Pi, you can download official images here.

  2. It's a good practice to update your OS. With Pi OS, run this command as usual:

    sudo apt-get update && sudo apt-get upgrade
  3. Install dependencies & useful tools (for example, NTP for time synchronization). Example with a Debian based OS, like Rasbian, or Raspberry Pi OS:

    sudo apt-get update && sudo apt-get -y install build-essential clang cmake libfftw3-dev libusb-1.0-0-dev libcurl4-gnutls-dev help2man ntp git
  4. Install rtl-sdr library manually. Do not use the librtlsdr-dev package on Raspberry PiOS. There is a know bug with this lib and rtlsdr_wsprd will not be able to get enough samples (don't decode anything & 100% CPU pattern).

    git clone https://github.com/steve-m/librtlsdr
    cd librtlsdr
    mkdir -p make
    cd make
    cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DDETACH_KERNEL_DRIVER=ON -Wno-dev ..
    make
    sudo make install
    cd ../..

Note: You may have to re-plug you dongle if it was already connected, or play with udev if not automatically detected.

  1. Clone this repository:

    git clone https://github.com/Claudio-Sjo/rtlsdr-ft8d
    cd rtlsdr-ft8d
    git clone https://github.com/kgoba/ft8_lib
  2. Build the application:

    make
    sudo make install
  3. Finally, start the application with the right parameters/options for you (frequency, callsign, locator etc... Fake example below):

    rtlsdr_ft8d -f 2m -c A1XYZ -l AB12cd -g 29

Container Image

As an alternative to the above steps, a pre-built container image containing rtlsdr-ft8d is available for use with Docker or Podman.

The RTL DVB kernel modules must first be blacklisted on the host running the container. RTL-SDR itself is not required on the host running the container. This can be permanently accomplished using the following commands:

echo 'blacklist dvb_usb_rtl28xxu' | sudo tee /etc/modprobe.d/blacklist-dvb_usb_rtl28xxu.conf
sudo modprobe -r dvb_usb_rtl28xxu

If the modprobe -r command errors, a reboot is recommended to unload the module.

You can then start the container with the right parameters/options for you (frequency, callsign, locator etc... Fake example below):

docker run --rm -it --pull=always --device=/dev/bus/usb ghcr.io/Claudio-Sjo/rtlsdr-ft8d:latest -f 2m -c A1XYZ -l AB12cd -g 29

Tips (for your Raspberry Pi and SDR dongles)

  • Use ferrite bead on the USB cable to limit the QRN
  • Use an external clean power supply
  • Cut off the display (could help to reduce QRN)
    /opt/vc/bin/tvservice -o
  • Remove unused modules (for example, /etc/modules: #snd-bcm2835)
  • Use an enclosure, and ground it

Crystal stability

Most of RTL dongles use a cheap crystal, and frequency drift can effect the decoding & performance. The use of no-name RTL dongle for VHF/UHF bands usually require crystal modification, for a better one. External clock could be also used, like GPSDO or rubidium reference clock, aligned on 28.8MHz.

Some manufacturers integrate a 0.5ppm TCXO. It's the best second option, after an external clock. Based on my personal experience:

  • NooElec NESDR SMART : Works fine out of the box
  • RTL-SDR Blog 1PPM TCXO : Works with some drift, require additional mass, or a better enclosure
  • Other no-name like : RT820, E4000, FC0012, FC0013, can work, but require modification and usually drift a lot

Performance & hardware tests

Some performance tests using:

  • Raspbian GNU/Linux 11 (bullseye) for Raspberry Pi devices
  • rtlsdr-ft8d version 0.3.4
  • Build with clang -O3 -std=gnu17
Hardware Supported RX Load Decode burst
RPi-1 ✔️ 24.4% 650ms
RPi-2 ✔️ 13.9% 290ms
RPi-3 ✔️ 9.4% 210ms
RPi-4 ✔️ 6.3% 120ms
PC (i7-5820K) ✔️ 1.8% 18ms

About

FT8 transceiver using RTL devices

Resources

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages