1 Examining an Oddity
Another oddity on Shortwave radio was noticed this month. It was seen by Ormu on the HF Underground Discord group on the 6th of September 2023. I’m not sure if it has been back on or if it is running to some kind of schedule. Anyway, I thought I would take a bit of a deep dive into the signal since Ormu was good enough to provide a short recording. Listen below:
2 Sourcing the data
I had never read an mp3 file into python before, but it turns out there is a nicely library that can do it called ‘librosa’ - so I ’conda install’ed it into my usual computation work environment with python. From here the code to get audio data into a numpy data array is fairly simple:
x, Fs = librosa.load('10Hz_pulser_USB.mp3', sr=None)
The varibale ‘x’ becomes the data and Fs is the sampling rate. It turns out that the sampling rate is 44100 Hz and there are 755653 sampled points in the file.
3 Visualising the raw data and figuring out what it contains
Now, lets plot the entire data stream so we can get an idea of what is inside it. We should be able to see when and for how long the signals go for. Listening to the audio suggests there are several bursts of audio and in each burst there are a train of ‘chirps’
It’s pretty clear that we do see a series of bursts and within each burst there is a series of sub-bursts, which I am calling chirps. It seems like the first burst is shorter than the rest, and so is the last burst. Just by hand-counting, the other bursts have 18 chirps while the first and last do not. No doubt this is because the recording started mid-burst and ended mid-burst. I want this analysis to be consistent so I’m only going to look at bursts that have a complete set of chirps. I can also see that the number of samples between the bursts looks to be about 88000 samples, which is a guess based on expecting the bursts to be some multiple of seconds. 2 seconds at 44100 sampling rate is 88200 samples, which is my first guess for the time between bursts. I’ve marked in red vertical lines what I think is the spacing between bursts, they are 2 seconds apart.
Zooming into the start of the first complete burst (around 74000 sample mark), we can see when it begins and for how long it lasts. I will plot a zoomed in region of the first complete burst that lasts for a little over 2 seconds. Specifically, I will plot 90000 samples starting at sample 74000.
Great, we can see better at what sample the first complete burst starts at and when the second complete bust starts as well. My guess of 2 seconds or 88100 samples per burst is starting to look right since selecting 90000 samples has run nicely into the next burst.
Some fooling around shows me that this first complete burst started around sample 74830 and the end of the last chirp within the burst was around sample 150730. I’ll zoom in on these regions to show you:
So each burst lasts for 150730 - 74830 samples, or 75900 samples (or about 1.721 seconds). Assuming a burst period of 2 seconds, we can now select out the 7 complete bursts. Below of a plot of that, with red verticle lines marking the start of a burst and the blue lines marking the end of a burst.
Because the spacing of these lines is based on a sample spacing of 88200 samples or 2 seconds, it looks like my guess of bursts repeating every 2 seconds is correct. Next, I will extract each burst into its own data variable and plot each one. Obviously, I like plots.
There is some interesting stuff in these bursts. Firstly, my spacing seems correct and yes, there are always 18 chirps in each burst. The first chirp always seems a little louder, but I assume this is because for the first chirp the AGC has not fully kicked in from high gain during the abscence of signal between bursts. I don’t think it actually encodes anything.
What is interesting is in the 3rd and 4th burst, the 12th and 4th chirp, respectively seem to have less signal in them. I will zoom in on the third burst between the 11th and 13th chirp to show you what I mean:
Again, some zooming in suggests that each chirp is spaced about 4410 samples long, or 100 milliseconds. Also, each chirp appears to be about 20 milliseconds long, or 882 samples. So lets plot Burst #3 again but with lines marking the start of each chirp at a sampling distance of 4410 samples and the end 20 milliseconds later:
Lets extract all these chirps now from burst #3 and plot them.
And we can clearly see that chirp #12 in burst #3 is short. The others contain what looks like interesting frequency information and what look like phase shifts as well. Well maybe. We need to do some Fourier transforms to find out!
4 Visualizing the Frequency Information in the Chirps
Next, let’s look at the Fourier transform of each of these signals. First of all, the bandwidth for the signal seems to stretch from 2000 Hz to 10000 Hz, or about 8000 Hz wide. Most receivers do not intend to receive this within a standard USB audio pass. We also see there doesn’t really seem to be a pattern here. There is no obvious frequency shift keying (FSK) or phase modulation. Also, I plotted the Y axis the same way for each plot, so you can see some do have taller peaks than others, but there is no obvious pattern to it. I really have no idea what, if any, information is contained in these frequency patterns. If you have any ideas, let me know! We can also see how Chirp #12 looks ‘broader.’ This is because the signal duration is shorter, leading to broader or less well-defined frequency information or discrimination.
5 Visualizing the entire recorded signal
Now, let’s look at the entire signal over the 17.13 seconds of the recording. To do this, I chunked the data into 10 msec chunks, so there are two chunks (2x10 ms) for each chirp (20 ms). Each chunk is 441 data points (441(points)/44100(samples per secon) gives the 10 ms. This also gives me 1713 chunks since I have 17.13 seconds of recording. So, doing a Fourier transform on each of the 1713 chunks of 441 data points gives the following trace, which is somewhat like a trace you might see on an SDR waterfall, for example.
This trace is telling me a few things. Firstly, over the entire recorded signal, just about all frequency signals end up in the 2000 to 10000 Hz range. This is certainly a design feature of whatever mode this is supposed to be. Secondly, I see selective fading, a property of the ionosphere that reflects specific frequencies differently. Look at the 13-second mark. There is a significant drop in signal intensity between 6000 and 7000 Hz. This depression in signal shifts from left to right (increasing in frequency) with time.
This ‘may’ be some form of intensional modulation, but it would seem to be a slow change compared to the chirps themselves. Each chirp is more likely to contain different information. Otherwise, why chirp? Also, selective fading is quite common and becomes quite pronounced when a band (frequency range) is about to stop being well reflected by the ionosphere. It also appears that these quite predictable sloping depressions over a time scale of seconds and deliberately modulating an HF signal like this seem ill-advised. Finally, it’s worth noting that I don’t see any real evidence of any modulation of these chirps. A couple of them during bursts were shorter than typical (2 ms instead of 10 ms). So for now, what this was will remain a mystery.