SIXMILE RUN

LAB-012 · build guide

Reading Your First Hydrogen-Line Spectrum

Priya Anand ·

Most of my work on this project is reading structure out of noisy data, so Dee asked me to write this one. The hydrogen line is a gentler version of the same problem: the signal is real and well understood, but it arrives tangled up with the shape of your own receiver, and the first job is separating the two. This paper walks through a first spectrum from raw output to a velocity profile you can compare with anyone else’s.

It assumes you’ve done the observing session in LAB-009 and have at least one on-source spectrum and one reference spectrum, each integrated for a minute or more.

Step 1: what you’re looking at before you touch it

Plot the raw on-source spectrum: power against frequency, over the 2 MHz or so the SDR covers. You will see:

  • A broad hill or plateau. This is the bandpass: the SAW filter’s passband multiplied by the SDR’s own frequency response. It dominates everything and it isn’t the sky.
  • Roll-off at the edges. The SDR’s anti-aliasing filters. Ignore the outer ten percent or so of the band.
  • Possibly a narrow spike at the exact centre. Many SDR setups show a small artifact at the tuned frequency. If it’s dead centre and stays there when you retune, it’s the receiver. Tune so the line isn’t on top of it.
  • Possibly narrow spikes elsewhere. Interference, usually local. The 1400 to 1427 MHz band is internationally protected for radio astronomy, and transmitting in it is prohibited, but harmonics and mixing products from nearby electronics don’t read the regulations. A spike that is only one or two channels wide is not hydrogen.
  • Somewhere on the hill, a broader, softer bump. That’s the line, if you can see it at all before processing.

Step 2: remove the bandpass

Divide the on-source spectrum by the reference spectrum, channel by channel, and subtract one. The receiver’s shape is in both and cancels. The line is only in one and remains. The result is the fractional excess over the reference: a flat line near zero, with the hydrogen standing above it.

In practice it won’t be perfectly flat. The bandpass drifts with temperature and the reference never matches perfectly, so you’ll usually see a gentle slope or curve left over. Fit a low-order polynomial (a straight line or a gentle curve) to the parts of the spectrum outside the line, and subtract it. Don’t fit through the line itself or you’ll subtract part of your signal. If you’re not sure where the line ends, start by excluding a wide window and narrow it as you learn.

Two common failures: the divided spectrum is wavy with a period of a few hundred kHz (a standing wave in the cable between the LNA and the SDR, or between the feed and the dish; it often changes with cable length), or it has a big slope (the reference was taken too long before or after the on-source spectrum). Take references close in time to the on-source data, and alternate if you can.

Step 3: put velocity on the horizontal axis

Frequency is the wrong axis for interpreting the line. What you want is the velocity of the hydrogen relative to a standard reference frame, the local standard of rest (LSR), so that your spectrum is comparable with anyone else’s and with the published surveys.

Two conversions:

  1. Frequency to topocentric velocity. In the radio convention, v = c × (f₀ − f) / f₀, with f₀ = 1420.405751768 MHz. Lower frequency means receding, positive velocity.
  2. Topocentric to LSR. Add the projection of your own motion: Earth’s rotation, Earth’s orbit around the Sun, and the Sun’s motion relative to the LSR, all projected along the direction you were pointing at the moment you observed.

The Doppler calculator does both. Benches 1 and 2 show two examples. A peak at 1420.000 MHz toward l = 30° in October is +85.6 km/s topocentric and about +74 km/s LSR, the correction being about −11 km/s. A peak at 1420.620 MHz toward l = 120° is −45 km/s topocentric and about −30 km/s LSR.

The correction is not small. Benches 3 and 4 make the point: the same observed frequency, toward the same longitude, gives about +147 km/s LSR in April and about +91 km/s in October. The difference is Earth’s orbital velocity pointing toward or away from that part of the sky at different times of year. If you compare two spectra from different seasons without the LSR correction, the line will appear to have moved by tens of km/s, and it hasn’t.

One more correction: your dongle’s frequency reference. The RTL-SDR Blog V3 has a 1 ppm TCXO, and 1 ppm at 1420 MHz is 1.4 kHz, about 0.3 km/s. That’s well below a channel, so on the V3 it can usually be ignored. Older dongles without a TCXO can be off by tens of ppm and need calibrating against a known carrier first.

Step 4: read the shape

Once the axis is LSR velocity, the line’s shape tells you about Galactic structure. The Milky Way rotates, and gas at different distances along your line of sight moves at different velocities relative to us. Each peak in the profile is gas at a different place along the sightline, sorted by velocity.

