Omnidirectional Station How To

From SatNOGS Wiki
Revision as of 12:47, 19 March 2020 by Vk5qi (talk | contribs) (Setting the gain: Re-write gain setting section, with examples.)
VHF Turnstile Antenna
VHF Turnstile antenna, SatNOGS Station 23

This How-To is written to get you quickly receiving satellite data with an Omnidirectional antenna (an antenna that does not move).


I'm assuming that you are a bit familiar with amateur radio, or linux in general, or you already have a Raspberry Pi.

Expectation Management

First off, I'd like to set some expectations around a SatNOGs station with an omnidirectional antenna. Yes, you will be able to hear satellites, Morse code beacons, maybe even some voice contacts on a FM transponder. But for CubeSats with 1 watt transmitters at 9600 baud, it's going to be really difficult to actually decode any data with an omni antenna. You'll definitely see squiggly lines on the waterfall plot, but demodulating the signal and extracting satellite telemetry is going to be pretty difficult.

The only way to get more signal is a better antenna. And a better antenna with more gain is going to be more directional, which means you will need a way to point that antenna at the satellite, and this How-To just got a lot more complicated. So we're not going there.

A better preamp helps a bit, see the LNA section below.

Hardware Required

This is a list of the hardware for indoor/testing purposes:

  • Raspberry Pi
    • Power supply + cable (see note below)
    • Up to 16 GB Micro SD card
    • Ethernet cable
  • RTL SDR Blog v3 dongle
  • Various short lengths of coax
  • Preamp/LNA - Or not if your coax is short, see LNA section below
  • Omnidirectional antenna - just a dual mag-mount on a cookie sheet will work OK for stronger satellites

Setting up the Raspberry Pi

I chose the Raspberry Pi 3 Model B for my station.

Downloading/Writing the SD image

The SatNOGS team has done a great job creating a Raspbian image with all the required software. Simply navigate over to the latest tag on Gitlab, and click on the "Zipped image" link under the latest tag. It's about 650 MBytes.

For linux:

  1. Unzip the downloaded file: unzip
  2. Figure out which device is the SD card. SD cards are usually start with mmcblk. sudo lsblk
  3. Write the image. This will take a while. Make sure you don't overwrite your host OS: sudo dd if=2018-08-03-Raspbian-SatNOGS-lite.img of=/dev/mmcblk0

Power notes

Thinking I could save a few bucks, I used a no-name generic 2.4 amp "tablet" USB power supply I got as a freebie, and a micro-USB cable I use for charging my phone. What a mistake! The Micro-USB cable wire gauge was too small, so there was too much voltage drop on the cable, so the Raspberry Pi reported power problems every time it was doing anything.

Power problems are indicated by either a lightning bolt in the upper right of the monitor, or the red power LED flashes on the board itself. If The Raspberry Pi processor itself is pretty forgiving of power droops because it runs at 3.3 volts. But the 5v USB ports are directly tied to input power, so undervoltage conditions will cause problems for USB devices, such as the RTL SDR dongle.

Software Configuration

Creating a SatNOGS Network account

There are several different websites to be aware of and sign in to. As of 12/2018, most of our websites use a unified login provided by Auth0, so when you create an account on one of these sites it will work across the others as well:

  • Required: Network: for registering your station and adding data to the network.
  • Recommended: Forums: for asking questions.
  • Optional: Database: Only if you want to add satellites/modes. Not necessary for receiving satellite data.

Registering the station

Log in to your Network account, and click the "+ Add Ground Station" button, or click here Fill out the short form, and your station will be added to the database. For "Antenna", pick something that encompasses the frequency range of your antenna. For wideband reception, use VHF Discone 26-1200 MHz.

The important info you'll need later on is the Station ID number, lat/lon/altitiude. I would also use a Minimum Horizon of 30 degrees or so, this will keep your station from allowing low-elevation passes to be scheduled. Make sure to keep the "Testing" flag checked, as this lets people know that your station isn't quite ready for real use.

Booting and Configuring Raspbian

