Communications Blockset | ![]() ![]() |
Iterative Decoding of a Serially Concatenated Convolutional Code (SCCC) - Demo
The sccc_sim
demo illustrates how to use an iterative process to decode a serially concatenated convolutional code. This document highlights these aspects of the demo:
Structure of the Demo
To summarize briefly, the simulation generates information bits, encodes them using a serially concatenated convolutional code, and transmits the coded information along a noisy channel. The simulation then decodes the received coded information using an iterative decoding process, and computes error statistics based on different numbers of iterations. Throughout the simulation, the error rates appear in a Display block.
Variables in the Demo
When you open the demo, it loads several variables into the MATLAB workspace. Note that this operation overwrites variables in the workspace that have the same names. If you accidentally delete this model's variables and need to recreate them, open the Global Parameters block's mask and then press OK.
The Global Parameters block lets you vary the values of some variables that the model uses. The table below indicates their names and meanings.
Creating a Serially Concatenated Code
The encoding portion of the demo uses a Convolutional Encoder block to encode a data frame, a Random Interleaver block to shuffle the bits in the code words, and another Convolutional Encoder block to encode the interleaved bits. Because these blocks are connected in series with each other, the resulting code is called a serially concatenated code.
Together, these blocks encode the 1024-bit data frame into a 3072-bit frame representing a concatenated code. These sizes depend on the model's Block size parameter (See the Global Parameters block.). The code rate of the concatenated code is 1/3.
In general, the purpose of interleaving is to protect code words from burst errors in a noisy channel. A burst error that corrupts interleaved data actually has a small effect on each of several code words, rather than a large effect on any one code word. The smaller the error in an individual code word, the greater the chance that the decoder can recover the information correctly.
Convolutional Encoding Details
The two instances of the Convolutional Encoder block use their Trellis structure parameters to specify the convolutional codes. The table below lists the polynomials that define each of the two convolutional codes. The second encoder has two inputs and uses two rows of memory registers.
Decoding Using an Iterative Process
The decoding portion of this demo consists of two APP Decoder blocks, a Random Deinterleaver block, and several other blocks. Together, these blocks form a loop and operate at a rate six times that of the encoding portion of the demo. The loop structure and higher rate combine to make the decoding portion an iterative process. Using multiple iterations improves the decoding performance. You can control the number of iterations by setting the Number of iterations parameter in the model's Global Parameters block. The default number of iterations is six.
Computations in Each Iteration
In each iteration, the decoding portion of the demo decodes the inner convolutional code, deinterleaves the result, and decodes the outer convolutional code. The outer decoder's L(u) output signal represents the updated likelihoods of original message bits (that is, input bits to the outer encoder).
The looping strategy in this demo enables the inner decoder to benefit in the next iteration from the outer decoder's work. To understand how the loop works, first recall the meanings of these signals:
The feedback loop recognizes that the primary distinction between these two signals is in the interleaving operation that occurs between the outer and inner encoders. Therefore, the loop interleaves the L(c) output of the outer decoder to replicate that interleaving operation, delays the interleaved data to ensure that the inner decoder's two input ports represent data from the same time steps, and resets the L(u) input to the inner decoder to zero after every six iterations.
Results of the Iterative Loop
The result of decoding is a 1024-element frame whose elements indicate the likelihood that each of the 1024 message bits was a zero or a one. A nonnegative element indicates that the message bit was probably a one, and a negative element indicates that the message bit was probably a zero. The Hard Decision block converts nonnegative and negative values to ones and zeros, respectively, so that the results have the same form as the original uncoded binary data.
Visible Results of the Demo
The demo includes a large Display block that shows error rates after comparing the received data with the transmitted data. The number of error rates in the display is the number of iterations in the decoding process. The first error rate reflects the performance of a decoding process that uses one iteration, the second error rate reflects the performance of a decoding process that uses two iterations, and so on. The series of error rates shows that the error rate generally decreases as the number of iterations increases.
Selected Bibliography
[1] Benedetto, S., D. Divsalar, G. Montorsi, and F. Pollara. "Serial Concatenation of Interleaved Codes: Performance Analysis, Design, and Iterative Decoding." JPL TDA Progress Report, vol. 42-126, August 1996. [This electronic journal is available at http://tmo.jpl.nasa.gov/tmo/progress_report/42-126/title.htm.]
[2] Divsalar, Dariush and Fabrizio Pollara. Hybrid Concatenated Codes and Iterative Decoding. U. S. Patent No. 6,023,783, Feb. 8, 2000.
[3] Heegard, Chris and Stephen B. Wicker. Turbo Coding. Boston: Kluwer Academic Publishers, 1999.
![]() | Discrete Multitone Signaling Demo, Alternative Form | Phase Noise Effects in 256-QAM - Demo | ![]() |