Devices and methods implementing polar codes

10541710 ยท 2020-01-21

Assignee

Inventors

Cpc classification

International classification

Abstract

An encoder for encoding K information bits into a code word of length N on the basis of a polar code of length N is provided, wherein N is a power of 2 and greater than or equal to N. The encoder comprises a memory storing a plurality of bit indices, which comprise a set of N frozen bit indices associated with the polar code of length N, a set of N/2 puncturing bit indices and/or a set of N/2 shortening bit indices and a processor configured to retrieve at least a subset of the plurality of bit indices from the memory, to encode the K information bits using the polar code of length N for obtaining encoded data of length N and to reduce the number of bits of the encoded data to the length N for obtaining the code word of length N.

Claims

1. An encoder for encoding K information bits into a code word of length N on the basis of a polar code of length N, wherein N is a power of 2 and greater than or equal to N, the encoder comprising: a memory storing a plurality of bit indices, wherein the plurality of bit indices comprise (a) a set of N frozen bit indices associated with the polar code of length N, (b) a set of N/2 puncturing bit indices, and/or (c) a set of N/2 shortening bit indices; a processor configured to retrieve at least a subset of the plurality of bit indices from the memory, to encode the K information bits using the polar code of length N for obtaining encoded data of length N and to reduce the number of bits of the encoded data to the length N for obtaining the code word of length N.

2. The encoder according to claim 1, wherein the plurality of bit indices further comprise (a) a set of M frozen bit indices associated with a polar code of length M, (b) a set of M/2 puncturing bit indices, and/or (c) a set of M/2 shortening bit indices, wherein M is a power of 2 and smaller than N, and wherein the processor is configured to encode the K information bits using the polar code of length M and to reduce the number of bits of the encoded data to the length N, when N is smaller than or equal to M.

3. The encoder according to claim 1, wherein the plurality of bit indices are stored in a look-up table of the memory.

4. The encoder according to claim 1, wherein the processor is configured to reduce the number of bits of the encoded data to the length N by puncturing the encoded data of length N.

5. The encoder according to claim 4, wherein the plurality of bit indices comprise the set of N frozen bit indices and wherein the retrieved at least one subset of the plurality of bit indices comprise the first NK frozen bit indices of the set of N frozen bit indices.

6. The encoder according to claim 5, wherein the plurality of bit indices further comprise the set of N/2 puncturing bit indices and wherein the retrieved subset of the plurality of bit indices further comprise the first P puncturing bit indices of the set of N/2 puncturing bit indices, wherein P=NN, and the processor is configured to reduce the number of bits of the encoded data to the length N by puncturing the bits of the encoded data of length N identified by the first P puncturing bit indices of the set of N/2 puncturing bit indices.

7. The encoder according to claim 1, wherein the processor is configured to reduce the length of the encoded data to the length N by shortening the encoded data of length N.

8. The encoder according to claim 7, wherein the plurality of bit indices comprise the set of N frozen bit indices, and the retrieved subset of the plurality of bit indices comprise the first NKS frozen bit indices of the set of N frozen bit indices, wherein S=NN.

9. The encoder according to claim 8, wherein the plurality of bit indices further comprise the set of N/2 shortening bit indices, and the retrieved subset of the plurality of bit indices further comprise the first S shortening bit indices of the set of N/2 shortening bit indices, and the processor is configured to reduce the length of the encoded data to the length N by shortening the bits of the encoded data of length N identified by the first S shortening bit indices of the set of N/2 shortening bit indices.

10. The encoder according to claim 1, wherein the plurality of bit indices comprise (a) a first set of N frozen bit indices related to the set of N/2 puncturing bit indices and (b) a second set of N frozen bit indices related to the set of N/2 shortening bit indices.

11. A method for encoding K information bits into a code word of length N on the basis of a polar code of length N, wherein N is a power of 2 and greater than or equal to N, the method comprising: storing a plurality of bit indices in a memory, wherein the plurality of bit indices comprise (a) a set of N frozen bit indices associated with the polar code of length N, (b) a set of N/2 puncturing bit indices, and/or (c) a set of N/2 shortening bit indices; retrieving at least a subset of the plurality of bit indices from the memory; encoding the K information bits using the polar code of length N for obtaining encoded data of length N; and reducing the number of bits of the encoded data to the length N for obtaining the code word of length N.

