# TinyGS vs. SatNOGS: A Comparative Analysis of Open-Source Satellite Ground Station Networks
## 3 SatNOGS  
### SatNOGS Introduction  
SatNOGS is an open-source (hardware and software) and a global network of satellite ground stations used to communicate and receive data from LEO satellites. It is divided into four parts [12]:  
* SatNOGS ground station;
* SatNOGS client;
* SatNOGS network;
* SatNOGS DB. The SatNOGS ground station is relative to all hardware used in the communication from antennas, software-defined radio (SDR), low noise amplifier (LNA), filter, rotator, and rotator controller to the Linux computer (e.g., Raspberry Pi or a Linux desktop) [12]. The rotator serves to vary the azimuth and elevation angles so that the antenna is pointed in the direction of the satellites. It is important to note that here we are considering a rotating ground station; otherwise, we would be talking about fixed ground stations, and in this case, there is no rotator or rotator controller. The SatNOGS client is a software that runs on a Linux computer and is responsible for periodically checking the SatNOGS network to identify the observations it has to make in order to execute them later. When an observation job is received, it is responsible for controlling the ground station hardware according to the observation. When the observation ends, it sends all of the information (waterfall, audio, etc.) back to the network [12, 13]. The SatNOGS network is responsible for allowing the scheduling of observations, storing them so that the GSs know if they have observations, and, if so, executing them at the appropriate time. Furthermore, it is responsible for receiving the observation data from the GS and making it available to everyone on the web [12, 13, 14]. The SatNOGS DB or SatNOGS database [15], as the name suggests, is an open database with satellite information like NORAD, mode of modulation, downlink frequency (also mentioned in this article simply as \"frequency\"), etc. This is useful because, when the user is scheduling an observation and selecting a specific satellite, the SatNOGS network goes to the database to identify which ground stations are able to communicate with that satellite [12, 13]. Figure 2 shows the high-level relationships between users, the SatNOGS network, the SatNOGS database, GSs, the SatNOGS client, and the satellites. Bidirectional arrows in Figure 2 represent bidirectional data flow. For example, between the SatNOGS network and the SatNOGS client, installed in this case on a Raspberry Pi, parameters will be sent from the network to the client so that the GS is configured to receive telemetry data. In the opposite direction, that is, from the client to the network, this data will be uploaded. Compared to the SatNOGS database, in the database located within the network, other information is stored, such as future observations and all GSs and their parameters (e.g., location, ID, and frequency range). If one wants to collect or access any information, one can do so through the SatNOGS network [14], SatNOGS DB [15] SatNOGS DB API [11], or SatNOGS network API [10] depending on the data one wants. Regarding the operation of SatNOGS, when a user wants to communicate with a satellite, first he needs to have a GS online and functioning, otherwise he will not be able to schedule observations across the network. Then, he can start scheduling, and he has two options: He can do this by accessing the SatNOGS network through a web interface [14] or using the SatNOGS auto-scheduler [16], which allows one to perform observations automatically. However, this will be determined considering that the observations are carried out on the web since it is easier for people who are not familiar with the command line. The first step is to provide all the necessary details from the satellite one wants to communicate with, the transmitter in case the satellite has more than one (each transmitter has a certain transmission mode, downlink frequency, etc), and the time interval in which one wants to perform the observation.