Ionosonde characteristics

123 views
Skip to first unread message

Phil Karn

unread,
May 25, 2026, 4:07:27 AMMay 25
to ham...@googlegroups.com
What do people know about the ionosondes I frequently see sweeping
across the HF spectrum? By eye they seem to sweep upward at about 100
kHz/sec, though they're not all the same (different line slopes,
sometimes even intersecting). Do they transmit on a published schedule?
Do any chirp down? (I haven't noticed any.)

I'm looking at what it would take to de-chirp these things in
ka9q-radio. I do have a Doppler feature (carrier phase acceleration
term) that works great for satellites but is best below 2 kHz/sec (the
40 Hz FFT bin size times the 50 Hz frame rate) because it chirps the +/-
20 Hz fine-tuning oscillator. (Coarse tuning in 40 Hz steps is by FFT
bin shifting, which can only be done every 20 ms.)

I might be able to extend it by filtering more loosely, chirping the
fine oscillator more than +/- 20 Hz per 20 ms frame time, jumping
multiple bins/frame, and then more tightly filtering the dechirped signal.

But if the signal isn't a simple linear FMCW chirp it would be nice to
know. Eg, if it's actually stepped, especially if there's a timing (eg,
Barker) code transmitted during each step, I could follow it with a
delay-locked loop and measure precise timing. The signals I hear are
usually plenty strong.

Phil



Ethan Miller K8GU

unread,
May 25, 2026, 7:11:17 AMMay 25
to ham...@googlegroups.com
Phil,

There are at least four different signal types that you can see (and
depending on where you are, there are more) regularly in the U.S.:

1. Chirp sounders: these are FMCW chirps that increase at 100 or 125
kHz/sec (sometimes others) starting on a GPS second boundary, usually
at 2 MHz.
2. WSBI (Wide-Sweep Backscatter Ionogram): these are associated with
certain OTH radar systems. They are single FMCW chirps that step in
frequency. This could be probably be reverse-engineered, but it would
be painful. The specifications are not public to my knowledge.
3. Digisondes: these use a complimentary-code BPSK pulse waveform, if
I recall correctly; the user manual for the LDI DPS-4D is floating
around the web. The key with the Digisonde is to work out the
frequency list for an individual site.
4. VIPIR: Vertical Incidence Pulsed Ionospheric Radar. These use a
more advanced pulsed waveform than the Digisonde that comes in
quartets (if you are near--NVIS path--one, you can often hear them in
a SSB receiver "brap-brap-brap-brap"). They typically have a much more
nonlinear frequency-stepping regime than the others. The inventor of
this system is on the HamSCI list.

Of these, #1 is by far the easiest to tackle. Perhaps start here:

https://github.com/jvierine/chirpsounder2

Good luck!

--Ethan, K8GU.
> --
> Please follow the HamSCI Community Participation Guidelines at http://hamsci.org/hamsci-community-participation-guidelines.
> ---
> You received this message because you are subscribed to the Google Groups "HamSCI" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to hamsci+un...@googlegroups.com.
> To view this discussion visit https://groups.google.com/d/msgid/hamsci/1df819e0-e833-4f77-9f8b-c332eba2fb28%40ka9q.net.



--
http://www.k8gu.com/
Repair. Re-use. Re-purpose. Recycle.

Steve Kaeppler

unread,
May 25, 2026, 8:53:07 AMMay 25
to ham...@googlegroups.com
Hi Phil-

Ethan obviously gave a great response! I will just add a few little comments:
1. Juha also added dechirping digisondes in his code base. He sent an
email to some of us, including Nathaniel on that topic. I think Juha
is pretty regularly collecting digisondes now.
2. I have a used a SDRplay connected to a leo bodnar to collect IQ
data of chirpsounders without too much trouble. I am happy to share
data and instructions on what I did. Those could probably be
dechirped with a standard matched filter. In fact, Juha also wrote a
'midterm exam' explaining the math behind it which is straight
forward.
3. I think Nathaniel along with others have been developing a capable
SDR and with time synchronization they are using, these would be ideal
candidate signals to look at!

Thanks Phil and 73,
Steve
> To view this discussion visit https://groups.google.com/d/msgid/hamsci/CAFkosZLd_wUOTxe9N7cofhEYY3LMD-DHL35JuS3-nObMsKqWrw%40mail.gmail.com.



--

--------------------------------------------------------------------
Steve Kaeppler
steve.k...@gmail.com
cell: 262-707-0932
Amateur Radio Call: AD0AE/6

Dave Typinski

unread,
May 26, 2026, 12:56:05 AMMay 26
to ham...@googlegroups.com
Adding to Phil's very informative response regarding ionosondes, the sweeps from
AN/TPS-71 over the horizon radars look similar to ionospnde emission and are
received quite strongly in the HF band in several parts of North America.

A description here:
https://www.aj4co.org/Publications/Sweepers,%20Typinski%20%28SARAJ,%202010%29.pdf

One can also see similar HF band OTH radar sweeps from Russian, Australian, and
other nations' radar installations depending on propagation condx.
--
Dave, AJ4CO

Onno VK6FLAB

unread,
May 26, 2026, 7:20:19 AMMay 26
to ham...@googlegroups.com
Hi Phil,

Beyond having seen the phenomenon, I have no data and I've never seen anyone describing it even in as much detail as you describe it here, mind you I haven't gone looking for it either.

Apart from recording spectrograms with known and probably calibrated parameters and subsequently processing them, I'm not sure how you might even go about recording enough data in order to have something to code against.

I wonder if the various space weather services share hardware and software implementations, or if they homebrew their own.

I'd be happy to reach out to the Space Weather Service at the Bureau of Meteorology here in VK to ask, but I doubt that they're the only players in our spectrum.

Very interesting project.

--
finger painting on glass is an inexact art - apologies for any errors in this scra^Hibble

()/)/)() ..ASCII for Onno..