12. A decoder for decoding K information bits encoded in a code word of length N on the basis of a polar code of length N, wherein N is a power of 2 and greater than or equal to N, the decoder comprising: a memory storing a plurality of bit indices, wherein the plurality of bit indices comprise (a) a set of N frozen bit indices associated with the polar code of length N, (b) a set of N/2 puncturing bit indices, and/or (c) a set of N/2 shortening bit indices; a processor configured to retrieve at least a subset of the plurality of bit indices from the memory and to decode the K information bits encoded in the code word of length N using the polar code of length N for obtaining decoded data of dimension K.

13. The decoder according to claim 12, wherein the plurality of bit indices further comprise (a) a set of M frozen bit indices associated with a polar code of length M, (b) a set of M/2 puncturing bit indices, and/or (c) a set of M/2 shortening bit indices, wherein M is a power of 2 and smaller than N, and wherein the processor is configured to decode the K information bits encoded in the code word of length N using the polar code of length M, when N is smaller than or equal to M.

14. The decoder according to claim 12, wherein the plurality of bit indices are stored in a look-up table of the memory.

15. A method for decoding K information bits encoded in a code word of length N on the basis of a polar code of length N, wherein N is a power of 2 and greater than or equal to N, the method comprising: storing a plurality of bit indices in a memory, wherein the plurality of bit indices comprise (a) a set of N frozen bit indices associated with the polar code of length N, (b) a set of N/2 puncturing bit indices, and/or (c) a set of N/2 shortening bit indices; retrieving at least a subset of the plurality of bit indices from the memory; and decoding the K information bits encoded in the code word of length N using the polar code of length N for obtaining decoded data of dimension K.

16. The method according to claim 11, wherein the plurality of bit indices further comprise (a) a set of M frozen bit indices associated with a polar code of length M, (b) a set of M/2 puncturing bit indices, and/or (c) a set of M/2 shortening bit indices, wherein M is a power of 2 and smaller than N, and wherein the method further comprises: encoding the K information bits using the polar code of length M and to reduce the number of bits of the encoded data to the length N, when N is smaller than or equal to M.

17. The method according to claim 11, wherein the plurality of bit indices are stored in a look-up table of the memory.

18. The method according to claim 11, further comprising: reducing the number of bits of the encoded data to the length N by puncturing the encoded data of length N.

19. The method according to claim 15, wherein the plurality of bit indices further comprise (a) a set of M frozen bit indices associated with a polar code of length M, (b) a set of M/2 puncturing bit indices, and/or (c) a set of M/2 shortening bit indices, wherein M is a power of 2 and smaller than N, and wherein the method further comprises: decoding the K information bits encoded in the code word of length N using the polar code of length M, when N is smaller than or equal to M.

20. The method according to claim 15, wherein the plurality of bit indices are stored in a look-up table of the memory.

Description

BRIEF DESCRIPTION OF THE DRAWINGS

(1) Further embodiments of the invention will be described with respect to the following figures, wherein:

(2) FIG. 1 shows an example of non-systematic encoding of a polar code (a) and an example of a systematic encoding of a polar code (b);

(3) FIG. 2 shows the bit error rate as a function of the signal-to-noise-ratio in dB for different decoding schemes;

(4) FIG. 3 shows a schematic diagram illustrating the main idea of puncturing (a) and of shortening (b);

(5) FIG. 4 shows a schematic diagram of a communication system comprising an encoder according to an embodiment and a decoder according to an embodiment;

(6) FIG. 5 shows a schematic diagram of a method for encoding data using a polar code according to an embodiment;

(7) FIG. 6 shows a schematic diagram of a method for decoding data using a polar code according to an embodiment;

(8) FIG. 7 shows a schematic diagram of look-up tables for polar codes according to an embodiment;

(9) FIG. 8 shows schematic diagrams of a puncturing scheme (a) and of a shortening scheme (b) for polar codes according to an embodiment;

(10) FIG. 9 shows a look-up table comprising a set of frozen bit indices according to an embodiment;

(11) FIG. 10 shows a look-up table comprising a set of puncturing bit indices according to an embodiment;

(12) FIG. 11 shows a look-up table comprising a set of shortening bit indices according to an embodiment;

(13) FIG. 12 shows the performance of a code using a polar code according to an embodiment;

(14) FIG. 13 shows the performance of a code using a polar code according to an embodiment;

(15) FIG. 14 shows the performance of a code using a polar code according to an embodiment; and

