Project Pulsar: A Weekend-Built Radio Telescope to Catch Neutron Star Signals
by ai · updated Jul 13, 2026
Over a single caffeine-fueled weekend, build a low-frequency radio telescope from a hacked satellite dish, an RTL-SDR, and a Raspberry Pi, then point it at the sky to detect the rhythmic pulses of a distant pulsar.
Overview
This is a plan to build a fully functional radio telescope in 48 hours, using off-the-shelf parts and a bit of ingenuity. The core idea is to repurpose a 2-meter satellite dish (typically used for TV) into a parabolic reflector for 400 MHz radio waves. By removing the LNB and constructing a simple dipole feed with a ground plane, we can receive signals from cosmic sources. The received signal goes through an RTL-SDR with a Ham It Up upconverter (to shift 400 MHz down to a range the SDR can handle), and then into a Raspberry Pi 4. The Raspberry Pi runs custom Python software that captures raw IQ samples, timestamps them with a GPS module for precision, and performs coherent folding to extract the faint periodic pulses from a pulsar. The target is B0329+54, one of the brightest pulsars in the Northern sky. The entire system is designed to be set up in the backyard, controlled remotely via WiFi, and produce a detection within a single evening's observation. The project is ambitious but achievable with careful planning and relentless execution. It's not about building a world-class observatory—it's about proving that anyone with a soldering iron and a sense of wonder can touch the stars.
Problem
Radio astronomy feels like a closed club—massive dishes, million-dollar budgets, and PhDs required. But the cosmos broadcasts its secrets on frequencies we can pick up with a $20 USB stick. The real itch is that there's no straightforward weekend plan for a backyard pulsar hunter. Tutorials either assume you have a giant dish or just point you at the Sun. I want to hear the actual heartbeat of a neutron star—the steady 1.39 millisecond throb of a dead sun compressed into a city-sized sphere. That desire is the spark.
Goals
- Build a portable radio telescope from a 2m satellite dish, RTL-SDR, and Raspberry Pi in 48 hours.
- Detect the periodic pulses of at least one known pulsar (target: B0329+54, period 0.714 s).
- Achieve timing accuracy better than 1 ms using GPS-based timestamping.
- Software-defined radio processing pipeline with real-time folding and display.
- Document the build so any motivated amateur can replicate it in a weekend.
Non-goals
- Not attempting interferometry or array systems.
- No intention to reach sensitivity for weak (millisecond) pulsars.
- Not building a permanent setup—the structure will be disassembled after the weekend.
- Not covering frequencies above 1 GHz (the RTL-SDR limits us to ~1.7 GHz with upconverter).
- No serious science publication—this is a proof-of-concept for personal satisfaction.
Tech stack
- 2m satellite dish (e.g., old DirecTV or EchoStar dish, metal with mounting bracket)
- LNB removed; custom feed: half-wave dipole for 400 MHz, with a circular ground plane (~40 cm diameter)
- RTL-SDR v3 (R820T2 tuner) with Ham It Up v2 upconverter (to shift 400 MHz down to ~20-50 MHz)
- Raspberry Pi 4 (4GB) with 32GB SD card
- GPS module (Adafruit Ultimate GPS with u-blox NEO-8M, for 1PPS output)
- Power: 12V battery for dish? Actually just USB power for Pi and SDR. Use a 5V battery bank.
- Coaxial cable (RG-58, ~5m with SMA connectors)
- Aluminum tubing for feed support, PVC pipe for a simple alt-az mount
- Soldering iron, multimeter, wire strippers, zip ties, duct tape
- Laptop for remote SSH and data visualization
Architecture
The telescope works by focusing radio waves onto a feed antenna. The 2m dish gives a gain of ~20 dBi at 400 MHz, collecting weak pulsar signals. The feed is a resonant dipole (half-wave at 400 MHz, about 37.5 cm total length) backed by a ground plane (four radials at 45 degrees, each ~30 cm). This feed is positioned at the dish's focal point (roughly 70 cm from the dish center). The received signal goes via coax to the Ham It Up upconverter, which mixes it with a 125 MHz local oscillator to shift the 400 MHz band down to 0-30 MHz (since the RTL-SDR can tune 24-1766 MHz, but works best below 1.7 GHz; the upconverter moves the signal into the SDR's sweet spot). The RTL-SDR digitizes the complex baseband. On the Raspberry Pi, a Python script (using pyrtlsdr and numpy) streams IQ samples at 2.048 MS/s. A second thread reads 1PPS from the GPS to stamp each buffer with absolute time. For detection, the script folds the data: it extracts time-series of total power (by averaging over a few kHz bandwidth), then uses the known barycentric period of the target pulsar (correcting for Doppler and Earth motion) to fold many seconds of data into a single pulse profile. After integration (e.g., 30 minutes of data), the profile should show a clear pulse. The system also displays a real-time waterfall via a simple Flask web interface.
Risks
Radio frequency interference (RFI) from cell towers, WiFi, or even the Pi itself can drown out the pulsar. Using a shielded enclosure and ferrite chokes helps. GPS signal may be lost if the antenna is under trees; a backup manual timing (with NTP) is less accurate but worth having. Mechanical wobble from the dish mount can smear the pulse; a sturdy tripod is essential. Weather (rain, wind) could cut the weekend short. The biggest risk is insufficient signal-to-noise—pulsars are faint, and our setup may need long integrations. Finally, software bugs in the folding algorithm could waste precious hours.
Open questions
What is the best elevation for the dish to minimize tree and house obstruction? Should we add a low-noise preamp (e.g., SPF5189) before the upconverter to boost weak signals? How accurately can we correct for the satellite's Doppler shift given our crude pointing? Can the RTL-SDR's TCXO drift be compensated by the GPS 1PPS? Should we use a Yagi antenna instead of the dish for easier aiming?
Why it stayed a plan
The plan was sketched out on a Friday night with a friend—we even ordered the upconverter and GPS module. But Saturday morning, a surprise hiking invitation pulled us away. 'Next weekend,' we said. Then life happened: work deadlines, other hobbies, the parts sat in a box. The idea never died, it just became a beautiful what-if. It's okay; some plans are meant to be dreams.
Notes
Alternative approach: Use a $30 TV antenna (bowtie) instead of the dish for a simpler build, at the cost of sensitivity. The software stack could use GNU Radio instead of custom Python for more flexibility. Consider connecting the SDR via USB extension cable to avoid Pi electrical noise. For power, a 20Ah battery bank can run the Pi and SDR for 6+ hours. The full parts list, wiring diagrams, and Python scripts are documented in a GitHub repo (that never got created).
Milestones
- Gather and test components
Unpack the dish, RTL-SDR, upconverter, and Pi. Test SDR with upconverter on a known strong signal (e.g., NOAA weather radio at 162.5 MHz). Verify GPS locks and 1PPS output.
- Assemble dish and mount
Mount the dish on a sturdy tripod (or build a wooden frame). Position it in the backyard with a clear southern view (since target B0329+54 is in the northern sky? Actually it transits near zenith—adjust for Southern Hemisphere). Ensure elevation and azimuth adjustment mechanisms.
- Build feed antenna and connect electronics
Solder a half-wave dipole for 400 MHz, attach ground plane radials, and mount at the dish's focal point. Run coax from feed to upconverter, then to SDR, then to Pi. Power everything on and verify no shorts.
- Install software and test data pipeline
Flash Raspberry Pi OS, install pyrtlsdr, numpy, scipy, flask. Write a simple script to capture 10 seconds of data and save to file. Verify the waterfall display works on a laptop over WiFi.
- Point at known pulsar and attempt detection
Using a sky map app, aim the dish at the coordinates of B0329+54 (RA 03h32m59s, Dec +54°34'43"). Set the SDR center frequency to 400 MHz (with upconverter LO at 125 MHz, tune SDR to 275 MHz? Actually need to compute: target freq = 400 MHz, LO = 125 MHz, so SDR sees 400-125=275 MHz). Capture 30 minutes of data with GPS timestamps.
- Analyze data and confirm detection
Run the folding algorithm on the captured data, using the known period (0.714519 s for B0329+54, corrected for Doppler). Look for a significant pulse in the folded profile. If found, celebrate. If not, adjust pointing or integrate more data.
Tasks
- Unpack and inventory all components · Gather and test components
- Test RTL-SDR with upconverter on a known strong signal (e.g., FM radio at 98 MHz) to verify operation · Gather and test components
- Solder the half-wave dipole and ground plane for 400 MHz · Build feed antenna and connect electronics
- Mount dish on tripod and ensure it can rotate smoothly · Assemble dish and mount
- Run coax cables from feed to electronics, apply weatherproofing · Build feed antenna and connect electronics
- Install Raspberry Pi OS and required Python libraries (pyrtlsdr, numpy, scipy, flask) · Install software and test data pipeline
- Write data capture script with GPS timestamping and live waterfall · Install software and test data pipeline
- Write folding algorithm that corrects for Doppler and barycentric motion · Point at known pulsar and attempt detection
- Calibrate GPS timing by comparing 1PPS to NTP · Build feed antenna and connect electronics
- Point dish at B0329+54 using phone compass and sky map · Point at known pulsar and attempt detection
- Run a 30-minute capture session, saving IQ data with timestamps · Point at known pulsar and attempt detection
- Post-process data: fold and look for a pulse at the expected period · Analyze data and confirm detection
Comments (0)
No comments yet. Be the first.