Ethan Miller K8GU

unread,
May 26, 2026, 8:29:56 AMMay 26
to ham...@googlegroups.com
All,

Some good additional information from Dave, especially, in this
thread. It might be helpful if I sketched out the way the code I
linked on github works.

It ingests a significant swath of the HF band (~20 MHz complex sample
rate) in real time and it has two components: a chirp (waveform)
detector and a downconverter. I'll only describe the linear chirp
(the (Q)"VI"--quasi-vertical-incidence--sounding described in Dave's
paper; it's important to note that there are additional chirp sounders
not associated with ROTHR that you will find on the air). The chirp
detector determines the start time of the sweep and its sweep rate.
The downconverter is very simple: once the start time is known, a
pair (in-phase and quadrature) of numerical-controlled oscillators
(NCOs) are started that track the sweep. The NCOs are mixed with
incoming I/Q stream, and low-pass filtered to retain the baseband (not
the double-frequency image). I believe it's implemented as complex
multiply and accumulate. The baseband can then be post-processed with
a short-time Fourier transform of the operator's choosing to trade
range/frequency resolution in the ionogram.

This is a classic FMCW radar implementation--the signals arriving at
longer ranges via skywave (or surface wave if you have a good channel)
arrive at lower frequencies due to having been transmitted earlier in
the chirp. So, the STFT will directly produce the ionogram and the
axes scales are simply a matter of scaling by the chirp rate,
decimation, and STFT parameters.

One subtle implication of this is that the FMCW waveform has a severe
range-Doppler ambiguity. That is, there are ionospheric Doppler
shifts that may masquerade as range changes or vice versa. Although
this may be partially mitigated by choosing the sweep rate, this
ambiguity was one motivation for more advanced systems to use pulsed
waveforms. However, the chirp sounder can exhibit extremely high SNR
and is very easy to process. Finally, the Doppler resolution for most
of the pulsed systems is not exquisite unless configured in a special
mode because there is a resource trade between dwelling at a frequency
long enough to do a long FFT over the pulses and completing a sweep
"before the ionosphere changes." There's no free lunch.

73,

--Ethan, K8GU.
> To view this discussion visit https://groups.google.com/d/msgid/hamsci/CACybYRUkUwqRv2e_Sc2OyfR32XLBC7Bw3d4Bh-5DEk59odKeFA%40mail.gmail.com.

googl...@cox.net

unread,
May 26, 2026, 1:55:08 PMMay 26
to ham...@googlegroups.com
Phil,

A link to the Lowell Digisonde manual:
https://digisonde.com/pdf/Digisonde4DManual_LDI-web.pdf

The waveform is not a linear FMCW signal; they use a pulsed transmission with a 13-bit Barker Code. The sounder steps in frequency (and sometimes is programmed to avoid stepping on other signals) to "find" the critical frequency associated with each layer of the ionosphere. The receiver system detects the ordinary (O) and extraordinary (X) ray returns based on the polarization detected by the crossed loop antennas and the return frequency separation.