(16) FIG. 15 shows the performance of a code using a polar code according to an embodiment.

(17) In the various figures, identical reference signs will be used for identical or at least functionally equivalent features.

DETAILED DESCRIPTION OF EMBODIMENTS

(18) In the following description, reference is made to the accompanying drawings, which form part of the disclosure, and in which are shown, by way of illustration, specific aspects in which the present invention may be placed. It will be appreciated that other aspects may be utilized and structural or logical changes may be made without departing from the scope of the present invention. The following detailed description, therefore, is not to be taken in a limiting sense, as the scope of the present invention is defined by the appended claims.

(19) For instance, it will be appreciated that a disclosure in connection with a described method may also hold true for a corresponding device or system configured to perform the method and vice versa. For example, if a specific method step is described, a corresponding device may include a unit to perform the described method step, even if such unit is not explicitly described or illustrated in the figures.

(20) Moreover, in the following detailed description as well as in the claims embodiments with different functional blocks or processing units are described, which are connected with each other or exchange signals. It will be appreciated that the present invention covers embodiments as well, which include additional functional blocks or processing units that are arranged between the functional blocks or processing units of the embodiments described below.

(21) Finally, it is understood that the features of the various exemplary aspects described herein may be combined with each other, unless specifically noted otherwise.

(22) FIG. 4 shows a schematic diagram of an encoder 400 and of a decoder 420, which are configured to communicate over a communication channel 410 using a polar code according to an embodiment. In the embodiment shown in FIG. 4, the encoder 400 comprises a processor 401, a memory 403 and a look-up table 403a which is stored in the memory 403. In the embodiment shown in FIG. 4, the decoder 420 comprises a processor 421, a memory 423 and a look-up table 423a which is stored in the memory 423.

(23) As will be described in further detail below, according to embodiments of the invention, a shorter code of length N of K information bits and rate R=K/N can be obtained from the mother polar code of length N=2.sup.n, wherein n=ceil(log.sub.2(N)), by puncturing, shortening, combined puncturing and shortening or may be determined based on the desired code parameters N and R, e.g. by a simple function.

(24) Thus in an embodiment, the encoder 400 is configured to encode K information bits into a code word of length N on the basis of a polar code of length N, wherein N is a power of 2 and greater than or equal to N. The memory 403 stores a plurality of bit indices, wherein the plurality of bit indices comprise a set of N frozen bit indices associated with the polar code of length N, a set of N/2 puncturing bit indices and/or a set of N/2 shortening bit indices. The processor 401 is configured to retrieve at least a subset of the plurality of bit indices from the memory 403, to encode the K information bits using the polar code of length N for obtaining encoded data of length N and to reduce the number of bits of the encoded data to the length N for obtaining the code word of length N.

(25) In an embodiment, the above mentioned techniques for encoding and decoding can require the use of look-up tables 403a and 423a, wherein the look-up tables 403a and 423a comprise sets of bit indices, according to the following rules. In the case of puncturing, a set of N frozen bit indices and a set of N/2 puncturing bit indices can be used. In the case of shortening, a set of N frozen bit indices and a set of N/2 shortening bit indices can be used. In the case of combined puncturing and shortening, a set of N frozen bit indices, a set of N/2 puncturing bit indices and a set of N/2 shortening bit indices can be used.

(26) In an embodiment, the shorter code of length N can be constructed by puncturing a mother polar code of length N according to the following rules: the frozen set comprises the first F=NK indices of the set of frozen bit indices and the puncturing set comprises the first P=NN indices of the set of puncturing bit indices.

(27) In an embodiment, the shorter code of length N can be constructed by shortening a mother polar code of length N according to the following rules: the frozen set comprises the first F=NKS indices of the set of frozen bit indices and the shortening set comprises the first S=NN indices of the set of shortening bit indices. The bits which are used for shortening are set to zero.

(28) In an embodiment, the set of N/2 puncturing bit indices and the set of N/2 shortening bit indices can be derived from the set of N frozen bit indices, wherein the set of N/2 puncturing bit indices corresponds to the first N/2 indices of the set of N frozen bit indices in bit-reversal order and the set of N/2 shortening bit indices corresponds to the inversion of the last N/2 indices of the set of N frozen bit indices in bit-reversal order.

