Difference between revisions of "Omnidirectional Station How To"

From SatNOGS Wiki
(Configuring the satnogs-client)
m (Installing Image on Linux/Windows/MacOS (using Rasperry Pi Imager): Fix Raspberry Pi Imager link)
 
(50 intermediate revisions by 19 users not shown)
Line 1: Line 1:
 +
[[File:Omnidirectional VHF Turnstile Antenna.jpg|alt=VHF Turnstile Antenna|thumb|VHF Turnstile antenna, [https://network.satnogs.org/stations/23/ 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).
 
This How-To is written to get you quickly receiving satellite data with an Omnidirectional antenna (an antenna that does not move).
  
== Prerequisites/Background ==
+
==Prerequisites/Background==
 
I'm assuming that you are a bit familiar with amateur radio, or linux in general, or you already have a Raspberry Pi.  
 
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 ===
+
===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.
+
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. A better preamp will not help, see LNA section below.
+
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.
  
=== Hardware Required ===
+
A better preamp helps a bit, see the LNA section below.
 +
 
 +
===Hardware Required===
 
This is a list of the hardware for indoor/testing purposes:
 
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
 
  
For permanent mast-mounted installation, I would recommend adding:
+
*Raspberry Pi
* [https://www.adafruit.com/product/3785 PoE splitter] and injector for powering station remotely
+
**Power supply + cable (see note below)
* Large mast-mounted waterproof case
+
**Up to 16 GB Micro SD card
* Waterproof cord grips, both to keep out the rain but also spiders and critters
+
**Ethernet cable
* Desiccant to keep the humidity down
+
*RTL SDR Blog v3 dongle
* Mastic tape for weatherproofing antenna connectors
+
*Various short lengths of coax
* Better omnidirectional antenna
+
*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 [https://www.raspberrypi.org/products/raspberry-pi-3-model-b/ Raspberry Pi 3 Model B] for my station. SatNOGS is known to work on the RPi 3B, 3B+ and 4 models.
 +
 
 +
===Downloading/Writing the SD image===
 +
The SatNOGS team has done a great job creating a Raspbian image with all the required software.
 +
The latest download is given in the [[Raspberry_Pi#Download|Download section]].
 +
 
 +
====Installing Image on Linux====
 +
* Unzip the downloaded file:
 +
  <pre>unzip artifacts.zip</pre>
 +
* Figure out which device is the SD card. SD cards are usually start with mmcblk.
 +
  <pre>sudo lsblk</pre>
 +
* Write the image. This will take a while. Make sure you don't overwrite your host OS:
 +
  <pre>sudo dd if=<latest_image_date>-Raspbian-SatNOGS-lite.img of=/dev/mmcblk0</pre>
  
== Setting up the Raspberry Pi ==
+
====Installing Image on Linux/Windows/MacOS (using Rasperry Pi Imager)====
I chose the [https://www.raspberrypi.org/products/raspberry-pi-3-model-b/ Raspberry Pi 3 Model B] for my station. There is a Model B+ on the market right now, with a faster processor. But it takes a lot more power and apparently the Ethernet port is a USB device, which is causes some problems, according to the forums. Both are the same price, the procedures are the same.
+
{{Warning|WARNING: This section was recently added. Please test and if it works, remove this banner.}}
  
=== Downloading/Writing the SD image ===
+
This section describes the installation of installing the previously downloaded image to an SD card using the cross-platform Raspberry Pi Imager. [https://www.raspberrypi.com/documentation/computers/getting-started.html#using-raspberry-pi-imager|This guides] explains the process using this tool in more detail.
The SatNOGs team has done a great job creating a Raspbian image with all the required software. Simply navigate over to the [https://gitlab.com/librespacefoundation/satnogs/satnogs-pi-gen/tags latest tag on Gitlab], and click on the "Zipped image" link under the latest tag. It's about 650 MBytes.
 
  
For linux:
+
* Download the latest version of [https://www.raspberrypi.com/software/ Raspberry Pi Imager]
# Unzip the downloaded file: '''unzip image_2018-08-03-Raspbian-SatNOGS-lite.zip'''
+
* Connect an SD card reader with the SD card inside
# Figure out which device is the SD card. SD cards are usually start with mmcblk. '''sudo lsblk'''
+
* Open Raspberry Pi Imager and choose the previously downloaded image from "Choose OS > Use custom > artifacts.zip"
# 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'''
+
* Review your selections and click '''Write''' button to begin writing data to the SD card.
  
=== Power notes ===
+
===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.
 
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 on the monitor in the upper right (lightning bolt appears), or the red power LED flashes on the board itself. If The Raspberry Pi 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.
+
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 Account===
 +
There are several different websites to be aware of. 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 all the others as well.
 +
 
 +
*[https://network.satnogs.org/ Network]: for registering your station and adding data to the network.
 +
*[https://db.satnogs.org/ Database]: for all data on satellites and its transmitters.
 +
*[https://community.libre.space Forums]: for questions and discussions.
 +
*[https://wiki.satnogs.org/ Wiki]: this wiki for all kinds of documentation.
 +
 
 +
===Registering the station===
 +
You can add your new ground station [https://network.satnogs.org/stations/edit/ here]. When following the link it will ask you to login. Either use your existing account or register a new one.
 +
 
 +
The following information is required:
 +
* Station name, e.g. "Athens3-UHF"
 +
* Location:
 +
** Latitude (e.g., 38.0169)
 +
** Longitude (e.g., 23.7312)
 +
** Altitude above WGS84 in Meters (e.g., 20)
 +
* At least one antenna.
 +
** Click '''New antenna'''
 +
** Choose the type (e.g. Turnstile)
 +
** Add a range (e.g. VHF or UHF)
 +
** Press '''Save changes'''
 +
 
 +
Fill out the form, click '''Submit''' and your station will be added to the Network. You can leave the other settings unchanged for now.
 +
 
 +
To help your fellow operators please consider placing the following information into the "Description" field for your station: Antenna gain and location, preamp info (if any), SDR device, some kind of contact info perhaps [[Get_In_Touch#Chat_with_us_on_our_Matrix_room |irc/matrix]] or [https://community.libre.space/ community forum] username or email address.
 +
 
 +
===Booting and Configuring Raspbian===
 +
{{Warning|WARNING: This section describes steps which are not always required. When using ssh for setup, the steps might be different. This section should be updated to reflect this. }}
  
== Software Configuration ==
+
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.
  
=== Creating a SatNOGs Network account ===
+
After a successful boot, log in with username '''pi''' and password '''raspberry'''
There are several different accounts you will want to make. (Why aren't they all linked??)
 
* Required: [https://network.satnogs.org/ Network]: for registering your station and adding data to the network.
 
* Recommended: [https://community.libre.space Forums]: for asking questions.
 
* Optional: [https://db.satnogs.org/ Database]: Only if you want to add satellites/modes. Not necessary for receiving satellite data.
 
  
=== Booting and Configuring Raspbian ===
+
#Change your password! '''passwd'''
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.
+
#Run '''sudo raspi-config''' to set up the base OS. ''Tab'' switches between the options and ''select''.
 +
##4 Localisation Options: I1 Change Locale: en_US.UTF-8 UTF-8
 +
##4 Localisation Options: I2 Change Timezone: None of the above: UTC
 +
##4 Localisation Options: I3 Change Keyboard Layout:
 +
##7 Advanced Options: A1 Expand Filesystem <br />This will expand the ~2GB Micro-SD card partition to fill the entire SD card.
  
After a successful boot, log in with username '''pi''' and password '''raspbian''':
 
# Change your password! '''passwd'''
 
# Update and upgrade raspbian strech: '''sudo apt update''' then '''sudo apt upgrade'''
 
# You'll probably update a lot of packages and get a new kernel, so reboot after this: '''sudo reboot'''
 
# Run '''sudo raspi-config''' to set up the base OS. ''Tab'' switches between the options and ''select''.
 
## 4 Localisation Options: I1 Change Locale: en_US.UTF-8 UTF-8
 
## 4 Localisation Options: I2 Change Timezone: None of the above: UTC
 
## 4 Localisation Options: I3 Change Keyboard Layout:
 
## 7 Advanced Options: A1 Expand Filesystem <br />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''
 
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 ====
+
====Disabling WiFi and Bluetooth====
 +
{{Message|INFO: This step can be skipped. }}
 
To disable WiFi and Bluetooth, edit the /boot/config.txt file, and add the following lines at the bottom:
 
To disable WiFi and Bluetooth, edit the /boot/config.txt file, and add the following lines at the bottom:
  # Disable WiFi and bluetooth
+
 
 +
  # Disable WiFi and Bluetooth
 
  dtoverlay=pi3-disable-wifi
 
  dtoverlay=pi3-disable-wifi
 
  dtoverlay=pi3-disable-bt
 
  dtoverlay=pi3-disable-bt
Line 74: Line 108:
 
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.
 
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 ====
+
Note: Newer versions of Raspbian may require the following lines instead of the above.
I like to install this additional software with '''sudo apt install package'''
+
 
* bmon - a graphical network usage analyzer.
+
# Disable WiFi and Bluetooth
* vnstat - keeps track of your bandwidth usage
+
dtoverlay=disable-wifi
* vim - the world's best text editor ;)
+
dtoverlay=disable-bt
* irssi - a terminal IRC client, for chatting on the #satnogs IRC channel
+
 
 +
====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'''
 
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 ===
+
===Update the SatNOGS Client Software to latest version===
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.
+
Once you have the SatNOGS OS image installed and running you should  [https://wiki.satnogs.org/SatNOGS_Client_Setup#Updating_SatNOGS_Client_Software| Update the SatNOGS Client Software].
  
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.
+
===Configuring the satnogs-client===
 +
Now you can configure your new SatNOGS station. Plug in your RTL-SDR if you haven't already.
  
==== Basic Configuration ====
+
====Basic Configuration====
 
Then the actual configuration of the station:
 
Then the actual configuration of the station:
# Run '''sudo satnogs-setup''' again
 
# Basic Configuration:
 
## SATNOGS_API_TOKEN: After logging in to network.satnogs.org, this is in the upper right under "API Key"
 
## SATNOGS_RX_DEVICE: rtlsdr
 
## SATNOGS_STATION_ELEV: station elevation in meters
 
## SATNOGS_STATION_LAT and LON: Latitude and Longitude in decimal degrees
 
## HAMLIB_UTILS_ROT_ENABLE: no
 
Then back to the main menu and '''Apply''' to save the configuration! Ansible will run, change some stuff, and probably take a while.
 
  
==== Setting the gain ====
+
#Run '''sudo satnogs-setup''' again.
 +
#Use the up/down and TAB keys to navigate, and Enter to select an option.
 +
#Basic Configuration:
 +
##SATNOGS_API_TOKEN: After logging in to network.satnogs.org, this is in the upper right under "API Key" [no longer exsists? Add direct link]
 +
##SATNOGS_SOAPY_RX_DEVICE: driver=rtlsdr
 +
##SATNOGS_RX_SAMP_RATE: 2.048e6
 +
##SATNOGS_RX_GAIN: Refer "Setting the gain" section below.
 +
##SATNOGS_STATION_ELEV: station elevation in meters
 +
##SATNOGS_STATION_ID: The ID number of your station.
 +
##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 and update the system. If you want to quit, just keep pressing cancel 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 <code>SoapySDRUtil --probe</code>, 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
 +
----------------------------------------------------
 +
  driver=RTLSDR
 +
  hardware=RTLSDR
 +
  origin=<nowiki>https://github.com/pothosware/SoapyRTLSDR</nowiki>
 +
  rtl=0
 +
 +
----------------------------------------------------
 +
-- 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
 +
By default, SoapySDR Server may be configured to startup on boot. We probably don't want this, so run the following commands to ensure it is stopped, and will not startup on boot:
 +
$ sudo systemctl stop soapyremote-server
 +
$ sudo systemctl disable soapyremote-server
 +
 
 +
(These commands may result in errors indicating that the server wasn't running and/or enabled. This is OK!
 +
 
 +
[https://cubicsdr.com/ CubicSDR] is a good cross-platform client that can connect to a SoapySDR Server, and you can [https://github.com/cjcliffe/CubicSDR/releases download the latest release by clicking here]. 
 +
 
 +
On the RPi, you can manually start SoapySDR Server by running: <code>SoapySDRServer --bind="0.0.0.0:55132"</code>  Leave this running.
 +
 
 +
Note: If you need to use the Bias-T option of an RTLSDR, you will need to activate this manually prior to running SoapySDRServer. This can be accomplished by [[Software Defined Radio#Using RTL-SDR.com V3 Dongle.27s Bias-T Power Supply|compiling the rtl_biast utility]], and running it with <code>./rtl_biast -b 1</code> .  ('''NOTE: This advice may be outdated - need to confirm how to set the RTLSDRs bias on more recent SoapySDR versions)'''
 +
 
 +
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.
 +
[[File:Screen Shot 2020-03-19 at 10.41.52 pm.png|alt=CubicSDR SDR Devices List|none|thumb|600x600px|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.
 +
[[File:CubicSDR Main Window.png|alt=CubicSDR Main Window (Annotated)|none|thumb|900x900px|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. 
 +
 
 +
To set the gain in satnogs go back to the RPI and stop the soapy remote server with ctrl-c.  Run satnogs-setup, open the 'Advanced' menu, then the Radio settings.  Set the gain in the SATNOGS_RF_GAIN variable.
 +
[[File:SATNOGS RF GAIN.png|center|frame|Setting SATNOGS_RF_GAIN]]
 +
 
 +
 
 +
Some SDRs may present more than one gain slider. In these situations, you will need to configure SatNOGS with each gain set individually. [[Software Defined Radio#E4000 Tuner Gain Settings|Refer here]] for more information on how to do this.
 +
 
 +
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:
 +
[[File:RTLSDR Noise Floor Variation with Gain Adjustment.png|alt=RTLSDR Noise Floor Variation with Gain Adjustment|none|thumb|900x900px|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.
 +
 
 +
CubicSDR DOES NOT autorange its waterfall, in contrast, SatNOGS DOES autorange its waterfall.  When you adjust the gain in CubicSDR the waterfall background will dramatically change, but when you adjust the gain in SatNOGS the waterfall background will not change color.  See the web page documenting  autoranging waterfalls:
 +
 
 +
https://docs.satnogs.org/projects/satnogs-client/en/stable/userguide.html#satnogs-waterfall-autorange
 +
 
 +
'''Important Note: While CubicSDR is connected to the SDR, your SatNOGS ground station cannot run observations! Make sure to close CubicSDR when you have finished setting the gain.'''
 +
 
 +
===Hardware Configuration===
 +
Basic hardware configuration is Antenna > Short coax > LNA > Coax > RTL SDR -> Raspberry Pi.
 +
 
 +
===LNA===
 +
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. [https://en.wikipedia.org/wiki/Antenna_gain-to-noise-temperature 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 4-6 dBi 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 [https://www.youtube.com/watch?v=snifc_x_2sE 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 SDR noise figures:
 +
 
 +
*[https://gitlab.com/librespacefoundation/sdrmakerspace/sdreval/-/raw/master/Report/pdf/Evaluation_of_SDR_Boards-1.0.pdf Evaluation of SDR Boards and Toolchains] from the [https://sdrmaker.space/ SDR Makerspace]
 +
 
 +
 
 +
More info on noise and preamps:
 +
 
 +
*[https://en.wikipedia.org/wiki/Noise_temperature System noise from wikipedia], pretty high-level
 +
*[https://www.rtl-sdr.com/tutorial-on-properly-positioning-a-preamp-lna-in-a-radio-system/ Where to put an LNA], from rtl-sdr.com
 +
*[[SPF1589 LNA measurements|SPF5189 LNA measurements]]
 +
 
 +
 
 +
Adding a LNA can also add its own set of problems, in that it may amplify strong local signals which may overload your SDR. When adding a LNA, you will likely need to back off the gain on your SDR to avoid this. It's also possible that the strong local signals may cause distortion to occur in the LNA itself, in which case you should consider the use of a filter between the LNA and the antenna. Some example products:
 +
 
 +
*If you are experiencing issues with FM broadcast stations, a [https://www.rtl-sdr.com/rtl-sdr-com-broadcast-fm-band-stop-filter-88-108-mhz-reject-now-for-sale/ FM band-stop filter] may help.
 +
*[https://www.minikits.com.au/electronic-kits/rf-amplifiers/rf-preamplifiers MiniKits masthead preamps] include fairly low-loss bandpass filters for their target bands (2m, 70cm).
 +
 
 +
All filters will have some inherent loss, which adds to the system noise figure (or temperature, as discussed above), but this is a compromise that may need to be made to avoid distortion issues.
 +
 
 +
Finally, using a LNA near the antenna means that we can accept some losses from a long coaxial cable run between the LNA and the receiver, allowing us to situate the antenna away from sources of local noise that may impact overall performance.
 +
 
 +
As briefly discussed above, it's the first device in the receive chain which dominates the overall system noise temperature (or noise figure). In brief, as long as the losses in the coaxial cable are less than the gain of the LNA, your overall system noise figure won't degrade too much. As an example a 20m run of RG58 has a loss of ~10dB at 434 MHz. Using a LNA with a gain of 20dB and a noise figure of 1dB, the overall system noise figure is still only ~1.4 dB, and acceptable degradation.
 +
 
 +
===Antenna===
 +
For testing on the bench, pretty much any antenna will do, however set your expectations accordingly:
 +
 
 +
*A vertical antenna (e.g. the telescopic whips that come with many RTLSDRs) will not receive high-elevation passes well, as they have a 'null' in their antenna pattern directly overhead. When a satellite is at a lower elevation it is further away, and so will be weaker.
 +
*A dipole antenna (be it a straight, or a v-dipole) will have similar issues, though where the null is located will depend on how you orient the dipole. Either way, there will be some portions of a satellite pass with poor performance.
 +
*If your antenna is located inside, near to your house mains wiring, or near other electrical devices, it may end up being swamped by lots of local electrical noise and end up being 'deaf' - in this situation a LNA will only make the situation worse.
 +
 
 +
 
 +
Refer to the [[Antennas|Antennas page]] for more information on antennas which are well suited to satellite observations.
 +
 
 +
==Testing the station==
 +
[[File:Pass predictions.png|300px|right]]
 +
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.
 +
 
 +
===Recommended Satellite Transmitters for Station Performance Benchmarking===
 +
A few known-good satellite transmitters to test with with (as of November 2020) are:
 +
 
 +
*For a station operating on the VHF Band:
 +
**NOAA 15, 18, 19- The APT transmitters (very strong signals - considered to be the 'hello world' of satellite observations)
 +
**ISS - If operating, the APRS transmitter is very strong, but may only transmit intermittently throughout a pass.
 +
**CAS4A / CAS4B - Continuous CW and GMSK transmitters - a good example of a 'weaker' cube-sat signal.
 +
**Max Valier Sat - Another weaker CW signal.
 +
*For a station operating on the UHF band:
 +
**FalconSat3 - The FSK downlink transmits continuously, and is an excellent benchmark for overall station performance. A high performing station may receive upwards of 600 data packets in a single pass.
 +
**SpooQy-1 - Regular GMSK packets.
 +
**OPS-SAT - Regular GMSK packets, fairly strong.
 +
**ARMADILLO - A higher data rate signal, requiring a fairly good SNR to be able to decode the (hillarious) 19.2kbps GFSK packets.
 +
**LUSAT - CW Signal Generator in space. Continuous, strong signal.
 +
 
 +
===Rating an Observation===
 +
[[File:Waterfall Vetting Buttons.png|right|frameless]]
 +
After each observation, you should rate it. More information [https://wiki.satnogs.org/Operation#Rating_observations here], but the bottom line is rate the observation:
 +
 
 +
*'''Good''' if the satellite is seen in the waterfall at all. Different modulations appear differently in the waterfall, but will appear
 +
*'''Bad''' if the satellite is not seen.
 +
 
 +
Observations which do not produce any artefacts (Waterfall, audio, data packets) will automatically be considered as failed, and will eventually be deleted.
 +
 
 +
For a more detailed guide on testing, see [[Operation]]
 +
 
 +
===Calibrating frequency offset (PPM)===
 +
If your observations result in signals which appear to be 'off centre' of the waterfall, then you may need to set a frequency offset correction. Guides on how to determine this correction via a few different methods are available here: [[Adjusting the SatNOGS Client#Frequency Offset Calibration]]
 +
 
 +
===Mitigating Local Noise===
 +
If you are finding the signal-to-noise of your observation seems a bit low, or you aren't seeing any signals from the known-good satellites listed above, then your station may be limited by local electrical noise. A more comprehensive guide on how to identify sources of noise is being developed, but as a starting point:
 +
 
 +
*Turn on/off nearby electrical devices while an observation is running (or while looking at a waterfall using CubicSDR as described further above).
 +
*Common sources of electrical noise include:
 +
**LED lightbulbs or floodlights
 +
**USB Chargers (or really any switch-mode power supply)
 +
**Power-over-Ethernet systems
 +
**Unshielded ethernet cables (or even shielded cables)
 +
**HDMI and DVI cables, and computer monitors.
 +
 
 +
<br />
  
== Hooking up the RF ==
+
==Next Steps==
 +
Now that you've got this station working on the bench, what's next?
  
=== LNA ===
+
*Buy/Build an antenna suited to satellite observations. Check out the [[Antennas|Antennas page]] for ideas.
 +
*Mount your antenna away from obstructions, and ideally away from sources of electrical noise like ethernet cables, LED lights, and other electronic equipment.
 +
*Situate your SDR and Raspberry Pi (or other computer) as far away as practical from your antenna. If you absolutely must mount it on the mast beneath the antenna and use a metal box, and run a separate DC power supply instead of using PoE (which can produce considerable amount of RF noise)
  
=== Antenna ===
+
===Building a Box===
  
== Taking some test passes ==
+
*[https://wiki.satnogs.org/No_rotator No-Rotator setup]  (Note the warning at the top of this page)
  
=== Building a Box ===
+
[[ Category:Build ]]
 +
[[ Category:Hardware ]]
 +
[[ Category:Antenna ]]

Latest revision as of 11:10, 26 October 2021

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).

Prerequisites/Background

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. SatNOGS is known to work on the RPi 3B, 3B+ and 4 models.

Downloading/Writing the SD image

The SatNOGS team has done a great job creating a Raspbian image with all the required software. The latest download is given in the Download section.

Installing Image on Linux

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

Installing Image on Linux/Windows/MacOS (using Rasperry Pi Imager)

Important.png
WARNING: This section was recently added. Please test and if it works, remove this banner.

This section describes the installation of installing the previously downloaded image to an SD card using the cross-platform Raspberry Pi Imager. guides explains the process using this tool in more detail.

  • Download the latest version of Raspberry Pi Imager
  • Connect an SD card reader with the SD card inside
  • Open Raspberry Pi Imager and choose the previously downloaded image from "Choose OS > Use custom > artifacts.zip"
  • Review your selections and click Write button to begin writing data to the SD card.

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 Account

There are several different websites to be aware of. 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 all the others as well.

  • Network: for registering your station and adding data to the network.
  • Database: for all data on satellites and its transmitters.
  • Forums: for questions and discussions.
  • Wiki: this wiki for all kinds of documentation.

Registering the station

You can add your new ground station here. When following the link it will ask you to login. Either use your existing account or register a new one.

The following information is required:

  • Station name, e.g. "Athens3-UHF"
  • Location:
    • Latitude (e.g., 38.0169)
    • Longitude (e.g., 23.7312)
    • Altitude above WGS84 in Meters (e.g., 20)
  • At least one antenna.
    • Click New antenna
    • Choose the type (e.g. Turnstile)
    • Add a range (e.g. VHF or UHF)
    • Press Save changes

Fill out the form, click Submit and your station will be added to the Network. You can leave the other settings unchanged for now.

To help your fellow operators please consider placing the following information into the "Description" field for your station: Antenna gain and location, preamp info (if any), SDR device, some kind of contact info perhaps irc/matrix or community forum username or email address.

Booting and Configuring Raspbian

Important.png
WARNING: This section describes steps which are not always required. When using ssh for setup, the steps might be different. This section should be updated to reflect this.

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 raspberry

  1. Change your password! passwd
  2. 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

Idea.png
INFO: This step can be skipped.

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

# Disable WiFi and Bluetooth
dtoverlay=pi3-disable-wifi
dtoverlay=pi3-disable-bt

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.

Note: Newer versions of Raspbian may require the following lines instead of the above.

# Disable WiFi and Bluetooth
dtoverlay=disable-wifi
dtoverlay=disable-bt

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

Update the SatNOGS Client Software to latest version

Once you have the SatNOGS OS image installed and running you should Update the SatNOGS Client Software.

Configuring the satnogs-client

Now you can configure your new SatNOGS station. Plug in your RTL-SDR if you haven't already.

Basic Configuration

Then the actual configuration of the station:

  1. Run sudo satnogs-setup again.
  2. Use the up/down and TAB keys to navigate, and Enter to select an option.
  3. Basic Configuration:
    1. SATNOGS_API_TOKEN: After logging in to network.satnogs.org, this is in the upper right under "API Key" [no longer exsists? Add direct link]
    2. SATNOGS_SOAPY_RX_DEVICE: driver=rtlsdr
    3. SATNOGS_RX_SAMP_RATE: 2.048e6
    4. SATNOGS_RX_GAIN: Refer "Setting the gain" section below.
    5. SATNOGS_STATION_ELEV: station elevation in meters
    6. SATNOGS_STATION_ID: The ID number of your station.
    7. 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 and update the system. If you want to quit, just keep pressing cancel 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
----------------------------------------------------
  driver=RTLSDR
  hardware=RTLSDR
  origin=https://github.com/pothosware/SoapyRTLSDR
  rtl=0

----------------------------------------------------
-- 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

By default, SoapySDR Server may be configured to startup on boot. We probably don't want this, so run the following commands to ensure it is stopped, and will not startup on boot:

$ sudo systemctl stop soapyremote-server
$ sudo systemctl disable soapyremote-server

(These commands may result in errors indicating that the server wasn't running and/or enabled. This is OK!

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 manually start SoapySDR Server by running: SoapySDRServer --bind="0.0.0.0:55132" Leave this running.

Note: If you need to use the Bias-T option of an RTLSDR, you will need to activate this manually prior to running SoapySDRServer. This can be accomplished by compiling the rtl_biast utility, and running it with ./rtl_biast -b 1 . (NOTE: This advice may be outdated - need to confirm how to set the RTLSDRs bias on more recent SoapySDR versions)

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.

To set the gain in satnogs go back to the RPI and stop the soapy remote server with ctrl-c. Run satnogs-setup, open the 'Advanced' menu, then the Radio settings. Set the gain in the SATNOGS_RF_GAIN variable.

Setting SATNOGS_RF_GAIN


Some SDRs may present more than one gain slider. In these situations, you will need to configure SatNOGS with each gain set individually. Refer here for more information on how to do this.

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.

CubicSDR DOES NOT autorange its waterfall, in contrast, SatNOGS DOES autorange its waterfall. When you adjust the gain in CubicSDR the waterfall background will dramatically change, but when you adjust the gain in SatNOGS the waterfall background will not change color. See the web page documenting autoranging waterfalls:

https://docs.satnogs.org/projects/satnogs-client/en/stable/userguide.html#satnogs-waterfall-autorange

Important Note: While CubicSDR is connected to the SDR, your SatNOGS ground station cannot run observations! Make sure to close CubicSDR when you have finished setting the gain.

Hardware Configuration

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

LNA

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 4-6 dBi 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 SDR noise figures:


More info on noise and preamps:


Adding a LNA can also add its own set of problems, in that it may amplify strong local signals which may overload your SDR. When adding a LNA, you will likely need to back off the gain on your SDR to avoid this. It's also possible that the strong local signals may cause distortion to occur in the LNA itself, in which case you should consider the use of a filter between the LNA and the antenna. Some example products:

All filters will have some inherent loss, which adds to the system noise figure (or temperature, as discussed above), but this is a compromise that may need to be made to avoid distortion issues.

Finally, using a LNA near the antenna means that we can accept some losses from a long coaxial cable run between the LNA and the receiver, allowing us to situate the antenna away from sources of local noise that may impact overall performance.

As briefly discussed above, it's the first device in the receive chain which dominates the overall system noise temperature (or noise figure). In brief, as long as the losses in the coaxial cable are less than the gain of the LNA, your overall system noise figure won't degrade too much. As an example a 20m run of RG58 has a loss of ~10dB at 434 MHz. Using a LNA with a gain of 20dB and a noise figure of 1dB, the overall system noise figure is still only ~1.4 dB, and acceptable degradation.

Antenna

For testing on the bench, pretty much any antenna will do, however set your expectations accordingly:

  • A vertical antenna (e.g. the telescopic whips that come with many RTLSDRs) will not receive high-elevation passes well, as they have a 'null' in their antenna pattern directly overhead. When a satellite is at a lower elevation it is further away, and so will be weaker.
  • A dipole antenna (be it a straight, or a v-dipole) will have similar issues, though where the null is located will depend on how you orient the dipole. Either way, there will be some portions of a satellite pass with poor performance.
  • If your antenna is located inside, near to your house mains wiring, or near other electrical devices, it may end up being swamped by lots of local electrical noise and end up being 'deaf' - in this situation a LNA will only make the situation worse.


Refer to the Antennas page for more information on antennas which are well suited to satellite observations.

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.

Recommended Satellite Transmitters for Station Performance Benchmarking

A few known-good satellite transmitters to test with with (as of November 2020) are:

  • For a station operating on the VHF Band:
    • NOAA 15, 18, 19- The APT transmitters (very strong signals - considered to be the 'hello world' of satellite observations)
    • ISS - If operating, the APRS transmitter is very strong, but may only transmit intermittently throughout a pass.
    • CAS4A / CAS4B - Continuous CW and GMSK transmitters - a good example of a 'weaker' cube-sat signal.
    • Max Valier Sat - Another weaker CW signal.
  • For a station operating on the UHF band:
    • FalconSat3 - The FSK downlink transmits continuously, and is an excellent benchmark for overall station performance. A high performing station may receive upwards of 600 data packets in a single pass.
    • SpooQy-1 - Regular GMSK packets.
    • OPS-SAT - Regular GMSK packets, fairly strong.
    • ARMADILLO - A higher data rate signal, requiring a fairly good SNR to be able to decode the (hillarious) 19.2kbps GFSK packets.
    • LUSAT - CW Signal Generator in space. Continuous, strong signal.

Rating an Observation

Waterfall Vetting Buttons.png

After each observation, 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. Different modulations appear differently in the waterfall, but will appear
  • Bad if the satellite is not seen.

Observations which do not produce any artefacts (Waterfall, audio, data packets) will automatically be considered as failed, and will eventually be deleted.

For a more detailed guide on testing, see Operation

Calibrating frequency offset (PPM)

If your observations result in signals which appear to be 'off centre' of the waterfall, then you may need to set a frequency offset correction. Guides on how to determine this correction via a few different methods are available here: Adjusting the SatNOGS Client#Frequency Offset Calibration

Mitigating Local Noise

If you are finding the signal-to-noise of your observation seems a bit low, or you aren't seeing any signals from the known-good satellites listed above, then your station may be limited by local electrical noise. A more comprehensive guide on how to identify sources of noise is being developed, but as a starting point:

  • Turn on/off nearby electrical devices while an observation is running (or while looking at a waterfall using CubicSDR as described further above).
  • Common sources of electrical noise include:
    • LED lightbulbs or floodlights
    • USB Chargers (or really any switch-mode power supply)
    • Power-over-Ethernet systems
    • Unshielded ethernet cables (or even shielded cables)
    • HDMI and DVI cables, and computer monitors.


Next Steps

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

  • Buy/Build an antenna suited to satellite observations. Check out the Antennas page for ideas.
  • Mount your antenna away from obstructions, and ideally away from sources of electrical noise like ethernet cables, LED lights, and other electronic equipment.
  • Situate your SDR and Raspberry Pi (or other computer) as far away as practical from your antenna. If you absolutely must mount it on the mast beneath the antenna and use a metal box, and run a separate DC power supply instead of using PoE (which can produce considerable amount of RF noise)

Building a Box