After you have the image burned onto a Micro-SD card, boot it! I would recommend hooking up a keyboard and HDMI monitor, you can watch the boot process. If it doesn't boot at all, double check that you wrote the SatNOGS Raspbian image correctly.

After a successful boot, log in with username pi and password raspbian (or perhaps raspberry):

  1. Change your password! passwd
  2. Update and upgrade raspbian strech: sudo apt update then sudo apt upgrade
  3. You'll probably update a lot of packages and get a new kernel, so reboot after this: sudo reboot
  4. Run sudo raspi-config to set up the base OS. Tab switches between the options and select.
    1. 4 Localisation Options: I1 Change Locale: en_US.UTF-8 UTF-8
    2. 4 Localisation Options: I2 Change Timezone: None of the above: UTC
    3. 4 Localisation Options: I3 Change Keyboard Layout:
    4. 7 Advanced Options: A1 Expand Filesystem
      This will expand the ~2GB Micro-SD card partition to fill the entire SD card.

The Raspberry Pi needs to reboot to expand the filesystem, so do this now. It might take a while. 'sudo reboot

Disabling WiFi and Bluetooth

To disable WiFi and Bluetooth, edit the /boot/config.txt file, and add the following lines at the bottom:

# Disable WiFi and bluetooth

Then reboot again. To make sure that it worked, run ifconfig and make sure that wlan0 isn't listed. I'm not sure how to tell if bluetooth is turned off.

Additional software

I like to install this additional software with sudo apt install bmon ...

  • bmon - a graphical network usage analyzer.
  • vnstat - keeps track of your bandwidth usage
  • vim - the world's best text editor ;)
  • irssi - a terminal IRC client, for chatting on the #satnogs IRC channel

If you can't tell by now, I'm always a big fan of rebooting. It certainly doesn't take that long... sudo reboot

Configuring the satnogs-client

Once you have the base Raspbian Strech OS installed, updated, and looking good, you can configure SatNOGS. Plug in your RTL SDR if you haven't already.

First thing to do is update the satnogs-setup program. Run sudo satnogs-setup. This will probably take a while, then Update, which will also take a while. Per usual, after the update I like to reboot the raspberry pi just to make sure everything was updated and is actually running the new code.

Basic Configuration

Then the actual configuration of the station:

  1. Run sudo satnogs-setup again
  2. Basic Configuration:
    1. SATNOGS_API_TOKEN: After logging in to, this is in the upper right under "API Key"
    2. SATNOGS_RX_DEVICE: rtlsdr
    3. SATNOGS_STATION_ELEV: station elevation in meters
    4. SATNOGS_STATION_ID: The number of your station. Newer stations are high 200s.
    5. SATNOGS_STATION_LAT and LON: Latitude and Longitude in decimal degrees

Then back to the main menu and Apply to save the configuration. Ansible will run, change some stuff, and probably take a while. If you want to quit, just keep pressing back to exit.

Setting the gain

The next step is to set the gain on the RTL SDR. The aim here (in the majority of cases) is to set the gain of your station to maximise sensitivity (best noise figure), but without limiting the available dynamic range of your station due to your local noise floor. This can be achieved in a fairly simple manner, by watching the level of the receivers noise floor as you slowly increase the receiver gain. At some point the noise floor will start to rise - at this point increasing the gain any further will of no use - you will only increase the noise level, and eat into your receiver's available dynamic range (for a RTLSDR, theoretically only 48 dB).

There may be situations where strong local interferers may require the use of a lower gain setting to avoid intermodulation products appearing in the passband, though these cases would be better solved with a suitable bandpass filter somewhere in the receive chain.

First, it is good to know the available gain range of your SDR. This can be accomplished by running SoapySDRUtil --probe, which provides a considerable amount of information about the connected SDR:

pi@satnogs:~ $ SoapySDRUtil --probe
## Soapy SDR -- the SDR abstraction library

Probe device

Found Rafael Micro R820T tuner
[INFO] [UHD] linux; GNU C++ version 8.2.0; Boost_106700; UHD_3.13.1.0-3
Found Rafael Micro R820T tuner

-- Device identification