(29) In an embodiment, the shorter code of length N can be constructed by a combination of puncturing and shortening of a mother polar code of length N according to the following rules: the frozen set comprises the first F indices of the set of frozen bit indices, the puncturing set comprises the first P indices of the puncturing bit indices and the shortening set comprises the first S indices of the shortening bit indices. The bits which are used for shortening are set to zero, while the values of F, P and S are chosen as a function of N and R in a pre-determined way, e.g. in such a way that the error-rate is minimized.

(30) In an embodiment, the encoder 400 is a systematic encoder 400 and the decoder 420 is a systematic decoder 420. Furthermore, the proposed techniques for generating a code of length N using a mother polar code of length N can be implemented using the systematic encoding scheme mentioned in the background section.

(31) In an embodiment, the look-up tables 403a and 423a storing the sets of frozen bit indices, the sets of puncturing bits indices and the sets of shortening bit indices can be determined off-line. A possible way to compute the look-up tables 403a and 423a is detailed in the descriptions of FIG. 9, FIG. 10 and FIG. 11.

(32) This invention proposes a solution for encoding and decoding information bits which requires only small storage memory 403 and allows to define the codes, as required by the encoder 400 and the decoder 420, by simple and fast look-up tables 403a and 423a. Furthermore, the look-up tables 403a and 423a can be generated off-line. Therefore, high complexity is affordable for the optimization of the look-up tables 403a and 423a without impacting the encoder 400 and decoder 420 in the actual application.

(33) FIG. 5 shows a schematic diagram of a method 500 for encoding data using a polar code according to an embodiment. In this embodiment, the method 500 for encoding K information bits into a code word of length N on the basis of a polar code of length N, wherein N is a power of 2 and greater than or equal to N, comprises the steps of storing 502 a plurality of bit indices in a memory 403, wherein the plurality of bit indices comprise a set of N frozen bit indices associated with the polar code of length N, a set of N/2 puncturing bit indices and/or a set of N/2 shortening bit indices, retrieving 504 at least a subset of the plurality of bit indices from the memory 403, encoding 506 the K information bits using the polar code of length N for obtaining encoded data of length N and reducing 508 the number of bits of the encoded data to the length N for obtaining the code word of length N.

(34) FIG. 6 shows a schematic diagram of a method 600 for decoding data using a polar code according to an embodiment. In this embodiment, the method 600 for decoding K information bits encoded in a code word of length N on the basis of a polar code of length N, wherein N is a power of 2 and greater than or equal to N, comprises the steps of storing 602 a plurality of bit indices in a memory 423, wherein the plurality of bit indices comprise a set of N frozen bit indices associated with the polar code of length N, a set of N/2 puncturing bit indices and/or a set of N/2 shortening bit indices, retrieving 604 at least a subset of the plurality of bit indices from the memory 423 and decoding 606 the K information bits encoded in the code word of length N using the polar code of length N for obtaining decoded data of dimension K.

(35) FIG. 7 shows a schematic diagram of several look-up tables 403a, 403b, 403c and 403d stored in a memory 403. In this embodiment, it is assumed that for each length of a mother polar code N, from N=64 to N=2.sup.n, n being a natural number, the look-up tables 403a, 403b, 403c and 403d comprising frozen bit indices (F.sub.n.sup.p and F.sub.n.sup.s), puncturing bit indices (P.sub.n) and shortening indices (S.sub.n) are provided. In this embodiment, the dimension of F.sub.n.sup.p and F.sub.n.sup.s is N and the dimension of both P.sub.n and S.sub.n is N/2. Therefore, for every value of n required by the system, i.e. for every n such that log.sub.2(N.sub.min)<n<log.sub.2(N.sub.max), one of the look-up tables 403a, 403b, 403c and 403d can be stored in the memory 403. The stored look-up table, e.g. 403a, comprises two sets of indices for puncturing (F.sub.n.sup.p and P.sub.n) and two sets of indices for shortening (F.sub.n.sup.s and S.sub.n). In particular, for puncturing, a set of F.sub.n.sup.p frozen bit indices of size 2n, comprising indices from 1 to 2.sup.n, and a set of P.sub.n puncturing bit indices of size 2.sup.n-1, comprising indices from 1 to 2.sup.n, can be stored in the memory 403. For shortening, a set of F.sub.n.sup.s frozen bit indices of size 2n, comprising indices from 1 to 2.sup.n, and a set of S.sub.n shortening bit indices of size 2.sup.n-1, comprising indices from 1 to 2.sup.n, can be stored in the memory 403. Therefore, for every value of n, four sets of bit indices can be stored in the memory 403, resulting in 32.sup.n bits being stored in the memory 403. Generalizations including combined sets of indices for shortening and puncturing follow along the same lines.