The Digisonde is a monostatic radar system. There have been experiments conducted between sounders to perform bistatic collection, producing what is known as oblique sounding (vs vertical incident sounding). An example of an Italian oblique sounder network:
http://iononet.ingv.it/index.php/measure/ionosonde

73,

Mark Braunstein WA4KFZ

Michael Hauan

unread,
May 26, 2026, 5:30:13 PMMay 26
to ham...@googlegroups.com
I looked in to CODAR:

# codar-sounder

Opportunistic ionospheric sounder for the HamSCI (Ham Radio
Science Citizen Investigation) sigmond suite.

`codar-sounder` receives CODAR (Coastal Ocean Dynamics
Applications Radar) high-frequency (HF) chirp transmissions via
`radiod`, dechirps them, and produces a JSON Lines (JSONL) time
series of group range, virtual height, equivalent vertical
frequency, and per-peak amplitude / phase scintillation indices
along each oblique propagation path.

## Background

CODAR transmitters along the US east and west coasts radiate
**linear frequency-modulated continuous-wave (FMCW)** chirps at
well-characterised frequencies (4–50 MHz) 24/7, with timing
disciplined by the Global Positioning System (GPS). Each chirp
sweeps the transmit frequency linearly across a band of roughly
25–100 kHz and repeats at the sweep repetition frequency (SRF;
typically 1 Hz). Some sites use up-chirps (instantaneous
frequency rising through the sweep), others down-chirps; the
sweep parameters — start frequency, bandwidth, sweep rate,
direction — are stable and well-documented per site. Co-located
transmitters that share a band coordinate via time-division
multiple access (TDMA) slots, each transmitter starting its
chirp at a fixed phase within a shared repetition period.

Although the transmitters exist to image ocean surface currents,
the same signals are an excellent **opportunistic** source for
single-frequency oblique ionospheric sounding: the transmit power
is already paid for, the frequencies and chirp parameters are
public, and the coverage geometry is fixed and well-documented.
The FMCW waveform is well suited to dechirp-based ranging — beat
frequency after dechirping is proportional to the group-path
delay — so a receiver with the same chirp parameters and
coherent timing can recover ionospheric path information from a
transmitter it has no operational relationship with.

The instrument design follows Kaeppler et al. (2022, *Atmos.
Meas. Tech.* 15:4531–4545). We add multi-hop hypothesis
selection, two stages of median-absolute-deviation (MAD)
interference rejection, and per-peak amplitude / phase
scintillation indices on top of the original method; see
[`docs/METHODOLOGY.md`](docs/METHODOLOGY.md) for the technical
detail.

The rest of the details are on https://github.com/mijahauan/codar-sounder along with a functioning codebase that uses my ka9q-python library and your ka9q-radio.  Here’s an example of the output:

$ smd watch codar -v

━━━ CODAR ionospheric soundings (AC0G-B1) ━━━
        stage: decoder (codar-sounder) → JSONL spool (pre-SQLite)
        ▸ 1 station(s): SEAB
        ▸ every 15 s (CPI cadence) — per-window rollup
          + ALL records in this window, one line each
        Ctrl-C to exit.

─── win UTC 21:28:00 (15s) ──────────────────────────────────
  (no detections this window)
─── win UTC 21:28:15 (15s) ──────────────────────────────────
  SEAB  : peaks=4   layers={E,F1,F2}  SNR=+60.0 dB
    21:38:21.373  SNR +60.0 dB  GR  1431.6 km  VH  103.1 km  EVF  1.937 MHz  E           (0/4)
    21:38:21.373  SNR +60.0 dB  GR  1479.9 km  VH  214.0 km  EVF  3.890 MHz  F1          (1/4)
    21:38:21.373  SNR +60.0 dB  GR  1510.2 km  VH  261.5 km  EVF  4.658 MHz  F2          (2/4)
    21:38:21.373  SNR +60.0 dB  GR  1522.2 km  VH  278.5 km  EVF  4.921 MHz  F2          (3/4)
  → peaks=4  stations=1/1  layers={E,F1,F2}
