GNU Radio Manual and C++ API Reference
The Free & Open Software Radio Ecosystem
gr::fec::code::ccsds_encoder Class Referenceabstract

CCSDS Encoding class for convolutional encoding with rate 1/2, K=7, and polynomials [109, 79]. More...

#include <gnuradio/fec/ccsds_encoder.h>

Public Member Functions

bool set_frame_size (unsigned int frame_size) override=0
double rate () override=0
- Public Member Functions inherited from gr::fec::generic_encoder
virtual void generic_work (void *in_buffer, void *out_buffer)=0
int unique_id ()
std::string alias ()
virtual int get_input_size ()=0
virtual int get_output_size ()=0
virtual const char * get_input_conversion ()
virtual const char * get_output_conversion ()
 generic_encoder (void)
 generic_encoder (std::string name)
virtual ~generic_encoder ()

Static Public Member Functions

static generic_encoder::sptr make (int frame_size, int start_state=0, cc_mode_t mode=CC_STREAMING)

Additional Inherited Members

- Public Types inherited from gr::fec::generic_encoder
typedef std::shared_ptr< generic_encodersptr
- Public Attributes inherited from gr::fec::generic_encoder
int my_id
std::string d_name
- Static Public Attributes inherited from gr::fec::generic_encoder
static int base_unique_id
- Protected Attributes inherited from gr::fec::generic_encoder
gr::logger_ptr d_logger

Detailed Description

CCSDS Encoding class for convolutional encoding with rate 1/2, K=7, and polynomials [109, 79].

Uses Phil Karn's (KA9Q) implementation of the CCSDS encoder for rate 1/2, K=7, and CC polynomial [109, 79]. These are non-adjustable in this encoder. For an adjustable CC encoder where we can set the rate, constraint length, and polynomial, see gr::fec::code::cc_encoder.

The encoder is set up with a number of bits per frame in the constructor. When not being used in a tagged stream mode, this encoder will only process frames of the length provided here. If used in a tagged stream block, this setting becomes the maximum allowable frame size that the block may process.

The mode is a cc_mode_t that specifies how the convolutional encoder will behave and under what conditions.

  • 'CC_STREAMING': mode expects an uninterrupted flow of samples into the encoder, and the output stream is continually encoded.
  • 'CC_TERMINATED': is a mode designed for packet-based systems. This mode adds rate*(k-1) bits to the output as a way to help flush the decoder.
  • 'CC_TAILBITING': is another packet-based method. Instead of adding bits onto the end of the packet, this mode will continue the code between the payloads of packets by pre-initializing the state of the new packet based on the state of the last packet for (k-1) bits.
  • 'CC_TRUNCATED': a truncated code always resets the registers to the start_state between frames.

A common convolutional encoder uses K=7, Rate=1/2, Polynomials=[109, 79]. This is the Voyager code from NASA:

  • 109: b(1101101) --> 1 + x + x^3 + x^4 + x^6
  • 79: b(1001111) --> 1 + x^3 + x^4 + x^5 + x^6

Member Function Documentation

◆ make()

static generic_encoder::sptr gr::fec::code::ccsds_encoder::make ( int  frame_size,
int  start_state = 0,
cc_mode_t  mode = CC_STREAMING 

Build the CCSDS (rate=1/2, K=7, polys=[109,79] convolutional code FECAPI object.

frame_sizeNumber of bits per frame. If using in the tagged stream style, this is the maximum allowable number of bits per frame.
start_stateInitialization state of the shift register.
modecc_mode_t mode of the encoding.

◆ rate()

double gr::fec::code::ccsds_encoder::rate ( )
overridepure virtual

Returns the coding rate of this encoder.

Implements gr::fec::generic_encoder.

◆ set_frame_size()

bool gr::fec::code::ccsds_encoder::set_frame_size ( unsigned int  frame_size)
overridepure virtual

Sets the uncoded frame size to frame_size. If frame_size is greater than the value given to the constructor, the frame size will be capped by that initial value and this function will return false. Otherwise, it returns true.

Implements gr::fec::generic_encoder.

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