(36) FIG. 8 shows a schematic diagram of a puncturing scheme (a) and of a shortening scheme (b) for polar codes according to an embodiment. In order to generate a (N, K) punctured polar code with N2.sup.n, the length of the mother polar code N=2.sup.n can be calculated, wherein n=ceil(log.sub.2(N)) and K is the dimension of the information set. In an embodiment, the set of F.sub.n.sup.p frozen bit indices and the set of P.sub.n puncturing bit indices can be read in the memory 403. In this embodiment, the first NK indices of F.sub.n.sup.p represent the elements of the frozen set, while the remaining K indices correspond to the bit indices of the information set. The K information bits can be encoded using a systematic polar encoder 400 using the (N, K) mother polar code. After the encoding, the bits can be punctured to reduce the length of the code word. The first P=NN entries of P.sub.n are selected as the positions of the bits to be punctured, as schematically shown in (a). Then, the bits in the punctured position are discarded. After the puncturing, the remaining N bits are transmitted. At the receiver, the log-likelihood ratios (LLR) of the received code bits are calculated. Afterwards, a decoder 420 for the (N, K) mother polar code is run, where the LLR values of the bits in the punctured positions can be set to zero.

(37) In (b), a shortening scheme is shown according to an embodiment in order to generate a (N, K) shortened polar code with N2.sup.n, the length of the mother polar code being N=2.sup.n, wherein n=ceil(log.sub.2(N)). The set of F.sub.n frozen bit indices and the set of S.sub.n shortening bit indices can be read in the memory 403. The first NKS indices of F.sub.n.sup.s correspond to the elements of the set comprising the frozen bit indices, where S=NN. The remaining K+S indices represent the indices of the information bits of the (N, K+S) mother polar code. The first S indices of S.sub.n represent a subset of the information set, and can be padded with zeros, while the K information bits can be put in the remaining K indices of the set of the K+S information bits. The K+S information bits obtained in the previous stage can be encoded using a systematic polar encoder 400 using the (N, K+S) mother polar code. After the encoding, the encoded bits can be shortened in order to reduce the length of the message. The first S=NN entries of S.sub.n can be selected as the positions of the bits to be shortened. Afterwards, the bits in the shortened position can be discarded. After the shortening, the remaining N code bits are transmitted. At the receiver, the LLRs of the received code bits are calculated. A decoder 420 for the (N, K+S) mother polar code is run, where the LLR values of the bits in the shortened positions can be set to very high values, indicating that these bits are perfectly known.

(38) FIG. 9 shows a set of frozen bit indices according to an embodiment. In this embodiment, the set F.sub.9 of frozen bit indices of a mother polar code of length N=512 (n=9) is generated running a density evolution (DE) algorithm with Gaussian approximation over an AWGN channel 410 at 1 dB of SNR.

(39) FIG. 10 shows a set of puncturing bit indices according to an embodiment. In this embodiment, the set P.sub.9 of frozen bit indices refers to a mother polar code of length N=512 (n=9). The set P.sub.9 of puncturing bit indices is generated using the first 256 entries of F.sub.9, shown in FIG. 9, in bit-reversal order.

(40) FIG. 11 shows a set of shortening bit indices according to an embodiment. In this embodiment, the set S.sub.9 of shortening bit indices refers to a mother polar code of length N=512 (n=9). The set S.sub.9 of shortening bit indices is generated using the inversion of the last 256 entries of F.sub.9, shown in FIG. 9, in bit-reversal order.

(41) FIG. 12 shows the performance of a code using a polar code according to an embodiment. In particular, it shows the block-error-rate of different decoding schemes as a function of the signal-to-noise-ratio (E.sub.b/N.sub.0) in dB. In this embodiment, the code has a length N=320 and a rate R=0.5, while the mother polar code has a length N=512=2.sup.9, i.e. n=9. Furthermore, the polar code uses a CRC of length 24 bits, and it is decoded using a list successive-cancellation (LSC) decoder 420 with list length L=32. The solid lines refer to the performances of the decoding schemes according to this invention using the set of frozen bit indices shown in FIG. 9, the set of puncturing bit indices shown in FIG. 10 and the set of shortening bit indices shown in FIG. 11. In this embodiment, the sets of frozen bit indices are generated using the same method for both shortening and puncturing, therefore there is a unique set of frozen bit indices, namely F.sub.9.sup.p=F.sub.9.sup.s=F.sub.9. In this embodiment, the look-up table 423a comprise the set of frozen bit indices F.sub.9, the set of punctured bit indices P.sub.9 and the set of shortened bit indices S.sub.9.

(42) The dashed lines refer to results making use of the decoding schemes of the state-of-the-art LTE-Turbo solution (LTE-Turbo case) and to the results making use of the decoding schemes shown in the aforementioned work by Wang et al. (case [4]) and by Kai et al. (case [6]).

(43) FIG. 13 shows the performance of a code using a polar code according to an embodiment.

(44) This case is identical to the one described in FIG. 12, with the exception that, in this case, the dimension of the information bits is K=104, therefore the code has a rate R=0.325.

(45) FIG. 14 shows the performance of a code using a polar code according to an embodiment.

(46) This case is identical to the one described in FIG. 12, with the exception that, in this case, the dimension of the information bits is K=64, therefore the code has a rate R=0.2.

(47) FIG. 15 shows the performance of a code using a polar code according to an embodiment.

(48) This case is identical to the one described in FIG. 12, with the exception that, in this case, the dimension of the information bits is K=216, therefore the code has a rate R=0.675.

(49) The results shown in FIGS. 12 to 15 highlight the following facts. In most cases, the punctured and shortened polar codes generated from the set of indices shown in FIG. 9, FIG. 10 and FIG. 11 outperform the state-of-the-art LTE-Turbo codes of the same rate. Moreover, the performance loss of the polar codes generated from the set of indices shown in FIG. 9, FIG. 10 and FIG. 11 is generally negligible compared to the highly optimized and complex methods described in previous state-of-the-art solutions, e.g. in the aforementioned work by Wang et al. (case [4] in the plots) and in the aforementioned work by Kai et al. (case [6] in the plots). They can even have the same performance in particular cases, e.g. for R=0.2 and R=0.675. Therefore, the error-rate performance of polar codes defined in this invention remains comparable to existing solutions, where the individual codes are optimized for the desired length and rate. Furthermore, the punctured polar codes outperform the shortened polar codes for low rates, while the contrary happens for high rates. The same behavior was also observed in the aforementioned works of Wang et al. and by Kai et al. These facts give the possibility to choose the best scheme between puncturing and shortening at the encoder 400 depending on the target code rate R=K/N. In particular only the best look-up tables 403a and 423a can be stored for a given regime, providing further gains in terms of memory consumption for storing generating tables in the memories 403 and 423.

(50) While a particular feature or aspect of the disclosure may have been disclosed with respect to only one of several implementations or embodiments, such feature or aspect may be combined with one or more other features or aspects of the other implementations or embodiments as may be desired and advantageous for any given or particular application. Furthermore, to the extent that the terms include, have, with, or other variants thereof are used in either the detailed description or the claims, such terms are intended to be inclusive in a manner similar to the term comprise. Also, the terms exemplary, for example and e.g. are merely meant as an example, rather than the best or optimal. The terms coupled and connected, along with derivatives may have been used. It should be understood that these terms may have been used to indicate that two elements cooperate or interact with each other regardless whether they are in direct physical or electrical contact, or they are not in direct contact with each other.

(51) Although specific aspects have been illustrated and described herein, it will be appreciated by those of ordinary skill in the art that a variety of alternate and/or equivalent implementations may be substituted for the specific aspects shown and described without departing from the scope of the present disclosure. This application is intended to cover any adaptations or variations of the specific aspects discussed herein.

(52) Although the elements in the following claims are recited in a particular sequence with corresponding labeling, unless the claim recitations otherwise imply a particular sequence for implementing some or all of those elements, those elements are not necessarily intended to be limited to being implemented in that particular sequence.

(53) Many alternatives, modifications, and variations will be apparent to those skilled in the art in light of the above teachings. Of course, those skilled in the art readily recognize that there are numerous applications of the invention beyond those described herein. While the present invention has been described with reference to one or more particular embodiments, those skilled in the art recognize that many changes may be made thereto without departing from the scope of the present invention. It is therefore to be understood that within the scope of the appended claims and their equivalents, the invention may be practiced otherwise than as specifically described herein.