Skip to content

Repository files navigation

RASTA — Radio Astronomy Slew • Track • Acquire

RASTA is an experimental .NET 10 WPF MVVM application for amateur radio astronomy. It is a personal, exploratory project building a real working hydrogen‑line (1420 MHz / 21cm) observation workflow — telescope control, SDR capture, and spectral reduction — around a DIY 1.4m dish, an ASCOM Alpaca-driven mount, and an RTL-SDR receiver.

There is no guarantee this project will ever be "finished" — and that's part of the fun. RASTA is a space to learn, experiment, and gradually assemble a system that produces meaningful 1420 MHz data.


🌌 Project Vision

RASTA exists because radio astronomy is fascinating — and because building your own tools to explore the universe is even more fascinating.

Long‑term aspiration:

A unified, hobby‑grade radio astronomy application that can plan observations, control a telescope, capture SDR data, reduce hydrogen‑line spectra, and visualise results — all in one place.

Whether it reaches that goal or not, RASTA is designed to be a rewarding engineering journey.


✨ What Works Today

  • A working hydrogen‑line reduction pipeline (HiStreamingAccumulator / HiStreamingPipeline): frame accumulation → DC/LO-spike excision → bandpass flattening (capture ÷ baseline) → RFI-rejected linear continuum fit → continuum subtraction → optional Savitzky–Golay or moving-average smoothing → velocity axis with an analytic LSR Doppler correction. An opt-in narrowband-RFI despike pass (robust, MAD-based detection with hysteresis growth) can excise things like a USB3/mount-controller comb spur from a spectrum before it's used. A separate fixed-256-bin port of the SKAO TTRT reference pipeline is kept alongside it for cross-checking.
  • Telescope control via ASCOM Alpaca — connect/disconnect, park/unpark, slew, track — with automatic recovery if the mount connection drops mid-session (any in-flight capture is cancelled, connection state is reset, and the app returns to Prepare with an explanation).
  • SDR capture via RTL‑SDR, with hot-plug detection (tested with a Nooelec NESDR SMArtee V5 and RTL-SDR.COM V3).
  • A real calibration routine: a gain sweep that hard-rejects any gain showing genuine ADC saturation (checked on the raw I/Q bytes, not inferred from the spectrum) and scores the survivors on flatness/spur-count/slope, followed by a baseline capture against automatically located, obstruction-checked cold-sky positions (falling back to a terminator only as an earlier, coarser step).
  • Real, measured progress reporting throughout (captured bytes, chunks processed, files read, positions processed) — not a simulated animation — for calibration, sweep capture, and chart/ mosaic generation alike, each with its own Cancel button.
  • A capture sweep that drives the mount through a plan (keeping tracking on for every slew, even if the plan itself doesn't ask for continuous tracking), saves raw IQ to FITS with full pointing (RA/Dec and Az/Alt) and site metadata baked into the header, shows a live, continuously-averaging HI spectrum as each dwell point is captured, and can be cancelled mid-run without leaving a partial FITS file behind. A Quick Capture mode grabs a single file at wherever the mount is currently pointed, for hand- or third-party-tool-positioned observing.
  • A Visualise view with four spectrum modes (HI vs. Frequency, HI vs. Velocity, SKAO TTRT, and a bandpass Ratio view for sanity-checking calibration before continuum subtraction), an optional dB scale, and automatic combining of multi-file dwell points (..._1of2.fits, ..._2of2.fits, …) selected from a single file.
  • A Mosaic tab that points at a whole session folder (one baseline + several multi-file dwell-point captures across different pointings, or a folder of downloaded LAB Survey profiles), reduces each position through the same HI pipeline, and renders it three ways: a 2D sinusoidal-projection sky heatmap (line strength or peak velocity, nice-number axis ticks/gridlines, optional smoothed/ blended render), a from-here-right-now Zenith Dome (a naked-eye-style Alt/Az view at any chosen moment), and a 3D Dome extrusion of that same view — stems or an optional fitted mesh, clickable to select the matching row in the positions table, sharing a visible-spectrum colour ramp with the 2D heatmap throughout.
  • A Plan view built around a "Radio Sky" hemisphere map — a Milky Way backdrop rendered from real HI4PI all-sky neutral-hydrogen survey data (downgraded offline to a small embedded grid, see Acknowledgments below), a plan's own capture points shown all at once or stepped through as an animation using the same ordering/ horizon-validation logic a real sweep uses (so it's genuine pre-flight validation, not just a raw grid), a toggle between the dome's usual Alt/Az reference frame and a live RA/Dec meridian/parallel grid, and a freeform "trace a region on the map" alternative to typing RA/Dec limits that auto-generates a coverage grid at a chosen angular spacing. Right-click any point to slew the mount there and hand off straight into a Quick Capture. Needs neither an SDR nor a mount to use — planning can be done fully offline — and a plan's default point spacing is suggested from the antenna's own estimated beamwidth (dish diameter, set on Prepare) rather than starting at zero.
  • A Windows installer (WiX-based MSI + Burn bootstrapper) that chains in the .NET 10 Desktop Runtime automatically, plus a one-command release build script.

RASTA is not a polished product — it's a growing, working system with some still-placeholder edges (see below).


📡 Application Overview

RASTA is structured around four workflow stages:

1. Prepare

Connect to the telescope and SDR, configure site/frequency/gain/FFT parameters, and run calibration as three independent, resumable steps: load a saved calibration, run a device gain sweep, and capture a baseline against an automatically located cold-sky position (with a manual obstruction check and re-pick loop).

2. Plan

Create observation plans — equatorial or Az/Alt sweeps, a freeform region traced directly on a sky map, or drift scans — with configurable dwell time, files per dwell point, and settle time. A "Radio Sky" hemisphere map shows the plan's own capture points (all at once or animated) against a Milky Way backdrop rendered from real HI4PI survey data, in either an Alt/Az or RA/Dec grid, and lets you right-click a point to slew the mount there and jump straight into a capture. Works entirely offline — no SDR or mount required just to plan. Plans can be saved, loaded, and reused.

3. Capture

Execute the plan: slew and track, capture raw IQ per dwell point (optionally as multiple files), show a live-updating HI spectrum built against the calibration baseline as each point is captured, and write everything to FITS with real progress feedback. Both a full sweep and a single-shot Quick Capture can be cancelled in flight.

4. Visualise

Load a baseline and/or capture FITS file (or a whole multi-file dwell point at once) and render it through one of four DSP modes, with dB scaling, optional smoothing/despiking, and an LSR velocity correction — or switch to the Mosaic tab to turn a whole session folder into a sky map.


🧱 Architecture

  • RASTA.Core — domain models, interfaces, telescope/SDR abstractions, astronomy math (LST, RA/Dec ↔ Az/Alt ↔ Galactic, LSR Doppler correction), and antenna beamwidth estimation
  • RASTA.Infrastructure — ASCOM Alpaca telescope client, RTL‑SDR capture, FFT engine, JSON storage providers
  • RASTA.Processing — the HI reduction pipeline, calibration (including cold-sky site selection), sweep planning, and the Mosaic sky-map's gridding/visualisation-data builders
  • RASTA.App — the WPF MVVM application
  • RASTA.Tests — placeholder project only; no tests yet, excluded from the default build
  • RASTA.Simulators — placeholder project only; no simulated hardware yet, excluded from the default build
  • RASTA.Setup / RASTA.Bundle — the WiX-based MSI installer and Burn bootstrapper (chains in the .NET 10 Desktop Runtime) used to build a distributable installer

🛠 Hardware

  • Telescope: ASCOM Alpaca compatible mounts, via the ASCOM Remote Server (not direct COM)
  • SDR: RTL‑SDR (tested with a Nooelec NESDR SMArtee V5 and RTL-SDR.COM V3)
  • LNA: SAWbird H1+ (used as the calibration front end)
  • Antenna: DIY 1.4m dish + hydrogen‑line feed

📈 Current Status

