This is our first attempt at measuring the emissions of neutral hydrogen at 21cm / 1420 MHz.
The antenna is an open waveguide, often called a "cantenna" or "stove pipe antenna". It's made from an old piece of stove pipe. Dimensions can be calculated here. Astropeiler Stockert also has a fantastic analysis of simple DIY antennas for hydrogen observation. We drilled a small hole for a SMA connector that has the probe (1mm copper wire) soldered to the center pin. But we recommend using a bigger socket that can be screwed in, because we weren't able to solder to the stove pipe. For now the SMA connector is held in place by friction, but electrical connection to the stove pipe was checked.
The antenna is then connected to a Nooelec LaNA to amplify the signal and a 1420 MHz bandpass filter to avoid unwanted signals. We would have used the Nooelec SAWbird+ H1 instead, but it was unavailable at the time. We tried verifying the setup with a cheap NanoVNA clone, but were unable to get it to work at 1420 MHz. The seller states it works up to 1.5 GHz, but it might not go that high (which is fine for such a cheap clone); or we haven't calibrated it correctly. In the future we would also like to build our own bandpass filter, so that we can tune it easily.
Finally the signal goes into a RTLSDR Blog v4. It's a really good SDR for that price-range and can be used for a variety of projects. This SDR works well upto a sampling rate of 2.4 MHz, so we can sample a spectrum of ±1.2 MHz around the center frequency of 1420 MHz. It can go higher, but might drop some samples - which might be fine, but needs testing.
The RTL-SDR is connected to a Raspberry Pi 4 that runs software to capture and preprocess the signal. The Raspberry Pi 4 seems to be ideal, because it has WiFi, so we don't have to run an Ethernet cable to access the data, and it can handle the preprocessing easily.
Unfortunately the hydrogen emissions from cosmic sources are really weak, so you will not be able to see anything in SDR++ or a similar software. This presentation contains a good overview of what kind of processing needs to be done.
Also without any processing before storing the data you'd need to store at least ~8 GiB/h.
So it's a good idea to do some initial processing right after sampling. We split the sample stream into chunks of 512 samples and perform an FFT on it. The samples themself and the output of the FFT will be complex numbers, representing a random phase and the amplitude of each frequency component. We take the magnitude to get rid of the phase.
At this point we would get 512 32-bit floats for every 512 samples, representing a spectrum with 512 frequency bins, each 4.6875 kHz wide (2.4 MHz / 512). But we still have a lot of noise. Fortunately this noise is mostly gaussian, meaning we can remove it by taking an average. We take an average over 50000 spectra. The previously mentioned presentation used this average size, but they do another average (10x) later.
After this initial processing we will get a spectrum every ~10.6s (512 * 50000 / 2.4 MHz). Each spectrum consists of 512 32-bit floats, thus we will only have to store about 675 kiB/h.
The preprocessed signal is then stored on the Raspberry Pi's SD card, and can be streamed over the network.
TODO: Web interface
- Configure parameters and meta-data (that is put into the recording file)
- Start/Stop measurement
- Show status: measurement, system time, system temperature, location, pointing, beam coverage
- Tool to get location/pointing config via mobile phone (accelerometer/compass)
- Take measurement without antenna connected.
- Take measurement of cold sky
- Take measurement of sun (for estimation of beam width)
- Lecture
TODO
TODO
- Use SMA or N connector that can be screwed in.
- Don't use a black stove-pipe. It'll heat up quickly in the sun, degrading the signal.
- The Raspberry Pi 4 doesn't have a real-time clock. We must wait for NTP to synchronize the time before starting a measurement. A RTC module such as the DS3231 AT24C32 might be a good idea.
- Sensors:
- Compass and Accelerometer to measure elevation and azimuth. Might need extra wires to have the sensors aligned with the antenna.
- Real-time clock to keep time when NTP is not available.
embedded-halfor using I2C or SPI in Rust.
- Measure system temperature.
- Use FITS for storing measurements. Recommendations, Standard
- For coordinate transformations
astro_mathlooks good.
