MT Convolutional Decode VI
Decodes a convolutionally encoded bit stream, using a specified rate or generator matrix. The decoding scheme employs the Viterbi decoding algorithm and returns an output binary message stream.
The Modulation Toolkit implements the convolutional decoding algorithm as a polymorphic VI with polymorphic instances corresponding to different types of the Viterbi decoding algorithm (hard decision/unquantized/soft decision) and the type of specification (code rate/generator matrix).
Use the pull-down menu to select an instance of this VI.
MT Convolutional Decoder (Viterbi Hard Decision, Rate)
This polymorphic instance decodes a convolutionally encoded bit stream using a specified code rate. The code rate is equal to the ratio of the data word length to the code word length.
The following table shows the available code rates and constraint lengths supported by this polymorphic instance. If you have a particular code rate/constraint length that is not available in the table, use a generator matrix instance of this VI to specify custom values.
Code Rate | Supported Constraint Lengths |
---|---|
1/2 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 |
1/3 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 |
1/4 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 |
2/3 | 2, 3, 4, 5, 6 |
3/4 | 2, 3, 4 |
input bit stream specifies the bit sequence representing the code word to decode. You can use the MT Convolutional Encode VI to generate the encoded bit stream. The default is empty. |
|||||||||||
rate (k/n) specifies the convolutional code rate as a ratio k/n, where k is the input data word length and n is the output code word length. Use a generator matrix instance of this VI to specify a different rate. The default is 1/2.
|
|||||||||||
constraint length (K) specifies the maximum number of encoded bits that can be affected by a single input bit. This value represents (1 + maximal memory order), where maximal memory order refers to the length of the longest shift register chain in the convolutional encoder. The default is 3. |
|||||||||||
initial state specifies the initial parent state for the decode operation. When reset? is set to TRUE (default), the trellis structure is set to this state, thereby initializing the Viterbi decoding operation. On the first call to this VI, and thereafter when reset? is set to FALSE, the survivor state from the previous iteration is used to continue performing Viterbi decoding and this parameter is ignored. The default is 0. |
|||||||||||
traceback depth (D) specifies the number of trellis stages used in the Viterbi decoding process. The default is 15. |
|||||||||||
reset? specifies whether the decoder state is reset on each call to this VI. By default, the VI resets on the first call. When reset? is set to TRUE, the VI clears any buffered bits from the previous iterations, and the Viterbi hard decision decoding algorithm is initialized to start decoding from the specified initial state. In this case, the relationship of the length of the output decoded bit stream, L out, to the input encoded bit stream length, L in, is described by the following equation: L out = k × [floor(L in/n) – D] where k/n specifies the code rate, and D specifies the decoder traceback depth in symbols. When reset? is set to FALSE, the VI continues performing convolutional decoding from the previous iteration. In such a case, the length of the output decoded bit stream is given by the following equation: L out = k × floor(L in/n).
The default is TRUE. |
|||||||||||
error in (no error) can accept error information wired from previously called VIs. Use this information to decide if any functionality should be bypassed in the event of errors from other VIs. Right-click the front panel error in control and select Explain Error or Explain Warning from the shortcut menu for more information about the error.
|
|||||||||||
output bit stream returns the decoded code word. Wire this parameter to the MT Calculate BER VI to perform bit error rate measurements. |
|||||||||||
final state returns the survivor state resulting from the Viterbi hard decision decoding operation after decoding the entire input bit stream. |
|||||||||||
error out passes error or warning information out of a VI to be used by other VIs. Right-click the front panel error out indicator and select Explain Error or Explain Warning from the shortcut menu for more information about the error.
|
MT Convolutional Decoder (Viterbi Hard Decision, Generator Matrix)
This polymorphic instance performs Viterbi hard decision decoding on a convolutionally encoded bit stream using a custom generator matrix you specify.
input bit stream specifies the bit sequence representing the code word to decode. You can use the MT Convolutional Encode VI to generate the encoded bit stream. The default is empty. |
|||||||
generator matrix (n x k) specifies the generator connection polynomial matrix used for setting the convolutional feedforward decoder connections in octal format. The convolutional decoder is modeled as a linear feedforward shift register arrangement consisting of k rows with K-1 shift registers per row, where k denotes the data word length and K denotes the constraint length. If a ij {0 ≤ i ≤ n-1, 0 ≤ j ≤ k-1} denotes a particular element in the generator matrix, the row index i corresponds to the convolutional decoder output y i that is affected by this element, while the column index j corresponds to the jth row in the k row shift register arrangement. Thus a ij specifies how the K bits in the jth row of the feedforward shift register matrix affects the ith output of the convolutional decoder. The default is For a rate 2/3 convolutional decoder, the generator matrix is specified as
Notice that the preceding matrix represents the elements in octal format. Zeros are padded at the end of the corresponding code generator sequences such that the total length of the sequences is a multiple of three.
The following diagram depicts the rate 2/3 convolutional decoder corresponding to the generator matrix shown previously, with a constraint length of 4. In this diagram, D represents a shift register or memory element.
Here, y i j, 0 ≤ j ≤ n-1 denotes the jth output of the convolutional decoder in the ith decoding instance. |
|||||||
constraint length (K) specifies the maximum number of encoded bits that can be affected by a single input bit. This value represents (1 + maximal memory order), where maximal memory order refers to the length of the longest shift register chain in the convolutional encoder. The default is 3. |
|||||||
initial state specifies the initial parent state for the decode operation. When reset? is set to TRUE (default), the trellis structure is set to this state, thereby initializing the Viterbi decoding operation. On the first call to this VI, and thereafter when reset? is set to FALSE, the survivor state from the previous iteration is used to continue performing Viterbi decoding and this parameter is ignored. The default is 0. |
|||||||
traceback depth (D) specifies the number of trellis stages used in the Viterbi decoding process. The default is 15. |
|||||||
reset? specifies whether the decoder state is reset on each call to this VI. By default, the VI resets on the first call. When reset? is set to TRUE, the VI clears any buffered bits from the previous iterations, and the Viterbi hard decision decoding algorithm is initialized to start decoding from the specified initial state. In this case, the relationship of the length of the output decoded bit stream, L out, to the input encoded bit stream length, L in, is described by the following equation: L out = k × [floor(L in/n) – D] where k/n specifies the code rate, and D specifies the decoder traceback depth in symbols. When reset? is set to FALSE, the VI continues performing convolutional decoding from the previous iteration. In such a case, the length of the output decoded bit stream is given by the following equation: L out = k × floor(L in/n).
The default is TRUE. |
|||||||
error in (no error) can accept error information wired from previously called VIs. Use this information to decide if any functionality should be bypassed in the event of errors from other VIs. Right-click the front panel error in control and select Explain Error or Explain Warning from the shortcut menu for more information about the error.
|
|||||||
output bit stream returns the decoded code word. Wire this parameter to the MT Calculate BER VI to perform bit error rate measurements. |
|||||||
final state returns the survivor state resulting from the Viterbi hard decision decoding operation after decoding the entire input bit stream. |
|||||||
error out passes error or warning information out of a VI to be used by other VIs. Right-click the front panel error out indicator and select Explain Error or Explain Warning from the shortcut menu for more information about the error.
|
MT Convolutional Decoder (Viterbi Soft Decision, Rate)
This polymorphic instance decodes a convolutionally encoded bit stream, using a specified code rate and Viterbi soft decision decoding. The code rate is equal to the ratio of the data word length to the code word length.
The following table shows the available code rates and constraint lengths supported by this polymorphic instance. If you have a particular code rate/constraint length that is not available in the table, use a generator matrix instance of the VI to specify custom values.
Code Rate | Supported Constraint Lengths |
---|---|
1/2 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 |
1/3 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 |
1/4 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 |
2/3 | 2, 3, 4, 5, 6 |
3/4 | 2, 3, 4 |
input integers specifies integers representing bit metrics for quantized demodulated BPSK symbol data. These demodulated BPSK symbols are quantized to n soft bits of precision, such that an integer value of 0 represents a strong logic 0 and a value of 2n soft represents a strong logic 1. The default is empty.
|
|||||||||||
rate (k/n) specifies the convolutional code rate as a ratio k/n, where k is the input data word length and n is the output code word length. Use a generator matrix instance of this VI to specify a different rate. The default is 1/2.
|
|||||||||||
constraint length (K) specifies the maximum number of encoded bits that can be affected by a single input bit. This value represents (1 + maximal memory order), where maximal memory order refers to the length of the longest shift register chain in the convolutional encoder. The default is 3. |
|||||||||||
initial state specifies the initial parent state for the decode operation. When reset? is set to TRUE (default), the trellis structure is set to this state, thereby initializing the Viterbi decoding operation. On the first call to this VI, and thereafter when reset? is set to FALSE, the survivor state from the previous iteration is used to continue performing Viterbi decoding and this parameter is ignored. The default is 0. |
|||||||||||
soft decision bits specifies the number of bits used for quantizing the BPSK modulated symbols to integers. The default is 1. |
|||||||||||
traceback depth (D) specifies the number of trellis stages used in the Viterbi decoding process. The default is 15. |
|||||||||||
reset? specifies whether the decoder state is reset on each call to this VI. By default, the VI resets on the first call. When reset? is set to TRUE, the VI clears any buffered bits from the previous iterations, and the Viterbi hard decision decoding algorithm is initialized to start decoding from the specified initial state. In this case, the relationship of the length of the output decoded bit stream, L out, to the input encoded bit stream length, L in, is described by the following equation: L out = k × [floor(L in/n) – D] where k/n specifies the code rate, and D specifies the decoder traceback depth in symbols. When reset? is set to FALSE, the VI continues performing convolutional decoding from the previous iteration. In such a case, the length of the output decoded bit stream is given by the following equation: L out = k × floor(L in/n).
The default is TRUE. |
|||||||||||
error in (no error) can accept error information wired from previously called VIs. Use this information to decide if any functionality should be bypassed in the event of errors from other VIs. Right-click the front panel error in control and select Explain Error or Explain Warning from the shortcut menu for more information about the error.
|
|||||||||||
output bit stream returns the decoded code word. Wire this parameter to the MT Calculate BER VI to perform bit error rate measurements. |
|||||||||||
final state returns the final state for the k(K-1) shift registers as the right-aligned (least significant) k(K-1) bits, where K is the constraint length, and k is the data word length in bits. |
|||||||||||
error out passes error or warning information out of a VI to be used by other VIs. Right-click the front panel error out indicator and select Explain Error or Explain Warning from the shortcut menu for more information about the error.
|
MT Convolutional Decoder (Viterbi Soft Decision, Generator Matrix)
This polymorphic instance performs Viterbi soft decision decoding on a convolutionally encoded bit stream using a custom generator matrix you specify.
input integers specifies integers representing bit metrics for quantized demodulated BPSK symbol data. These demodulated BPSK symbols are quantized to n soft bits of precision, such that an integer value of 0 represents a strong logic 0 and a value of 2n soft represents a strong logic 1. The default is empty.
|
|||||||
generator matrix (n x k) specifies the generator connection polynomial matrix used for setting the convolutional feedforward decoder connections in octal format. The convolutional decoder is modeled as a linear feedforward shift register arrangement consisting of k rows with K-1 shift registers per row, where k denotes the data word length and K denotes the constraint length. If a ij {0 ≤ i ≤ n-1, 0 ≤ j ≤ k-1} denotes a particular element in the generator matrix, the row index i corresponds to the convolutional decoder output y i that is affected by this element, while the column index j corresponds to the jth row in the k row shift register arrangement. Thus a ij specifies how the K bits in the jth row of the feedforward shift register matrix affects the ith output of the convolutional decoder. The default is For a rate 2/3 convolutional decoder, the generator matrix is specified as
Notice that the preceding matrix represents the elements in octal format. Zeros are padded at the end of the corresponding code generator sequences such that the total length of the sequences is a multiple of three.
The following diagram depicts the rate 2/3 convolutional decoder corresponding to the generator matrix shown previously, with a constraint length of 4. In this diagram, D represents a shift register or memory element.
Here, y i j, 0 ≤ j ≤ n-1 denotes the jth output of the convolutional decoder in the ith decoding instance. |
|||||||
constraint length (K) specifies the maximum number of encoded bits that can be affected by a single input bit. This value represents (1 + maximal memory order), where maximal memory order refers to the length of the longest shift register chain in the convolutional encoder. The default is 3. |
|||||||
initial state specifies the initial parent state for the decode operation. When reset? is set to TRUE (default), the trellis structure is set to this state, thereby initializing the Viterbi decoding operation. On the first call to this VI, and thereafter when reset? is set to FALSE, the survivor state from the previous iteration is used to continue performing Viterbi decoding and this parameter is ignored. The default is 0. |
|||||||
soft decision bits specifies the number of bits used for quantizing the BPSK modulated symbols to integers. The default is 1. |
|||||||
traceback depth (D) specifies the number of trellis stages used in the Viterbi decoding process. The default is 15. |
|||||||
reset? specifies whether the decoder state is reset on each call to this VI. By default, the VI resets on the first call. When reset? is set to TRUE, the VI clears any buffered bits from the previous iterations, and the Viterbi hard decision decoding algorithm is initialized to start decoding from the specified initial state. In this case, the relationship of the length of the output decoded bit stream, L out, to the input encoded bit stream length, L in, is described by the following equation: L out = k × [floor(L in/n) – D] where k/n specifies the code rate, and D specifies the decoder traceback depth in symbols. When reset? is set to FALSE, the VI continues performing convolutional decoding from the previous iteration. In such a case, the length of the output decoded bit stream is given by the following equation: L out = k × floor(L in/n).
The default is TRUE. |
|||||||
error in (no error) can accept error information wired from previously called VIs. Use this information to decide if any functionality should be bypassed in the event of errors from other VIs. Right-click the front panel error in control and select Explain Error or Explain Warning from the shortcut menu for more information about the error.
|
|||||||
output bit stream returns the decoded code word. Wire this parameter to the MT Calculate BER VI to perform bit error rate measurements. |
|||||||
final state returns the final state for the k(K-1) shift registers as the right-aligned (least significant) k(K-1) bits, where K is the constraint length, and k is the data word length in bits. |
|||||||
error out passes error or warning information out of a VI to be used by other VIs. Right-click the front panel error out indicator and select Explain Error or Explain Warning from the shortcut menu for more information about the error.
|
MT Convolutional Decoder (Viterbi UnQuantized, Rate)
This polymorphic instance decodes a convolutionally encoded bit stream, using a specified code rate and unquantized Viterbi decoding. The code rate is equal to the ratio of the data word length to the code word length.
The following table shows the available code rates and constraint lengths supported by this polymorphic instance. If you have a particular code rate/constraint length that is not available in the table, use a generator matrix instance of the VI to specify custom values.
Code Rate | Supported Constraint Lengths |
---|---|
1/2 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 |
1/3 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 |
1/4 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 |
2/3 | 2, 3, 4, 5, 6 |
3/4 | 2, 3, 4 |
input symbols specifies the unquantized BPSK demodulated soft symbol data. The default is empty.
|
|||||||||||
rate (k/n) specifies the convolutional code rate as a ratio k/n, where k is the input data word length and n is the output code word length. Use a generator matrix instance of this VI to specify a different rate. The default is 1/2.
|
|||||||||||
constraint length (K) specifies the maximum number of encoded bits that can be affected by a single input bit. This value represents (1 + maximal memory order), where maximal memory order refers to the length of the longest shift register chain in the convolutional encoder. The default is 3. |
|||||||||||
initial state specifies the initial parent state for the decode operation. When reset? is set to TRUE (default), the trellis structure is set to this state, thereby initializing the Viterbi decoding operation. On the first call to this VI, and thereafter when reset? is set to FALSE, the survivor state from the previous iteration is used to continue performing Viterbi decoding and this parameter is ignored. The default is 0. |
|||||||||||
traceback depth (D) specifies the number of trellis stages used in the Viterbi decoding process. The default is 15. |
|||||||||||
reset? specifies whether the decoder state is reset on each call to this VI. By default, the VI resets on the first call. When reset? is set to TRUE, the VI clears any buffered bits from the previous iterations, and the Viterbi hard decision decoding algorithm is initialized to start decoding from the specified initial state. In this case, the relationship of the length of the output decoded bit stream, L out, to the input encoded bit stream length, L in, is described by the following equation: L out = k × [floor(L in/n) – D] where k/n specifies the code rate, and D specifies the decoder traceback depth in symbols. When reset? is set to FALSE, the VI continues performing convolutional decoding from the previous iteration. In such a case, the length of the output decoded bit stream is given by the following equation: L out = k × floor(L in/n).
The default is TRUE. |
|||||||||||
error in (no error) can accept error information wired from previously called VIs. Use this information to decide if any functionality should be bypassed in the event of errors from other VIs. Right-click the front panel error in control and select Explain Error or Explain Warning from the shortcut menu for more information about the error.
|
|||||||||||
output bit stream returns the decoded code word. Wire this parameter to the MT Calculate BER VI to perform bit error rate measurements. |
|||||||||||
final state returns the survivor state resulting from the Viterbi hard decision decoding operation after decoding the entire input bit stream. |
|||||||||||
error out passes error or warning information out of a VI to be used by other VIs. Right-click the front panel error out indicator and select Explain Error or Explain Warning from the shortcut menu for more information about the error.
|
MT Convolutional Decoder (Viterbi UnQuantized, Generator Matrix)
This polymorphic instance performs Viterbi unquantized decoding on a convolutionally encoded bit stream using a custom generator matrix you specify.
input symbols specifies the unquantized BPSK demodulated soft symbol data. The default is empty.
|
|||||||
generator matrix (n x k) specifies the generator connection polynomial matrix used for setting the convolutional feedforward decoder connections in octal format. The convolutional decoder is modeled as a linear feedforward shift register arrangement consisting of k rows with K-1 shift registers per row, where k denotes the data word length and K denotes the constraint length. If a ij {0 ≤ i ≤ n-1, 0 ≤ j ≤ k-1} denotes a particular element in the generator matrix, the row index i corresponds to the convolutional decoder output y i that is affected by this element, while the column index j corresponds to the jth row in the k row shift register arrangement. Thus a ij specifies how the K bits in the jth row of the feedforward shift register matrix affects the ith output of the convolutional decoder. The default is For a rate 2/3 convolutional decoder, the generator matrix is specified as
Notice that the preceding matrix represents the elements in octal format. Zeros are padded at the end of the corresponding code generator sequences such that the total length of the sequences is a multiple of three.
The following diagram depicts the rate 2/3 convolutional decoder corresponding to the generator matrix shown previously, with a constraint length of 4. In this diagram, D represents a shift register or memory element.
Here, y i j, 0 ≤ j ≤ n-1 denotes the jth output of the convolutional decoder in the ith decoding instance. |
|||||||
constraint length (K) specifies the maximum number of encoded bits that can be affected by a single input bit. This value represents (1 + maximal memory order), where maximal memory order refers to the length of the longest shift register chain in the convolutional encoder. The default is 3. |
|||||||
initial state specifies the initial parent state for the decode operation. When reset? is set to TRUE (default), the trellis structure is set to this state, thereby initializing the Viterbi decoding operation. On the first call to this VI, and thereafter when reset? is set to FALSE, the survivor state from the previous iteration is used to continue performing Viterbi decoding and this parameter is ignored. The default is 0. |
|||||||
traceback depth (D) specifies the number of trellis stages used in the Viterbi decoding process. The default is 15. |
|||||||
reset? specifies whether the decoder state is reset on each call to this VI. By default, the VI resets on the first call. When reset? is set to TRUE, the VI clears any buffered bits from the previous iterations, and the Viterbi hard decision decoding algorithm is initialized to start decoding from the specified initial state. In this case, the relationship of the length of the output decoded bit stream, L out, to the input encoded bit stream length, L in, is described by the following equation: L out = k × [floor(L in/n) – D] where k/n specifies the code rate, and D specifies the decoder traceback depth in symbols. When reset? is set to FALSE, the VI continues performing convolutional decoding from the previous iteration. In such a case, the length of the output decoded bit stream is given by the following equation: L out = k × floor(L in/n).
The default is TRUE. |
|||||||
error in (no error) can accept error information wired from previously called VIs. Use this information to decide if any functionality should be bypassed in the event of errors from other VIs. Right-click the front panel error in control and select Explain Error or Explain Warning from the shortcut menu for more information about the error.
|
|||||||
output bit stream returns the decoded code word. Wire this parameter to the MT Calculate BER VI to perform bit error rate measurements. |
|||||||
final state returns the survivor state resulting from the Viterbi hard decision decoding operation after decoding the entire input bit stream. |
|||||||
error out passes error or warning information out of a VI to be used by other VIs. Right-click the front panel error out indicator and select Explain Error or Explain Warning from the shortcut menu for more information about the error.
|
Details
The convolutional decoder receives the code words as an array of values representing Boolean bits. The decoder applies the Viterbi hard decision decoding algorithm to obtain the maximum likelihood transmitted data sequence.
The length N encoded input bit stream is first converted into a stream of encoded symbols of the length described by the following formula:
floor[length(input bit stream)/n]
where n is the code word length. Any bits truncated by the floor operation are buffered so that the VI can operate on a continuous stream of input bits.
The Viterbi decoder processes D trellis stages before determining the maximum likelihood survivor path, where D represents the decoder traceback depth. Typical D values equal 5 × K stages of the trellis, where K denotes the constraint length of the convolutional encoder. The Viterbi decoding is implemented using the register-exchange algorithm. For reduced computational overhead in determining the path and branch metrics, the VI uses 2(K–2)k trellis elements of size 2k elements during intermediate calculations, where K is the constraint length and k is the data word length in bits. The following diagram represents binary soft symbol decisions from a demodulator. A sample close to –1 represents a logic 1 while a sample closer to 1 represents a logic 0.
- Viterbi Hard Decision Decoding: In these instances, the input to the convolutional decoder corresponds to binary hard-decision data generated by the demodulator. For example, you can input the output bit stream from the MT Demodulate PSK VI or the MT Map Symbols to Bits VI to the Viterbi hard-decision decoder.
- Unquantized Viterbi Decoding: In these instances, the input to the convolutional decoder is represented by the I/Q symbols generated by the demodulator. These instances assume that the binary data is mapped to symbols such that a logic 0 is mapped to the I/Q location 1+0i, and a logical 1 is mapped to the I/Q symbol point –1+ 0i (corresponding to the symbol map [1+0i –1+0i]). You can obtain the soft symbol data in the Modulation Toolkit by decimating the oversampled complex data, which is generated by the MT Demodulate PSK VI or the MT Matched Filter VI, to symbols using the MT Decimate Oversampled Waveform VI. These instances yield the best overall performance from the different decoder operation choices.
-
Viterbi Soft-Decision Decoding: In these instances, the decoder accepts unsigned integers. Additionally, it requires you to specify the number of soft-decision bits, n
soft, before decoding. These soft-symbol decisions are obtained by quantizing the soft binary symbol decisions to the specified bits of precision from the demodulator, as shown in the following table. These unsigned integers range from 0 to 2n
soft.
Note An eight-level quantization (n soft = 3) yields less than a 0.25 dB reduction in coding gain relative to the unquantized Viterbi decoding. When n soft = 1, the Viterbi soft-decision decoding algorithm reverts to performing hard-decision decoding. The following table describes the nature of inputs fed into the Viterbi Soft-Decision decoder. This table assumes that BPSK symbol decisions from the demodulator are quantized to 3 bits of precision.
Soft Decision Input Logic Value 0 Strong logic 0 1 Highly likely to be 0 2 Moderate 0 3 Uncertain (0 or 1) 4 Uncertain (0 or 1) 5 Moderate 1 6 Highly likely to be 1 7 Strong logic 1 Generator matrices corresponding to code rates and constraint lengths obtained from Wicker, Stephen B. Error Control Systems for Digital Communications and Storage. Englewood Cliffs: Prentice-Hall, 1995.