Trellis segment separation for low-complexity viterbi decoding of high-rate convolutional codes
10075186 ยท 2018-09-11
Assignee
Inventors
Cpc classification
H03M13/3988
ELECTRICITY
H03M13/3961
ELECTRICITY
H03M13/235
ELECTRICITY
H03M13/6502
ELECTRICITY
International classification
H03M13/00
ELECTRICITY
Abstract
A method for encoding bits according to a convolutional code. Bits to be encoded with the convolutional code are obtained for transmission over a communication channel. The bits are encoded according to the convolutional code with an encoder having an M-bit memory and a plurality of logic gates so as to separate trellis segments of the convolutional code into trellis sub-segments having a reduced number of branches per state than that of the trellis segments.
Claims
1. A method comprising: encoding input bits into a convolutional code, the encoding including: providing an M-bit memory, wherein a trellis segment of the convolutional code determines a path from a current state to a next state of the M-bit memory; providing a plurality of logic gates and a plurality of code taps grouped into sets of code taps; applying, by each set of code taps, input bits from respective bit positions of the M-bit memory, and respective bit positions of the input bits, to inputs of a corresponding logic gate; producing from the input bits applied to the inputs of each logic gate a corresponding coded bit, the coded bits collectively representing the convolutional code; wherein constraints on the plurality of code taps define zero forcing of certain code taps to decouple certain coded bits from certain memory bits and input bits; wherein the applying includes, applying by the plurality of code taps, the input bits from the positions of the M-bit memory and the positions of the input bits to produce separation of the trellis segment of the convolutional code into trellis sub-segments defining paths from the current state to the next state of the M-bit memory through one of more intermediate states; and wherein the trellis sub-segments have fewer branches per state than the trellis segment, such that a number of digital logic circuits needed to decode the convolutional code that scales with the number of branches per state is fewer than a number of digital logic circuits needed to decode a convolutional code without the trellis sub-segments; and transmitting the convolutional code.
2. The method of claim 1, wherein applying comprises applying the input bits according to the code taps in order to produce trellis sub-segments that connect the current state to the next state through a plurality of intermediate states.
3. The method of claim 1, wherein applying comprises applying the input bits according to the code taps such that a single input bit results in a radix-2 trellis sub-segment and a group of X input bits results in a radix-2.sup.X trellis sub-segment.
4. The method of claim 3, wherein applying comprises applying the input bits according to the code taps so as to separate the trellis segment into only radix-2 trellis sub-segments.
5. The method of claim 3, wherein applying comprises applying the input bits according to the code taps so as to separate the trellis segment into a combination of various radix-2.sup.X trellis sub-segments, where X is greater than or equal to 1.
6. The method of claim 5, wherein further constraints on the plurality of code taps depend on the combination of radix-2.sup.X trellis sub-segments to be produced.
7. The method of claim 1, wherein the transmitting includes transmitting the convolutional code over a communication channel.
8. An apparatus comprising: an encoder to encode input bits into a convolutional code, the encoder including: an M-bit memory, wherein a trellis segment of the convolutional code determines a path from a current state to a next state of the M-bit memory; and a plurality of logic gates and a plurality of code taps grouped into sets of code taps, each set of code taps configured to apply input bits from respective bit positions of the M-bit memory, and respective bit positions of the input bits, to inputs of a corresponding logic gate; wherein each logic gate is configured to produce from the input bits applied to the inputs of the logic gate a corresponding coded bit, the coded bits collectively representing the convolutional code; wherein constraints on the plurality of code taps define zero forcing of certain code taps to decouple certain coded bits from certain memory bits and input bits; wherein the plurality of code taps are configured to apply the input bits from the positions of the M-bit memory and the positions of the input bits to produce separation of the trellis segment into trellis sub-segments defining paths from the current state to the next state of the M-bit memory through one of more intermediate states; and wherein the trellis sub-segments have fewer branches per state than that the trellis segment, such that a number of digital logic circuits needed to decode the convolutional code that scales with the number of branches per state is fewer than a number of digital logic circuits needed to decode a convolutional code without the trellis sub-segments; and wherein the encoder is configured to transmit the convolutional code.
9. The apparatus of claim 8, wherein the plurality of code taps are configured to apply the input bits to produce trellis sub-segments that connect the current state to the next state through a plurality of intermediate states.
10. The apparatus of claim 8, wherein the plurality of code taps are configured to apply the input bits such that a single input bit results in a radix-2 trellis sub-segment and a group of X input bits results in a radix-2.sup.X trellis sub-segment.
11. The apparatus of claim 10, wherein the plurality of code taps are configured to apply the input bits to separate the trellis segment into only radix-2 trellis sub-segments.
12. The apparatus of claim 11, wherein the plurality of code taps are configured to apply the input bits to separate the trellis segment into a combination of various radix-2.sup.X trellis sub-segments, where X is greater than or equal to 1.
13. The apparatus of claim 12, wherein further constraints on the plurality of code taps depend on the combination of radix-2.sup.X trellis sub-segments to be produced.
14. The apparatus of claim 8, wherein the encoder is configured to transmit the convolutional code over a communication channel.
15. One or more non-transitory computer readable storage media encoded with instructions that, when executed by a processor, cause the processor to: encode input bits into a convolutional code, using: an M-bit memory, wherein a trellis segment of the convolutional code determines a path from a current state to a next state of the M-bit memory; and a plurality of logic gates and a plurality of code taps grouped into sets of code taps; wherein the instructions to encode include instructions to cause the processor to: apply, by each set of code taps, input bits from respective bit positions of the M-bit memory, and respective bit positions of the input bits, to inputs of a corresponding logic gate; produce from the input bits applied to the inputs of each logic gate a corresponding coded bit, the coded bits collectively representing the convolutional code; wherein constraints on the plurality of code taps define zero forcing of certain code taps to decouple certain coded bits from certain memory bits and input bits; wherein the instructions to apply include instructions to apply, by the plurality of code taps, the input bits from the positions of the M-bit memory and the positions of the input bits to produce separation of the trellis segment of the convolutional code into trellis sub-segments defining paths from the current state to the next state of the M-bit memory through one of more intermediate states; and wherein the trellis sub-segments have fewer branches per state than the trellis segment, such that a number of digital logic circuits needed to decode the convolutional code that scales with the number of branches per state is fewer than a number of digital logic circuits needed to decode a convolutional code without the trellis sub-segments; and transmit the convolutional code.
16. The non-transitory computer readable storage media of claim 15, wherein the instructions to apply comprise instructions to apply the input bits according to the code taps so as to produce trellis sub-segments that connect the current state to the next state through a plurality of intermediate states.
17. The non-transitory computer readable storage media of claim 15, wherein the instructions to apply comprise instructions to apply the input bits according to the code taps such that a single input bit results in a radix-2 trellis sub-segment and a group of X input bits results in a radix-2.sup.X trellis sub-segment.
18. The non-transitory computer readable storage media of claim 17, wherein the instructions to apply comprise instructions to apply the input bits according to the code taps so as to separate the trellis segment into only radix-2 trellis sub-segments.
19. The non-transitory computer readable storage media of claim 17, wherein the instructions to apply comprise instructions to apply the input bits according to the code taps so as to separate the trellis segment into a combination of various radix-2.sup.X trellis sub-segments, where X is greater than or equal to 1.
20. The non-transitory computer readable storage media of claim 15, wherein the instructions to transmit include instructions to transmit the convolutional code over a communication channel.
21. The non-transitory computer readable storage media of claim 15, wherein further constraints on the plurality of code taps depend on a combination of radix-2.sup.X trellis sub-segments to be produced.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
DESCRIPTION OF EXAMPLE EMBODIMENTS
(19) Overview
(20) In one embodiment, a method is provided for encoding bits according to a convolutional code. Bits to be encoded with the convolutional code are obtained for transmission over a communication channel. The bits are encoded according to the convolutional code with an encoder having an M-bit memory and a plurality of logic gates so as to separate trellis segments of the convolutional code into trellis sub-segments having a reduced number of branches per state than that of the trellis segments.
EXAMPLE EMBODIMENTS
(21) Presented herein are techniques to encode bits with a convolutional code in order to separate trellis segments so as to reduce complexity of a decoder that decodes the encoded data. The number of trellis branches that end at a particular single state of a convolutional code defines the complexity that is needed for decoding data encoded with that convolutional code. Computational complexity scales with number of trellis branches per coded bit.
(22) Table 1 below illustrates how the number of branches per state and per coded bit increases with coding rate.
(23) TABLE-US-00001 TABLE 1 Code Rate (R) 1/2 2/3 3/4 4/5 5/6 6/7 Input Bits (B) 1 2 3 4 5 6 Coded Bits (C) 2 3 4 5 6 7 Memory depth (M) 6 6 6 6 6 6 States (S) 64 64 64 64 64 64 Branches per State 2 4 8 16 32 64 (K) Branches per 128 256 512 1024 2048 4096 Segment (K .Math. S) Branches per 64 85.3 128 204.8 341.3 585.1 Coded Bit (K .Math. S/C)
(24) Table 1 reveals that the number of branches per state (K) for Rate=1/2 is two (2), for R=2/3 is four (4), for R=3/4 is eight (8), for R=4/5 is 16, for R=5/6 is 32 and for R=6/7 is 64. Assuming code memory M=6, as an example, this translates for Rate=1/2 into 64 branches per coded bit, for Rate=2/3 into 85.3 branches per coded bit, for Rate=3/4 into 128 branches per coded bit, for Rate=4/5 into 204.8 branches per coded bit, for Rate=5/6 into 341.3 branches per coded bit, and Rate=6/7 into 585.1 branches per coded bit. Thus, in order to simplify Viterbi decoding of a convolutional code, the simplified trellis should have less than K.Math.S/C branches per coded bit. This means that for M=6 as an example and R=2/3, the number of branches per coded bit should be less than 85.3, for R=3/4, the number of branches per coded bit should be less than 128, for R=4/5, the number of branches per coded bit should be less than 204.8, and so on.
(25) Accordingly, highly connected trellis segments in the convolutional code are converted into trellis segments with reduced connections. These reduced connectivity trellis segments are referred to as trellis sub-segments. Depending on certain constraints on the code taps at the encoder, a single (highly connected/high radix) trellis segment can be separated into several (sparsely connected/low radix) sub-segments. Examples of low radix sub-segments are radix-2 and radix-4 sub-segments. The term radix in this context refers to the number of branches that end in a given state, and thus radix-2 means that 2 branches end in a given state and radix-4 means that 4 branches end in a given state.
(26) The principal components of a Viterbi decoder are a branch metric unit, path metric unit (that includes add-compare-select digital logic circuits) and a traceback unit. In designing state of art Viterbi decoding, it is desirable to reduce the complexity of the branch metric unit and path metric unit by reducing the number of digital logic circuits needed for the Viterbi decoding computations.
(27) Significant complexity reduction in the branch metric unit and the path metric unit of the Viterbi decoder for higher code rates can be achieved with the sparsely connectivity trellis sub-segments, with negligible performance penalty. As will become apparent from the following description, the coding scheme and encoders described herein produce an encoded bit stream that, after it is transmitted, allows for reduced complexity of a Viterbi decoder on a receive side of a communication channel.
(28) Reference is first made to
(29) Turning now to
(30) The encoder 50 in
(31) Instead of applying input bits b.sub.1 and b.sub.2 together as input to the encoder 50, only b.sub.1 of the bits b.sub.1 and b.sub.2 are input to the encoder to compute c.sub.1 and c.sub.2. In an intermediate state, b.sub.2 is input into the encoder to compute c.sub.3. The X's in
(32) The code taps T.sub.1, T.sub.2 and T.sub.3 for the M=3 example of
(33) TABLE-US-00002 TABLE 2 m.sub.3 m.sub.2 m.sub.1 b.sub.1 b.sub.2 T.sub.1 = 0 1 1 1 0 T.sub.2 = 1 1 0 1 0 T.sub.3 = 0 1 1 0 1
(34)
(35) In another example, a radix-2 separable (rate 2/3) convolutional code can similarly be achieved with a memory having a depth of 6 (M=6). The constraints on the code taps for an encoder with a memory of depth 6 (M=6) are listed in Table 3 (where x in the table indicates that the value could be logic 1 or 0 but an 0 in the table indicates the value must be logic 0).
(36) TABLE-US-00003 TABLE 3 m.sub.6 m.sub.5 m.sub.4 m.sub.3 m.sub.2 m.sub.1 b.sub.1 b.sub.2 T.sub.1 = x x x x x x x 0 T.sub.2 = x x x x x x x 0 T.sub.3 = 0 x x x x x x x
(37) As shown in Table 1, an R=2/3 code (where M=6) would have K=4 branches per state. However, by using constraints on the code taps as shown in Table 3, two trellis sub-segments are produced in which each state has not more than 2 branches (i.e., a trellis with only radix-2 sub-segments).
(38)
(39) Reference is now made to
(40)
(41) The constraints on the code taps for rate 5/6 for the encoder 50 shown in
(42) TABLE-US-00004 TABLE 4 m.sub.6 m.sub.5 m.sub.4 m.sub.3 m.sub.2 m.sub.1 b.sub.1 b.sub.2 b.sub.3 b.sub.4 b.sub.5 T.sub.1 = x x x x x x x 0 0 0 0 T.sub.2 = x x x x x x x 0 0 0 0 T.sub.3 = 0 x x x x x x x 0 0 0 T.sub.4 = 0 0 x x x x x x x 0 0 T.sub.5 = 0 0 0 x x x x x x x 0 T.sub.6 = 0 0 0 0 x x x x x x x
(43) Reference is now made to
(44)
(45) The constraints on the code taps for the split radix approach depicted in
(46) TABLE-US-00005 TABLE 5 m.sub.6 m.sub.5 m.sub.4 m.sub.3 m.sub.2 m.sub.1 b.sub.1 b.sub.2 b.sub.3 b.sub.4 b.sub.5 T.sub.1 = x x x x x x x 0 0 0 0 T.sub.2 = x x x x x x x 0 0 0 0 T.sub.3 = 0 x x x x x x x x 0 0 T.sub.4 = 0 x x x x x x x x 0 0 T.sub.5 = 0 0 0 x x x x x x x x T.sub.6 = 0 0 0 x x x x x x x x
(47) Comparing the approaches of
(48)
(49)
(50) When the trellis segment separation approaches presented above in connection with
(51)
(52)
(53)
(54)
(55)
(56) Complexity of radix-2.sup.X ACS units increases exponentially with N. Thus, by reducing the radix of ACS units needed in the complexity reduced path metric unit 120, the numbers of adders, comparator and multiplexer inputs are reduced.
(57) Specifically, for the radix-2 separable convolutional code (rate 2/3) produced by the encoder depicted in
(58)
(59)
(60) Table 6 below illustrates a complexity comparison between standard Viterbi decoders and a Viterbi decoder that can be designed when the techniques presented herein are employed.
(61) TABLE-US-00006 TABLE 6 Code 5/6 2/3 2/3 5/6 5/6 (radix-2/ (standard) (radix-2) (standard) (radix-2) radix-4) Input Bits 2 2 5 5 5 (B) Coded Bits 3 3 6 6 6 (C) Memory 6 6 6 6 6 Depth (M) States (S) 64 64 64 64 64 Branches per 4 n/a 32 n/a n/a State (K) BMU 16 4 320 4 12 Complexity (ADD-2) PMU 448 384 4032 960 1088 Complexity (ADD-2) Total 464 388 4352 964 1100 Complexity (ADD-2) Complexity 154.7 129.3 725.3 160.7 183.3 per Coded Bit (ADD-2)
(62) Table 6 reveals that for a rate 2/3 convolutional code, a Viterbi decoder that can be used when the radix-2 techniques presented herein are employed has a complexity per code bit of 129.3 and a conventional Viterbi decoder has a complexity per coded bit of 154.7. This is a complexity reduction of 16%. The complexity reduction is more substantial for a rate 5/6 convolutional code. Specifically, a conventional Viterbi decoder has a complexity per coded bit of 725.3, whereas when the radix-2 techniques presented herein are employed, the Viterbi decoder has a complexity of 160.7 (a reduction of 78%) and when the radix-2/radix-4 techniques are employed, the Viterbi decoder has a complexity of 183.3 (a reduction of 75%).
(63) Table 7 below lists rules for code tap constraints of a radix-2 encoder for a rate (R) convolutional code where R=B/(B+1), and B is the number of input bits, C is the number of coded bits (C=B+1) and M is the memory depth of the encoder.
(64) TABLE-US-00007 TABLE 7 T.sub.1: t.sub.1, . . . , t.sub.M+1 = free; t.sub.M+2, . . . , t.sub.M+B = 0 T.sub.2: t.sub.1, . . . , t.sub.M+1 = free; t.sub.M+2, . . . , t.sub.M+B = 0 T.sub.3: t.sub.1 = 0; t.sub.2, . . . , t.sub.M+2 = free; t.sub.M+3, . . . , t.sub.M+B = 0 T.sub.k: t.sub.1, . . . , t.sub.k2 = 0; t.sub.k1, . . . , t.sub.M+k1 = free; t.sub.M+k, . . . , t.sub.M+B = 0
(65) When M=6 the code tap constraints are as set forth in Table 4 above.
(66) Table 8 below sets forth the rules for the code tap constraints for the radix-2 first stage and radix-4 residual stages of a radix-2/radix-4 encoder.
(67) TABLE-US-00008 TABLE 8 T.sub.1: t.sub.1, . . . , t.sub.M+1 = free; t.sub.M+2, . . . , t.sub.M+B = 0 T.sub.2: t.sub.1, . . . , t.sub.M+1 = free; t.sub.M+2, . . . , t.sub.M+B = 0 T.sub.3: t.sub.1 = 0; t.sub.2, . . . , t.sub.M+3 = free; t.sub.M+4, . . . , t.sub.M+B = 0 T.sub.4: t.sub.1 = 0; t.sub.2, . . . , t.sub.M+3 = free; t.sub.M+4, . . . , t.sub.M+B = 0 T.sub.2k1: t.sub.1, . . . , t.sub.2k2, . . . , t.sub.M+2k1 = free; t.sub.M+2k, . . . , t.sub.M+B = 0 t.sub.2k3 = 0; T.sub.2k: t.sub.1, . . . , t.sub.2k2, . . . , t.sub.M+2k1 = free; t.sub.M+2k, . . . , t.sub.M+B = 0 t.sub.2k3 = 0;
(68) The constraints on the code taps for the radix-2/radix-4 approach are listed in Table 5 above when M=6.
(69) The general rules for a rate R=B/(B+1) convolutional code are as follows.
(70) 1. Constraints on T.sub.1 and T.sub.2 are identical (2 coded bits). First M+X taps can be chosen freely. X depends on radix of first trellis sub-segment (radix-2: X=1; radix-4: X=2 etc.) All residual taps must be zero.
(71) 2. All following T.sub.k begin with Y zeros, where Y depends on the sum of radices of all previous trellis sub-segments. (radix-2: Y+=1; radix-4: Y+=2 etc.) The block of freely chosen M+X taps is shifted to the right by Y. The radix of the current trellis sub-segment determines X (radix-2: X=1; radix-4: X=2 etc.). All residual taps must be zero.
(72) 3. The amount of T.sub.k with identical constraints is identical with the number of coded bits of the current trellis sub-segment.
(73) These rules can be generalized for an arbitrary convolutional code with rate R=B/C as follows.
(74) 1. The amount of code taps T.sub.k with identical constraints equals the number of coded bits of the considered trellis sub-segment.
(75) 2. (M+X) taps of each T.sub.k can be chosen freely, where M denotes the memory depth of the convolutional code and X equals the number of uncoded bits of the considered trellis sub-segment. The radix of the considered trellis sub-segment is 2.sup.X. (X=1: radix-2; X=2: radix-4; etc.)
(76) 3. First Y taps of each T.sub.k must be zero, where Y equals the sum of uncoded bits of all previous trellis sub-segments. (radix-2: Y+=1; radix-4: Y+=2 etc.) The block of freely chosen M+X taps is shifted to the right by Y.
(77) 4. Last Z taps of each T.sub.k must be zero, where Z=BXY
(78) Reference is again made to
(79) Reference is now made to
(80) The encoding involves applying code taps that determine connections between bit positions of the M-bit memory and inputs to respective ones of the plurality of logic gates in order to produce the trellis sub-segments that connect a previous state to a next state through at least one intermediate state, and wherein outputs from respective ones of the plurality of logic gates correspond to coded bits of the convolutional code. In one embodiment, the code taps are selected and applied in order to produce trellis sub-segments that connect the previous state to a next state through a plurality of intermediate states. In another embodiment, the code taps are selected and applied such that a single uncoded bit results in a radix-2 trellis sub-segment and a group of X uncoded bits results in a radix-2.sup.X trellis sub-segment. The code taps may be selected and applied so as to separate trellis segments into only radix-2 trellis sub-segments, or in another form, the code taps may be selected and applied so as to separate trellis segments into a combination of various radix-2.sup.X trellis sub-segments, where X is greater than or equal to 1. The code taps may be selected and applied according to constraints which depend on the combination of radix-2.sup.X trellis sub-segments to be produced. In one embodiment, the constraints on the code taps define zero forcing of certain code taps to decouple certain coded bits from certain memory bits and uncoded bits.
(81)
(82) The memory 220 may include read only memory (ROM), random access memory (RAM), magnetic disk storage media devices, optical storage media devices, flash memory devices, electrical, optical, or other physical/tangible memory storage devices. Thus, in general, the memory 220 may comprise one or more tangible (non-transitory) computer readable storage media (e.g., a memory device) encoded with software comprising computer executable instructions and when the software is executed (by the processor 210) it is operable to perform the operations described herein.
(83) To summarize, depending on certain constraints on the code taps of the convolutional code, a single (highly connected/high radix) trellis segment can be separated into several (more sparsely connected/low radix) sub-segments. This results in significant complexity reduction in branch metric units and path metric units of the Viterbi decoder for high rate convolutional codes. Simulations have shown that constraints on the code taps cause negligible performance penalty. Significant reduction of complexity and power dissipation of Viterbi decoding of high rate convolutional codes. For example, up to 75% less computational complexity for rate 5/6 can be achieved.
(84) The techniques presented herein involve separating highly connected trellis segments into a plurality of sparsely connected trellis sub-segments (requiring certain constraints on the code taps), resulting in lower complexity Viterbi decoding of high rate convolutional codes. Viterbi decoding with trellis segment separation involves decoding of smaller subgroups of uncoded and coded bits per segment of the convolutional code. A single uncoded bit requires a radix-2 trellis sub-segment, and a group of N uncoded bits requires a radix-2.sup.X Trellis sub-segment. In some applications, sparsely connected sub-segments means that radix-2 and radix-4 segments are preferred.
(85) The greatest computational complexity savings is when trellis separation is into solely radix-2 sub-segments. However, as presented herein, trellis segments can be separated into a mix of radix-2.sup.X sub-segments. This mix defines trade-off between computational complexity savings and increase in latency and hence additional buffering of received signals.
(86) Constraints on the code taps means zero forcing of certain code taps to decouple certain coded bits from certain memory bits and uncoded bits allowing sub-segment wise Viterbi decoding. The constraints on the code taps depend on the mixture of radix-2.sup.X sub-segments
(87) In summary, in one form, a method is provided comprising: obtaining bits to be encoded with a convolutional code for transmission over a communication channel; and encoding the bits according to the convolutional code with an encoder having an M-bit memory and a plurality of logic gates so as to separate trellis segments of the convolutional code into trellis sub-segments having a reduced number of branches per state than that of the trellis segments.
(88) In another form, an apparatus is provided comprising: an M-bit memory; a plurality of logic gates having a plurality of inputs coupled to respective ones of bit positions of the M-bit memory, outputs from respective ones of the plurality of logic gates corresponding to code bits of a convolutional code; and a plurality of code taps that determine connections between bit positions of the M-bit memory and inputs to respective ones of the plurality of logic gates so as to separate trellis segments of the convolutional code into trellis sub-segments having a reduced number of branches per state than that of the trellis segments.
(89) In still another form, one or more non-transitory computer readable storage media encoded with instructions that, when executed by a processor, cause the processor to: obtain bits to be encoded with a convolutional code for transmission over a communication channel; and encode the bits according to the convolutional code using an M-bit memory and a plurality of logic functions so as to separate trellis segments of the convolutional code into trellis sub-segments having a reduced number of branches per state than that of the trellis segments.
(90) The above description is intended by way of example only. Although the techniques are illustrated and described herein as embodied in one or more specific examples, it is nevertheless not intended to be limited to the details shown, since various modifications and structural changes may be made within the scope and range of equivalents of the claims.