Convolutional Code Encoding class. More...
#include <gnuradio/fec/cc_encoder.h>
Public Member Functions | |
virtual bool | set_frame_size (unsigned int frame_size)=0 |
virtual double | rate ()=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 k, int rate, std::vector< int > polys, int start_state=0, cc_mode_t mode=CC_STREAMING, bool padded=false) |
Additional Inherited Members | |
Public Types inherited from gr::fec::generic_encoder | |
typedef boost::shared_ptr < generic_encoder > | sptr |
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 |
Convolutional Code Encoding class.
This class performs convolutional encoding for unpacked bits for frames of a constant length. This class is general in its application of the convolutional encoding and allows us to specify the constraint length, the coding rate, and the polynomials used in the coding process.
The parameter k
sets the constraint length directly. We set the coding rate by setting rate
to R given a desired rate of 1/R. That is, for a rate 1/2 coder, we would set rate
to 2. And the polynomial is specified as a vector of integers, where each integer represents the coding polynomial for a different arm of the code. The number of polynomials given must be the same as the value rate
.
The encoding object holds a shift register that takes in each bit from the input stream and then ANDs the shift register with each polynomial, and places the parity of the result into the output stream. The output stream is therefore also unpacked bits.
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.
start_state
between frames.A common convolutional encoder uses K=7, Rate=1/2, Polynomials=[109, 79]. This is the Voyager code from NASA:
Another encoder class is provided with gr-fec called the gr::fec::code::ccsds_encoder, which implements the above code that is more highly optimized for just those specific settings.
|
static |
Build a convolutional code encoding 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. |
mode | cc_mode_t mode of the encoding. |
padded | true if the encoded frame should be padded to the nearest byte. |
|
pure virtual |
Returns the coding rate of this encoder.
Implements gr::fec::generic_encoder.
|
pure 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.