-- Peripheral summary
  Channels: 1 Rx, 0 Tx
  Timestamps: NO
  Other Settings:
     * Direct Sampling - RTL-SDR Direct Sampling Mode
       [key=direct_samp, default=0, type=string, options=(0, 1, 2)]
     * Offset Tune - RTL-SDR Offset Tuning Mode
       [key=offset_tune, default=false, type=bool]
     * I/Q Swap - RTL-SDR I/Q Swap Mode
       [key=iq_swap, default=false, type=bool]

-- RX Channel 0
  Full-duplex: YES
  Supports AGC: YES
  Stream formats: CS8, CS16, CF32
  Native format: CS8 [full-scale=128]
  Stream args:
     * Buffer Size - Number of bytes per buffer, multiples of 512 only.
       [key=bufflen, units=bytes, default=262144, type=int]
     * Ring buffers - Number of buffers in the ring.
       [key=buffers, units=buffers, default=15, type=int]
     * Async buffers - Number of async usb buffers (advanced).
       [key=asyncBuffs, units=buffers, default=0, type=int]
  Antennas: RX
  Full gain range: [0, 49.6] dB
    TUNER gain range: [0, 49.6] dB
  Full freq range: [23.999, 1764] MHz
    RF freq range: [24, 1764] MHz
    CORR freq range: [-0.001, 0.001] MHz
  Sample rates: 0.25, 1.024, 1.536, 1.792, 1.92, 2.048, 2.16, 2.56, 2.88, 3.2 MSps

The above output is for a RTLSDR, and we can see that there is information on the 'Full gain range', and 'TUNER' gain. The Full gain setting is an 'abstracted' gain range, which in this case just directly links to the 'TUNER' gain, as that is the only gain setting presented by the RTLSDR driver. Other SDRs (e.g. AirSpy) may present more gain controls. Anyway, we can see that the gain range is 0 through 49.6 dB. It's quite possible that there are only discrete gain steps within this range (and this is very true for the RTLSDR), but SoapySDR will hide that from us and automatically use the nearest valid setting. Next up, we want a way of seeing a live spectrum from the SDR. This might be difficult, especially if you're just gone and mounted a RTLSDR in a metal box up a pole! Well, SoapySDR comes to the rescue again with SoapySDR Server - this allows us to serve up the SDR on the network, and access it with a client.

Note: SoapySDR Server is not currently installed by default. It can be installed by running the commands:

$ sudo apt-get install soapyremote-server
$ sudo systemctl stop SoapySDRServer
$ sudo systemctl disable SoapySDRServer

CubicSDR is a good cross-platform client that can connect to a SoapySDR Server, and you can download the latest release by clicking here. On the RPi, you can start SoapySDR Server by running: SoapySDRServer --bind Leave this running. Open up CubicSDR on another computer, on the same network as your SatNOGS station. It will pop up a window asking you to select a SDR device. With any luck, it will have auto-detected your SoapySDR Server, and it will show up in the 'Local Net' list. If not, you will need to select 'Remote', click 'Add', and then enter the IP address of your station. You should then have a SDR showing up in the list.

CubicSDR SDR Devices List
CubicSDR SDR Devices List

You should now be able to click 'Start', and end up with a waterfall display. If the waterfall appears to glitch, or show a 'lumpy' pattern near the centre of the display, then this indicates packet loss between the SatNOGS station and your client. Try and connect via a direct LAN connection if possible. In the settings menu of CubicSDR, disable "Automatic Gain" if it is set. This will allow manual control over the gain settings via sliders that will show up at the top left of the window.

CubicSDR Main Window (Annotated)
CubicSDR Main Window (Annotated)

The above Figure shows the CubicSDR window, with the spectrum area, frequency selection, and gain settings annotated. Set the frequency to something suitable for your station. For example, if you are setting up a 70cm station, set a frequency of 437 MHz (437000000 Hz). For a 2m station, try 146 MHz. Drag the gain slider so that the gain (visible at the bottom of the slider) is set to zero. Then, slowly drag it up until you see the noise floor start to rise. The gain at which this occurs is the gain you should set in SATNOGS_RF_GAIN (Available under the 'Basic' menu in satnogs-setup). As an example, the following figure shows the noise floor observed on a station with a RTLSDR and a ~25dB masthead preamplifier, as gain levels on the RTLSDR are increased:

RTLSDR Noise Floor Variation with Gain Adjustment
RTLSDR Noise Floor Variation with Gain Adjustment

We can see that between 0 db and 20 dB of gain there is essentially no change in the noise floor - this indicates the receive system is limited by the noise figure of the RTLSDR. As the gain increases through 30 dB, the noise floor starts to lift, indicating that we are now most likely limited by either the noise figure of the preamplifier, or the local noise environment. Any increase in gain past this point just results in reduction of the available receiver dynamic range.

Checking the setup

SatNOGS versions before v1.0 come with a built-in web server on port 5000. So just surf over to IP address of your Raspberry Pi on port 5000, and you should see a screen similar to this:

Satnogs Client

Hardware Configuration

Basic hardware configuration is Antenna > Short coax > LNA > Coax > RTL SDR.


The way to measure the performance of an antenna is using a figure of merit called the Antenna gain-to-noise-temperature (G/T). It's a positive unitless number, higher the better.

G/T is comprised of antenna gain (in dB) on the top, and the system noise temperature (in Kelvins) on the bottom. There's a lot of somewhat-hard math involved, but here's the bottom line: to make your system perform better, you either need to increase the antenna gain or decrease the system noise temp. Wikipedia

Increasing the antenna gain is difficult, only because we decided on an omnidirectional antenna as the basis for this How-To. Omnidirectional antennas top out at maybe 7 dB gain or so, and that's just from pushing the radiation pattern up to the sky away from the ground. Any more gain than that and it's not an omni antenna; it's got a direction that the antenna needs to be pointed in. And we want to stay away from pointing antennas for now.

Reducing the system temperature is the the way forward then. The RTL-SDR dongle has a noise figure of 6dB or so, depending on frequency, which is pretty horrible. But it turns out that the system noise temperature is largely determined by the first device in the receive chain. Since we can't change the antenna, adding a low-noise amplifier helps quite a bit. See this youtube video from Adam 9A4QV on how a LNA helps. (Also check out his other videos about the RTL SDR dongle, and SDR in general)

More info on noise and preamps:


For testing on the bench, pretty much any antenna will do. Or if you have a whip antenna already outside for repeater work, use that. As I mentioned before, I've successfully used a mag-mount antenna stuck to a cookie sheet, sitting inside my living room window.

Also, remember that some new low emissivity double-pane windows use metal films to keep heat inside. Unfortunately, this also attenuates pretty much all RF signals, see this article for more background.

Testing the station

Pass predictions.png

Now that you have the hardware and software up and running, go ahead and schedule some passes. Navigate to your station page, and click on the Schedule button on the right side of some promising passes. The green and red bars beneath the satellite name is a quick visual indication of the number of Good and Bad passes on the network. Unfortunately, this data is not time-stamped at all, so a satellite that had a lot of Good observations a long time ago, but recently died, would still show as Green.

Rating an Observation


After each observatios, you should rate it. More information here, but the bottom line is rate the observation:

  • Good if the satellite is seen in the waterfall at all. The satellite will be a straight line in the middle of the waterfall plot.
  • Bad if the satellite is not seen.
  • Failed if there was a problem with the station, such as a mis-configuration, or if the waterfall is missing or a solid color.

For a more detailed guide on testing, see Operation

Calibrating frequency offset (PPM)

This is not super important for a new station.

Next Steps

Now that you've got this station working on the bench, what's next?

For permanent mast-mounted installation, I would recommend adding:

  • PoE splitter - Make sure to get one that actually conforms to the 48-volt IEEE 802.3af standard
  • POE injector for powering station remotely - Again, get a real 48-volt IEEE 802.3af standard
  • Large mast-mounted waterproof box
  • Waterproof cord grips, both to keep out the rain but also spiders and critters
  • Desiccant to keep the humidity down
  • Mastic tape for weatherproofing antenna connectors
  • Better omnidirectional antenna

Building a Box

External links