Toward the inner Galaxy (0° < l < 90°) the line spreads over positive velocities, often from near zero to around +100 km/s or more at l = 30°. Gas closer to the Galactic centre is moving faster relative to us along the line of sight, up to a maximum at the point where the sightline passes closest to the centre: the tangent point. The high-velocity edge of the profile is that tangent point. Multiple peaks are usually separate spiral arms crossed by the sightline. LAB-013 turns that edge into a rotation curve.

Toward the outer Galaxy (90° < l < 180°) the velocities are mostly negative. Gas outside the Sun’s orbit is moving more slowly around the Galaxy than we are, and in this direction that shows up as approach. Distinct peaks at negative velocity in this range are commonly attributed to the Perseus arm and more distant structure.

Toward the anticentre (l = 180°) everything is near 0 km/s. The rotation is almost perpendicular to your line of sight, so there’s little radial velocity to measure. It makes a good check: if your l = 180° line isn’t centred near zero after the LSR correction, something in your conversion is wrong.

Off the plane, at higher Galactic latitude, the line gets weaker and narrower, dominated by nearby gas at low velocity.

What not to over-read

With a horn’s 20 to 25 degree beam, you’re averaging over a large patch of sky, so individual features blend. Small bumps near the noise level are not spiral arms until they show up on more than one night with the LSR correction applied. And the vertical axis, unless you’ve calibrated, is in arbitrary units. You can calibrate roughly by comparing the receiver’s output pointed at the ground (around 300 K) and at cold sky (a few tens of K), which gives you a scale. Until then, compare shapes and velocities, not heights.

What to keep

For every spectrum: date and UTC time, latitude and longitude, where the antenna pointed (as l and b, or RA and Dec), centre frequency, sample rate, channel width, integration time, gain setting, and how you took the reference. With those, any spectrum can be redone, re-corrected or compared years later. Without them it’s a picture.

We keep this metadata for every capture at Sixmile Run, including the ones that are only hydrogen. It is the most useful habit the project has.


The Radio Sky and How to Observe It covers spectral-line reduction in more depth than we have space for here. It’s an affiliate link, like the others on this page. If you were buying it anyway, it helps.

On the bench

The numbers in this paper, worked with the same code as our calculators. Open any of them to change the inputs to your own parts.

Bench 1 · TOOL-01Inner Galaxy: a peak at 1420.000 MHz toward l = 30°, 9 October 2026Example frequency, not a measurement. Site 40° N 75° W, time of transit.
InputValue
Observed frequency (MHz)1420
Date (UTC)2026-10-09
Time (UTC)22:30
Latitude (°)40
Longitude (°E)-75
Galactic l (°)30
Galactic b (°)0
v LSR
+74.4 km/s
Tune for 0 km/s LSR
1420.3523 MHz
Topocentric velocity
+85.6 km/s
LSR correction
−11.3 km/s

Open the calculator with these values →

Bench 2 · TOOL-01Outer Galaxy: a peak at 1420.620 MHz toward l = 120°, 10 October 2026Above the rest frequency, so approaching. Same site, time of transit.
InputValue
Observed frequency (MHz)1420.62
Date (UTC)2026-10-10
Time (UTC)04:10
Latitude (°)40
Longitude (°E)-75
Galactic l (°)120
Galactic b (°)0
v LSR
−29.9 km/s
Tune for 0 km/s LSR
1420.4785 MHz
Topocentric velocity
−45.2 km/s
LSR correction
+15.4 km/s

Open the calculator with these values →

Bench 3 · TOOL-01The same frequency, l = 30°, six months earlierSame pointing, same observed frequency as the next card. Only the date changes.
InputValue
Observed frequency (MHz)1419.92
Date (UTC)2026-04-09
Time (UTC)10:30
Latitude (°)40
Longitude (°E)-75
Galactic l (°)30
Galactic b (°)0
v LSR
+146.8 km/s
Tune for 0 km/s LSR
1420.6155 MHz
Topocentric velocity
+102.5 km/s
LSR correction
+44.3 km/s

Open the calculator with these values →

Bench 4 · TOOL-01…and in October
InputValue
Observed frequency (MHz)1419.92
Date (UTC)2026-10-09
Time (UTC)22:30
Latitude (°)40
Longitude (°E)-75
Galactic l (°)30
Galactic b (°)0
v LSR
+91.2 km/s
Tune for 0 km/s LSR
1420.3523 MHz
Topocentric velocity
+102.5 km/s
LSR correction
−11.3 km/s

Open the calculator with these values →

Equipment mentioned in this piece