$ su -# echo "$(who am i | awk '{print $1}') ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(who am i | awk '{print $1}')# chmod 440 /etc/sudoers.d/$(who am i | awk '{print $1}')# ls /etc/sudoers.d/$(who am i | awk '{print $1}')-r--r----- 1 root root 27 May 28 20:21 /etc/sudoers.d/<your username>
$ echo "build-essentiallibusb-1.0-0-devlibusb-devlibncurses5-devlibfftw3-devlibbsd-devlibhackrf-devlibopus-devlibairspy-devlibairspyhf-devlibrtlsdr-devlibiniparser-devlibavahi-client-devportaudio19-devlibopus-dev" > /tmp/required
$ for _required in $(cat /tmp/required); do sudo apt install $_required -y; done
$ sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
$ sudo systemctl start avahi-daemon.service$ sudo systemctl status avahi-daemon.service
avahi-daemon.service - Avahi mDNS/DNS-SD StackLoaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled)Active: active (running) since Sun 2023-06-11 22:16:53 ACST; 3 days agoTriggeredBy: ● avahi-daemon.socketMain PID: 548 (avahi-daemon)Status: "avahi-daemon 0.8 starting up."Tasks: 2 (limit: 9342)Memory: 1.3MCPU: 15.899sCGroup: /system.slice/avahi-daemon.service├─548 avahi-daemon: running [sun.local]└─566 avahi-daemon: chroot helper
First check:
$ locale -aCC.UTF-8en_AU.utf8POSIX
$ sudo dpkg-reconfigure locales
Generating locales (this might take a while...)en_AU.UTF-8... doneen_US.UTF-8... doneGeneration complete.
$ locale -aCC.UTF-8en_AU.utf8en_US.utf8 <-- requiredPOSIX
$ mkdir tmp
$ cd tmp$ wget https://github.com/ka9q/ka9q-radio/archive/refs/heads/main.zip
$ unzip main.zip$ ls -ltotal 2.4Mdrwxr-xr-x 4 hw hw 4.0K May 28 16:15 ka9q-radio-main-rw-r--r-- 1 hw hw 2.4M May 28 18:16 main.zip
$ export LANG=en_US.UTF-8
$ cd ka9q-radio-main
$ ln -s Makefile.linux Makefile$ sudo make install
$ fftwf-wisdom -v -T 1 -o /tmp/wisdom rof500000 cof36480 cob1920 cob1200 cob960 cob800 cob600 cob480 cob320 cob300 cob200 cob160
$ time fftwf-wisdom -v -T 1 -o /tmp/wisdom rof500000 cof36480 cob1920 cob1200 cob960 cob800 cob600 cob480 cob320 cob300 cob200 cob160
fftw-wisdom: system-wisdom import failedPlanning transform: cob160Planning transform: cob200Planning transform: cob300Planning transform: cob320Planning transform: cob480Planning transform: cob600Planning transform: cob800Planning transform: cob960Planning transform: cob1200Planning transform: cob1920Planning transform: cof36480Planning transform: rof500000real 4m14.131suser 4m8.088ssys 0m0.048s
$ test -s /var/lib/ka9q-radio/wisdom && sudo mv /var/lib/ka9q-radio/wisdom /var/lib/ka9q-radio/wisdom.old
$ sudo mv /tmp/wisdom /var/lib/ka9q-radio/wisdom$ sudo chown $(who am i | awk '{print $1}').radio /var/lib/ka9q-radio/wisdom
$ sudo apt install wsjtx -y
$ ip a | grep "mtu 1500" | grep UP | awk '{print $2}'eno1: <- This is what the NIC is called on my system
Whatever the above command output shows, you'll might need to change the iface value in the below script. E.g. if it shows eth0 your iface line should read iface = eth0.
$ sudo mv /etc/radio/rx888d.conf /etc/radio/rx888d.conf.bck$ sudo cat << __EOF__ > /etc/radio/rx888d.conf[rx888-loop]# VK5HW customizeddescription = "RX888 40m Delta-Loop"firmware = SDDC_FX3.imgsamprate = 64800000 ; 2^8 * 3^4 * 5^5iface = eth0 ; replace this with your iface namestatus = rx888-status.localdata = rx888-pcm.localssrc = 10;gain = 1.5 ; dBgain = 10 ;dB - close to the Noise Floor, might have to increasegainmode = high ; higher gain range
__EOF__
$ sudo mv /etc/radio/radiod@wspr.conf /etc/radio/radiod@wspr.conf.old$ sudo cat << __EOF__ > /etc/radio/radiod@wspr.conf[global]overlap = 5blocktime = 20input = rx888-status.localsamprate = 12000mode = usbstatus = hf.localfft-threads = 2[WSPR]# Bottom of 200 Hz WSPR segments on each band. Center is 1500 Hz higher# sample rate must be 12 kHz as required by wsprddata = wspr-pcm.localfreq = "136k000 474k200 1m836600 3m568600 5m287200 7m038600 10m138700 14m095600 18m104600 21m094600 24m924600 28m124600"__EOF__
$ sudo reboot
$ /usr/local/sbin/rx888d rx888-loop &
NOTE: The & indicates that we would like the program (job) to run in the background.
If everything is OK the following output can be seen:
$ Using config file /etc/radio/rx888d.confLoading firmware file /usr/local/share/ka9q-radio//SDDC_FX3.imgFirmware already loadedUSB speed: 4Successfully claimed interfaceSamprate 64,800,000, Gain 10.0 dB, Attenuation 0.0 dB, Dithering 0, Randomizer 0, USB Queue depth 16, USB Request size 8 * pktsize 16384 = 131,072 bytesservice 'RX888 40m Delta-Loop._ka9q-ctl._udp' -> rx888-status.local (239.132.105.12) establishedservice 'RX888 40m Delta-Loop._rtp._udp' -> rx888-pcm.local (239.10.102.92) establishedRX888 40m Delta-Loop: iface eno1; status -> 239.132.105.12:5006, data -> 239.10.102.92:5004 (TTL 0, TOS 48, 24576 samples/packet)
$ /usr/local/sbin/radiod /etc/radio/radiod@wspr.conf &
$ KA9Q Multichannel SDRCopyright 2018-2022 by Phil Karn, KA9Q; may be used under the terms of the GNU General Public LicenseLoading config file /etc/radio/radiod@wspr.conf...Acquired front end control stream rx888-status.local (239.132.105.12)Acquired front end data stream 239.10.102.92:5004 (239.10.102.92)Front end sample rate 64,800,000 Hz, real; block time 20.0 ms, 50.0 Hzfftwf_import_system_wisdom() failedfftwf_import_wisdom_from_filename(/var/lib/ka9q-radio/wisdom) succeededservice 'wspr._ka9q-ctl._udp' -> hf.local (239.83.95.156) establishedProcessing [wspr]service 'wspr._rtp._udp' -> wspr-pcm.local (239.72.24.12) established12 demodulators started12 total demodulators started
$ wspr-decoded wspr-pcm.local
$ <DecodeFinished><DecodeFinished><DecodeFinished><DecodeFinished><DecodeFinished><DecodeFinished>1518 -19 0.7 0.475683 0 VK6LX OF88 30<DecodeFinished><DecodeFinished><DecodeFinished>1518 -17 0.3 7.040113 0 RU0LL PN53 33<DecodeFinished>1518 -27 0.4 14.096975 0 WS5L EM13 371518 -12 0.2 14.096984 0 WB7AJP CN87 331518 -23 0.3 14.097017 0 <KR6RG> DM13EM 23<DecodeFinished><DecodeFinished>
$ ls -ltotal 104Kdrwxr-xr-x 2 hw hw 4.0K May 29 00:54 10138700drwxr-xr-x 2 hw hw 4.0K May 29 00:54 136000drwxr-xr-x 2 hw hw 4.0K May 29 00:54 14095600drwxr-xr-x 2 hw hw 4.0K May 29 00:54 18104600drwxr-xr-x 2 hw hw 4.0K May 29 00:54 1836600drwxr-xr-x 2 hw hw 4.0K May 29 00:54 21094600drwxr-xr-x 2 hw hw 4.0K May 29 00:54 24924600drwxr-xr-x 2 hw hw 4.0K May 29 00:54 28124600drwxr-xr-x 2 hw hw 4.0K May 29 00:54 3568600drwxr-xr-x 2 hw hw 4.0K May 29 00:54 474200drwxr-xr-x 2 hw hw 4.0K May 29 00:54 5287200drwxr-xr-x 2 hw hw 4.0K May 29 00:54 7038600
$ ls -l 5287200total 8.7M-rwxr-xr-x 1 hw hw 2.1M May 28 00:01 230527_1430.wav-rwxr-xr-x 1 hw hw 1.9M May 28 01:17 230527_1546.wav-rwxr-xr-x 1 hw hw 1.4M May 28 09:05 230527_2334.wav-rwxr-xr-x 1 hw hw 2.6M May 29 00:47 230528_1516.wav-rwxr-xr-x 1 hw hw 2.1M May 29 00:57 230528_1526.wav-rw-r--r-- 1 hw hw 0 May 28 00:33 ALL_WSPR.TXT-rw-r--r-- 1 hw hw 0 May 29 00:55 hashtable.txt-rw-r--r-- 1 hw hw 0 May 29 00:55 wspr_spots.txt-rw-r--r-- 1 hw hw 452 May 29 00:55 wspr_timer.out-rw-r--r-- 1 hw hw 2.0K May 29 00:55 wspr_wisdom.dat
$ ls -l 14095600total 8.8M-rwxr-xr-x 1 hw hw 2.1M May 28 00:01 230527_1430.wav-rwxr-xr-x 1 hw hw 1.9M May 28 01:17 230527_1546.wav-rwxr-xr-x 1 hw hw 1.4M May 28 09:05 230527_2334.wav-rwxr-xr-x 1 hw hw 2.6M May 29 00:47 230528_1516.wav-rwxr-xr-x 1 hw hw 2.1M May 29 00:59 230528_1528.wav-rw-r--r-- 1 hw hw 36K May 28 23:34 all_wspr.bck-rw-r--r-- 1 hw hw 3.0K May 29 00:57 ALL_WSPR.TXT-rw-r--r-- 1 hw hw 3.6K May 29 00:57 hashtable.txt-rw-r--r-- 1 hw hw 45K May 28 23:34 upload.log-rw-r--r-- 1 hw hw 74 May 29 00:57 wspr_spots.txt-rw-r--r-- 1 hw hw 452 May 29 00:57 wspr_timer.out-rw-r--r-- 1 hw hw 2.0K May 29 00:57 wspr_wisdom.dat
$ cat 14095600/ALL_WSPR.TXT230528 1508 -18 -0.91 14.0969794 DP0POL JQ26 37 0 0.12 3 1 0 0 34 33 -120230528 1508 -15 0.19 14.0969838 WB7AJP CN87 33 1 0.28 1 1 0 0 39 20 16
$ curl -F allmept=@ALL_WSPR.TXT -F call=<your call> -F grid=<your grid> http://wsprnet.org/meptspots.php