─── win UTC 21:28:30 (15s) ──────────────────────────────────
  SEAB  : peaks=4   layers={F2}  SNR=+60.0 dB
    21:38:36.373  SNR +60.0 dB  GR  1516.2 km  VH  270.1 km  EVF  4.792 MHz  F2          (0/4)
    21:38:36.373  SNR +60.0 dB  GR  1649.1 km  VH  422.0 km  EVF  6.884 MHz  F2          (1/4)
    21:38:36.373  SNR +60.0 dB  GR  1763.8 km  VH  262.7 km  EVF  8.013 MHz  F2          (2/4)
    21:38:36.373  SNR +60.0 dB  GR  1902.8 km  VH  317.6 km  EVF  8.979 MHz  F2          (3/4)
  → peaks=4  stations=1/1  layers={F2}
─── win UTC 21:28:45 (15s) ──────────────────────────────────
  SEAB  : peaks=4   layers={F2}  SNR=+8.4/+11.0 dB
    21:38:51.373  SNR +11.0 dB  GR  1775.9 km  VH  267.7 km  EVF  8.111 MHz  F2          (0/4)
    21:38:51.373  SNR  +9.8 dB  GR  2047.8 km  VH  369.6 km  EVF  9.712 MHz  F2          (1/4)
    21:38:51.373  SNR  +9.2 dB  GR  1667.2 km  VH  439.5 km  EVF  7.091 MHz  F2          (2/4)
    21:38:51.373  SNR  +8.4 dB  GR  1637.0 km  VH  410.1 km  EVF  6.739 MHz  F2          (3/4)
  → peaks=4  stations=1/1  layers={F2}

Michael AC0G

Phil Karn

unread,
Jun 4, 2026, 4:42:36 PMJun 4
to ham...@googlegroups.com, Michael Hauan

Thanks for all the great ideas! Michael your package looks pretty neat. I notice you use ka9q-radio to grab a very wide spectrum so you can do the de-chirping yourself. I think I can add dechirping to radiod so you wouldn't have to work with such a high sample rate IQ stream.

It would generalize my existing fine tuning oscillator/mixer that follows the IFFT in the fast convolution. It's necessary because downconversion by FFT bin rotation must be in integral bins, ie, 40 Hz steps. When you give radiod a radio frequency, it computes the integer number of FFT bins to rotate and a remainder that tunes the post-IFFT oscillator in a +/-20 Hz range. (The Fourier mixing theorem: multiplication by a complex exponential, ie, mixing, in one domain becomes a shift in the other domain.) 

I can easily modify that post-IFFT mixer LO to cover a much wider range and with chirping. The rest of the channel could stay the same. You'd probably want IQ output, but I could also supply AM, SSB, FM, whatever.

I would add two parameters to the radiod control protocol, eg,

chirp rate, Hz/s (negative or positive)
chirp start time, UTC or relative input sample count

At the appointed time the post-IFFT complex LO would start from 0 Hz and ramp negative or positive at the specified rate. The predetection IF bandwidth in the fast convolution would have to be wide enough to capture the chirp during a single frame time (20 ms), so if the chirp rate is 100 kHz/sec then the IF and pre-detection filter bandwidth would be >= 2 kHz. This is actually pretty low so you could do your own additional filtering, or you could turn on my "filter2", the optional secondary filter I put in mainly for sharp CW filtering.

I've been thinking of adding optional output sample rate conversion and it wouldn't be hard to do (I already use libsamplerate in 'monitor'). That could decouple the output sample rate from the instantaneous predetection IF bandwidth. Right now they're the same, eg., for NBFM the output sample rate is usually 24 kHz because I need ~18 kHz of IF bandwidth even though the audio baseband only goes to 5 kHz or so. I haven't done it yet. I usually feed FM demodulator output to Opus, which still produces a low bit rate stream on a high input sample rate if the actual bandwidth isn't very large.

Anyway, doing the dechirp inside ka9q-radio can greatly reduce the number of samples you have to deal with.

Phil

Ethan Miller K8GU

unread,
Jun 5, 2026, 8:38:47 PMJun 5
to ham...@googlegroups.com, Michael Hauan
Phil,

This appears to be a good approach. Are you thinking of making it so
it can process either a continuous linear chirp (like the chirp
sounders, if the hardware can support it) or a band-limited (like
CODAR) FMCW chirp radar? That would be useful if both can be done
deep inside ka9q-radio.

--Ethan.
> To view this discussion visit https://groups.google.com/d/msgid/hamsci/901b5ce8-f486-40fc-a928-296a278a2a74%40ka9q.net.

Michael James Hauan

unread,
Jun 5, 2026, 10:13:49 PMJun 5
to Phil Karn, ham...@googlegroups.com
Hi, Phil --

Your proposed addition looks good!

