CC Encoder Definition: Difference between revisions

From GNU Radio
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
[[Category:Block Docs]]
[[Category:Block Docs]]
There currently seem to be no docs for this block. If you know how to use this block, please fill out and improve this page.
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 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.
 
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
 
See also [[CCSDS Encoder Definition]], which implements the above code that is more highly optimized for just those specific settings.
 


== Parameters ==
== Parameters ==


; Parallelism
; Parallelism
: TODO
: It seems that one can create a tensor of one or two dimensions of encoders. More info is needed on this.
 
; Dimension 1
: Active when parallelism > 0
 
; Dimension 2
: Active when parallelism > 1


; Frame Bits
; Frame Bits
: TODO
: 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.


; Constraint Length (K)
; Constraint Length (K)
: TODO
: Sets the constraint length directly.


; Rate Inverse
; Rate Inverse
: TODO
: 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.


; Polynomials
; Polynomials
: TODO
: 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.


; Start State
; Start State
: TODO
: Initialization state of the shift register.


; Streaming Behavior
; Streaming behavior
: TODO
: Specifies how the convolutional encoder will behave and under what conditions.
:; Streaming: This mode expects an uninterrupted flow of samples into the encoder, and the output stream is continually encoded.
:; Terminated: Mode designed for packet-based systems. This mode adds rate*(k-1) bits to the output as a way to help flush the decoder.
:; Tailbiting: 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.
:; Truncated: A truncated code always resets the registers to the start state between frames.


; Byte Padding
; Byte Padding
: TODO
: If the encoded frame should be padded to the nearest byte.


== Example Flowgraph ==
== Example Flowgraph ==
Line 41: Line 61:


; Public header files
; Public header files
: [https://github.com/gnuradio/gnuradio TODO]
: [https://github.com/gnuradio/gnuradio/blob/master/gr-fec/include/gnuradio/fec/cc_encoder.h]


; Block definition
; Block definition
: [https://github.com/gnuradio/gnuradio/blob/master/gr-fec/grc/variable_cc_encoder_def_list.block.yml]
: [https://github.com/gnuradio/gnuradio/blob/master/gr-fec/grc/variable_cc_encoder_def_list.block.yml]

Revision as of 11:19, 1 August 2019

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 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.

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

See also CCSDS Encoder Definition, which implements the above code that is more highly optimized for just those specific settings.


Parameters

Parallelism
It seems that one can create a tensor of one or two dimensions of encoders. More info is needed on this.
Dimension 1
Active when parallelism > 0
Dimension 2
Active when parallelism > 1
Frame Bits
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.
Constraint Length (K)
Sets the constraint length directly.
Rate Inverse
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.
Polynomials
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.
Start State
Initialization state of the shift register.
Streaming behavior
Specifies how the convolutional encoder will behave and under what conditions.
Streaming
This mode expects an uninterrupted flow of samples into the encoder, and the output stream is continually encoded.
Terminated
Mode designed for packet-based systems. This mode adds rate*(k-1) bits to the output as a way to help flush the decoder.
Tailbiting
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.
Truncated
A truncated code always resets the registers to the start state between frames.
Byte Padding
If the encoded frame should be padded to the nearest byte.

Example Flowgraph

Insert description of flowgraph here, then show a screenshot of the flowgraph and the output if there is an interesting GUI. Currently we have no standard method of uploading the actual flowgraph to the wiki or git repo, unfortunately. The plan is to have an example flowgraph showing how the block might be used, for every block, and the flowgraphs will live in the git repo.

Source Files

C++ files
[1]
Header files
[2]
Public header files
[3]
Block definition
[4]