Convolutional Code Decoding class. More...
#include <gnuradio/fec/cc_decoder.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_decoder | |
virtual void | generic_work (void *inbuffer, void *outbuffer)=0 |
int | unique_id () |
std::string | alias () |
generic_decoder (void) | |
generic_decoder (std::string name) | |
virtual | ~generic_decoder () |
virtual double | rate ()=0 |
virtual int | get_input_size ()=0 |
virtual int | get_output_size ()=0 |
virtual int | get_history () |
virtual float | get_shift () |
virtual int | get_input_item_size () |
virtual int | get_output_item_size () |
virtual const char * | get_input_conversion () |
virtual const char * | get_output_conversion () |
virtual bool | set_frame_size (unsigned int frame_size)=0 |
virtual float | get_iterations () |
Static Public Member Functions | |
static generic_decoder::sptr | make (int frame_size, int k, int rate, std::vector< int > polys, int start_state=0, int end_state=-1, cc_mode_t mode=CC_STREAMING, bool padded=false) |
Additional Inherited Members | |
Public Types inherited from gr::fec::generic_decoder | |
typedef std::shared_ptr< generic_decoder > | sptr |
Public Attributes inherited from gr::fec::generic_decoder | |
int | my_id |
std::string | d_name |
Static Public Attributes inherited from gr::fec::generic_decoder | |
static int | base_unique_id |
Protected Attributes inherited from gr::fec::generic_decoder | |
gr::logger_ptr | d_logger |
Convolutional Code Decoding class.
This class performs convolutional decoding via the Viterbi algorithm. While it is set up to take variable values for K, rate, and the polynomials, currently, the block is only capable of handling the following settings:
This is the well-known convolutional part of the Voyager code implemented in the CCSDS encoder.
The intent of having this FECAPI code classes fully parameterizable is to eventually allow it to take on generic settings, much like the cc_encoder class where the CCSDS settings would be a highly-optimized version of this.
The decoder 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.
start_state
between frames.A common convolutional encoder uses K=7, Rate=1/2, Polynomials=[109, 79]. This is the Voyager code from NASA:
|
static |
Build a convolutional code decoding FEC API object.
frame_size | Number of bits per frame. If using in the tagged stream style, this is the maximum allowable number of bits per frame. |
k | Constraint length (K) of the encoder. |
rate | Inverse of the coder's rate (rate=2 means 2 output bits per 1 input). |
polys | Vector of polynomials as integers. |
start_state | Initialization state of the shift register. |
end_state | Ending state of the shift register. |
mode | cc_mode_t mode of the encoding. |
padded | true if the encoded frame is padded to the nearest byte. |
|
overridepure virtual |
Returns the coding rate of this encoder.
Implements gr::fec::generic_decoder.
|
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_decoder.