1 Measuring the Delay Between Radio Time Signals from WWV (Colorado, USA) and WWVH (Hawai’i, USA)
2 The Magic of Radio Wave Propagation
Imagine a beam of light racing around Earth’s equator at 299,702,547 meters per second. In just 0.134 seconds, it would complete the journey and hit us in the back. This calculation is straightforward:
But here’s where things get interesting: while light travels in straight lines and disappears beyond the horizon due to Earth’s curvature, radio waves in the High Frequency (HF) band (3-30 MHz) have a special trick up their sleeve. They can bounce off the ionosphere—a layer of charged particles in Earth’s upper atmosphere—allowing them to travel far beyond the horizon.
This remarkable property of HF radio waves enables long-distance communication without the need for wires or satellites. But it gets even more fascinating: because these waves follow predictable paths through the atmosphere, we can actually calculate how far away a radio signal originated. All we need is a reference time to compare the signal against, and we can determine the source’s distance with surprising accuracy.
This ability to “bend” around Earth’s curvature makes HF radio waves not just a means of communication, but also a tool for measuring distances across the globe.
2.1 Loading Libraries
Code
import numpy as npimport soundfile as sfimport matplotlib.pyplot as pltfrom scipy.io import wavfilefrom wavfile import read, writefrom ipywidgets import widgetsimport plotly.graph_objects as goimport plotly.io as pioimport plotly.express as pximport pandas as pdimport matplotlib.patches as patchesimport pymc as pmimport arviz as az
# 5 msec of samples at 12000 samples per second is 60 samples d =60# calculate the number of 5 msec chunksnc = stuff[1].shape[0] // d# put into a 2D-matrix of shape (nc, d)chan_I = stuff[1][:d*nc,0].reshape((nc, d))chan_Q = stuff[1][:d*nc,1].reshape((nc, d))# do Fourier transform of complex signalfft = np.abs(np.fft.fft(chan_I +1.0j*chan_Q))fft = np.fft.fftshift(fft)