Most amateur operators are familiar with over-the-horizon radars in the HF bands. They sometimes pop up in the Amateur bands, rendering several tens of kilohertzs unusable. Inspired by Balint Seeber’s talk in GRCon16, I’ve decided to learn more about radars. Here I look at a typical OTH radar, presumably of Russian origin. It was recorded at my station around 20:00UTC on 8 December at a frequency around 6860kHz. This radar sometimes appears inside the 40m Amateur band as well.
Above this post you can see a waterfall plot of the radar signal. It’s the wide red signal. It is 15kHz wide and pretty strong, but severely affected by frequency-selective fading. Looking at the IQ recording in Audacity, it is clear that the radar uses pulses with a 50Hz repetition rate. This explains the characteristic sound of this radar when received with a conventional SSB radio. It sounds similar to AC hum (here in Europe, of course).
When looking at the pulses in GNU Radio, we see that the pulses are chirps. This means that the frequency of each pulse is not constant, but it increases as the pulse is transmitted. Thus, this radar is a pulsed FMCW radar. Using the Quadrature Demod block in GNU Radio, we can FM demodulate each pulse to see how the frequency changes during the pulse. The result is noisy, but we can average the Quadrature Demod of all the pulses to get a nice plot. The recording is about 2:30 long, so we are averaging over 7000 pulses. Averaging and plotting was done in MATLAB.
The linear increasing slope corresponds to the pulse, which is an upchirp. The rest is noise, corresponding to the period when there is no pulse. To find the slope of the upchirp, we do a linear least squares fit to the part of the chirp between 4 and 8ms (which is cleaner). We get 3.714927791644071e-04 radians per sample\(^2\) (at 192kHz sampling rate), or 2179580.7606482995 Hz/s. The pulse lasts about 6.5ms, giving a total frequency variation of around 14kHz, which explains de width of the radar signal in the waterfall.
Since we know the characteristics of the pulse, we can now perform pulse compression. This amounts to computing the cross-correlation of the received pulse and the transmitted pulse. A Blackman-Harris window is used to reduce spectral leakage. The pulse arrives at my station by reflections off the ionosphere. Generally, there is multipath propagation, as some of the energy will be bounced off different regions or layers of the ionosphere. This is what causes the frequency-selective fading. The cross-correlation will give the time of flight for the different multipath components of the received pulse. Since we are not synchronized to the transmission time of the pulse, the time of flight we get is not absolute, but the times of flights of different multipath components can be compared. The time of flight can be converted to distance by multiplying by the speed of light.
Below you can see how signal processing is done in GNU Radio. In the lower plot we have the received pulse (converted to baseband) in blue and red and the template (transmitted) windowed pulse in green and black. The cross-correlation of these two signals is computed using FFTs and then the amplitude of the cross-correlation in dB units is plotted in the upper plot.
Thus, for each pulse we get the relative distances for all the propagation paths of that pulse. This sheds some light in how the pulse is reflected off the ionosphere. We can form an image by laying all the cross-correlations side by side, so the horizontal axis indicates how multipath propagation changes with time. The image below represents the magnitude of the cross-correlation in dB scale evolving in time. The horizontal axis is seconds and the vertical axis is propagation distance (relative). This image has being produced with matplotlib.
There is a small slant in this picture because the clocks on the transmitter and the receiver are not synchronized, so they drift slowly. We see that most of the energy comes from a 50km wide region. However, there are many weaker components extending up to 200km “above” the main reflection. They probably correspond to reflections off higher layers of the ionosphere. There are also some components “below” the main reflection. Here, we can also see lots of parallel components. I’m not sure of whether they correspond to a real effect or they are caused by some artefact of signal processing. For instance, cross-correlation will always introduce some amount of side-bands. However, it is weird that these parallel components are only present below the main reflection, because cross-correlation side-bands should be symmetric.
In any case, I think that the picture above is really interesting, and it is amazing how much can be achieved with basic equipment and a little signal processing. I’ve put the GNU Radio flowgraph and the python script to generate the image in a gist, in case someone is interested.