Apparatus and method for decoding and trace back of convolution codes using the viterbi decoding algorithm
A system for generating and storing trace bits for Viterbi decoding of binary convolution codes includes at least one arithmetic logic unit (ALU) for determining the trace bits, and a first register and a second register for storing the trace bits. The first register stores a first half of a series of trace bits for N states in sequential order and the second register stores a second half of the series in sequential order. A binary convolution decoder having multiple states each having N states includes at least one arithmetic logic unit (ALU), a first register and a second register, and a storage device. The at least one ALU determines trace bits for each of the N states for each of the multiple stages. The first and second registers store trace bits of at least a portion of one stage. The storage device has memory cells. For each of the multiple stages, a group of at least one memory cell stores the N trace bits in sequential order. The system also includes means for tracing back, stage by stage, through the memory cells using the trace bits. Each of the memory cells has a length of at least N bits and the means for tracing back is operative to trace back in as few as two cycles per stage.
This application is a continuation of U.S. patent application Ser. No. 09/406,788, filed Sep. 28, 1999, which takes priority from U.S. Provisional Application No. 60/102,053, filed Sep. 28, 1998, which is hereby incorporated by reference.
FIELD OF THE INVENTIONThe present invention relates to Viterbi decoding.
BACKGROUND OF THE INVENTIONIn a communication system having a high bit error rate (BER), received data can differ greatly from the transmitted data. The transmitted data is encoded with an error correction code so that errors in the received data can be corrected. The received data must then be decoded in order to reconstruct the transmitted data.
Convolution codes are a type of error correction code, which is widely used in telecommunications. As is known in the art, there are various methods for decoding convolution codes, one of which is the Viterbi decoding algorithm.
A plurality of states is defined for the convolution encoder/decoder. The most common binary convolution encoders have 2K−1 states, where the constraint length K is for example, 5, 6, 7 or 9, as in global system for mobile communication (GSM) and code division multiple access (CDMA). Each of the 2K−1 states is an estimation of the K previous bits of the received data.
As is known in the art, Viterbi decoding of binary convolution codes can be represented by a trellis diagram. The trellis diagram is composed of “butterfly” structures, and one such structure is shown in
An indication of which transition was made is necessary in order to know whether a new state SJ came from old state S2J or S2J+1. One possible indication would be to store the number of the state, 2J or 2J+1, in memory. Another possible indication, which requires less space in memory, would be to associate a trace bit with each of the possible transitions. In the present example, a “0” trace bit is used when the original state is S2J and a “1” trace bit is used when the original state is S2J+1. An alternative indication could use a “0” trace bit when the original state is S2J and a “1” trace bit when the original state is S2J+1.
As shown in
Moreover, a weight W(SJ) is associated with each state SJ. The weight of a particular new state, also known as its path metric, is calculated according to the following equations:
W(new SJ)=max{W(old S2J)+M1,W(old S2J+1)+M2} and
W(new SJ+N/2)=max{W(old S2J)+M3,W(old S2J+1)+M4}.
As is well known in the art, an alternative framework for calculating the weight of each state, in which weights and branch metrics are logarithmic values, uses the following equations:
W(new SJ)=min{W(old S2J)+M1,W(old S2J+1)+M2} and
W(new SJ+N/2)=min{W(old S2J)+M3,W(old S2J+1)+M4}.
The calculation is called an “add-compare-select” (ACS) operation, because the steps are: add the appropriate branch metric value (M1, M2, M3 or M4) to the weight (W(old S2J) and W(old S2J+1)) of the old states from which the new state could have been reached, compare the sums, and select the maximum or minimum sum.
W(new S0)=max{0.3+0.25,0.4+0.1}=0.55
W(new S8)=max{0.3+0.15,0.4+0.3}=0.7
According to the Viterbi decoding algorithm, for each source symbol received, there is a transition between states, the set of transitions and states defining a “stage”. The weights of all 2K−1 states in the stage are calculated, and for each of the states, the transition resulting in the maximum weight (or minimum weight, according to the alternative framework mentioned hereinabove) for that state is identified, and the associated trace bit is stored. The trace bit associated with the transition is determined during the “select” step of the “add-compare-select” operation when calculating the weights.
In the single transition of
When using the Viterbi decoding algorithm, the trace bits are used to trace back the optimal path from a “final” state to an “original” state, the optimal path and the original state enabling reconstruction of the transmitted data. According to one method, one can wait until all of the transmitted symbols have been received in order to begin the trace back. However, due to the limitations of memory space, an alternative method is to begin the decoding procedure when the memory is full, which occurs before all of the transmitted symbols have been received. In the first case, the transmitted symbols generally have a tail of known symbols attached to the end, typically “0” symbols, and therefore S0 is always chosen as the final state from which the trace back decoding is performed. In the second case, the state from which the trace back decoding is performed is the state having the maximum weight (or minimum weight, according to the alternative framework mentioned hereinabove).
In this specification and claims, the term “final state” is used to mean the state from which the trace back decoding begins, whether it is due to a tail or due to memory being full.
Reference is now made to
Reference is now made to
In
Trace back decoding based on the trace bits is performed from S1 of stage 306. S1 of stage 306 was reached from either S2 of stage 305 or S3 of stage 305. The trace bit stored for S1 in row 406 is 0, so S1 was reached from S2. The trace bit stored for S2 in row 405 is 0, so S2 was reached from S4 of stage 304. The heavy solid lines indicate the complete trace back of states, and the original state is S14. From knowledge of the original state and the collected trace bits of the optimal path, the transmitted data can be reconstructed.
The way in which the trace bits are stored for each of the states and the associated trace back instruction affects the speed of the trace back decoding. The interleaved arrangement of trace bits shown in
There is provided in accordance with a preferred embodiment of the present invention a system for generating and storing trace bits for Viterbi decoding of binary convolution codes. The system includes at least one arithmetic logic unit (ALU) for determining the trace bits, and a first register and a second register for storing the trace bits.
Moreover, in accordance with a preferred embodiment of the present invention, the first register stores a first half of a series of trace bits for N states in sequential order and the second register stores a second half of the series in sequential order.
Furthermore, in accordance with a preferred embodiment of the present invention, the first half includes trace bits for states 0 to N/2−1 and the second half includes trace bits for states N/2 to N−1.
Additionally, in accordance with a preferred embodiment of the present invention, the at least one ALU is a first ALU and a second ALU, the first register stores the trace bits determined by the first ALU, and the second register stores the trace bits determined by the second ALU. In an alternative preferred embodiment, the at least one ALU is one ALU operating in split mode.
Moreover, in accordance with a preferred embodiment of the present invention, the first register and the second register are shift registers. In an alternative preferred embodiment, the system further includes at least one barrel shifter between the first register and one of the at least one ALU and between the second register and one of the at least one ALU.
Furthermore, in accordance with a preferred embodiment of the present invention, the system further includes a storage device having memory cells. A group of at least one memory cell stores the trace bits in sequential order.
Moreover, in accordance with a preferred embodiment of the present invention, the group stores the trace bits for a stage.
Furthermore, in accordance with a preferred embodiment of the present invention, the group includes one memory cell. Additionally, the system further includes means for packing the first half of the series of trace bits and the second half of the series of trace bits into the one memory cell so that the trace bits are packed sequentially in the memory cell.
Moreover, in accordance with a preferred embodiment of the present invention, the system further includes a storage device having groups of P memory cells, P being a power of 2 and P having a value of at least 2, the memory cells storing the trace bits in sequential order. In each of the groups, memory cells 0 to P/2−1 jointly store the first half of the series of trace bits and memory cells P/2 to P−1 jointly store the second half of the series.
Additionally, in accordance with a preferred embodiment of the present invention, P is 2, 4, 8, 16, 32 or 64.
There is also provided in accordance with a preferred embodiment of the present invention a binary convolution decoder having multiple stages each having N states. The decoder includes at least one arithmetic logic unit (ALU), a first register and a second register, and a storage device. The at least one ALU determines trace bits for each of the N states for each of the multiple stages. The first and second registers store trace bits of at least a portion of one stage. The storage device has memory cells. For each of the multiple stages, a group of at least one memory cell stores the N trace bits in sequential order. The system also includes means for tracing back, stage by stage, through the memory cells using the trace bits.
Moreover, in accordance with a preferred embodiment of the present invention, each of the memory cells has a length of at least N bits and the means for tracing back is operative to trace back in as few as two cycles per stage. Preferably, N is 16 or 32.
Furthermore, in accordance with a preferred embodiment of the present invention, the decoder further includes a trace back register whose L+P−1 least significant bits indicate the location in the group of a bit whose trace bit is to be saved into the least significant bit of the register after the register is shifted right one bit, the location including the bit number given by the L least significant bits of the register and the memory cell whose number in the group is given by the value in the P−1 bits of the register immediately to the left of the L least significant bits.
There is also provided in accordance with a preferred embodiment of the present invention a method for testing the value of a bit in a single instruction for a processor. The method includes the step of testing the value of the bit in the memory cell whose bit number is given by the L least significant bits of a register, regardless of the content of the other bits of the register. L is the integer part of the logarithm to base 2 of the length of the memory cell.
Moreover, in accordance with a preferred embodiment of the present invention, the step of testing includes the steps of setting a flag to 1 if the value is 1 and setting a flag to 0 if the value is 0.
Alternatively, in accordance with a preferred embodiment of the present invention, the step of testing includes the steps of setting a flag to 0 if the value is 1 and setting a flag to 1 if the value is 0.
There are also provided methods directed to the operation of the system and the decoder of the present invention, described hereinabove.
BRIEF DESCRIPTION OF THE DRAWINGSThe present invention will be understood and appreciated more fully from the following detailed description taken in conjunction with the appended drawings in which:
The present invention provides a novel apparatus and method for decoding and trace back of binary convolution codes using the Viterbi decoding algorithm. The present invention provides an apparatus and method including the use of two registers for storing trace bits. The present invention also provides an apparatus and method having a novel arrangement of trace bits in registers and in memory. The present invention also provides an apparatus and method for trace back in fewer cycles than the prior art. The present invention also provides a special instruction for trace back.
Reference is now made to
Registers VTR0 and VTR1 are filled in the following manner. The first butterfly calculation yields trace bits for S0 and S8. As shown in
According to an another preferred embodiment of the present invention, when the butterfly calculations are performed in reverse order, i.e. for S7 and S15 first, then the following manner for filling registers VTR0 and VTR1 yields the arrangement of trace bits shown in
Reference is now made to
1a) add W(S2J) and M1 to produce a first sum T0,
1b) add W(S2J) and M2 to produce a second sum T1,
1c) add W(S2J+1) and M3 to produce a third sum R0,
1d) add W(S2J+1) and M4 to produce a fourth sum R1,
2a) subtract the sums T0 and T1 to generate a flag F0, and
2b) subtract the sums R0 and R1 to generate a flag F1.
Steps 1a), 1b), 1c) and 1d) are performed by ALU0 and ALU1, in any combination. ALU0 must perform step 2a) so that the flag F0 is stored to VTR0 and ALU1 must perform step 2b) so that the flag F1 is stored to VTR1.
The differences calculated in steps 2a) and 2b) are either a positive or negative numbers, and the sign bit has a value of 1 or 0 respectively. The sign bits are the flags F0 and F1 generated by the subtraction performed by ALU0, and ALU1, respectively. The trace bits in the flags F0 and F1, together with the new state weights, signify the “select” part of the “add-compare-select” operation.
Reference is now made to
It will be appreciated by persons skilled in the art that registers VTR0 and VTR1 may be shift registers, in which case flags F0 and F1 are stored directly to the highest bit of registers VTR0 and VTR1, respectively. Alternatively, registers VTR0 and VTR1 may be simple output registers, in which case the architectures of
Reference is now made to
Registers VTR0 and VTR1 are packed to form a 16-bit value which is saved to memory cell 803, so that memory cell 803 contains the trace bits for states S0 through S15 sequentially. The trace bits for S0 to S7 are saved in bits 0 to 7, respectively, of memory cell 803, and the trace bits for S8 to S15 are saved in bits 8 to 15, respectively.
It will be appreciated by persons skilled in the art that the “pack and save” technique shown in
It will also be appreciated by persons skilled in the art that the “pack and save” technique shown in
Reference is now made to
It will be appreciated by persons skilled in the art that the “half in VTR0 and half in VTR1” arrangement shown in
Reference is now made to
Register VTR0 is saved to memory cell 1004, so that memory cell 1004 contains the trace bits for states S0 through S15 sequentially. Register VTR1 is saved to memory cell 1005, so that memory cell 1005 contains the trace bits for states S16 to S31 sequentially. In an alternative preferred embodiment, register VTR1 is saved to memory cell 1004, so that memory cell 1004 contains the trace bits for states S16 to S31, and register VTR0 is saved to memory cell 1005, so that memory cell 1005 contains the trace bits for states S0 through S15 sequentially.
It will be appreciated by persons skilled in the art that the “two memory cells per stage” arrangement shown in
Reference is now made to
Reference is now made to
After the trace bits stored in registers VTR0 and VTR1 are saved to memory (step 1208), it is checked again whether state index J is equal to N/2−1 (step 1214). If state index J is not equal to N/2−1, which occurs at least once if the number of states N is more than twice the length of registers VTR0 and VTR1, then the method continues from step 1212. If state index J is equal to N/2−1, indicating that trace bits for all states in the current stage have been calculated, then it is checked whether the current symbol is the final symbol (step 1216). If there are more symbols to be received, then the method continues from step 1200. Otherwise, the state with the maximum weight (or minimum weight, according to the alternative framework mentioned hereinabove) is identified (step 1218), and the trace bits in memory are used to trace back decode to find the optimal path to the original state (step 1220).
Reference is now made to
The trace back method of
L=int(log2(length of the memory cell)).
In the examples given in
The value stored in the L+(P−1) least significant bits (LSB) of a register Y is the number of the state having the maximum weight (or minimum weight, according to the alternative framework mentioned hereinabove) in the final stage (step 1300). In the example of
A flag F (shown in
In the example of
The group of memory cells for the previous stage is considered (step 1302). In the example of
Then it is checked whether all stages have been traced (step 1308). If the trace back is not complete, then the method continues from step 1302. If the trace back is complete, then the optimal path has been found (step 1310). In the present example, not all stages have been traced, and the method continues from step 1302. In the example of
The memory cell 1401 is then considered. Then register Y is shifted 1 bit to the left, and the contents of flag F are saved to the least significant bit of register Y.
The memory cell 1400 is then considered. Then register Y is shifted 1 bit to the left, and the contents of flag F are saved to the least significant bit of register Y.
As is known in the art, steps 1302 and 1304 can be combined in a single cycle. Therefore, for the case of trace bits of a 16-state binary convolution decoder (i.e. a constraint length K of 5) saved sequentially in memory cells of length at least 16 bits, the trace back can be performed in as few as two cycles. This is as opposed to the six cycles required by the prior art method. The second cycle is step 1306. This achievement of as few as two cycles is due to the sequential arrangement of the trace bits in registers VTR0 and VTR1 and subsequently in the memory cells, and due to the new instruction that combines steps 1302 and 1304. In fact, any time the group of memory cells which stores the trace bits for all states of a stage is one memory cell, the trace back can be performed in as few as two cycles.
It will be appreciated by persons skilled in the art that register Y may be a shift register, in which case flag F is stored directly to the least significant bit of register Y. Alternatively, register Y may be a simple output register, in which case a barrel shifter is placed as an intermediary between flag F and register Y.
It will also be appreciated by persons skilled in the art that many modifications can be made to the method of
The value of the bit in the P−1 bits immediately to the left of the L LSB of register Y is checked. In the present example, L is 4, P is 2, and the value of the bit is 1. Since the value of the bit is 1, the bit number given by the 4 LSB of register Y, “0110” or 6, refers to bit 22 of register Z, and not bit 6 of register Z. The register Z is shifted right 16 bits and the value of the trace bit at the bit number given by the 4 LSB of register Y is tested and saved to flag F (not shown).
It will be appreciated by persons skilled in the art that the present invention is not limited by what has been particularly shown and described herein above, rather the scope of the invention is defined by the claims that follow.
Claims
1. A system comprising:
- at least one arithmetic logic unit to determine trace bits for Viterbi decoding of a binary convolution code;
- a first register to hold a first portion of a series of trace bits for states of said code in consecutive order; and
- a second register to hold a second portion of said series in consecutive order,
- wherein said first portion and said second portion jointly include at most a single copy of said series.
2. The system according to claim 1 wherein said first portion comprises trace bits for a first half of said states in consecutive order and said second portion comprises trace bits for a second half of said states in consecutive order.
3. The system according to claim 1 and wherein said first register and said second register are shift registers.
4. The system according to claim 1 further comprising:
- a first barrel shifter between said first register and said arithmetic logic unit and a second barrel shifter between said second register and said arithmetic logic unit.
5. The system according to claim 1 further comprising:
- storage device coupled to said first and second registers having memory cells, wherein one or more memory cells store in consecutive order all trace bits for a stage of Viterbi decoding of said convolution code.
6. The system according to claim 1 further comprising:
- a trace back unit coupled to said memory storage to receive said trace bits.
7. A binary convolution decoder having multiple stages, each stage having states of a binary convolution code, the decoder comprising:
- at least one arithmetic logic unit to determine trace bits for each of said states for each of said multiple stages;
- a first register and a second register to jointly store a single copy of trace bits of at least a portion of one stage in consecutive order;
- a storage device having memory cells, wherein for each of said multiple stages, one or more memory cells are able to store said trace bits in consecutive order; and
- means for tracing back, stage by stage, through said memory cells using said trace bits.
8. The decoder according to claim 7, wherein said means for tracing back is to trace back in as few as two clock cycles per stage.
9. The decoder according to claim 7, wherein each of said stages has 16 states, each of said memory cells has a length of at least 16 bits and said means for tracing back is to trace back in as few as two clock cycles per stage.
10. The decoder according to claim 7, wherein each of said stages has 32 states, each of said memory cells has a length of at least 32 bits and said means for tracing back is to trace back in as few as two clock cycles per stage.
11. A method comprising:
- generating a series of trace bits for Viterbi decoding of a binary convolution code;
- storing a first half of said series in consecutive order in a first register and a second half of said series in consecutive order in a second register; and
- saving in consecutive order the trace bits stored in said first and second registers to one or more memory cells.
12. The method according to claim 11, wherein said first half comprises trace bits for a first half of states of said code and said second half comprises trace bits for a second half of said states.
13. The method according to claim 11 further comprising:
- storing said trace bits in consecutive order in groups of memory cells, wherein the number of memory cells in each of said groups is a power of 2 and at least 2,
- wherein in each of said groups, a first half of said memory cells jointly store said first half of said series of trace bits and a second half of said memory cells jointly store said second half of said series.
14. A method for Viterbi decoding of binary convolution codes, the decoding involving multiple stages each having states of a binary convolution code, the method comprising:
- determining trace bits for each of said states for each of said multiple stages;
- storing in consecutive order a single copy of trace bits of at least a portion of one stage jointly in a first register and a second register;
- for each of said multiple stages, storing said trace bits in consecutive order in a group of one or more memory cells of a storage device such that the trace bits of at least three of said stages are simultaneously maintained by said storage device; and
- tracing back, stage by stage, through said memory cells using said trace bits.
15. The method according to claim 14, wherein tracing back through said memory cells is performed in as few as two clock cycles per stage.
16. The method according to claim 14, wherein each of said stages has 16 states, each of said memory cells has a length of at least 16 bits and tracing back through said memory cells is performed in as few as two clock cycles per stage.
17. The method according to claim 14, wherein each of said stages has 32 states, each of said memory cells has a length of at least 32 bits and tracing back through said memory cells is performed in as few as two clock cycles per stage.
Type: Application
Filed: Jan 12, 2006
Publication Date: Jun 1, 2006
Inventors: Bat-Sheva Ovadia (Hod Hasharon), Boaz Israeli (Beer-Sheva)
Application Number: 11/330,128
International Classification: H03D 1/00 (20060101);