1. Field of the Invention
This invention relates generally to trellis coded modulation techniques for use in digital communication systems. More particularly, the invention relates to methods and apparatus for the encoding and decoding of two-dimensional and higher-dimensional trellis-encoded signal constellations using an efficient and practical multilevel form of trellis coded modulation.
2. Description of the Related Art
A family of WiMAX trellis codes is discussed in IEEE Std. 802.16a 2004 “WiMAX standard”, which is incorporated herein by reference; see especially sections 8.2-8.4. Many relevant details of the WiMAX trellis codes are described herein. For example, see
a also shows a 64-state, rate-½ convolutional coder 161 that gives rise to a code with a free Hamming distance of dfree=10. This large free Hamming distance is desirable because it can be used to multiplicatively extend the minimum squared Euclidian distance (MSED) between adjacent signal constellation points. For example, if the uncoded MSED between neighboring constellation points in a small and compact signal constellation with no uncoded bits is D2, the trellis encoder 161 can increase this to a coded MSED of dfree×D2=10×D2. In larger constellations that also include uncoded bits, the actual MSED improvement is typically much less. A good source of reference to understand many theoretical aspects of the present invention is “Error control coding, 2nd Ed.,” by Shu Lin and Daniel J. Costello, Jr., Prentice Hall, 2004, (“the Lin and Costello reference”). Table 12.1 (pages 539-540) of the Lin and Costello reference tells how many states are needed for a convolutional code to achieve a given Hamming distance at a given coding rate, e.g., rate-½, rate-⅔, or rate-¾. These tables are very useful when designing trellis codes as discussed below.
a shows a prior art rate-¾ trellis encoder 163 constructed by mapping two coded bits produced by the rate-½ encoder 161 onto an I-component (in-phase) and a Q-component (quadrature-phase) to produce a trellis coded 16-QAM constellation 174a as shown in
The minimum squared Euclidian distance (MSED) between uncoded constellation points within the 4-QAM coded building block 20 can be readily seen to be D2=4. Any change of a single coded bit in
Because the encoder 30 does not map any uncoded bits,
Also shown in
Another example of a trellis coded modulation scheme is the LSB (least significant bit) coding technique used in the ITU-J.83 digital television transmission standard. J.83 transmission is also used in the down link of DOCSIS cable modems. As illustrated in
As used herein, “integer lattice” is generally ZN or a subset of ZN, where ZN denotes the integer points of an N-dimensional vector space. In some cases the integer points may include complex integers (i.e., a+jb where a and b are integers). The vector space CN of complex numbers is generally taken to be an N-dimensional “signal space.” Received signals in a receiver are processed and most often converted to points in the signal space. A decoder portion of the receiver attempts to map sequences of the received signal points in CN back onto complex integers of the integer lattice, e.g. ZN. The integer lattice is also a subset of CN. An integer lattice generally extends to infinity and a given trellis encoder maps bits to a signal constellation which is finite and is thus a subset of the integer lattice.
Yet another example of a trellis coded modulation scheme is the Wei family of multidimensional trellis codes. Such codes are described in detail in U.S. Pat. No. 4,713,817, which is incorporated herein by reference.
On page 492 of Wei's IEEE Transactions on Information Theory article, Vol. IT-33, July 1987 (“Wei'87”) (incorporated by reference herein), Wei explains that his 16-state 4D trellis code looses 1.36 dB due to constellation expansion. Col 2 of p. 492 of Wei '87 states: “[4.66 dB] is also the largest possible coding gain that can be achieved with the partitioning of the 4D rectangular constellation of Table I.” Col. 2 of p. 496 states: “Given the partitioning of the 4D or 8D rectangular constellation of section IV-A or -B, it is impossible to increase the coding gain further or reduce the error coefficient of the 16-state or 64-state code of those two subsections.” It would be desirable to recapture the bulk of this coding loss due to constellation expansion with increase in coding/decoding complexity on the order of some small amount like 25%-45%.
Another related area of art in need of improvement relates to multilevel codes. For example, see the articles provided in the accompanying IDS entitled “Multilevel Codes: Theoretical Concepts and Practical Design Rules,” by Wachsmann et al, IEEE Transactions on Information Theory, vol. 45 no. 5, July 1999, and “Coded Modulation by Multilevel-Codes: Overview and State of the art, by J. Huber et al; and “Multilevel Codes: Distance profiles and Channel Capacity,” 1994, by J. Huber. These articles discuss a family of multilevel coders and decoders. The coders described in these articles generally maintain specified coding rates on each of a plurality of bit lines, use long interleavers, have larger delays, are relatively complex to implement, and use a subset partitioning technique that creates subsets of points that are spread out at a lower level partitioning but are clustered at upper levels. It would be advantageous to have a multilevel coding scheme that could be characterized generally as a multilevel code, but that was much simpler to implement. It would be desirable to have a multilevel coding scheme assigns groups of points in lowest level partition to tight clusters around tile points in an upper level coding partition. It would be advantageous to provide efficient multilevel coding structures and methods that whose implementation complexity is on the same order as current trellis coded modulation schemes already used in various telecommunication standards. A simple and efficient family of multilevel coding and decoding schemes would be useful in improving existing trellises coded modulation schemes such as the ones found in various telecommunication standards.
While the aforementioned co-pending U.S. patent application Ser. No. 11/976,214 disclosed many aspects central to the present invention, the instant patent application also considers the effect of error coefficient. Specifically, in addition to the previous disclosure, the instant application provides decoder structures and methods to improve the decoded error performance of tiled-building-block trellis codes and other types of multi-level codes. Specifically, the decoder structures disclosed herein reduce the detrimental effects of high error coefficients that are common in most types of multi-level codes. New encoder structures are also provided that take advantage of the newly disclosed decoding architecture to further enhance coding gains by reducing average signal energy.
The present invention solves these and other problems by providing systems and methods to construct and decode a novel family of codes, which we call “tiled-building-block trellis codes.” In one aspect of the invention we define a first code to be a “building-block trellis code,” and we define a second code to be a “tiling code.” The building-block-trellis code is used to construct a small compact signal constellation building block which is called a “coded-constellation-building block,” or, a “building block” for short. The tiling code is employed to allow the small powerful building blocks to be closely tiled to form larger constellations while preserving the building block's MSED. Like any other trellis code, the tiling code has a signal constellation, but at each constellation point of the tiling code is placed a copy of a selected constellation building block. For this reason, we refer to each constellation point of the tiling code as a “tiling point,” and we refer the set of all such tiling points as a “tiling constellation.” The “intra-block MSED” is defined as the MSED between constellation points within a building block, and the “tiling MSED” is defined as the MSED between the centers of the tiled building blocks, i.e., the MSED between tiling points in the tiling constellation. In terms of coded sequences, the intra-block MSED is the distance between coded sequences of constellation points within a building block and the tiling MSED is the distance between coded sequences of tiling points (tile center locations).
Although not a requirement, we prefer that the MSED between tiling sequences of the tiling code be equal to or greater than the intra-block MSED of the constellation points within the building block. This way the MSED of the composite constellation after tiling will be at least approximately equal to the intra-block MSED supplied by the building block. We find that LSB codes such as the ones used in the J.83 cable modem standard are well suited for use as a tiling code, but that any set-partitioning-based code such as a Wei code or some other Ungerbock-type code can also be used.
A preferred method of the present invention can be described as follows: 1) define a building-block trellis code and construct a trellis-coded constellation building block whose signal points enjoy a large intra-block MSED, 2) select a tiling code (subset partitioning) whose tiling MSED is equal to or greater than the intra-block MSED of the building block, 3) Place a copy of the building block at each tiling point of the tiling code to construct the tiled signal constellation; so that 4) the MSED between individual constellation points of the tiled set of building blocks is preferably as large as the intra-block MSED of the building block before it was tiled. If the MSED of the building block is selected to be larger than the MSED of the tiling code, desirable systems can be constructed, but the overall MSED of the system will be limited by the MSED of the tiling code. As a general rule it is often best to select the tiling code and the building block code to have the same MSED so that neither the tiling code nor the building-block trellis code pulls down the performance of the other. We call such code pairs “well balanced.” In some cases we perform Monte Carlo simulations and determine whether secondary effects due to error coefficient are limiting performance, and if so, we may optionally increase the MSED in either the building block code or the tiling code or both to offset these effects.
A key aspect of the present invention provides a systematic and geometric approach to develop trellis coded modulation schemes whose coding gains are significantly better than the best and most practical codes found in widespread use (e.g., standardized products such as V.34 dial-up modems, J.83 digital television, DOCSIS cable modems, G.991 DSL modems, 802.11 wireless LANs, and 802.16a wireless MANs). In one aspect of the present invention, codes like the WiMAX family of trellis coded constellations are improved upon by increasing coding gain, and/or increasing the data rate with a 35%-50% decrease in computational complexity. When applying the present invention to WiMAX codes, the starting code to be improved upon already uses a building-block trellis code, but without a tiling code. In such cases one can optionally redesign the building block and add then a tiling code. Codes redesigned in this way generally demonstrate a coding gain over the prior-art. By going to a multidimensional building block, we can also increase the data rate as compared to prior art WiMAX codes and other codes as discussed below. Coding/decoding complexity is reduced by 35%-50%.
In another aspect of the present invention, a starting code to be improved upon (e.g., Wei code or other type of Ungerbock code) can be viewed as a tiling code. In these cases, additional coding gain is achieved by inserting a coded constellation building-block at each point of the prior art code. As discussed below, coding gain can be achieved in such cases because the building block can be designed to transmit some information bits, thereby leading to a contraction of the tiling constellation. Removal of the outer layer, higher energy constellation points in the tiling constellation is a potential source of coding gain. In reality, more constellation points are added by placing a building block at each tiling point, but this leads to an overall constellation reshaping that often leads to significant coding gains. The designer has the ability to increase the data rate with moderate improvements in coding gain or to more significantly increase the coding gain while leaving the data rate the same or slightly improving upon it. In the case of the Wei codes, the coding/decoding complexity is increased by 25%-45% depending on the specific type of embodiment. The building block approach of the present invention provides the designer with a tool set to build up trellis codes to meet a variety of design needs, as is demonstrated herein.
In general, new codes can be constructed by appropriately selecting compatible pairs of building-block trellis codes and tiling codes. Although in Wei'87 it was explicitly stated such improvements were impossible, we constructed a tiled-building-block version of Wei's 4D code that recovers 1.33 dB of Wei's 1.36 dB constellation expansion loss, thereby providing a coding gain of 5.99 dB (over the uncoded 128 CR constellation) with a 41% increase in decoding complexity. Even more significant gains are realized when the approach is applied to Wei's well known 64-state 8D code. Coding complexity is kept under control because the tiling decoder reuses the branch metrics from the building-block decoder and the tiling constellation is contracted.
In certain types of embodiments, a multi-level encoded signal r(k) is received for decoding. This signal includes at least an upper-level-code component and a lower-level-code component. In one type of preferred embodiment, a first upper-level decoder parallel-independently decodes the upper-level code to produce a first sequence of upper-level-code decisions to include a first estimate of an upper-level code component of r(k). The parallel-independent decoding of the upper-level code does not receive decoded information about the lower level code. Next a lower-level decoder decodes the lower-level code to produce a sequence of lower-level-code decisions, to include an estimate of a lower-level code component of r(k). The decoding of the lower-level code is conditioned upon the first estimate of the upper-level code component of r(k). Next a second upper level decoder decodes the upper-level code a second time to produce a second sequence of upper-level-code decisions, to include a second estimate of the upper-level code component of r(k). The second decoding of the upper-level code is conditioned upon the estimate of a lower-level code component of r(k). That is, unlike the first upper-level decoder, the second upper level decoder corresponds to a cascaded stage of a multi-stage decoder. As discussed hereinbelow, with the use of such decoding, adverse performance effects associated with high error coefficients can be reduced or eliminated. As also discussed below, with the use of such decoding, tiles at one or more higher coding levels can be physically spaced more closely together to provide still further coding gain by reducing the average signal energy of the constellation.
The various novel features of the present invention are illustrated in the drawings listed below and described in the detailed description that follows.
a shows
b shows
c is a constellation diagram showing a WiMAX rate-¾ coded 16-QAM constellation 174a and a WiMAX rate-⅚ coded constellation 174b.
d is a constellation diagram showing a WiMAX rate-⅞ coded 256-QAM constellation 175.
e is a constellation diagram showing a punctured rate-¾, Gray-code-enumerated 16-QAM constellation building block tiled within the WiMAX constellations 174b and 175.
a illustrates a 192-point constituent 2D signal constellation used in Wei's 4D codes.
b illustrates the coder used to generate Wei's famous 16-state 4D code.
a illustrates a 160-point constituent 2D signal constellation used in Wei's 8D codes.
b illustrates the coder used to generate Wei's famous 64-state 8D code.
To understand the general framework of the present invention, once again consider
Consider the 4-QAM building block 20 of
The present invention is based upon the observation that the reason the MSED of the constellation generated by the encoder 163 drops down from D2=40 to D2=16 is because the inter-block distance between different building blocks dominates the minimum distance. Note that the centers of the 4-QAM building blocks 20 located in each quadrant of the 16-QAM constellation 174a are located at points (±2, ±2). That is, the distance between building-block centers is D=4, or D2=16. This shows an imbalance, i.e., the intra-block points are protected with a powerful 64-state code and enjoy an MSED of D2=40 in each quadrant, but the overall 16-QAM constellation 174a's performance is limited by to the lesser distance between tile centers, i.e., D2=16. This is because a movement of D2=16 within the constellation 174a gives rise to a bit error in one of the two uncoded bits of the WiMAX encoder 163. This is the limiting factor that needs to be corrected and is addressed by the present invention. That is, the present invention recognizes a “tiling loss” to be the limiting factor in many practical trellis coded systems. The present invention adopts the general framework of multilevel codes to solve this problem, but uses a unique partitioning that places a set of coded building blocks at a set of coded tiling points. This difference in approach leads to very practical codes that provide near-optimal results with very low cost. In some cases a small increase in complexity is needed (e.g., 27% for the 16-state 4D Wei code). In other cases, such as the WiMAX codes, the gains of the present invention can be realized technique with a modest increase in complexity on the order of 18%-33%.
To develop the general approach of the present invention, we first show how the building block 20 can be tiled without tiling loss. Our design goal is to redesign the WiMAX constellations 174a, 174b and 175 in such a way that the redesigned constellations all achieve the smaller building block 20's MSED of D2=40. To redesign of the 16-QAM constellation 174a, we map the two uncoded bits of the encoder 163 to a 4-QAM tiling constellation whose tiling points are enumerated according to the LSB enumeration policy 40. Next we tile the 4-QAM building block 20 at each tiling point of this 4-QAM tiling constellation. We then LSB-encode each axis of the 4-QAM tiling constellation with a simple 16-state LSB encoder 61a to LSB-encode what were previously the uncoded bits in the encoder 163. Note that the rate-⅘ convolutional encoders 61a have a free Hamming distance of dfree=3. Therefore, the MSED between tiling-point trellis sequences rises to 3×D2=3×16=48. With this increase, the MSED of the entire constellation is now limited by the building block's intra-MSED of D2=40; that is the MSED of the redesigned version of the 16-QAM constellation 174a has increased to D2=40 and the tiling loss has been eliminated.
In the decoder, it will take a 64-state decoder to decode the 4-QAM building block 20, and this will be the same as what is needed to decode the WiMAX code 163. Also required are two 16-state LSB decoders. Note these decoders are 16-state as opposed to 64-state, use real arithmetic, only have two branches per state, and in the 16-QAM case, only operate on two PAM tiling points each. Importantly, these decoders reuse the branch metrics already computed by the 64-state building block decoder. Therefore there is coding complexity is kept under control. As we show, the decoding complexity is reduced by 35%-50% as compared to the WiMAX codes.
To now improve the coding of the 64-QAM constellation 174b, place the coded 4-QAM building block 20 at each point of a 16-QAM tiling constellation whose sixteen tiling points are located at (±2, ±2), (±2, ±6), (±6, ±2) and (±6, ±6). In this example the tiling constellation is exactly the LSB-mapped constellation 40 as illustrated in
The frame mapper 102 passes a set of NBB (BB=building block) input bits each mapping interval to a building-block trellis encoder 115. The building-block trellis encoder 115 generates a set of coded bits to be mapped by a signal mapper 120 onto a coded constellation. A coded constellation building block will be tiled onto a larger signal constellation by placing a copy of the coded constellation building block at each tiling point of a tiling constellation. The frame mapper 102 passes a set of NT (T=tiling) input bits each mapping interval to a tiling encoder 105. As discussed in further detail below, the tiling encoder 105 increases the MSED between coded tiling sequences. The frame mapper 102 also passes an optional set of Nuc (UC=uncoded) bits to an optional bit converter 110. For example, if the tiling encoder is implemented as a pair of LSB encoders, once the lower order tiling bits are protected, additional uncoded bits may be added without introducing any tiling loss. Often the optional bit converter 110 is implemented as a straight pass-through of uncoded bits, but can also implement logical operations, for example, to differentially encode or to shape the constellation produced by the signal mapper 120 and/or to otherwise minimize average bit energy.
The building-block-trellis encoder 115 can be implemented using the WiMAX encoder 161, and can be configured to so that the mapper 120 maps the coded bits c1c0 onto a selected tiled copy of the 2D 4-QAM building block 20. Different convolutional encoders beside the encoder 161 can be generally used by the building block encoder 115. Similarly, we could select a rate-⅔ convolutional coder or a rate-¾ convolutional encoder to be used in the building block encoder 115. The specific choice of coding rate, the convolutional code used in the building block and the 2D or higher constellation geometry of the building block implemented by the mapper 120 are left to the designer. Design guidelines are illustrated in several examples below.
In accordance with an aspect of the present invention, as illustrated in
Referring now to
The tiling encoder 105 is configured to increase the MSED between near-by tiling points. The signal mapper 120 inserts a coded building block into each tiling point of a selected tiling constellation. The tiling encoder has the effect of increasing the MSED between tile centers. This becomes important when the uncoded MSED between tile centers is less than the intra-block MSED within the building block placed at each tiling point. If the tiling encoder 105 is selected to raise the tiling MSED to the building block's intra-block MSED, the resulting tiled-building-block trellis code will be well balanced and will not suffer a tiling loss. In some cases the MSED of the tiling code can be less than or greater than the intra-block MSED of the building block to account for secondary effects such as error coefficient or for efficiency of implementation.
Turning now to
Because the 4-QAM building block has an MSED of D2=40, we desire a tiling code with an MSED D2≧40. Recall that the 16-state rate ⅘ encoder 61a is able to increase the effective separation between LSB-coded QAM constellation points in the constellation 40 to 3*D2. Therefore, the pair of encoders 205, 206 increase the separation between adjacent tiling points from D2=16 to D2=3*16=48. That is, the overall MSED of the tiled-building-block encoder 200 is limited by the coded constellation building block 20's MSED of D2=40<48. Any of the 16-QAM, 64-QAM or 256-QAM constellations of
The above schemes constructed using the 2D building block 20 targeted data rates 3, 5 and 7 bits/interval, but ended up transmitting data rates 2.6, 4.6 and 6.6 bits/interval. The reduction in the data rate is due to LSB coding. If the constellations are expanded to accommodate the WiMAX data rates of 3, 5, and 7 bits per interval, the respective coding gains can be shown to be 1.6616 dB, 1.4387 dB, and 1.4490 dB above the WiMAX standard. Some detailed examples of how constellations are expanded and contracted to match to meet a selected target data rate are provided below.
The above coding gains are a bit optimistic because the encoder 200 does not achieve the same 5 bits/interval transmission rate of the WiMAX standard. As shown in
As discussed in further detail below in connection with
The LSBs of each of the I and Q mapping nibbles are sent to respective LSB encoders 305, 306. Taking into account the data rate reduction due to the rate-⅘ LSB encoders, each bit in each of the I and Q mapping nibbles carries 3.8/4 bits of information. Since we map 7 bits per interval to the tiling encoder and do not use any tiling points outside the 128 CR, the total data rate supported by the tiling constellation is 7*(3.8/4)=6.65 bits/interval. The frame mapper 102 also dispatches 0.5 information bit per 2D interval to the 4D building block encoder 315, so the total data rate of this design becomes 6.65+0.5=7.15 bits per interval. This is comparable to the rate-⅞ WiMAX encoder 165 and its constellation 175.
Note that the average symbol energy of the scheme shown in
If two uncoded bits are added, one to the I and one to the Q component, the encoder 300 transmits 6.1 bits per signaling interval using a square 64-QAM tiling constellation similar to
If two more uncoded bits are added, one to the I and one to the Q component, 8.1 information bits per 2D signaling interval are transmitted using a square 256-QAM tiling constellation, with the constituent 2D building block constellation 25 at each tiling point. This constellation has the same MSED of D2=64, but in this case Eavg=682, so that dmin2=0.380. The uncoded 256-QAM tiling constellation has dmin2=0.0941, so that the above scheme performs 6.062 dB better than uncoded 256-QAM.
We now compare the encoder 300 to the three WiMAX encoders 163, 165 and 167 which respectively transmit 3, 5 and 7 information bits per interval (i.e., and odd number of information bits per 2D interval). These three WiMAX encoders respectively use the 16-QAM constellation 174a, 64-QAM constellation 174b and 256-QAM constellation 175. The encoder 300 at the corresponding data rates of 3.1, 5.167 and 7.15 information bits per interval respectively transmit their data using 8-QAM, 32 CR and 128 CR tiling constellations. These tiling constellations are tiled with two constellation points per tile (similar to the constellation 40:4D). It can be shown that the encoder 300 using of the 4D building block and the 32-state LDB tiling coders increase the coding gain relative to the rate-¾, rate-⅚, and rate-⅞ WiMAX coders of
These gains come with no loss in data rate but instead a slight increase in data rate relative to their comparable WiMAX counterparts. Also, while two extra decoders are needed, the decoding complexity actually decreases on the order of 36%-49% relative to what is needed to decode the output of the WiMAX encoders 163, 165 and 167. This is because the constellation sizes remain the same so no extra branch metrics are introduced, but the 64-state decoder used in WiMAX is traded for a 32-state decoder with many fewer branches per state to evaluate, with the additional two 32-state LSB decoders only involve real arithmetic, only have 2 branches per state, and reuse a set of metrics already computed for the 32-state building-block decoder. Also, the LSB decoders only operate in a relatively small (square root complexity) PAM constellation.
Referring now to
The same tiling bit converter 102x can be applied to frame mapping embodiments when m=7. In this case the 27=128 constellation points of the 128 CR constellation are considered to be a subset of the square 256-QAM constellation. LSB coding is performed as it was over the 256-QAM constellation using the same approach. Care is taken to ensure that the 128 CR is closed over inversions of the two LSBs. This provides an average tiling code data rate of 7×(3.8/4)=6.65 bits/interval. The building block encoder 315 adds 0.5 bits/interval, so that the overall data rate of the above scheme is 7.15 bits/interval, which exceeds our target of 7 bits/interval. The same structure applies to higher values of m as well for the case where m is odd.
So far we have constructed building block trellis codes that maintain an MSED of D2=64 using a 32-state rate-½ convolutional code. We then employed a pair of 32-state LSB encoders to ensure this MSED was maintained once the building block was tiled onto larger constellations of various sizes. Alternatively, we could also target a lower MSED in order to further lower the coding complexity. For example, we can maintain an MSED of D2=48 in the building block by using a convolutional code with dfree=6, i.e., an 8-state, rate-½ code. Two of the 16-state LSB encoders 61a would be sufficient maintain this D2=48 between tiling points.
Note that the table of
J.83 uses LSB-encoded 64-QAM and 256-QAM constellations, but looses 0.4 bits per interval due to the parity bits added by two rate-⅘ LSB encoders. To perform the above comparisons, we configured the encoder 300 at the 5.6 and 7.6 bits/interval rates. To target 5.6 bits per interval, the frame mapper 102 processes 11 bits per 4D mapping frame to select a pair of tiling points and sends one bit to the building block encoder 315. Each 2D interval, two 3-bit tiling point selector words are generated to provide independent I and Q control for tiling point selection on each of the two constituent 2D tiling constellations. Since each constituent 2D tiling constellation must carry 5.5 bits, we add 16 points to the 32 CR constellation to arrive at the 48 CR+ constellation illustrated in
Focusing on the 5.6 bits/interval embodiment, the 48 CR+ constellation adds 16 more points to the outside of the 32 CR in such a way as to add as little extra average energy as possible while accommodating the extra half of a bit per interval. Also, expanding the 128 CR constellation by 50% adds 64 constellation points and yields what we call a 192CR+ constellation. The 192 CR+ constellation adds 64 more points to the outside of the 128 CR in such a way as to add as little extra average energy as possible. As discussed below, the expanded constellations we use in this type of embodiment are slightly less energy efficient then Wei's expanded constellations in order to make LSB encoding easier.
The bit converter 102x is preferably configured to also perform energy set mapping. We use the 5.6 data rate version of the 4D block encoder 300 to illustrate how this is done.
Each 4D interval twelve information bits are processed. Every fifth 2D interval two less information bits are received as inputs because these bits are generated as parity bits by the LSB encoders during these intervals. Of the 12 bits to be mapped each 4D symbol interval, one is passed to the 4D building block trellis encoder 315. The eleven remaining bits are sent to the tiling bit converter 102x. Three of these eleven bits are used to select a pair of energy sets. Of the remaining eight bits, four are mapped each 2D interval to select one of the sixteen points in each energy set. The bit converter 102x is configured to map these remaining four bits per interval in two-bit pairs as independent I-coordinate and Q-coordinate selectors in accordance with LSB coding practice. By evaluating normalized minimum distance and the average bit energy it can be shown that this scheme performs 1.390 dB better than enhanced version of the J.83 standard that uses the LSB encoders 61b or 61c at 5.6 bits per interval. Likewise, if the less complex D2=48 version of the tiled 4D building block code is used, this performs 1.390 dB better than the current J.83 standard.
The bit converter 102x is similarly configured to transmit 7.6 bits per 2D signaling interval using the 192 CR+ constellation 70 of
It should be noted that the above energy set mapping policy can be improved upon by going to smaller energy sets. For example, the 192 CR+ constellation 70 can be partitioned into twelve energy sets of 16-point points each. Twelve energy sets per interval leads to 144 possible energy set pairs per 4D interval. If we assign seven bits per 4D interval to energy set selection, then we can select 128<144 energy set pairs that have the lowest energy. That is, we can eliminate more higher energy combinations. Since we started with 16 bits and sent one to the building block encoder and five to the energy set selector, that leaves 16−1−7=8 bits for point selection within each energy set. That is, we use 4 bits each 2D interval, two at a time, to independently select I and Q components one of the 16 points in each selected energy set. This kind of embodiment can be used to lower the average bit energy and thus increase the coding gain. As we have seen, the LSB encoding rule causes us to independently encode the I and Q dimensions and thus affects the way we partition the energy sets. In reality, the LSB decoders are very efficient because they only need to decode relatively small PAM constellations using two branches per state with real arithmetic. However, in general, any Ungerbock code could alternatively be selected to be the tiling code. For example an Ungerbock code with two, four, eight, or sixteen subsets with equal numbers of points in each subset found in each energy set is a preferred embodiment of the present invention. Again, the bit converter 102x is reprogrammed with a truth table that implements a desired mapping policy to conform with the tiling code. The bit converter 102x can be implemented using any programmable logic circuit, in software, or as a lookup table.
The developments thus far lead to a general method to design trellis coded modulation systems. First select a building block of some selected dimensionality, e.g., 2N-dimensional where N is a positive integer. Select a building-block trellis encoder to obtain a desired MSED inside the building block and/or to provide a data rate advantage. Next select a tiling code who's MSED is equal to the MSED inside the building block and use that tiling code to tile the building block to form a tiled-building-block trellis encoded signal constellation that preserves the MSED inside the building block. This design policy is illustrated in
Referring now to
Turning now to
We now apply the method 1200 to demonstrate how to improve the performance of Wei's 16-state 4D encoder, his 64-state 4D encoder, and his 64-state 8D encoder. Beginning with the 4D case, as per step 1205, we select Wei's 16-state 4D encoder 75 of
Referring now to
As can be seen by studying Wei'87 and the '817 patent, the 4D block encoder of
When, as in the tiling encoder 405, the I3n+1 bit is removed from the input of the 4D Wei encoder 75, the 4D bit converter of
It can be noted that this tiled constellation looks much like the constellation produced by the 4D tiled-building block encoder 300 when configured to transmit 7.15 bits/interval. That is, it is a 128 CR constellation with the constituent 2D building block constellation 25 of the 4D building block inserted at constituent 2D each tiling point. This looks similar to the constellation shown in
In general, if N is an integer, a “(4×N)-dimensional constellation-contracted Wei encoder” refers to Wei encoder that removes high energy signal points by contacting the signal constellation as described herein. That is, the constituent 2D signal constellations are contracted as described above, e.g., from 192 points to 128 points. The contracted constellation typically used as a tiling code and a coded-constellation building block is placed at each tiling point. The concatenation of the contracted 2D constituent constellations comprise the contracted (4×N)-dimensional constellation. Because the average symbol energy of the 128CR (after scaling by 4) is 20.5×16=328, and the average symbol energy of the constituent 2D constellation 25 of the 4D building block is 2, the total combined average symbol energy of the tiled-building-block trellis coded scheme 400 is 330. Because 7 bits/interval are transmitted, the average transmitted bit energy is Eb,avg=330/7. Using dmin2=D2/2Eb,avg and recalling that the uncoded 128CR constellation has dmin2=0.17073, some simple calculations indicate that the D2=64 version of the encoder 400 that uses a 32-state building block encoder with the reduced 128 CR version of Wei's 16 state 4D encoder 75 as the tiling encoder 405 has a normalized minimum distance of dmin2=0.67879 and a coding gain of 5.9942 dB over the uncoded 128 CR constellation. The D2=80 version of the encoder 400 that uses a 64-state building block encoder with the 128 CR version of Wei's 64-state 4D encoder has a normalized minimum distance of dmin2=0.84848 and a coding gain of 6.9633 dB over the uncoded 128 CR constellation. The corresponding gains of the Wei's 16-state and 64-state 4D codes are 4.66 dB and 5.63 dB. That is, the encoder 400 performs 1.33 dB better than the 4D Wei code in both cases. As discussed in Wei'87 and the '817 patent, Wei's 4D codes suffered a 1.36 dB loss due to constellation expansion from a 128 CR to the 192 CR+ constellation 70. This expansion loss has been almost completely recovered due to the constellation contraction afforded by the addition of the 4D building block encoder 315. As calculated below, the cost for this 1.33 coding gain is a modest 27% increase in computational complexity in the decoder.
It can be noted that a more expensive rate-⅔ coded version with 128 states could be used to further contract the tiling constellation and to achieve further gains. In such a design we could form 6D or 12D symbols, so that 1.333 or 2.667 bits could be transmitted through the building block per mapping interval instead of 1 bit/interval as in the 4D embodiment 400. In the 6D case, twenty-six more constellation points could be removed below the 128 CR each 2D interval, and in the 12D case, thirty-seven more constellation points could be removed below the 128 CR each 2D interval. A more complicated energy set mapping rule would then be determined to minimize average bit energy. While it is important to understand that such embodiments are possible, these embodiments are relatively costly. The detailed example below also achieves further constellation contraction, but in a less costly way.
Next apply the design approach 1200 by selecting in the step 1205 Wei's 64-state 8D encoder 85 as shown in
Because each 4D building block can transmit 1 bit per 4D block, and because the 8D building block is a concatenation of two 4D blocks, the 8D building block encoder 515 draws two information bits away from the 8D Wei encoder 405, 85 each 8D mapping frame. Therefore we reconfigure the 8D Wei encoder 85 to only transmit 26 bits instead of 7×4=28 bits each mapping interval. That is, the tiling encoder 505 implements a constellation-contracted version of Wei's 8D encoder 85, i.e., one with fewer constellation points and lower average bit energy. The frame mapper 502 is next configured to implement an energy set mapping policy to achieve the lowest possible average bit energy.
Refer to
As a part of the step 1230, we need to determine a constituent 2D constellation that can map 27 bits over 4 intervals. If N is the number of constellation points in each constituent 2D constellation, the N must satisfy N4≧227, i.e. N=108. However, it is easier to implement coded schemes with constellation points at multiples of 16. Hence, we will consider a constellation of size 112 points. To arrive at the 112-point constellation consider the constellation 80 of
Sets 0-3: Standard 64QAM (logically subdivided into four 16-point quadrant subsets)
Set 4: Next 16 Points (from 65 to 80)
Set 5: Next 16 points (from 81 to 96)
Set 6: Next 16 points (from 97 to 112).
Because each set has 16 points, four uncoded bits per 2D signaling interval can be used to select a point within a set. That is, 4×4=16 uncoded bits can be used each 8D mapping frame to select a point within each of four selected energy sets. The remaining 27−16=11 coded bits are used to select a 4-tuple of energy set indices to specify the selected four energy sets. It is necessary to define 211=2048 unique 4-tuples in order to enable the decoder to recover all eleven of the energy-set-selection bits. Since each element of the 4-tuple can take on seven values, there are 74=2401 energy set combinations. This implies that the highest energy 2401−2048=353 combinations can be discarded. By close inspection of the constellation 80 and through calculation, it can be found that the average symbol energies of the above-defined energy sets 0-6 are 168, 168, is 168, 168, 344, 472 and 504 respectively. The frame mapper 502 includes a truth table that maps one eleven-bit word per mapping frame to a corresponding 4-tuple of energy-set indices that corresponds to one of the 2048 lowest energy set combinations. Each 2D interval, one index from the energy-set 4-tuple and four uncoded bits are combined to arrive at the uncoded numbers illustrated in the constellation 85. The {a, b, c, d}-point selection is made by the trellis encoder and bit converter portions of the encoder 85.
When the frame mapper 502 is configured as discussed above, the 2048 lowest energy 4-tuples use sets 0-3: 320 times, set 4: 75 times, set 5: 69 times and set 6: 48 times. The average transmitted symbol energy is thus Eavg=[320×168+75×344+69×472+48×504]/(512)=266.25, and the average bit energy is Eb,avg=266.25/7. Because the 64-state 8D Wei code has an MSED of D2=64 and the 8D building block tiled at each tiling point of this tiling constellation has an intra-block MSED of D2=64, we can compute the normalized distance produced by encoder 500 to be dmin2=D2/2Eb,avg=0.84131, which yields a gain of 6.9265 dB over the uncoded 128 CR constellation. Meanwhile, Wei's 64-state 8D encoder 85 gains 5.41 dB over uncoded 128CR. That is, the 8D tiled-building-block encoder 500 performs 1.52 dB better. This is due to the fact that the 8D building block 515 carries 2 bits per 8D mapping frame to allow the tiling constellation to be contracted. An overall-favorable constellation reshaping accounts for the added coding gain.
Turning now to
After any implementation-specific demodulation and receiver preprocessing, the received signal r(k) is passed to a metrics calculator 605. The metrics calculator 605 can compute a set of branch metrics given by {|r(k)−si,j|2} where si,j is the (i, j)th constellation point in the transmitted signal constellation, e.g., the 32 points of the constellation 40:4D of
Note that the building block decoder 605 is implemented as though there were no tiling decoder. For example, if the building block 20 is used, the building block decoder 610 can be implemented using the decoder used to decode the WiMAX coded signal 163. Hence the implementation of the building block decoder 605 is well known to those skilled in the art. However, recall that while the building block 20 has an MSED of D2=40, the MSED of the points in the constellation 174a using the encoding rule 163 dropped to D2=16. This is due to the fact that the Euclidian distance in the constellation 174a corresponding to any single bit error in either of the uncoded bits of the encoder 163 is D2=16. We can see the job of the tiling decoder 615 will be to deal with these more significant bits. That is, the building block decoder is able to decide the correct building block point to an accuracy of D2=40. It is the job of the tiling decoder to protect the previously uncoded bits to ensure that errors in these bits do not dominate the error performance of the overall coded system.
The tiling decoder 615 begins tiling decoding where the building block decoder left off. For example, consider the constellation 40:4D of
To better understand the operation of the decoder 600, consider an example of decoding the constellation 40:4D of
It should be noted that the LSB decoders also deal in real arithmetic and are only concerned with the real or imaginary components of the pre-computed branch metrics. That is, the I and Q components of each branch metrics are preferably stored separately by the metrics calculator 605 for later use by the LSB decoders in the tiling decoder 615. As discussed above, the LSB decoders only have two possible branches per state and thus only need to evaluate two branch metrics per state. If 32-state LSB decoders are in use, then each LSB decoder will have to keep track of 32 paths and decide upon surviving paths as per
Turning now to
In a step 810, the real-valued metrics are combined to compute 32 unique 2D metrics of the form |r(k)−si,j|2 for each of the 32 unique signal constellation points in the constellation 40:4D. In a steps 815 the set of 32 2D metrics are broken into the upper-right and lower-left subsets corresponding to the building block bit BB being equal to one and zero respectively. In a step 820 the smallest metric of each of the BB=0 and BB=1 2D subsets is identified and saved. Once every other 2D signaling interval, i.e., once per 4D mapping interval, a step 825 computes a 4D branch metric using the two saved smallest 2D metrics from each of the BB=0 and BB=1 2D subsets. In a step 830 the minimum metrics from the BB=0 and BB=1 4D subsets are used to determine a surviving path at each state. This involves, at each state, adding each minimum 4D metric to each incoming path, comparing the paths to find the smallest, and selecting the path with the smallest path metric (4 computations per state). In a step 835, a delayed 4D decision is taken off the tail end of the surviving path, and this 4D decision (2 2D decisions or 4 1D decisions) is fed to the LSB decoders. Each 2D signaling interval, the LSB decoders then decode the selected one of the upper-right and lower-left sub-16-QAM constellations as discussed above.
To decode the constellation 40:4D, i.e., m=4 bits/interval, the step 805 computes 8 real-valued PAM-type metrics for each of the I and Q dimensions. Each of these real metrics involves a computation of the form (r−a)2, i.e., two computations. In total, the step 805 requires 2×8×2=32 computations when the constellation 40:4D is in use. More generally, when m is even, there are 2m/2+1 projected points on each of the real and imaginary axes, there are two such axes, and there are two computations per point. When m is odd, there are 2(m+1)/2 projected points on each of the real and imaginary axes, there are two such axes, and there are two computations per point. Therefore, when m is even, the step 805 requires 2m/2+3 computations, and when m is odd, step 805 requires 2(m+1)/2+2. Note that the m-odd case assumes a CR type tiling constellation is used, e.g., when m=5 a 32 CR tiling constellation is used and when m=7 a 128 CR tiling constellation is used.
In the case of the constellation 40:4D, the two sets of eight real metrics are next combined to compute 32 2D metrics, one for each of the constellation points in the constellation 40:4D. This requires another 32 computations per 2D interval for the constellation 40:4D. In general, the step 810 requires 2m+1 computations, one for each constellation point. Next the minimum 2D metric is found for each of the BB=0 and BB=1 2D subsets, adding another 32 computations for the constellation 40:4D or another 2m+1 computations in general. For the constellation 40:4D, this brings the total to 32+32+32=96 computations for the steps 805-820. When m is even the total number of computations for steps 805-820 is 2m/2+3+2m+1+2m+1=2m/2+3+2m+2 When m is odd, the total for steps 805-820 comes to 2(m+1)/2+2+2m+2.
The two smallest 2D metrics are then added together to obtain a 4D branch metric every other interval. Independent of constellation size, the building block decoder in step 825 computes 32 (states)×2 (branches per state)=64 path operations×1 addition per path. For each state, two computations are also needed (32×2) to compare paths and to select the survivor paths. The aforementioned computations are needed once every other interval (÷2). That is, the building block decoder steps 825-835 add [(32×2)+(32×2)]+2=64 computations per 2D signaling interval.
In this embodiment, the step 835 passes the building block decisions to a tiling decoder 615 implemented as two LSB decoders. The two 32-state LSB decoders reuse the real-valued metrics computed in the step 805 so do not involve any metric computations. Because the LSB decoders involve a rate-⅘ code, the LSB decoder's trellis makes a transition once each five signaling intervals. From each of the 32 states, there are 16 possible transitions that respectively correspond to the 16 binary combinations of the four uncoded bits that are either zero or one. That is, because four information bits sent for each trellis transition, there are 16 possible transitions out of each state. In terms of the five coded bits, each of the 16 branches out of each state also corresponds to a particular combination of five coded bits.
Because the LSB decoder follows the building block decoder which resolves the BB bit, tiling decoder only needs to decode a 2′-point constellation. The first step of LSB decoding is to determine, for each of the I and Q axes, the smallest real metric between the received signal point and each of the LSB=0 and LSB=1 subsets. When m is even, 2m/2 comparisons are needed to find the minimum metrics in each of the LSB=0 and LSB=1 subsets for each of the I and Q axes, or 2m/2+1 in total. When m is odd, a total of 2(m+1)/2+1 comparisons are needed. In the m=4 case of the constellation 40:4D, 8 comparisons are needed.
The second step of LSB decoding is to use the above-determined minimum real metrics to determine a set of branch metrics. The LSB code is a rate-⅘ code and thus there are four uncoded bits per trellis state transition and there are five coded bits per trellis state transition. That is, each state has 24=16 possible branches that correspond to the 16 binary combinations of the four uncoded bits. Each of these branch metrics is computed as a sum of five minimum metrics from the LSB=0 and LSB=1 subsets that correspond to a corresponding sequence of five coded bits. So the second step is to compute all of the 32 possible sums of the minimum metrics from the LSB=0 and LSB=1 subsets and to store them into a lookup table that uses a 5-bit address. This requires a total of 32×5=160 additions.
Next, at each of the 32 states, for each of the 16 incoming paths (×16) a five bit address is used to look up the branch metric with associated with a set of five corresponding coded bits for a given branch, and then this looked up value is added to the incoming path metric. This path metric is compared to a previous path metric to determine if it is the minimum metric. This process is continued until all 16 path metrics have been updated and the survivor path has been found. The combination of the lookup, add and compare/select requires another three operations (×3). The above mentioned computations are performed once every five intervals (÷5). That is, the total computation for this part of the decoding is [(32×5)+(32×16×3)]/5=340. Since there are two LSB decoders, the second step of LSB decoding adds 340×2=680 computations/2D interval. In general, the combination of the steps 825-835 and the second step of the LSB decoding adds 64+680=744 computations/2D interval. Tallying things up, to decode the constellation 40:4D requires 96+64+8+744=912 computations/2D interval. In general, the total computation is m-even: 2m/2+3+2m+2+2m/2+1+744, and m-odd: 2(m+1)/2+2+2m+2+2(m+1)/2+1+744.
It is helpful to compare the above to the amount of computation required by the m-odd type of WiMAX decoder 165, 167. These decoders start with the same 2(m+1)/2+2+2m+2 metric computations and comparisons as the m-odd case discussed above for steps 805-820, but with the constellation points rearranged onto a square-shaped constellation with the same number of points. Because the rate-¾ puncture-coded building block 171b is used, the step 820 involves keeping track of eight paths per state each interval so computes eight subset minima instead of two, but involves the same number of comparisons. The WiMAX decoder then skips step 825 but in step 830 computes 64 (states)×8 (branches per state)=512 path computations×3 computations per add/compare/select operation. So while the decoder 600 with m-odd computes on the order of 2(m+1)/2+2+2m+2+2(m+1)/2+1+744 operations, the corresponding m-odd WiMAX decoder computes on the order of 2(m+1)/2+2+2m+2+1536 operations. As we see, while the decoder 600 requires three decoders instead of one, the total computation is about 50% lower than comparable WiMAX decoders. Relative numbers are tabulated in
As mentioned previously, a D2=48 version of the tiled building block trellis code can be constructed that uses an 8-state building block encoder and two 16-state LSB decoders. Theses lower-state decoders also start by computing the same computations as discussed in steps 805-820. The building block decoder in step 825 then computes 8 (states)×2 (branches per state)=16 path operations×2 computations per add/compare/select operation, once every other interval (÷2), for a total of 16 path computations per 2D interval. Moving to the tiling decoder, the real-valued metrics computed in the step 805 are reused as branch metrics, but a total of 8 compare operations are still needed to find the minimum real metrics on the I and Q axes for each of the LSB=0 and LSB=1 subsets. Then each I and Q 16-state LSB decoder computes, a table of 32 branch metrics corresponding to the sum of the minimum LSB=0 and LSB=1 metrics in each of the five signaling intervals per trellis state transition, for each combination of the five uncoded bits. This adds (32×5) additions once ever five intervals (5). Next, for each of the 16 states, for each of the 16 paths per state (×16) a selected branch metric is added to an incoming path metric and the survivor path metric is determined, resulting in one addition, one compare, and one select per path (×3). This is performed once every five intervals (5). That is, the total computation for this part of the decoding is [(32×5)+(16×16×3]/5=186. Since there are two LSB decoders, this adds 186×2=372 computations. Tallying things up, to decode the constellation 40:4D requires 96+16+8+372=492 computations/2D interval. In general, the total computation for the D2=48 version of the decoder is m-even: 2m/2+3+2m+2+2m/2+1+372, and m-odd: 2(m+1)/2+2+2m+2+2(m+1)/2+1+372.
We next evaluate the decoding complexity of an m-even, dual PAM type WiMAX decoder that decodes at the same information rate as what is carried by the constellation 40:4D described above. In the transmission of m=4 bits/interval, the WiMAX standard uses a 64QAM constellation and uses a dual-PAM scheme instead of a building block approach (see the IEEE 802.16a standard for further details). Using the received signal, separate independent I and Q decoders calculate 2m/2+1 branch metrics each interval, that is, a total of 2m/2+2 branch metrics are computed. When m=4, eight branch metrics are computed on each of the I and Q channels for a total of sixteen. These metrics are {(r−si)2} for each PAM constellation point on each of the I and Q axes of the constellation 174b. Since each of the dual-PAM WiMAX decoders use 64 states and have 2 information bits coming in, each of these decoders will have four branches entering and exiting each of the 64 states. These four branch metrics are selected from the total of eight metrics calculated from the received signal on each of the I and Q directions. Two separate I and Q trellises are thus decoded, each of which requires four path calculations and comparisons per state. That is, 2 decoders×64 states/decoder×4 paths/state×3 computations/path=1536 decoding computations. In general, for m-even, 2m/2+2+1536 computations are required when the WiMAX dual-PAM approach is used. When m=4, this comes to 16+1536=1552. Recall that to decode the D2=64 version 40:4D constellation required 912 computations, i.e., a relative complexity of 912/1552=0.59. To decode the D2=48 version 40:4D constellation required 460 computations, i.e., a relative complexity of 492/1552=0.32.
The tiling decoder 615 can be also be implemented by other types of decoders, e.g., as an Ungerbock decoder, or in some cases, more specifically as a Wei decoder. In these cases the operation is the same, only the LSB decoders are traded out for the selected Ungerbock decoder. The building block decoder still precedes the tiling decoder and the tiling decoder operates on a reduced signal constellation with only one point per tile. The combination of the building block decision and the tile decision will resolve both the tile and the point within the tile.
A similar complexity analysis can be considered to understand the complexity of the decoder 600 when configured to decode a tiled-building-block version of Wei's code, e.g., as generated by the encoders 400 and 500. In this analysis we focus on Wei's 16-state 4D code. To begin, we first analyze the complexity of a decoder designed to decode Wei's 192-point 16-state 4D code as generated by the standard encoder 75 of
When the decoder 600 is used, there are 128 tiling points and 256 total constellation points to decode. That means 2×16×2+256=320 metric computations are needed up front and then 256 comparisons are needed to find the minima of the BB=1 and BB=0 2D subsets, raising the total to 576. By ordering these minima-search operations properly, the minima for each of Wei's {a, b, c, d} types of each of the BB=0 and BB=1 128-point 2D sub-constellations can be recorded while performing these same 256 comparisons. The building block decoder in step 825 then computes 32 (states)×2 (branches per state)=64 path operations times 3 computations per add/compare/select operation (×3), once every other interval (÷2), bringing the total computations to 576+96=672 computations per interval. Once the building block is decoded, a selected BB=0 or BB=1 128-point sub-constellation is fed to the Wei decoding algorithm. As discussed previously, the metrics computed by the building block decoder are reused and the minima of the {a, b, c, d} types for the selected BB=0 or BB=1 building subset are already stored. Next some minor scalar operations are needed to derive the 4D path metrics, and then 16 (states)×4 (subsets/state) need to be updated and compare-selected (×3) once every other 2D interval (÷2), that is 96 path operations need to be computed. After some minor reverse mapping operations are needed to recover the uncoded bits. The computation count is thus on the order of 672+96=768. Recalling that the Wei decoder alone had a computation count on the order of 544, the increase is 768/544=1.41, or a 41% increase in complexity. If the 64-state 4D Wei code is considered, the path computations increases by a factor of four, so the numbers become 672+96×4=1056 vs. 448+96×4=832. The relative complexity is thus 1056/832=1.27, i.e., about a 27% increase. The 64-state 8D code is similar.
In some applications it may be desirable to use a code like a 16-state 4D Wei code, but with a smaller signal constellation. This might occur for example when the code is being used to modulate tones in an OFDM type communication system. In such a case, the minimum 16-state 4D tiling code would be a 4-QAM tiling constellation made up of the trellis coded bits of the encoder 75. Uncoded bits could then be added in pairs. Adding an odd number or pairs would give rise to a CR type tiling constellation because an odd number of bits would be added per 2D interval. Adding an even number of uncoded bit pairs would give rise to square shaped tiling constellations. Bit conversion for energy set selection would be optional. The same idea applies to the 8D embodiment, but uncoded bits are preferably added four at a time.
The user terminal 1010 similarly includes a physical layer interface 1032, a protocol stack 1034 and an application layer module 1036 which may include user interface devices as well as application software. The user terminal 1010 also may optionally include a packet processor 1038 which can be connected to a local area network, for example. The user 1010 terminal may also act as an IP switching node or router in addition to user functions in some embodiments.
Another type of embodiment replaces the headend system 1005 with another user device 1010 in which case direct peer-to-peer communications is enabled. In many applications, though, the headend can act as an intermediary between two user devices to enable indirect peer-to-peer communications using the same headend-to/from-user device uplink/downlink architecture illustrated in
In preferred embodiments of the present invention, at least one of the uplink and the downlink channels is implemented using a TBBTC coder and/or decoder pair. In some types of embodiments, the PHYS 1024, 1032 may include echo cancellation, cross-talk cancellation, equalization, and other forms of signal conditioning or receiver pre-processing.
Similarly, the protocol stack may preferably include in its link layer scrambling, interleaving, and forward error correction coding (channel coding, e.g., Reed-Solomon, block codes, convolutional codes, and turbo codes). The headend may include the optional packet switching node and/or router 1028, for example using an Internet Protocol (IP) packet forwarding policy. External databases connected via the router 1028 thereby provide remote services to the subscriber terminal via the headend. Similarly, local databases holding more specific types of data may be saved in computerized storage areas and processed using the computerized module 1029.
In one type of embodiment, the headend system may be a cellular communications base station that carries voice and/or data, such as IP packet traffic. In other embodiments, the headend may be a wireless metropolitan area network (e.g., WiMAX), a local area network base station or personal area network base station, respectively, for WiFi and Bluetooth type applications. In other types of applications, the headend system 1005 may correspond to a cable services headend system and the user device 1010 may be a cable modem. In other types of applications, the head end system 1005 may correspond to a DSL services head end system and the user device 1010 may be a DSL modem. In such applications the user device may also have a router function and connect to a home or office network, or any other type of network, for example.
In other types of applications the headend 1005 may transmit and the user devices 1010 may receive only, or the communications may be highly asymmetric. The TBBTC encoding and/or decoding may be used to transmit digital television signals from a cable TV headend, a satellite TV broadcast headend, or a terrestrial HDTV headend. For example, a QAM signal as used in current digital CATV and terrestrial HDTV standards could be replaced, for example with TBBTC coding using a hardware and/or software upgrade. Similarly, a trellis interleaver scheme like a turbo encoder or a trellis interleaver as used in the ATSC HDTV terrestrial transmission standard may be used with the present invention. As such U.S. Pat. No. 4,677,624, U.S. Pat. No. 4,677,625, U.S. Pat. No. 4,677,626, U.S. Pat. No. 5,243,627 and U.S. Pat. No. 5,446,747 are all incorporated herein by reference, but only to the extent that they serve as the basis for various additional specific exemplary embodiments of aspects of the present invention involving specific embodiments formed from combinations of the current disclosure with these patents. It is envisioned that the present invention can be combined with any of these patents to construct advantageous coded communication structures and methods.
As a final note, the tiled building block trellis codes are related in some ways to multi-level codes. We have observed that the error coefficient of the building block code portion of tiled building block trellis code increases due to the addition of extra signal points in adjacent tiles. We have discovered a way to mitigate these effects, at the cost of some additional decoding complexity. The same technique we use to reduce the error coefficient in tiled building block trellis codes can be used with prior art multi-level codes to improve their performance by reducing their error coefficients. These additional inventive aspects will be disclosed in further detail in a follow-on patent.
It should be noted that an aspect of the present invention involves a method of trellis encoding. This method processes a first set of input bits using a first trellis encoder to generate a first set of coded bits that correspond to a particular building-block signal point of a coded-constellation-building block. A “building block signal point” is a signal point in the coded-constellation-building block such as the signal points shown in
In some cases, trellis encoder methods of the present invention use a tiling constellation that is a subset of a 2-dimensional integer lattice. In such cases the tiling encoder maps input bits onto a 2-dimensional integer lattice and is thus a “2-dimensional trellis encoder.” The two dimensional trellis encoder used in the tiling encoder can be implemented as a first independent convolutional encoder and a second independent convolutional encoder that respectively process first and second independent bit streams. The coded outputs of these two independent encoders can be respectively mapped to an I-component of the tiling point and a Q-component of the tiling point. For example, these two independent convolutional encoders configured as a pair of LSB-type encoders as discussed herein by properly assigning coded values to integer points in the I/Q plane,
Next we consider secondary effects, namely path multiplicity which is also known as error coefficient. The path multiplicity is the number of nearest neighbor error events at the MSED in the trellis decoder. If the path multiplicity is very large, the presence of many neighboring paths at the MSED can reduce performance below what would be predicted by evaluating the minimum distance without taking path multiplicity effects into account. Our aim here is to quantify the increase in path multiplicity that occurs when the building block is replicated at each tiling point of the tiling code. Our ultimate aim is to use this understanding to develop improved decoding algorithms that overcome these effects.
As used herein, an “MSED merging event” is defined to be an event where two different trellis paths split and then merge back together, and the distance between these two paths is the MSED. If one of these two paths is a correct trellis path, then the other one of these trellis path represents a possible error event at the MSED, e.g., at D2=40. For a given convolutional code, it is known how many different unique MSED error events exist. This number, corresponding to the path multiplicity or error coefficient of the corresponding convolutional code is listed as “Adfree” in Table 12.1 of the Lin and Costello reference (pages 539-540). Recall that dfree is the free Hamming distance of the corresponding convolutional code, i.e., the overall minimum Hamming distance of the code. The path multiplicity Adfree corresponds to the number of trellis paths that differ from the correct trellis path in dfree number of bits. Also recall that DBB2=dfree*D2 where DBB2 is the MSED of the coded building block and D2 is the raw MSED in the uncoded building block. For example, the uncoded 2D building block 20 of
At high SNR, when the building block (e.g., 20, 25) is in isolation, the respective asymptotic error probability for the building-block trellis code can be written:
where dmin,BB2=DBB,min2/2Eb is the normalized MSED of the building block code, Eb is the average bit energy, N0/2 is the two-sided noise power spectral density of the channel noise, and ABB=Adfree is the path multiplicity (i.e., “error coefficient”) of the convolutional code used in the building block, e.g., the code 161. When the building block is placed at each tile point (e.g., 250 of
and for the tiling code itself:
In the above expressions, AT-BB and ATL are the path multiplicities of the building-block trellis code once the building block is tiled and the tiling code, respectively, and dmin,BB and dmin,TL2 are the respective normalized MSED values of the building-block and tiling codes. (As before, the lower case d2 corresponds to normalized distance and upper case D2 corresponds to raw distances). In general, AT-BB≧ABB and quite often AT-BB>>ABB. This is because, once tiled, signal points from adjacent tiles give rise to additional nearest neighbor error events that can occur each path segment of the MSED merging event. A correct decision is made when both decoders decode correctly, so the overall error probability can be approximated as
P
e≈1−(1−Pe,T-BB)(1−Pe,TL)≈(Pe,T-BB+Pe,TL). (4)
If we balance the building block and tile codes so that dmin2=dmin,BB2=dmin,TL2, then substituting (2) and (3) into (4) yields:
Equation (6) indicates that at high SNR and when the building-block and tile decoders have the same minimum distance, the overall path multiplicity of the overall tiled-building-block trellis code is (AT-BB+ATL). Moreover, when the building block decoder first decodes, its performance is affected only by AT-BB, and the overall performance of the tiled building block code at the output of the tile decoder is affected by AT-BB+ATL.
To better understand the path multiplicity of a tiled building block, AT-BB, consider
As previously mentioned, the signal points from building blocks located in neighboring tiles can introduce additional nearest neighbor error events, in which case AT-BB>ABB. To quantify the increase in path multiplicity, we define a path multiplicity multiplication factor, αT-BB through the relation AT-BB=αT-BBABB. Conceptually, once the building block is replicated and tiled, not only will the trellis decoder need to discern paths generated by the signal points in the same building block, but will also need to discern parallel paths caused by signal points from neighboring tiles. The analysis of the multiplication factor involves counting all of the possible nearest neighbor error events from the current tile and its neighboring tiles and averaging to determine their net effect.
The basic strategy to compute αT-BB is to determine the increase in path multiplicity due to each of the ABB different possible MSED merging events, and to then average over all of these ABB different cases. Since the 64-state code 161 with dfree=10 has ABB=11, in this example we need to consider eleven different MSED merging events. Next, for each of the ABB different possible MSED merging events, we break these MSED merging events into a set of component “path-segment error events” that can occur each signaling interval. The sum of the Hamming distances of each of the path-segment error events add to the Hamming distance of the MSED error event, dfree. We next determine a path multiplicity multiplication factor for each of the individual path segment error events by examination of the signal constellation under study, for example the constellation 250. Once all of the path segment multiplication factors are known for the particular path, we average the contributions due to different types of error events each interval and multiply these averages together to determine the particular path's overall multiplication factor. Then we average these ABB different multiplication factors together to finally determine αT-BB.
For each component path-segment error event, we determine the number of nearest neighbor error events for the building block in isolation. We next determine the number of nearest neighbor error events for each component path-segment error event that can occur once the building block is tiled. The number of nearest neighbor error events for the tiled building block divided by the number of corresponding nearest neighbor error events for the building block in isolation defines a corresponding “path multiplicity multiplication factor component.” A weighted average of these components finally determines αT-BB.
To start, consider the single 4-point building block in tile T1 of the constellation 250. In isolation, the path multiplicity of this building block is the same as the underlying convolutional code 161, i.e., ABB=11. The nearest-neighbor paths located D2=40 away from a correct path are next broken down to a set of path segment error contributions that occur during each signal interval. By studying tile T1 of
The next task is to characterize the ABB=11 different MSED merging events in terms of their component path segment error events. While the minimum-length MSED merging event is ν+1=7, other longer MSED merging events can also occur. A numerical analysis shows that the ABB=11 possible MSED merging events can be of three different types. These three types of merging events are given as follows:
Referring back to
When the point 0101 is transmitted, there are two neighbors at D2=8, i.e., the 0110 point of tile T1 and the 0010 point of tile T3. Because the number of nearest-neighbor error events at distance D2=8 for the 0101 point is doubled once the tiles T2-T4 are added, we write α0101(D8)=2. Due to symmetry, the 0110 point is isomorphic to the 0101 point so has the same number of neighbors, and thus we write α0110(D8)=α0101(D8)=2.
When the inner-corner point 0111 is transmitted, there are four neighbors at D2=8, i.e., the 0100 point of tile T1, the 1100 point of tile T2, the 0000 point of tile T3 and the 1000 point of tile T4. That is, the number of nearest-neighbor error events at distance D2=8 for the 0110 point is quadrupled once the tiles T2-T4 are considered, so we write α0110(D8)=4. Hence, the average multiplying factor for path segment error events at distance D2=8 is αD8=(α0101(D8)+α0100(D8)+α0111(D8)+α0110(D8))/4=[1+2+2+4]/4=9/4.
Referring again to
When the point 0101 is transmitted, there are three neighbors at D2=4, i.e., the 0100 and the 0111 points of tile T1 and the point 0000 of tile T3. That is, when tile T1 is in isolation, there are two nearest neighbors at D2=4 and when tiles T2-T4 are added, there are three nearest neighbors at D2=4. Therefore, the number of nearest-neighbor error events at distance D2=4 for the 0101 point is increased by a factor of 3/2 once the tiles T2-T4 are considered, so we write α0101(D4)=3/2. Due to symmetry of the constellation 250, the 0110 point is isomorphic to the 0101 point so has the same number of neighbors, and thus we write α0110(D4)=α0101(D4)=3/2.
When the inner-corner point 0111 is transmitted, there are four neighbors at D2=4, i.e., the 0101 and 0110 points of tile T1, the 1101 point of tile T2, and the 0010 point of tile T3. Because the number of nearest-neighbor error events at distance D2=4 for the 0111 point is doubled once the tiles T2-T4 are considered, we write α0111(D4)=2. Hence, the average multiplying factor for path segment error events at distance D2=4 is αD4=(α0100(D4)+α0101(D4)+α0110(D4)+α0111(D4))/4=[1+3/2+3/2+2]/4=3/2.
Due to the symmetry of the constellation 250, all tiles are isomorphic to tile T1 and thus the path multiplicity multiplication factor components for all four tiles are the same. That is, the averages αD8=9/4 and αD4=3/2, hold for the entire constellation 250, and furthermore note that αD8=αD42.
Next consider the first type of MSED merging event which has four D2=8 contributions and two D2=4 contributions. Therefore, for the first type of MSED merging event, the overall multiplying factor is α1=(αD84αD42)=αD410=57.665. Recall that dfree=10, so we see the total path multiplicity multiplication factor is the same as the multiplication factor for a single bit error raised to the power dfree, that is, αD4free. The second type of MSED merging events have three contributions of D2=8 and four contributions of D2=4. Therefore, for the second type of MSED merging event overall multiplying factor is α2=(αD83αD44)=αD410. Similarly, in the third type of merging events in which there are two contributions of D2=8 and six contributions of D2=4. Therefore, for the third type of MSED merging event overall multiplying factor is α3=(αD82αD46)=αD410. Because all three components are the same their average is the same, and thus overall, αT-BB=αD410=57.665.
In case of the rate ⅚ code, the constellation has 64 points instead of 16 as in the constellation 250. The ⅚ code has four tiles in each quadrant. Analyzing the four tiles in one quadrant, a similar type of analysis shows that αD8=49/16, αD4=7/4, and that αD8=αD42. Hence, as before, regardless of the type of merging event, the path multiplicity multiplying factor is αT-BB=αD4d
In case of the rate ⅞ code, the constellation has 256 points instead of 16 as in the constellation 250. The ⅞ code has sixteen tiles in each quadrant. Analyzing the sixteen tiles in one quadrant, a similar type of analysis shows that αD8=225/64, αD4=15/8, and that αD8=αD42. Hence, as before, regardless of the type of merging event, the path multiplicity multiplying factor is αT-BB=αD4d
Next consider the constellation 40:4D of
Path Multiplicity Reduction Algorithms
As can be seen from the above analysis, the path multiplicity multiplication factor, αT-BB can be significantly large. This is a well known problem that is generally shared by multilevel codes. That is, it is known that the performance of multilevel codes (MLC) that are decoded by multistage decoders (MSD) is limited by the error coefficient. Therefore, in accordance with an aspect of the present invention, we develop new decoding structures that can eliminate or reduce the adverse effects of path multiplicity multiplication factor. This approach can be applied to tiled building block trellis codes and more generally to other MLC/MSD schemes. Examples are provided herein to show how this technique can be used to improve the performance of tiled building block trellis codes. Generalized classes of embodiments that can be used with other MLC/MSD schemes are also presented.
One approach to reduce the path multiplicity multiplication factor is to increase the spacing between adjacent tiles. This causes the extra neighbors located in adjacent tiles to be moved farther away. Once the neighbors from adjacent tiles are moved away, only the original neighbors in the same tile remain as true nearest neighbors. Thus the path multiplicity multiplication factor is brought under control. However, moving the tiles farther apart increases the average signal energy of the constellation and thus decreases the coding gain. The optimum spacing between tiles for a given coded system can be determined using Monte Carlo simulations by adjusting I- and Q-inter-tile spacing parameters to optimize overall system performance. For example, if the spacing between the building blocks is increased by 10%, i.e. by placing building blocks at (±2.2 ±2.2) in the constellation 250, the effect of the path multiplicity can be expected to be reduced significantly. However, this increases the average symbol energy of the constellation 250 from 10 to 11.68. This has the effect of reducing the coding gain by 0.67 dB. For larger tiling constellations, an increase in the separation by 10% amounts to an increase in the average symbol energy by an amount close to (1.1)2, i.e., a loss of about 0.83 dB. The objective of the Monte Carlo simulations is to find the best trade-off point to maximize the overall coding gain. While the above approach is viable, the present invention provides various means to use tiling code to effectively push the tiles apart without an increase in average signal energy.
Consider the effect of reversing the order of the building block decoder 610 and the tiling decoder 615. That is, consider a receiver that performs tile decoding first and building-block decoding second. This way, a tile decision can be made before building-block decoding. This tile decision selects one tile for subsequent building block decoding and thereby eliminates all neighbors from neighboring tiles. In this way, the building block decoder only considers metrics from one tile, so that αT-BB is reduced to αT-BB=1. An issue is that when the tiling decoder 615 is placed in front of the building block decoder 610, the tiling decoder 615 will not observe as much distance between tiling points as when the building block is first correctly decoded. For example, consider the constellation of
While we see that moving the tile decoder in front of the building block decoder 610 has an effect of reducing path multiplicity, doing this alone reduces some of the power of the tiling code. The present invention therefore contemplates an embodiment where the tiling decoder is used twice, a first time to reduce αT-BB and a second time to achieve the full coding gain of the tiling code.
Referring now to
After the tentative tile decision, {tilde over (d)}Tile(k), has been made, after a delay of the path memory length of the tentative tile decoder, the BB bit(s) are preferably next decided by the building block decoder 2610. Because the metrics used by the building block decoder 2610 are chosen from the tentatively decided upon tile, {tilde over (d)}Tile(k), the path multiplicity multiplication effects will be removed or at least reduced. Next the tile decoder 615 can be used as before to provide a more reliable tile decision in light of the building block decision. The tentative tile decision is preferably discarded in favor of the tile decision produced by the tile decoder 615.
The above concepts can be more generally applied to improve various types of prior art MLC/MSD coding schemes. Performance of such schemes are well known to suffer from large path multiplicity multiplication factors. In multistage decoders in general, decisions from a lower-level decoder are passed to an upper-level decoder. In the decoder 600 of
This general concept can be applied to improve various types of prior art multilevel coding/multi-stage decoding (MLC/MSD) schemes (e.g., see the Imai, Huber and other MLC/MSD references in the IDS(s)). In accordance with a class of embodiments of the present invention, an MSD decoder is constructed that has at least one upper level code and one lower level code. The upper level code is tentatively decided upon by a first upper-level decoder that makes tentative upper-level code decisions. A set of these tentative decisions are then passed down from the upper level tentative decoder to a lower level decoder. The lower level decoder selects metrics to be used in lower-level decoding based on the tentative decisions. The lower level decoder then decodes the lower level code using the metrics selected in accordance with the tentative decisions from the upper level. Once the lower level decoder has made a decision at the lower coding level, this decision is passed to a second upper-level decoder in conformance with prior art MSD embodiments. That is, the second upper level decoder uses the lower level coding decision as an input. The second upper-level decoder then makes a reliable upper level code decision and the previously-made tentative decision is preferably discarded. In some embodiments the tentative decision can be used for other purposes.
Also, some improved MLC/MSD embodiments can have more than two layers of coding so that the above coding scheme can be applied recursively, passing down upper level tentative decisions to the next-lower level, and pushing lower level decisions up to the next successive upper level. This can occur in a looped fashion, and various types of looping arrangements can be configured and used. For example, tight loops can be set up between adjacent coding levels, and larger loops can be set up between farther away coding levels, e.g., with two or three or more coding levels in between. Simultaneously, tight loops between close layers can be allowed to run in parallel with larger loops between more distant coding layers and the results can be combined to converge to overall coding decisions at the various layers.
Using the above concepts, a receiver incorporating a decoder such as the decoder 2600 is configured to receive a multi-level encoded signal. This multi-level encoded signal is encoded according to at least an upper-level code and a lower-level code. In some embodiments the upper-level code corresponds to a tiling code and the lower-level code corresponds to a building-block trellis code. In other embodiments, such as the various forms of known prior art MLC schemes, the upper level code and the lower-level codes can involve convolutional codes, turbo codes, block codes, or other types of codes. For example, see the IDS supplied herewith for further details of the various types of codes that can be used in MLC schemes. The receiver includes a multistage decoder. The multistage decoder tentatively decodes the upper-level code to produce a sequence of tentative upper-level-code decisions, to include, during the kth interval, a first upper-level decision, ZUL(1)(k). The tentative decisions can be a hard decisions or soft decisions made as a result of applying a decoding procedure to the input signal sequence, {r(k)}. The first upper-level decision ZUL(1)(k) is tentative because it is made based on the best available information at the time, and without the benefit of a first lower-level-code decision, ZLL(1)(k) from the kth interval. In some embodiments, the tentative decision ZUL(1)(k) can be viewed as being made via parallel independent decoding (PID) of the upper level code of the multi-level coded signal. In parallel independent decoding of an upper level code, there is no feeding of a lower-level code decision to the upper level. The multistage decoder next decodes the lower-level code conditioned upon at least one of the tentative upper-level-code decisions to include ZUL(1)(k). The lower-level decoder then produces a sequence of lower-level-code decisions, to include a first lower-level decision ZLL(1)(k). The upper-level code is next decoded a second time, this time conditioned upon at least ZLL(1)(k). This second upper-level decoding produces a sequence of more reliable upper-level decisions, to include a second upper-level decision, ZUL(2)(k). Because of the availability of the more reliable upper-level decisions, {ZUL(2)(k)} the tentative decisions, {ZUL(1)(k)}, can be optionally discarded. That is, the decoder output for the kth interval is preferably the pair, {ZUL(2)(k), ZLL(1)(k)}, plus any uncoded bits or decoded bits from additional coding levels.
In a traditional multistage decoder, the lower level code's decoder can be viewed as a parallel independent decoder that then passes its independent decision to the next-upper level to create an MSD pipeline. However, as discussed above, embodiments of the present invention provide parallel independent decoding at one or more upper levels and pass parallel-independently decoded upper-level decisions to a lower-level decoder. This allows the lower-level decoder to operate with fewer possible nearest neighbor error events. Next, the lower-level code decision is passed up to an upper-level decoder that acts as normal in accordance with MSD decoding, i.e., makes use of the lower-level decision.
Alternatively, embodiments can be constructed that allow past upper-level decisions, {ZUL(2)(k−1), . . . , ZUL(2)(k−N)} to be taken into account by the first upper-level decoder to produce a potentially more reliable sequence of tentative decisions, {ZUL(1)(k)}. Similarly, past lower-level decisions, {ZLL(1)(k−1), . . . , ZLL(1)(k−N)} can be taken into account by the first upper-level decoder. However, such embodiments typically involve higher computational complexity due to a time delay between the first and second upper level decoders. The first decoder needs to be run to its path memory length to extract ZUL(1)(k). Where the first decoder is producing outputs at the end of its path the second decoder is feeding input into the beginning of a path. However, as is known in the art, iterative multistage decoders can be constructed that pass hard or soft decision information between coding levels a plurality of times. Iterative multistage decoding can be applied in various ways to improve the reliability of the various decisions produced by the decoder 2600. In a fully iterative embodiment, a sequence of decisions of the form {ZUL(1)(k), ZLL(1)(k), ZUL(2)(k), ZLL(2)(k), ZUL(3)(k) . . . } can be produced.
In a similar embodiment, an MSD like the decoder 2600 computes a first set of metrics that measure a corresponding first set of distances between a received signal point, r(k), of the received multi-level encoded signal and a first set of reference points relative to a signal constellation (e.g., the points in the constellation 40:4D or real-valued projections thereof). The MSD next tentatively decodes the upper-level code to arrive at a sequence of tentative upper-level-code decisions. The sequence of tentative upper-level-code decisions identify a sequence of regions of a signal space relative to the signal constellation (e.g., tile areas, tile volumes or other types of regions associated with the upper-level code). A tentative decision, ZUL(1)(k) is made without the benefit of having a lower-level-code decision ZLL(1)(k) and is thus less reliable than can be achieved if the lower-level-code decision, ZLL(1)(k), were available. The MSD next decodes the lower-level code using a second set of metrics. The second set of metrics measure distances between the received signal point, r(k), and a second set of reference points that are constrained to be located within the corresponding region associated with the kth tentative decision ZUL(1)(k). The decoding of the lower-level code produces the kth lower-level-code decision, ZLL(1)(k). For example the upper level code can be a tiling code and the regions can correspond to tile areas or volumes, depending on the embodiment. Depending on the MLC scheme in use, the regions can also correspond to other types of regions of the signal space associated with the upper-level code. The MSD next decodes the upper-level code a second time to arrive at a sequence of second upper-coding-level decisions to include a second upper-level decision, ZUL(2)(k). The second decoding of the upper-level code uses a third set of metrics that measure distances between the received signal point, r(k), and a third set of reference points that are identified in accordance with the kth lower-level-code decision, ZLL(1)(k). The third set can correspond, for example, to the subset of the constellation points in the constellation 40:4D that correspond to the upper-right or lower-left constellation points. In general, the lower level decision, ZLL(1)(k), identifies a subset of points of the multi-level code's set partitioning tree. The third set of metrics is preferably a subset of the first set of metrics.
The second upper-level-code decision, ZUL(2)(k), is typically more reliable than the tentative upper-level-code decision, ZUL(2)(k). By constraining of the second set of reference points to be located within a region specified by ZUL(1)(k), a performance measure such as those described by equations (5)-(6) can be improved. In many such embodiments, the second and third sets of reference points correspond to proper subsets of the first set of reference points. That is, the second and third sets of reference points each contain some but not all of the first set of reference points. In some embodiments, the upper-level code is a tiling code and the sequence of closed regions correspond to a set of tiles (e.g., 2D areas or 4×N-dimensional volumes) around a corresponding sequence of tile points associated with the tiling code. The MLC may have two coding levels, but can also have more than two coding levels and the above techniques can be applied at more than two coding levels.
The decoder 2600 also offers an opportunity to develop encoder/decoder pairs that provide additional coding gains over previous designs. If the tentative tile decoder 2605 can provide more tile separation than is needed to mitigate path multiplicity multiplication effects, then the tiles can actually be physically brought closer together using a non-uniform signal constellation while the tile code effectively pushes the tiles farther apart to recover the MSED that would have otherwise been lost due to the closer spaced tiles. The ability to physically bring the tiles closer together has the opposite effect on coding gain as moving them physically farther apart, that is, the average signal energy of the constellation can be reduced and the coding gain can thereby be increased. The amount of coding gain that can be practically obtained can be discovered by implementing specific examples and running simulations to determine the best tile-spacing parameters. As the tiles are brought closer together, the average energy drops and the coding gain increases. However, as the tiles are brought closer together, the separation provided by the tentative tiling decoder diminishes. A computer program is used to repeatedly adjust the tile spacing parameters and to analyze coding gain via Monte Carlo simulations to find the optimum balance point that maximizes the net coding gain. We note that this version can improve performance over previous designs beyond what could be achieved even if the path multiplicity effects were ignored.
Our next step is to demonstrate a specific example of a decoding algorithm used by the decoder 2600. Consider
To start, we define a set of metrics as follows:
M(LSB1,LSBQ,BB1,BBQ,k)=|r(k)−si,j|2, (7)
where r(k) is the received signal point, k is the 2D signaling interval index, and si,j is a constellation point, where i=fQ(LSBQ,BBQ), j=f1(LSB,BB1), and fQ(∘) and f1(∘) are indexing functions. Next we define I-axis and Q-axis real metrics as follows:
M
1(LSB1,BB1,k)=(Re{r(k)}−s1(LSB1,BB1))2, (8)
and,
M
Q(LSBQ,BBQ,k)=(Im{r(k)}−sQ(LSBQ,BBQ))2, (9)
where s1=Re{s(i,j)} and sQ=Im{s(i,j)} are the respective projections of the constellation points onto the I-axis and the Q-axis. The metric for a given 2D point can be constructed from the real metrics, that is:
M(LSB1,LSBQ,BB1,BBQ,k)=M1(LSB1,BB1,k)+MQ(LSBQ,BBQ,k). (10)
While a given constellation point is determined by {LSB1,LSBQ, BB1,BBQ}, the constellation point's tile address is given by Tile={LSB1,LSBQ}, and the constellation point's building-block address within a tile is BB={BB1,BBQ}. A pair of I- and Q-tentative tile decoders respectively use the metrics (8) and (9) to make a tentative decision, {tilde over (d)}Tile(k), the identifies a most likely set of tile coordinates, Tile={LSB1,LSBQ}.
To perform tentative tile decoding, i.e., to determine the most likely sequence {tilde over (d)}Tile(k)={LSB1,LSBQ}k for the exemplary constellation 255 of
In a preferred embodiment with a rate-⅘ LSB tiling code, during the first three intervals, k, an I-channel Viterbi decoder is fed the min(LSB1=0,BB1,k) and min(LSB1=1,BB1,k) values from the third row of each of the LSB=0 and LSB=1 sets of rows in the table of
When the Viterbi decoder is fed the above set of metrics, it will determine the sequence of tentatively most likely tiles, dTIle(k)={LSB1,LSBQ}k. The I-channel Viterbi decoder will preferably run to its path memory length until a delayed decision, LSB1, can be taken from the end of its most likely trellis path. A Q-channel Viterbi decoder is similarly used to determine the most likely value for LSBQ. These values are then combined to create the tentative tile decision, dTile(k)={LSB1,LSBQ}k. If larger constellations are used that include uncoded bits, these uncoded bits can be used to identify the specific tile from a plurality of tiles that can be from the LSB=0 or LSB=1 subsets. These uncoded bits already correspond to larger Euclidian distances in the constellation and do not require further decoding. If a multilevel coding scheme with more than two coding levels is in use, tentative decisions from upper coding levels can be made. Once these tentative decisions are made, they can be treated similarly to uncoded bits to define the specific tentative tile decision.
Referring again to
Suppose, as before, that a tiling code is selected with dfree=3 to achieve an MSED of D2=48 between adjacent tile sequences. To achieve the MSED of D2=48, we assume that the building block bit BB is known, so that D2=3×16=48. While this holds for the tile decoder 615, it is not so for the tentative tile decoder 2605. The tentative tile decoder 2605 only achieves an MSED of D2=3×4=12 between nearest-neighbor tile sequences. However, nearest neighbor points that give rise to path multiplicity issues have a distance of D2=4 in each of the I and Q directions. Therefore the tentative tile decoder can provide additional distance to effectively push the tiles apart by performing tile sequence detection.
Because the building block point is not known to the tentative tile decoder, the tentative tile decoder assumes the BB bit to correspond to the minimum metric as shown in the third row of each of the LSB=0 and LSB=1 sets of rows in the table of
It should be understood that while the above example uses an LSB decoder for the tile decoder, other types of tile decoders could be used as well. For example, in a 4D Wei code embodiment, a tentative Wei decoder 2605 would be run using a table similar to
Next consider the complexity to decode using the decoder 2600. As we can see, the previously computed complexity will increase by the addition of a second LSB decoder. While the decoder 600 required a building block decoder followed by a tiling decoder, the decoder 2600 uses essentially the same building block decoder and needs to run two versions of the tiling decoder.
In order to keep complexity to a minimum we have developed a more efficient way to implement the LSB decoder. In an embodiment with rate ⅘ LSB encoders, instead of taking one branch every five 2D signaling intervals, the Viterbi decoder is configured to take four smaller branches during the same five 2D signaling intervals. This way, instead of having 16 possible branches per state, one branch corresponding to each possible combination of four uncoded bits as embodied as five coded bits, the Viterbi decoder is configured so that each state has only two possible branches per state. In each of the first three intervals, the two possible branches per state correspond to the one coded bit of information transmitted during each respective interval. Metrics related to the bits from the fourth and fifth intervals are combined (e.g., by adding them together). That is, during the fourth interval, the Viterbi decoder waits, and during the fifth interval the Viterbi decoder computes metrics based on the fourth and fifth intervals. Since, the parity bit sent during the fifth interval is redundant, there are still only two branches per state.
While the above low-cost LSB decoder embodiment provides the same ML-decoded output sequence as the previously discussed implementation of the LSB decoder (whose complexity numbers are tablulated in
Turning now to
In a step 2910, for each of the I and Q channels, a table similar to the one shown in
Next, a step 2920 is carried out which involves updating a pair of I-channel and Q-channel LSB Viterbi decoders that collectively make the tentative tile decisions dTile(k)={LSB1,LSBQ}k. Because the third row in each group of three rows the table of
Each interval, at each of the 32 states (32), for each of the two incoming paths per state (×2), a metric is accessed from the table of
Next, step 2925 is carried out to determine the tentative tile decision. As per step 2930, the building block metrics are selected from the tentatively decided upon tile. The above operations take the place of step 810-820 in the method 800 of
In the step 825, the two smallest 2D metrics are then added together to obtain a 4D branch metric every other interval. Independent of constellation size, the building block decoder in step 825 computes 32 (states)×2 (branches per state)=64 path operations×1 addition per path. For each state, two computations are also needed (32×2) to compare paths and to select the survivor paths. The aforementioned computations are needed once every other interval (÷2). That is, the building block decoder steps 825-835 add [(32×2)+(32×2)]+2=64 computations per 2D signaling interval.
The step 835 passes the building block decisions to a tiling decoder 615 implemented as two 32-state LSB decoders. Because the LSB decoders follow the building block decoder which resolves the BB bit, tiling decoder only need to decode a 2m-point constellation. The first step of LSB decoding is to determine, for each of the I and Q axes, the smallest real metric between the received signal point and each of the LSB=0 and LSB=1 subsets given the selected BB bit. This can be read directly out of the table of
Also, the decoder 2600 can be used with a modified signal constellation to provide further coding gain. As illustrated in
As per steps 3105-3120, a transmitter selects a tiling code, puts at least one coded building block at each tile point of the tiling code, and then pulls the tiles closer together to generate a non-uniformly spaced signal constellation. The tiling code is preferably selected to put enough separation between tile sequences to effectively push the tiles back to their original positions and beyond, so that effects of error coefficient can be reduced as well. The transmitter then transmits a non-uniform constellation signal that corresponds to a tiled building blocked coded sequence as discussed above where the tiles had been brought physically closer together in order to reduce the average signal energy. Such embodiments provide additional coding gain because the signal has lower average signal energy while the tiling code is able to maintain the needed MSED between tiles and reduce the effects of error coefficient. The non-uniform constellation signal is then received by a receiver at step 3125. At step 3130 a decoder such as the decoder 2600 is used to decode the signal so as to realize the increase in coding gain.
The best parameters for a transmitter-receiver pair that implements the method 3100 can be determined by Monte Carlo simulation. Free parameters include the dfree for each of the tile and building block codes, and I- and Q-spacing parameters that determine inter-tile spacing. Monte Carlo simulations can be used to determine how much to pull the tiles closer together for a given tiling code/building-block code pair. The Monte Carlo simulations are performed to determine a good trade off between lowering the average signal energy and causing the tile distance to be reduced. The best trade off point balances the benefit of reduced average signal energy with the adverse effects of closer tiles. At the optimum setting, the tiling code is able to effectively maintain the building block's MSED distance between adjacent tile sequences and reduce the effects of error coefficient while at the same time increasing the coding gain as much as possible due to closer physical tile spacing.
While many of the above embodiments assumed that the tentative tile decoder made hard decisions, an iterative approach could alternatively be employed. In this type of embodiment each of the tiling code and the building block code are soft-decision decoded, and iterations between the building block and tiling codes are used to approach the overall ML decoding. Such iterative techniques are well known, for example in the fields of turbo decoding and turbo equalization. Any such iterative structure could be implemented between the decoders 610 and 615 to implement an iterative decoding embodiment to the decoder 600.
Although the present invention has been described with reference to specific embodiments, other embodiments may occur to those skilled in the art without deviating from the intended scope. For example, while block diagrams are provided herein, it should be noted that any of the blocks described herein could be implemented in hardware or in software running on one or more processors. Also, certain blocks can be modified. For example, the tiling decoder can be moved in front of the building block decoder, although we currently believe the mode shown in
This patent application is related to co-pending U.S. patent application Ser. No. 11/976,214, filed Oct. 23, 2007, entitled “Tiled-Building-Block-Trellis Encoders.”