Well, I measured a 6dB improvement.
- SPECAN: SDR-IQ
- TAP: VK5HW (50dB)
- ATT: 20dB
- PWR: 1000W
- ANT: Dummy Load (VSWR 1.08:1)
- Software: SpectraVue V.3.44 Beta 0
Hello and welcome from Australia, or as it's friends like to call it "OZ". Here you'll find a few things I tinker with in my spare time (not that I have much of that), I hope you'll find some of the text informative. 73 Hauke
Currently I do not use the dbx in the audio chain. I use an old HEIL PROSET PLUS (HPP) headset which I purchased second hand. Now the headset itself is just average, normally I'd be using a Sennheiser for its nice fit, excellent sound reproduction and lightweight. However, the HPP headset does have the original HC4 and HC5 microphone inserts and because the dbx in in service for a different radio I opted for the HPP for the time being.
The current setup is:
Well it was only a matter of time (a long time though) that one of the big three Amateur Radio Suppliers would follow the ANAN "PureSignal" crase.
So what is this Digital Pre-Distortion or DPD for short anyway.
Well, a tiny winey bit of techo talk first.
Every radio has an RF amplifier. This is a component which does add to the performance, and as such to the communication distance of the radio. Sometimes we use an external amplifiers to increase the performance of our radio and even though we call our amplifiers "Linear-amplifier", the RF amplifiers is quite a non-linear device. This nonlinearity creates spectral growth (IM) which leads to interference of adjacent channels.
Please note that the above is a very, and I really mean a very simplified view.
DPD is a technique to linearise an amplifier, which is basically a mechanism to improve the cleanliness of one's transmission, i.e. to reduce the spectral growth, also known as intermodulation (IM) products.
If you like to get a better understanding of DPD, checkout this description, an excellent read.
To enable DPD on the IC-7610 we need to update the Firmware of the radio to the latest firmware version, Ver. 1.40 available from ICOM Japan.
And before we go any further I'll answer the most important question first!
"So is it working?"
Yes!
To show you the difference between DPD and non-DPD I've created a few screenshots using 100W into a RF Dummy Load and using my SDR-IQ as a Spectrum Analyser. The transmitted output power of the radio has been set to 100W for these tests.
Pictures 1 and 2 are using a two tone signal recorded and installed onto the IC-7610 TX Voice memories.
So by cleaning up the signal to feed your amplifier you will gain lots of brownie points within the community.
The next step is to run the adjustments per band you'd like to operate and use DPD on.
Update:
hw@rapi4:~ $ ping -c 3 rf2k-s <-- use your amplifiers IP-address (ping 1.2.3.4)PING rf2k-s (192.168.1.11) 56(84) bytes of data.64 bytes from rf2k-s (192.168.1.11): icmp_seq=1 ttl=64 time=0.476 ms64 bytes from rf2k-s (192.168.1.11): icmp_seq=2 ttl=64 time=0.429 ms64 bytes from rf2k-s (192.168.1.11): icmp_seq=3 ttl=64 time=0.423 ms
--- rf2k-s ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2004msrtt min/avg/max/mdev = 0.423/0.442/0.476/0.023 ms
$ 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
$ 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 &
$ 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