To make sure I'm seeing the benefit the way you are: until the de-ramp happens, the chirp genuinely occupies the whole sweep span and no amount of filtering helps — but the instant you multiply by the conjugate chirp, every range of interest collapses into a beat band only a couple of kHz wide. For a typical CODAR sweep (~60 kHz span at 1 Hz sweep rare) the longest group path one would ever invert puts the beat under ~2 kHz. So a client could subscribe to a few-kHz coherent IQ stream instead of the near-Nyquist wideband currently pulled in codar-sounder — about an order of magnitude off the multicast load. We save big on the RTP stream, though not on your fast-convolution compute, which still has to span the chirp internally. But that's ok given the RTP stream costs -- especially at scale.

Two things I want to be precise about, because together they define the scope.

As a conjugate-linear-chirp multiply, it's exactly right for linear FMCW like CODAR. But it does NOT generalize to non-linear chirps (we'd need higher-order phase in the LO), or to coded waveforms — e.g. Hysell's pseudo-random noise beacon from Alaska which is a fixed-carrier complex-PRN signal, but with no sweep. (I have a separate client for that — https://github.com/mijahauan/hf-gps-tec/.)

We want to preserve downstream the features a chirp sounder exists to measure and study — e.g., group range and virtual height (fast-time FFT), per-bin Doppler (slow-time FFT), amplitude and phase scintillation (S4, sigma-phi), per-sweep interference rejection, ground-clutter masking, multi-hop inversion, modulation multiplexing slot selection, etc. — all live downstream of the de-ramp, on range or range-Doppler data. Every one of them remains possible with the de-ramp upstream in radiod as long as the output stream is coherent, sweep-framed, and un-resampled:

1. Retrigger the LO periodically at the sweep repetition frequency — a phase-deterministic sawtooth, not a one-shot ramp since FMCW resets its sweep every period.

2. Let the client (via ka9q-python) specify the start as a relative input sample count rather than UTC. Sample-count anchoring keeps the whole thing on the ADC clock (in effect, the RTP timestamps). The start instant is also how codar-sounder selects a modulation multiplexing slot: de-ramping to the target's slot collapses it to a clean beat while co-band transmitters de-ramp to a sweeping residual the output filter discards. So that one parameter does double duty.

3. If you add output rate conversion, please make it an integer decimation of the ADC rate and an integer multiple of the sweep freq — not arbitrary-ratio libsamplerate. Scintillation indices read a coherent slow-time phase vector at a fixed range bin integrated across 60 sec, which a polyphase re-sampler can screw up. Integer, clock-locked decimation is safer. filter2 set to the beat band is perfect for the sharp output filter.

Some costs to weigh against the benefits, since they're real and we should know them to mitigate them, if possible:

1. Modulation multiplexing discovery (like TDMA) can't run on a de-ramped, slot-filtered stream — because the other transmitters are precisely what gets filtered out. To compensate, we can occasionally use a full bandwidth channel like codar-sounder does now, to discover new channels when propagation permits and then run the narrowband de-chirped channels for production use.

2. Your method sets one channel per transmitter, whereas the single wide-band capture that codar-sounder uses now gives all audible co-band transmitters at once, which are then sorted in software. Single-channel should work fine, since each channel is tiny — but it does mean more channels.

3. Since de-ramp commits a rate and a start, one loses the ability to reprocess raw IQ with corrected parameters after the fact. For a well-characterized, GPS-disciplined CODAR, that probably presents an acceptable trade-off and one doesn’t have to save any IQ. I just want to mention it clearly, because it's the one genuinely irreversible thing about moving the de-ramp upstream.

Bottom line: for CODAR type linear-FMCW, your plan looks clearly worth doing. The operational picture means multiple channel profiles on the same frequency — an occasional use of the wide-band discovery channel (what I run today) and a persistent de-chirped, beat-band, IQ channel (with specific decay rate and timing) that carries everything the science pipeline needs, which affords a significant overall bandwidth savings.

Great idea and well worth trying!

73,

Michael / AC0G

Phil Karn

unread,
Jun 7, 2026, 2:08:59 AM (13 days ago) Jun 7
to Michael James Hauan, ham...@googlegroups.com
I think we're on the same wavelength. Dechirping inside radiod greatly
reduces the sample rates that both of us have to deal with, and that
seems like a good idea in any signal processing pipeline. It's
perfectly OK if this means using more channels, because channels by
themselves are cheap. It's the total sample rate across all those
channels that matters.
Phil
Reply all
Reply to author
Forward
0 new messages