RASTA is in active, exploratory development. The Prepare → Plan → Capture → Visualise path is a real, working loop end to end.

  • The app connects/disconnects to an ASCOM telescope mount via the ASCOM Remote Server, offers to unpark a parked mount on connect (and to re-park on disconnect), and recovers gracefully if the live connection to the mount is lost mid-session.
  • It responds to plugging/unplugging an RTL-SDR device. An SDR (and a connected mount) must be available to unlock Capture; Plan needs neither and can be used fully offline.
  • Prepare runs calibration (gain sweep + cold-sky baseline capture) as three independent, resumable steps with their own dwell-time settings, and can reuse a previously saved calibration profile. Its Site Settings panel also takes the antenna's dish diameter and focal length, used to estimate a beamwidth and suggest a default point spacing for new plans.
  • Plan builds and saves equatorial/Az-Alt sweep, freeform region, or drift-scan plans, previewed and validated on a Radio Sky hemisphere map before ever slewing for real.
  • Capture runs a sweep plan, capturing raw IQ (optionally several files per dwell point) and showing a live HI spectrum as it goes, or a single Quick Capture at the mount's current position; either can be cancelled without leaving a partial file behind.
  • Visualise loads baseline/capture FITS (auto-combining multi-file dwell points) and renders HI Frequency, HI Velocity, SKAO TTRT, or Bandpass Ratio charts (plus a standalone frequency/power view when only a baseline or only a capture file is selected), with dB scaling, optional smoothing/despiking, and an LSR velocity correction applied from each file's recorded pointing, time, and site; its Mosaic tab turns a whole session folder into a 2D/3D sky map.
  • A release installer can be built in one step via scripts/Build-Release.ps1.

🚀 Roadmap (Aspirational)

These are hopes, not promises:

  • Real-time waterfall view
  • Automated multi-target calibration sequences
  • Multi-night drift-scan accumulation (partial support exists in the Mosaic view's full-sky grid, which is designed to fill in across many sessions over time)
  • A real automated test suite and hardware simulators (currently both stub projects)
  • Plugin system for custom processing modules

🙏 Acknowledgments

RASTA builds on work generously shared by others in the amateur/educational radio astronomy community:

  • SKA Observatory — the SkaoPipelineProcessor/SKAO TTRT mode is a C# port of the reduction pipeline from the Ska Tabletop Radiotelescope project (built out of a SKAO Design Thinking Workshop), kept in RASTA specifically to cross-check the main HI pipeline's output. RASTA's own Prepare (gain sweep + cold-sky baseline calibration) / Capture (sky spectrum, HI velocity plot) workflow follows the same shape as the SKAO tabletop telescope's. Licensed BSD-3-Clause, © 2023 SKA Observatory.
  • Daniel M. Kamiński — an early signal-averaging chain (median filter, RFI detector, intermediate/long-term averaging, background subtraction, Savitzky–Golay smoothing) was adapted from his "SDR AVE" Advanced Signal Averaging Plugin for SDR# (SDRSharp), licensed GNU AGPL-3.0. It's since been removed from RASTA — comparing it against the original plugin showed it was designed as a live, continuously-refreshing display (a sliding window), not a full-dwell integrator for a fixed recorded file, so it was never suited to reducing a whole capture into one spectrum the way HiStreamingAccumulator now does. Its one still-useful piece, the Savitzky–Golay smoothing kernel, lives on in RASTA.Processing/Dsp and is also used by HiStreamingPipeline's own optional smoothing pass.
  • HI4PI Collaboration — the Plan view's sky map background is a real Milky Way, not a drawing: it's sampled from the HI4PI all-sky neutral-hydrogen (HI) column-density survey (Effelsberg-Bonn HI Survey + Galactic All-Sky Survey combined), downgraded offline from the full HEALPix release to a small grid embedded in the app. Citation: HI4PI Collaboration et al., A&A 594, A116, 2016. Acknowledgement, reproduced as required by the data source: "The Parkes Radio Telescope is part of the Australia Telescope National Facility which is funded by the Australian Government for operation as a National Facility managed by CSIRO. The EBHIS data are based on observations performed with the 100-m telescope of the MPIfR at Effelsberg. EBHIS was funded by the Deutsche Forschungsgemeinschaft (DFG) under the grants KE757/7-1 to 7-3." Distributed via NASA's LAMBDA archive under: "Permission is granted for publication and reproduction of this material for scientific and educational purposes."

Thank you all — RASTA wouldn't have gotten this far without having real reference implementations and real data to learn from and check against.


📚 Why This Project Exists

Because building your own radio astronomy tools is fun. Because learning is fun. Because seeing a hydrogen‑line bump in data you captured yourself is magical.

RASTA is a hobby project — a place to explore ideas without deadlines, pressure, or expectations.


📄 License

GNU AGPL 3.0


🤝 Contributing

This is a personal project, but contributions may be welcomed once the core stabilises.


💬 Author

Phil Crompton Coalville, UK Software developer & astronomy enthusiast

About

A hobby‑grade .NET 10 WPF application exploring hydrogen‑line radio astronomy with telescope control, SDR capture, and spectral processing.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages