The Weak Signal Propagation Reporter Network is a group of amateur radio operators using K1JT's MEPT_JT digital mode to probe radio frequency propagation conditions using very low power (QRP/QRPp) transmissions.
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
Wednesday, May 31, 2023
Profiling my antenna using WSPRNet
Monday, May 29, 2023
A Multi Frequency WSPRing (whispering) System using KA9Q-Radio
$ 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
Appendix:
Wednesday, November 16, 2022
Why I chose to use an Audio Processor
I have been asked several times why I have chosen an external microphone processor. So, I thought it was time to put my reasons down on paper.
Some new amateur radio transceivers come with a reasonably good microphone and sound quite good when set up correctly. However, I'm not a hand-mic type of guy, and I'm also not a desktop kind of guy. When using a desktop mic, I either end up needing to go to the physio more often to get the knots out of my neck or it ends up becoming a "hand-mic".
Throughout my pursuit for a well-balanced SSB transmit audio, I have learned a little bit about audio bandwidth and how to squeeze my dulcet tones into less than a 3.3kHz audio bandwidth.
But I digress. To answer the question, I went with a dynamic studio microphone, and for that, I needed outbound amplification to drive the microphone. I also wanted/needed a bit of equalizing and compression to the audio signal. Additionally, I wanted to restrict some of the background noise that we all seem to endure at odd occasions. Therefore, my requirements became the following:
- It needed amplification.
- I also wanted rudimentary filtering (EQ).
- It needed noise gating.
- It required compression that is smooth.
- It should fit my hobby purse.
With my wishlist sorted, I looked at what was available at a reasonable price. There are a lot of processors available, but most of them break my hobby purse. However, I finally found that the dbx286s ticked all my requirements, including requirement #5, the cost.
Here is a quick rundown of how the dbx286s fulfills my requirements:
1. Amplification: The pre-amplifier gain control runs from 0dB to 60dB, has 48V PHANTOM POWER if a condenser microphone is being used, and an 80Hz High Pass Filter (rumble filter) to take care of any rumbling at low frequencies. This is a very steep 18dB/octave high-pass filter. This filter will also, to some extent, reduce the proximity effect one gets with directional microphones.
2. Filtering: The dbx286s has a two-stage enhancer, the LF DETAIL and the HF DETAIL. Most enhancers work by adding a controlled amount of distortion to the audio signal. However, the dbx286s functions like an equalizer. One interesting aspect is that the LF DETAIL control applies a boost at 80Hz and a cut at 250Hz simultaneously. Many of us are aware that boosting low frequencies will often make the sound quite muddy. However, this "muddiness" is usually due to boosting frequencies other than those that would subjectively add bottom end to the signal.
3.Expander/Gate: Gating the audio signal to reduce background noise is a bit of an art form, and it took me quite a while to get it right. On the 286, there are two adjustments we can apply: THRESHOLD and RATIO. The ratio is adjustable up to a level of 10:1, and the threshold is variable from OFF to +15dBu. This allows me to reduce low-level clutter in the audio signal, such as breaths, without affecting the vocal itself. It's important to remember that compression raises the noise floor of the audio signal. The expander has two LEDs, one red (-) and one green (+), indicating when the audio signal is below or above the threshold. However, I found setting the gate was easier by listening to my transmitted signal on a second receiver.
4.Compressor: The compressor has two adjustments: DRIVE and DENSITY. The compression is of the over-easy type, which means the ratio increases as the audio level gets higher. This means that the Drive control controls the degree of compression. With just these two controls, I can get a very smooth compression and apply it carefully to avoid sounding over-compressed. Additionally, the 8-stage LED bar-graph shows the amount of gain reduction occurring during compression. This is quite different from the compression used in AR transceivers.
5.Cost: Yes, I achieved this requirement. The microphone and microphone processor, at the time of purchase, set me back slightly over $0.6K.
Monday, October 31, 2022
A quick Standing Wave check on my antenna system (baselining)
- For an antenna SWR the SWR should be checked at the antenna itself rather than at the end of the feedline. The feedline will load the antenna and create an illusion of having a better antenna SWR.
- To fully understand your antenna-system, feedlines (transmission lines) should have their attenuation (cable loss) measured or calculated (length measurement tape-measure or TDR).
- Knowing the above, one can calculate the SWR at the antenna feedpoint.
- I would not use an inline SWR Meter for any of the above measurements however, using an inline SWR-meter is good insurance policy because connection problems usually show up as SWR spikes which can quickly be seen on those type of meters during operations.