The ever increasing demand for information exchange is a common characteristic of most areas of modern civilization. The transfer of information from the source to its destination has to be done in such a way that the quality and accuracy of the received information should be as close as possible to the quality and accuracy of the transmitted information. The information to be transmitted can be machine generated (e.g., images, computer data) or human generated (e.g., speech). Regardless of its source, the information must be translated into a set of signals optimized for the channel over which it is to be sent.
Transmission of digital data is inherently prone to noise and interference. This noise and interference may introduce errors into the transmitted data. Error detection schemes have been suggested to determine as reliably as possible whether errors have been introduced into the transmitted data. For example, it is common to transmit data in packets and add to each packet a cyclic redundancy check (“CRC”) field, for example, that carries a checksum of the data of the packet. When a receiver receives the data, the receiver calculates the checksum on the received data and verifies whether the result of the calculation is identical to the checksum in the CRC field.
Various forward error correction (“FEC”) coding techniques have been introduced to allow receivers of digital data to correctly determine the transmitted data even when errors may have occurred during transmission. For example, convolutional codes introduce redundancy into the transmitted data such that each bit is dependent on earlier bits in the sequence. Therefore, when errors occur, the receiver can still deduce the original data by tracing back possible sequences in the received data.
To further improve the performance of a communication system over a transmission channel, some coding schemes include interleavers, which rearrange the order of the coded bits in the packet. FEC decoders have difficulty recovering a series of errors in adjacent bits. The reordering by the interleaver spreads these affected bits throughout the code block allowing the FEC decoder a better chance to recover the bits in error. Other improvements may include multiple-component codes that encode the packet more than once; in parallel or in series. For example, it is known in the art to employ concatenated coding and error correction methods that use at least two convolutional coders serially or in parallel. Such parallel encoding is commonly referred to as turbo coding.
For multiple-component codes, optimal decoding is often a very complex task beyond the capabilities of current processors. Iterative decoding techniques have been developed to overcome this problem. Rather than determining immediately whether received bits are zero or one, the receiver assigns each bit a value on a multilevel scale representative of the probability that the bit is one. A common scale of such probabilities, referred to as log-likelihood ratio (“LLR”), which is a ratio of the probability that a bit is a zero to that of the probability that the bit is a one. Such values can represent each bit by a real number or, more commonly, an integer in some range, e.g., {−32, 31}. The sign of the LLR indicates the likelihood that the bit is a zero or a one, and the magnitude of the LLR represents the degree of likelihood. So, a value of 31 signifies that the transmitted bit was a zero with very high probability, and a value of −32 signifies that the transmitted bit was a one, with very high probability. A value of zero indicates that the logical bit value is indeterminate.
Data represented on the multilevel scale is referred to as “soft data”, and iterative decoding is usually soft-in/soft-out, i.e., the decoding process receives a sequence of inputs corresponding to probabilities for the bit values and provides as output corrected probabilities, taking into account constraints of the code. Generally, a decoder that performs iterative decoding uses soft data from former iterations and improves this soft data in the decoding process. During iterative decoding of multiple-component codes, the decoder uses results from decoding of one code to improve the decoding of the second code. When serial encoders are used, two decoders may be used serially for this purpose. When parallel encoders are used, as in turbo coding, two corresponding decoders may conveniently be used in parallel for this purpose. Such iterative decoding is carried out for a plurality of iterations until it is believed that the soft data closely represents the transmitted data. After all of the iterations are complete the decoder makes “hard decisions” on each bit by examining the sign of the soft data. Those bits that have a positive sign (soft value between 0 and 31, for example) are assigned binary zero, and the remaining bits are assigned binary one.
Many communications systems use forward error correction techniques to improve the power efficiency of the system. In other words, FEC allows for the reliable detection of blocks of bits at a lower signal to noise ratio (“SNR”) than would otherwise be possible. As previously mentioned, a prevalent FEC technique is the use of iterative decoders, with the most obvious example being Turbo decoders.
An iterative decoder functions, as its name suggests, to decode the data bits in a code block using multiple passes with the idea that the decoder eventually will converge to the “correct bits” for the packet being decoded.
At the start of the decoding of a code block, it is generally unknown how many iterations are necessary for convergence to occur (or if convergence will occur at all). This causes a problem because each additional iteration performed has an associated computational cost and yet the receiver will have a fixed amount of processing capability. A basic approach to resolving this problem is to set or fix the number of iterations to be a particular value in order that the processing load, in its worst case, can fit within the processing capacity of the decoder. One drawback to this simple approach is that some code blocks will still contain errors that could have been avoided by executing additional iterations. The block error rate (“BLER”) performance of the decoder is a function of the number of iterations, and as such, more iterations yield a better BLER. Another drawback to this first approach is that for some code blocks the decoder will have converged to the “correct bits” in fewer than the set or fixed number of iterations, which means the decoder may have incurred unnecessary computational costs, with the associated implications of power consumption, and increased heat.
An improvement upon the above approach is to use an early termination detector within the iterative decoder. An early termination detector typically functions to make a determination at the end of each iteration performed, whether the decoder has converged to the “correct bits” for the code block. By doing so, the early termination detector can stop the decoder, and thereby prevent unnecessary iterations with the corresponding unnecessary computations.
Although early termination is an improvement for iterative decoders, there are still problems with this approach. As mentioned earlier, the receiver has a fixed amount of processing capacity and the “processing load” cannot exceed that processing capacity even during worst-case conditions. Therefore, a decoder with early termination calls for the maximum number of iterations to be specified. This “maximum number” must be set or fixed such that all code blocks in a frame can run to the maximum number of iterations (i.e. the worst-case scenario) thereby ensuring that the processing load does not exceed the decoder processing capacity. The quantity of code blocks in a frame with their corresponding code block sizes may vary and so the worst-case must take into account the maximum number of code blocks (or total bits). For example, the maximum number may be set to six iterations and the processing capacity sized to accommodate the maximum number of code blocks with this number of iterations. Early termination may stop the decoder at fewer than six iterations; however, the BLER performance will be no better than that of a fixed six-iteration BLER performance without early termination. Although early termination may reduce the total number of computations and thus yield “slack capacity”, because the decoder functionality is typically specialized hardware, the “slack capacity” remains unused and unexploited.
It is therefore desirable to have method and system that provides for controlling the maximum number of iterations of iterative decoders in such a way as to exploit the full processing capacity of the decoder and optimize BLER performance.