12.31.2022 - By Onno (VK6FLAB)
Foundations of Amateur Radio
In 2016, Daniel EA4GPZ, documented how to discover the weakest signal that could be decoded using several weak signal modes, including WSPR, or Weak Signal Propagation Reporter. This is an interesting question because as you might recall, I've been experimenting with very weak signals coming from my shack. To date, my 20 milliwatts has been heard over 13 thousand kilometres away.
When you tune to a weak station you'll often hear both the station or desired signal as well as interference or background noise. The stronger the signal, the less noise you perceive. The weaker the signal, the more noise. You can express the relationship between the power of these two, the signal and the noise, as a ratio. If the power levels are the same, the so-called signal to noise ratio or SNR is 1:1. A higher ratio, like 2:1, indicates that the power of the signal is higher than the noise and a lower ratio, like 1:2 indicates that the signal is lower than the noise.
If you express this ratio in decibels, you'll end up with positive numbers where the signal is stronger than the noise and negative numbers where the signal is weaker than the noise and zero when they're the same. If I tell you that the signal report for my WSPR decode from Denmark was -28 dB, it means that the noise was much stronger than the signal.
For today I'm going to leave alone just how WSPR can report a negative signal to noise ratio and still successfully decode the signal, even though the signal appears to be buried in the noise.
That said, in this experiment, we're trying to learn something else. Using the technique detailed by Daniel, we test using different, known, signal to noise ratios to discover at what point the WSPR decoding process breaks down. This might help me understand if I can reduce my beacon output power even further and still anticipate a good chance of being decoded successfully.
To conduct his experiment, Daniel used the then current version of WSJT-X, version 1.7.0-rc1 and I'm using the current version today, 2.6.0-rc5 to repeat those tests. You might ask why I'm not taking Daniel's word for it and just using his findings. The process to decode a WSPR signal is all software and can be improved with better methodologies and algorithms. It's not unreasonable to think that in the years since Daniel's experiments things have changed, hopefully improved.
So, how does this work?
If you generate and attempt to decode one hundred different files, you can use the number of times that you count your callsign in the decode list as a percentage of success. If all of your files decode properly, the decode percentage is 100%. If only half of them are decoded successfully, it's 50% and so-on.
Similarly, if a different callsign, locator or signal power is decoded, you can count those as a percentage of false decodes. This is important because noise coming from the ionosphere can corrupt any signal. I should point out that because we know in advance what the decoded signal should be, since we created the message, we can actually count the ones that don't match what we sent. In the real world it's very hard, if not impossible, to do this, unless each transmitter also starts recording their efforts so data cleaning can be done after the fact.
A false decode happens when the software decodes a message and the result is not what was sent. Due to the way that WSPR works, this is not a case of a single character error and as a result the whole message is corrupt, wrong callsign, wrong grid square and wrong power level.
Just how prevalent this issue is, has to my knowledge so far not been discussed. Over the past year I've been working with the entire WSPR data set, nearly 5 billion reports, and mapping the data to explore just what's going on behind the scenes. Based on the raw data every single grid square on the planet has been activated. Of course this is not really the case, since there's plenty of parts on Earth where we haven't yet turned on a WSPR beacon.
Back to our experiment.
Two tools are used, "wsprsim" to generate an audio file and "wsprd" to decode it. Both come with WSJT-X and when you build the application from source, you get them as part of the process. The generator takes several parameters, one of which is the desired signal to noise ratio. If you ask it for a signal to noise ratio of -20 dB, wsprsim will generate the appropriate noise and the desired signal, combine them and build an audio file. You can then use wsprd to decode that file. If you repeat this many times, you end up with some data.
How many times?
Well, I probably went a little overboard. I generated a set for each SNR reading between 0 and minus 50 dB in 0.01 dB increments and then generated one hundred for each of those. At the point where the process broke down I doubled the resolution further to get a better idea of what was going on. About three quarters of a million tests. It took a while.
What did I learn from this?
First of all, false decodes happen at every signal level. I saw the first false decode at a signal to noise ratio of -0.07 dB. This is significant because it means that even at excellent signal levels there is a percentage of incorrect reports which explains why I'm seeing that result in real world data. When you start playing with really big numbers, even if the error rate is low, with enough data, it starts to matter. In my tests I saw an error rate of 0.03%. This means that there's at least 1.5 million false decodes in the current WSPR data set, likely more because wsprsim cannot emulate the real world of ionospheric and local noise.
On the flip-side, I also saw an overall success rate of nearly 94%. At -29 dB things start to change. Until then the decode is 100% successful, then it starts to decline to 0 at about -34 dB. Comparing Daniel's results directly, he saw 34% success at -30 dB, I'm seeing 95% at that same noise level. At -31 dB Daniel saw 6%, I'm seeing 75%. I don't see 34% until we get down to -31.6 dB and 6% at -32.4 dB. This indicates that the software has improved over the years.
It also means that with a signal report of -28 dB from Denmark, I've got a few dB to play with. I've now reduced my output power by another 3 dB, making it 10 mW. Point your antennas at VK6 and see what you can hear on 10m.
I'm Onno VK6FLAB