Difference between revisions of "SDR Setup"

From SatNOGS Wiki
(Created page with "== Introduction == SatNOGS uses three different software packages for signal reception, demodulation and decoding. === gr-soapy === === gr-satnos === === satnogs-flowgraph...")
 
(List SDR device capabilities)
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Introduction ==
+
==Introduction==
  
SatNOGS uses three different software packages for signal reception, demodulation and decoding.  
+
SatNOGS uses three different software packages for signal reception, demodulation and decoding of satellite transmissions.
 +
Each ground station is equipped with an SDR device.
 +
Through the [https://github.com/pothosware/SoapySDR/wiki SoapySDR] library and the
 +
[[File:Sdr-arch.png|center|thumb|SatNOGS SDR frontend architecture]]
  
 +
===gr-soapy===
 +
The [https://gitlab.com/librespacefoundation/gr-soapy gr-soapy] is a GNU Radio module that interfaces with the [https://github.com/pothosware/SoapySDR/wiki SoapySDR], a vendor neutral and platform independent SDR support library.
  
=== gr-soapy ===
+
The goal of this module is to provide a unified way of signal reception through a wide range of different SDR devices, while at the same time allowing full parameterization of the device specific capabilities.
=== gr-satnos ===
+
[https://gitlab.com/librespacefoundation/gr-soapy gr-soapy] is responsible for setting the proper sampling rate, configure the available gain stages of the device and apply any kind of device specific configuration.
=== satnogs-flowgraphs ===
+
It provides a source block for signal reception and a sink block for signal transmission.
 +
[[File:Soapy source0.png|center|thumb|Soapy Source block General Tab]]
 +
[[File:Soapy source1.png|center|thumb|Soapy Source block RF Tab]]
  
== Configure the SDR frontend ==
+
Pre-built packages for a wide range of Soapy modules, as well as the Soapy core library and the gr-soapy are available for some distributions (including latest Raspbian) at [https://build.opensuse.org/project/subprojects/home:librespace openSUSE build service].
As mentioned in the previous sectios, SatNOGS uses the gr-soapy
+
 
 +
===gr-satnogs===
 +
The [https://gitlab.com/librespacefoundation/satnogs/gr-satnogs gr-satnogs] is the GNU Radio module providing all the necessary DSP blocks required to demodulate, synchronize and decode satellite frames.
 +
It also provides blocks for debugging and experimenting with known satellite telecommunication schemes.
 +
For adding support for a new satellite, this is the first project that you have to dig in. 
 +
[https://gitlab.com/librespacefoundation/satnogs/gr-satnogs gr-satnogs] tries to provide a unified decoder API for any kind of digital system, by properly extending a base decoder class.
 +
For more information refer to the [https://gitlab.com/librespacefoundation/satnogs/gr-satnogs#development-guide Development Guide].
 +
 
 +
Pre-built packages are available for some distributions (including latest Raspbian)  at [https://build.opensuse.org/project/subprojects/home:librespace openSUSE build service].
 +
 
 +
===satnogs-flowgraphs===
 +
The [https://gitlab.com/librespacefoundation/satnogs/satnogs-flowgraphs satnogs-flowgrapgs] provides a set of GNU Radio flowgraphs utilizing the GNU Radio blocks and those provided by [https://gitlab.com/librespacefoundation/satnogs/gr-satnogs gr-satnogs].
 +
In an attempt to keep the  visual programming language of GNU Radio, all flowgraphs are based on the GNU Radio Companion, the graphical interface of GNU Radio.
 +
This allows users without programming background skills to follow the logic more easily.
 +
The integrated build system, uses the GNU Radio compiler (grcc) to generate python executable scripts from the visual representation of the flowgraph.
 +
[[File:Flowgraph.png|center|thumb|An FSK/MSK AX.25 decoder flowgraph]]
 +
 
 +
Pre-built packages are available for some distributions (including latest Raspbian)  at [https://build.opensuse.org/project/subprojects/home:librespace openSUSE build service].
 +
 
 +
==Get information about your SDR Setup==
 +
=== SoapySDR workflow ===
 +
==== Check SoapySDR installation ====
 +
As mentioned in the previous sections, SatNOGS uses the gr-soapy and the SoapySDR library to access the SDR device.
 +
SoapySDR uses a plug-in architecture.
 +
For every device family, Soapy uses a corresponding module that is responsible for interfacing with the native library of the device and implement the SoapySDR abstraction layer.
 +
{{Warning|It is mandatory that you have installed the SoapySDR module for your device in order SoapySDR to be able to access your hardware.}}
 +
For getting information about the SoapySDR installation itself and the attached hardware capabilities SoapySDR provides the <code>SoapySDRUtil</code> command line utility.
 +
 
 +
To check the SoapySDR installation and the available modules use the <code>SoapySDRUtil --info</code>.
 +
The output should be something like:
 +
<pre>
 +
$ SoapySDRUtil --info
 +
######################################################
 +
##    Soapy SDR -- the SDR abstraction library    ##
 +
######################################################
 +
 
 +
Lib Version: v0.7.1-3
 +
API Version: v0.7.1
 +
ABI Version: v0.7
 +
Install root: /usr
 +
Search path:  /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7
 +
Search path:  /usr/local/lib/arm-linux-gnueabihf/SoapySDR/modules0.7                (missing)
 +
Search path:  /usr/local/lib/SoapySDR/modules0.7                                    (missing)
 +
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libHackRFSupport.so  (0.3.3)
 +
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libLMS7Support.so    (20.01.0)
 +
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libRedPitaya.so      (0.1.1)
 +
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libairspySupport.so  (0.1.2)
 +
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libaudioSupport.so  (0.1.1)
 +
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libbladeRFSupport.so (0.4.1)
 +
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libosmosdrSupport.so (0.2.5)
 +
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libremoteSupport.so  (0.5.1)
 +
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/librtlsdrSupport.so  (0.3.0)
 +
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libuhdSupport.so    (0.3.6)
 +
Available factories... airspy, audio, bladerf, hackrf, lime, osmosdr, redpitaya, remote, rtlsdr, uhd
 +
Available converters...
 +
-  CF32 -> [CF32, CS16, CS8, CU16, CU8]
 +
-  CS16 -> [CF32, CS16, CS8, CU16, CU8]
 +
-  CS32 -> [CS32]
 +
-  CS8 -> [CF32, CS16, CS8, CU16, CU8]
 +
-  CU16 -> [CF32, CS16, CS8]
 +
-  CU8 -> [CF32, CS16, CS8]
 +
-  F32 -> [F32, S16, S8, U16, U8]
 +
-  S16 -> [F32, S16, S8, U16, U8]
 +
-  S32 -> [S32]
 +
-    S8 -> [F32, S16, S8, U16, U8]
 +
-  U16 -> [F32, S16, S8]
 +
-    U8 -> [F32, S16, S8]
 +
</pre>
 +
 
 +
In order SoapySDR and gr-soapy to be able to access your hardware, the list of the available <code>factories</code> should contain the target device family.
 +
 
 +
{{Message|For all the available SoapySDR modules please visit https://github.com/pothosware/SoapySDR/wiki/DriverGuide#modules }}
 +
 
 +
==== List available SDR devices ====
 +
The next step is to identify if SoapySDR have access to the attached SDR devices.
 +
This can be perfomed using the <code>SoapySDRUtil --find</code> command.
 +
For example:
 +
<pre>
 +
$ SoapySDRUtil --find
 +
######################################################
 +
##    Soapy SDR -- the SDR abstraction library    ##
 +
######################################################
 +
 
 +
Found Rafael Micro R820T tuner
 +
Found device 0
 +
  available = Yes
 +
  driver = rtlsdr
 +
  label = Generic RTL2832U OEM :: 00000001
 +
  manufacturer = Realtek
 +
  product = RTL2838UHIDIR
 +
  rtl = 0
 +
  serial = 00000001
 +
  tuner = Rafael Micro R820T
 +
 
 +
Found device 1
 +
  addr = 24607:1027
 +
  driver = lime
 +
  label = LimeSDR Mini [USB 2.0] 1D42574F558C9F
 +
  media = USB 2.0
 +
  module = FT601
 +
  name = LimeSDR Mini
 +
  serial = 1D42574F558C9F
 +
</pre>
 +
 
 +
From the output of <code>SoapySDRUtil --find</code> two entries are important for the setup of the station.
 +
* <code>driver</code>: Specifies the factory name that should be used to create a SoapySDR handle of this particular device
 +
* <code>driver</code>: Can be used to select a specific device in setups with multiple SDR devices of the same factory
 +
 
 +
{{Warning|If the device cannot be found, the corresponding module is already installed and available factories list contains the device factory, consider the permissions of the user for the particular SDR device}}
 +
 
 +
==== List SDR device capabilities ====
 +
The next vital step is to get the capabilities of the SDR device.
 +
This can be done again with the <code>SoapySDRUtil</code> utility and the <code>--probe</code> option.
 +
The <code>--probe</code> accepts a device specification string in the form
 +
<code>SoapySDRUtil --probe="driver=factory-name[,serial=serial-no]"</code>
 +
where:
 +
* <code>driver=factory-name</code>: specifies the factory name of the device family. In most cases this is also the name of the module name corresponding to the device family
 +
* <code>driver=serial-no</code>: Optional. Can be used to select a specific device
 +
 
 +
For example, for getting the device capabilities of the RTL-SDR listed previously with <code>SoapySDRUtil --find</code>, the command <code>SoapySDRUtil --probe="driver=rtlsdr,serial=00000001"</code> or just <code>SoapySDRUtil --probe="driver=rtlsdr"</code> because only a single device uses the <code>lime</code> factory.
 +
 
 +
<pre>
 +
######################################################
 +
##    Soapy SDR -- the SDR abstraction library    ##
 +
######################################################
 +
Found Rafael Micro R820T tuner
 +
Found Rafael Micro R820T tuner
 +
 
 +
----------------------------------------------------
 +
-- Device identification
 +
----------------------------------------------------
 +
  driver=RTLSDR
 +
  hardware=R820T
 +
  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]
 +
    * Digital AGC - RTL-SDR digital AGC Mode
 +
      [key=digital_agc, 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
 +
</pre>
 +
 
 +
* The section <code>Peripheral summary</code> provides general information about the device capabilities.
 +
Among others, this section contains the number of supported RX or TX streams (channels) and various devices specific settings.
 +
* Depending the number of available RX or TX streams,  <code>SoapySDRUtil --probe</code> provides a informative section for each one
 +
** <code>Supports AGC</code>: a boolean indicating if the device supports AGC
 +
** <code>Stream arguments</code>: Stream specific arguments. Unfortunately due to a limitation of the SoapySDR, this arguments apply on all the available streams of the same direction (RX or TX)
 +
** <code>Antennas</code>: The available antennas of the device
 +
** <code>Full gain range</code>: The allowed gain range, of the abstracted gain provided by SoapySDR. This is an attempt to combine the different gain stages of each device and provide a single parameter with linear response. Most of the times this is not possible. Therefore, for devices with multiple gain stages this method should be avoided
 +
*** The sub-category under the <code>Full gain range</code> provides the specific gain stages of the device among with the allowed values range
 +
** <code>Full freq range</code>: the allowed tuning frequency
 +
** <code>Sample rates</code>: a list with the available sampling rate values that the device can provide

Latest revision as of 19:19, 19 March 2020

Introduction

SatNOGS uses three different software packages for signal reception, demodulation and decoding of satellite transmissions. Each ground station is equipped with an SDR device. Through the SoapySDR library and the

SatNOGS SDR frontend architecture

gr-soapy

The gr-soapy is a GNU Radio module that interfaces with the SoapySDR, a vendor neutral and platform independent SDR support library.

The goal of this module is to provide a unified way of signal reception through a wide range of different SDR devices, while at the same time allowing full parameterization of the device specific capabilities. gr-soapy is responsible for setting the proper sampling rate, configure the available gain stages of the device and apply any kind of device specific configuration. It provides a source block for signal reception and a sink block for signal transmission.

Soapy Source block General Tab
Soapy Source block RF Tab

Pre-built packages for a wide range of Soapy modules, as well as the Soapy core library and the gr-soapy are available for some distributions (including latest Raspbian) at openSUSE build service.

gr-satnogs

The gr-satnogs is the GNU Radio module providing all the necessary DSP blocks required to demodulate, synchronize and decode satellite frames. It also provides blocks for debugging and experimenting with known satellite telecommunication schemes. For adding support for a new satellite, this is the first project that you have to dig in. gr-satnogs tries to provide a unified decoder API for any kind of digital system, by properly extending a base decoder class. For more information refer to the Development Guide.

Pre-built packages are available for some distributions (including latest Raspbian) at openSUSE build service.

satnogs-flowgraphs

The satnogs-flowgrapgs provides a set of GNU Radio flowgraphs utilizing the GNU Radio blocks and those provided by gr-satnogs. In an attempt to keep the visual programming language of GNU Radio, all flowgraphs are based on the GNU Radio Companion, the graphical interface of GNU Radio. This allows users without programming background skills to follow the logic more easily. The integrated build system, uses the GNU Radio compiler (grcc) to generate python executable scripts from the visual representation of the flowgraph.

An FSK/MSK AX.25 decoder flowgraph

Pre-built packages are available for some distributions (including latest Raspbian) at openSUSE build service.

Get information about your SDR Setup

SoapySDR workflow

Check SoapySDR installation

As mentioned in the previous sections, SatNOGS uses the gr-soapy and the SoapySDR library to access the SDR device. SoapySDR uses a plug-in architecture. For every device family, Soapy uses a corresponding module that is responsible for interfacing with the native library of the device and implement the SoapySDR abstraction layer.

Important.png
It is mandatory that you have installed the SoapySDR module for your device in order SoapySDR to be able to access your hardware.

For getting information about the SoapySDR installation itself and the attached hardware capabilities SoapySDR provides the SoapySDRUtil command line utility.

To check the SoapySDR installation and the available modules use the SoapySDRUtil --info. The output should be something like:

$ SoapySDRUtil --info
######################################################
##     Soapy SDR -- the SDR abstraction library     ##
######################################################

Lib Version: v0.7.1-3
API Version: v0.7.1
ABI Version: v0.7
Install root: /usr
Search path:  /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7
Search path:  /usr/local/lib/arm-linux-gnueabihf/SoapySDR/modules0.7                (missing)
Search path:  /usr/local/lib/SoapySDR/modules0.7                                    (missing)
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libHackRFSupport.so  (0.3.3)
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libLMS7Support.so    (20.01.0)
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libRedPitaya.so      (0.1.1)
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libairspySupport.so  (0.1.2)
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libaudioSupport.so   (0.1.1)
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libbladeRFSupport.so (0.4.1)
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libosmosdrSupport.so (0.2.5)
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libremoteSupport.so  (0.5.1)
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/librtlsdrSupport.so  (0.3.0)
Module found: /usr/lib/arm-linux-gnueabihf/SoapySDR/modules0.7/libuhdSupport.so     (0.3.6)
Available factories... airspy, audio, bladerf, hackrf, lime, osmosdr, redpitaya, remote, rtlsdr, uhd
Available converters...
 -  CF32 -> [CF32, CS16, CS8, CU16, CU8]
 -  CS16 -> [CF32, CS16, CS8, CU16, CU8]
 -  CS32 -> [CS32]
 -   CS8 -> [CF32, CS16, CS8, CU16, CU8]
 -  CU16 -> [CF32, CS16, CS8]
 -   CU8 -> [CF32, CS16, CS8]
 -   F32 -> [F32, S16, S8, U16, U8]
 -   S16 -> [F32, S16, S8, U16, U8]
 -   S32 -> [S32]
 -    S8 -> [F32, S16, S8, U16, U8]
 -   U16 -> [F32, S16, S8]
 -    U8 -> [F32, S16, S8]

In order SoapySDR and gr-soapy to be able to access your hardware, the list of the available factories should contain the target device family.

Idea.png
For all the available SoapySDR modules please visit https://github.com/pothosware/SoapySDR/wiki/DriverGuide#modules

List available SDR devices

The next step is to identify if SoapySDR have access to the attached SDR devices. This can be perfomed using the SoapySDRUtil --find command. For example:

$ SoapySDRUtil --find
######################################################
##     Soapy SDR -- the SDR abstraction library     ##
######################################################

Found Rafael Micro R820T tuner
Found device 0
  available = Yes
  driver = rtlsdr
  label = Generic RTL2832U OEM :: 00000001
  manufacturer = Realtek
  product = RTL2838UHIDIR
  rtl = 0
  serial = 00000001
  tuner = Rafael Micro R820T

Found device 1
  addr = 24607:1027
  driver = lime
  label = LimeSDR Mini [USB 2.0] 1D42574F558C9F
  media = USB 2.0
  module = FT601
  name = LimeSDR Mini
  serial = 1D42574F558C9F

From the output of SoapySDRUtil --find two entries are important for the setup of the station.

  • driver: Specifies the factory name that should be used to create a SoapySDR handle of this particular device
  • driver: Can be used to select a specific device in setups with multiple SDR devices of the same factory
Important.png
If the device cannot be found, the corresponding module is already installed and available factories list contains the device factory, consider the permissions of the user for the particular SDR device

List SDR device capabilities

The next vital step is to get the capabilities of the SDR device. This can be done again with the SoapySDRUtil utility and the --probe option. The --probe accepts a device specification string in the form SoapySDRUtil --probe="driver=factory-name[,serial=serial-no]" where:

  • driver=factory-name: specifies the factory name of the device family. In most cases this is also the name of the module name corresponding to the device family
  • driver=serial-no: Optional. Can be used to select a specific device

For example, for getting the device capabilities of the RTL-SDR listed previously with SoapySDRUtil --find, the command SoapySDRUtil --probe="driver=rtlsdr,serial=00000001" or just SoapySDRUtil --probe="driver=rtlsdr" because only a single device uses the lime factory.

######################################################
##     Soapy SDR -- the SDR abstraction library     ##
######################################################
Found Rafael Micro R820T tuner
Found Rafael Micro R820T tuner

----------------------------------------------------
-- Device identification
----------------------------------------------------
  driver=RTLSDR
  hardware=R820T
  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]
     * Digital AGC - RTL-SDR digital AGC Mode
       [key=digital_agc, 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 section Peripheral summary provides general information about the device capabilities.

Among others, this section contains the number of supported RX or TX streams (channels) and various devices specific settings.

  • Depending the number of available RX or TX streams, SoapySDRUtil --probe provides a informative section for each one
    • Supports AGC: a boolean indicating if the device supports AGC
    • Stream arguments: Stream specific arguments. Unfortunately due to a limitation of the SoapySDR, this arguments apply on all the available streams of the same direction (RX or TX)
    • Antennas: The available antennas of the device
    • Full gain range: The allowed gain range, of the abstracted gain provided by SoapySDR. This is an attempt to combine the different gain stages of each device and provide a single parameter with linear response. Most of the times this is not possible. Therefore, for devices with multiple gain stages this method should be avoided
      • The sub-category under the Full gain range provides the specific gain stages of the device among with the allowed values range
    • Full freq range: the allowed tuning frequency
    • Sample rates: a list with the available sampling rate values that the device can provide