GNU Radio's SATNOGS Package
gr::satnogs::frame_acquisition Class Reference

A generic frame acquisition block. More...

#include <frame_acquisition.h>

Inheritance diagram for gr::satnogs::frame_acquisition:
gr::satnogs::frame_acquisition_impl

Public Types

enum  variant_t { GENERIC_CONSTANT_FRAME_LEN = 0, GENERIC_VAR_FRAME_LEN, GOLAY24_CODED_FRAME_LEN }
 
enum  checksum_t {
  CRC_NONE = 0, CRC16_CCITT, CRC16_CCITT_REVERSED, CRC16_IBM,
  CRC32
}
 
typedef boost::shared_ptr< frame_acquisitionsptr
 

Static Public Member Functions

static sptr make (variant_t variant, const std::vector< uint8_t > &preamble, size_t preamble_threshold, const std::vector< uint8_t > &sync, size_t sync_threshold, size_t frame_size_field_len, size_t frame_len, checksum_t crc=CRC_NONE, whitening::whitening_sptr descrambler=nullptr, size_t max_frame_len=2048)
 

Detailed Description

A generic frame acquisition block.

A generic frame acquisition block trying to cover a variaty of different framing schemes.

The goal of this block is to provide a unified way to acquire the frame from different satellites with different but closely related framing schemes. To keep the logic inside the block simple, it assumes that the received bit stream is ready for framing extraction. Any bit stream coding, like NRZI, Manchester, etc should be done prior this block.

Currently the supported are:

  • TI framing, constant frame length
  • TI framing, variable frame length
  • TI like framing, variable frame length with a 12-bit frame legth field coded with Golay (24, 12, 8) scheme.

The block supports also an arbitrary descrambler (if provided) using the satnogs::whitening claass.

For the CRC calculation (if any) the currently supported schemes are:

  • CRC16-CCITT
  • Reversed CRC16-CCITT
  • CRC16-IBM
  • CRC32-CCITT

Member Typedef Documentation

◆ sptr

Member Enumeration Documentation

◆ checksum_t

Enumerator
CRC_NONE 
CRC16_CCITT 
CRC16_CCITT_REVERSED 
CRC16_IBM 
CRC32 

◆ variant_t

Different framing schemes variants

Enumerator
GENERIC_CONSTANT_FRAME_LEN 

TI CCXXX like, constant frame length.

GENERIC_VAR_FRAME_LEN 

TI CCXXX like, variable frame length.

GOLAY24_CODED_FRAME_LEN 

TI CCXXX like, variable frame length, 12-bit frame legth field coded with Golay (24, 12, 8)

Member Function Documentation

◆ make()

static sptr gr::satnogs::frame_acquisition::make ( variant_t  variant,
const std::vector< uint8_t > &  preamble,
size_t  preamble_threshold,
const std::vector< uint8_t > &  sync,
size_t  sync_threshold,
size_t  frame_size_field_len,
size_t  frame_len,
checksum_t  crc = CRC_NONE,
whitening::whitening_sptr  descrambler = nullptr,
size_t  max_frame_len = 2048 
)
static

A generic frame acquisition block trying to cover a variaty of different framing schemes.

The goal of this block is to provide a unified way to acquire the frame from different satellites with different but closely related framing schemes. To keep the logic inside the block simple, it assumes that the received bit stream is ready for framing extraction. Any bit stream coding, like NRZI, Manchester, etc should be done prior this block.

Parameters
variantthe framing variant
preamblethe preamble should be a repeated word. Note that due to AGC settling, the receiver may not receive the whole preamble. If the preamble is indeed a repeated pattern, a portion of it can be given as parameter. The block should be able to deal with this. However, a quite small subset may lead to a larger number of false alarms.
preamble_thresholdthe maximum number of bits that are allowed to be wrong at the preamble
syncthe sysnchronization work following the preamble
sync_thresholdthe maximum number of bits that are allowed to be wrong at the synchronization word
frame_size_field_lenthe length of the field describing the frame length. I most cases should be 1 or 2.
frame_lenif the variant dictates a constant frame length, this parameter provides the length of the frame
crcthe CRC scheme to use
descramblerthe descramble used
max_frame_lenthe maximum allowed frame length
Returns
a shared pointer of a frame_acquisition block

The documentation for this class was generated from the following file: