An iterative decoder for decoding a code block comprises a computation unit configured to perform forward and backward recursions over a code block or a code sub-block in each decoding iteration. A first forward/backward decoding scheme is used in a first iteration and a second forward/backward decoding scheme is used in a second iteration. The first and second decoding schemes are different in view of forward and backward processing.
|
1. An iterative decoder for decoding a code block, comprising:
a computation unit configured to perform forward and backward recursions over a code block or a code sub-block in each decoding iteration, wherein a first forward/backward decoding scheme is used in a first iteration and a second forward/backward decoding scheme is used in a second iteration,
wherein the first and second decoding schemes are different in view of forward and backward processing and the second iteration is later than the first iteration.
13. A method of decoding a code block by iteration, comprising:
performing forward and backward recursions over the code block or a code sub-block in each decoding iteration using a computation unit, comprising:
using a first forward/backward decoding scheme in a first iteration; and
using a second forward/backward decoding scheme in a second iteration,
wherein the first and second decoding schemes are different in view of forward and backward processing and the second iteration is later than the first iteration.
10. An iterative decoder for decoding a code block, comprising:
a computation unit configured to perform forward and backward recursions over the code block or a code sub-block in each decoding iteration, wherein a scheduling of forward and backward recursions is varied from one iteration to a later iteration, wherein forward and backward recursions are interchanged from the one iteration to the later iteration, and
a memory in which state metric values calculated in said one iteration and used for initializing a forward or backward recursion in said later iteration are stored.
21. A method of decoding a code block by iteration, comprising:
performing forward and backward recursions over the code block or a code sub-block in a first decoding iteration according to a first forward/backward decoding scheme using a computation unit;
calculating state metric values in the first iteration using the computation unit;
storing the state metric values in a memory using the computation unit;
reading the stored state metric values using the computation unit;
initializing a forward or backward recursion in the second iteration by using the state metric values read from the memory using the computation unit;
performing forward and backward recursions over the code block or a code sub-block in the second decoding iteration according to a second forward/backward decoding scheme which is different in schedule to the first decoding scheme using the computation unit;
performing the forward and backward recursions over the code block or code sub-block according to a first decoding scheme in the first iteration;
deriving a second decoding scheme from the first decoding scheme by interchanging backward and forward recursions; and
performing the forward and backward recursions over the code block according to the second decoding scheme in the second iteration.
2. The iterative decoder of
3. The iterative decoder of
4. The iterative decoder of
5. The iterative decoder of
6. The iterative decoder of
7. The iterative decoder of
the iterative decoder comprises at least a further computation unit,
the code block is partitioned in at least a first and a second code sub-block, and
each computation unit is configured to perform forward and backward recursions on a specific one of the first and second code sub-block.
8. The iterative decoder of
11. The iterative decoder of
12. The iterative decoder of
14. The method of
calculating state metric values in the first iteration for at least one of a forward or backward recursion; and
initializing at least one of a forward or backward recursion in the second iteration with the state metric values.
15. The method of
16. The method of
initializing a forward recursion in the first iteration by using state metric values calculated in a previous iteration; and
initializing a backward recursion in the second iteration by using state metric values calculated in the first iteration.
17. The method of
running one of the forward or backward recursions continuously over the code block or code sub-block; and
running the other of the forward or backward recursions discontinuously over a plurality of window sections of the code block or code sub-block.
18. The method of
running the forward and the backward recursions continuously over the code block or the code sub-block.
19. The method of
partitioning the code block in at least a first and a second code sub-block;
performing forward and backward recursions on the first code sub-block; and concurrently
performing forward and backward recursions on the second code sub-bock.
22. The method of
23. The method of
initializing an acquisition phase of a forward recursion in the first iteration by using state metric values calculated in a previous iteration; and
initializing an acquisition phase of a backward recursion in the second iteration by using the state metric values calculated in the first iteration.
|
The invention relates to iterative decoding, and more particularly to the technique of iterative decoding a code block using forward and backward recursions.
Forward error correction (FER) codes such as turbo codes, for example, are used in many of today's communication devices because of their high error correction capabilities. Unfortunately, however iterative decoding of an FER code in a decoder using forward and backward recursions may require a large amount of memory and/or complex hardware, and may lead to computational expense and latency.
Several approaches are known to improve the performance of an iterative decoder. Max-Log-MAP algorithms are used to reduce the computational complexity. The sliding window technique may be applied to limit the amount of stored data and to reduce latency. Parallel decoder architectures allow for high throughput. Notwithstanding, the reduction of memory space, latency and computational effort remains an ongoing challenge.
For these and other reasons there is a need for the present invention.
The accompanying drawings are included to provide a further understanding of embodiments and are incorporated in and constitute part of this specification. The drawings illustrate embodiments and together with the description serve to explain principles of embodiments. Other embodiments and many of the intended advantages of embodiments will be readily appreciated as they will become better understood by reference to the following detailed description. Like reference numerals designate corresponding similar parts.
In the following detailed description, reference is made to the accompanying drawings, which form a part thereof, and in which are shown by way of illustration specific embodiments in which the invention may be practiced. In the drawings, like reference numerals are generally utilized to refer to like elements throughout the description. In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of one or more aspects of embodiments of the invention. It may be evident, however, to one skilled in the art that one or more aspects of the embodiments of the invention may be practiced with a lesser degree of these specific details. In other instances, known structures and devices are shown in a simplified representation in order to facilitate describing one or more aspects of the embodiments of the invention. The following description is therefore not to be taken in a limiting sense, and the scope of the invention is defined by the appended claims.
The various aspects summarized may be embodied in various forms. The following description shows by way of illustration various combinations and configurations in which the aspects may be practiced. It is understood that the described aspects and/or embodiments are merely examples, and that other aspects and/or embodiments may be utilized and structural and functional modifications may be made without departing from the scope of the present disclosure. In particular, it is to be understood that the features of the various exemplary embodiments described herein may be combined with each other, unless specifically noted otherwise.
As employed in this specification, the terms “coupled” and/or “electrically coupled” are not meant to mean that the elements must be directly coupled together; intervening elements may be provided between the “coupled” or “electrically coupled” elements.
The iterative decoders described herein may be employed in devices of wireless communication systems, in particular in receivers and transceivers. They may be employed in base stations as well as in mobile stations.
The iterative decoders described herein may be configured to decode any kinds of error correcting codes for which iterative decoding applying a forward recursion and a backward recursion may be used. In particular, the iterative decoders described herein may be configured to decode convolutional codes and/or concatenated codes, for instance, parallely concatenated convolutional codes such as turbo codes, for example. Such decoders may be used in telecommunications systems based on the UMTS (Universal Mobile Telecommunications System) standard, HSDPA (High Speed Downlink Packet Access) or HSUPA (High Speed Uplink Packet Access), and long term evolution (LTE), among others.
By way of example,
The decoder 1 decodes the code blocks received at input 3. Typically, a code block is represented by sequence of soft values which comprise systematic information and parity information. The systematic information corresponds to the original transmitted data sequence. The parity information corresponds to parity information generated by one or more encoders (e.g. convolutional encoders) at the transmitter.
In iterative decoding, decoding results such as, for example, the estimates provided at output 5 are fed back to the input 4 of decoder 1 and are used as a-priori information in the next decoding iteration. This iteration is continued until a maximum number of allowed iterations is reached or another stopping criterion is satisfied.
The estimates provided at output 5 are input into the termination stage 2. When the stopping criterion is satisfied, the iterative decoding process is stopped and the estimates of the systematic data are output from the termination stage 2. By way of example, a stopping criterion may be satisfied if a sufficient amount of convergence of estimates generated in consecutive iterations at output 5 is reached.
Decoder 1 may be designed as a symbol-by-symbol a-posteriori probability (APP) decoder. APP decoders operate on a trellis diagram. A trellis diagram is a representation of the encoder states versus discrete time. By way of example, decoder 1 may be designed as SISO (Soft-Input-Soft-Output) decoder.
The iterative decoder 200 may further comprise an interleaver 204, a de-interleaver 205 and a termination stage 206. The termination stage 206 may be similar to the termination stage 2 in iterative decoder 100 of
The first component decoder 201 receives at input 3 systematic data and parity data produced by a turbo encoder in the transmitter and reconstructed by a demodulator (not shown) in the receiver. Since the signal received at the receiver is usually distorted by noise and interference, the demodulator can only provide estimates of the systematic data and parity data generated by the turbo encoder. Typically, these estimates are provided to the turbo decoder 200 in the form of log-likelihood ratios (LLRs). LLRs express the ratio between the probabilities of the transmitted bits being 0 and being 1, given the received analog signal.
The first component decoder 201 works on the sequence of systematic data and parity data received at input 3 in natural order. The first component decoder 201 computes a-posteriori probabilities of the transmitted systematic data from the LLRs of the systematic data and associated parity data received at input 3, and from the a-priori information received at input 4. The second component decoder 201 computes a-posteriori probabilities of the interleaved systematic data from the LLRs received at a-priori information input 4 and associated interleaved parity data received at input 3. Thus, the output of the interleaver 203 is used as a-priori information in the second component decoder 202.
In subsequent iterations each component decoder 201, 202 uses the so-called extrinsic information output by the other component decoder 201, 202 in the preceding half-iteration as a-priori information.
It is to be noted that
One algorithm to produce the APP is the so-called Bahl, Cocke, Jelinek, and Raviv (BCJR) algorithm. According to the theoretical BCJR algorithm, the APP decoder 1, 201, 202 computes forward metrics a and backward metrics 13 and then the output metrics (i.e. the sequence of reliability data; for decoder 1, this sequence corresponds to the estimates of the original transmitted data sequence). The α- and β-metrics are gathered in a forward and backward recursion, respectively.
As illustrated in
In one embodiment the decoders 1, 201, 202 may use the so-called Log-MAP algorithm, which is a simplified version of the BCJR algorithm. The Log-MAP algorithm basically performs the same operations as the BCJR algorithm but in the logarithmic domain, that is multiplications are substituted with additions. The Log-MAP algorithm yields the same performance as the BCJR algorithm but with reduced complexity.
In one embodiment the decoders 1, 201, 202 use the so-called Max-Log-MAP algorithm. The Max-Log-MAP algorithm is an approximated version of the Log-MAP algorithm. The Max-Log-MAP algorithm operates in the logarithmic domain and avoids logarithmic and exponential operations at the expense of a few tenths of a dB degradation in error performance.
By way of example, in the Max-Log-MAP algorithm, the α- and β-metrics are computed in a forward and a backward recursion, respectively, according to
where max is a maximum selection. Here, the state metrics αkm and βk+1m′ refer to the encoder states at trellis index k and the branch metrics γk,k+1m,m′ refer to state transitions m→m′ between encoder states m and m′. Note that for a rate 1/n convolutional encoder one information symbol and n data symbols are associated with the index k.
In one embodiment the decoder 1, 201, 202 uses a sliding-window approach. The sliding-window approach serves to limit the amount of stored data and thus the memory space required in decoder 1, 201, 202. According to the sliding-window approach, the code block or, if parallel decoder architectures are used, a code sub-block is divided into several windows and a decoding algorithm such as e.g. Log-MAP or Max-Log-MAP is applied consecutively on each of the windows. While the forward recursion frec is typically unchanged with respect to the “perfect” implementation as explained in conjunction with
The left hand side of
More specifically, as shown in the left hand side of
The forward recursion frec starts at time t0 at the beginning of the initial window W1. At the same time t0, an acquisition phase of the first backward recursion brec0 is started. At time t1, the forward recursion frec reaches the end of the initial window W1 and the acquisition phase of the first backward recursion brec0 ends. Between time t1 and time t2, the continuous forward recursion frec is continued to process the second window W2 and the first backward recursion brec0 is continued to operate on the first window W1. During the time interval t1 to t2, decoding results res1 (i.e. LLRs) for the first window W1 are computed and output.
This process is continued until the last window of the code block (or code sub-block) is reached and decoded. Thus, while the forward recursion frec is operated continuously over the entire code block (or code sub-block), the backward recursions brec0, brec1, brec2, . . . are scheduled intermittently to calculate the backward metrics and decoding results res1, res2, res3, . . . for window W1, W2, W3, . . . , respectively.
It is to be noted that the acquisition phases of the window-based backward recursions brec0, brec1, brec2, . . . may have variable length. In
The quality of the backward metrics computation depends on the length of the acquisition phase and on the initialization of the window-wise backward recursions. More specifically, the state metric initialization values used at the beginning of the backward recursions brec0, brec1, brec2, . . . (i.e. at the start of the acquisition phase, if any) have an influence on the reliability of the backward state metrics calculated in the backward recursion after the acquisition phase. Initialization of the backward recursions brec0, brec1, brec2, . . . is indicated in
The diagram in the right hand portion of
Generally speaking, the forward and backward recursions are rescheduled from iteration i to iteration i+1. The recursion which is performed “perfectly” and the “imperfect” recursion may be exchanged from iteration i to iteration i+1. More specifically, whilst the recursion which is performed “perfectly” is run in the direction of increasing trellis indices k in iteration i, it is run in the direction of decreasing trellis indices k in iteration i+1. Vice versa, whilst the recursion which is performed “imperfectly” is run in the direction of decreasing trellis indices k in iteration i, it is run in the direction of increasing trellis indices k in iteration i+1. Thus, the forward/backward decoding scheme used in iteration i and the forward/backward decoding scheme used in iteration i+1 are different in view of forward and backward processing. In particular, these decoding schemes may be inverse in view of forward and backward processing.
In one embodiment, the state metrics estimated during a previous iteration i are used in the next iteration i+1 for initializing the “imperfect” window-based recursions. If the window-based recursions contain an initial acquisition phase, it is the acquisition phase of the window-based recursions which is initialized by the state metrics of same recursion type (i.e. forward or backward) estimated and stored in the previous iteration i.
More specifically, as shown in the left hand portion of
It is to be noted that the start time t0 of the first forward recursion frec0 depends on the length of the acquisition phase. If the acquisition phase is longer than WS, the window-based forward recursion frec0 is started earlier, otherwise, if the acquisition phase is shorter than WS, the forward recursion frec0 is started later—it may even be started at t1, if the first window-based forward recursion frec0 is implemented without acquisition phase. This applies to all forward recursions frec0, frec1, frec2, . . . operated in iteration i+1.
Without loss of generality and for ease of explanation, it is assumed in the following that the acquisition phase of the window-based recursions (forward or backward) is equal to window size WS. The scheduling of the decoding depicted in
In iteration i+1 at time t0 the first forward recursion frec0 is continued in window W6 and concurrently, decoding results res6 (LLRs) for window W6 are calculated. This scheme is continued as depicted in the right hand portion of
Due to the concept of changing the decoding scheme from iteration i to iteration i+1 in view of recursion directions, the state metrics used for initialization of an “imperfect” window-based recursion in iteration i+1 are calculated in iteration i on the basis of a “perfect” continuous recursion. Therefore, the next iteration initialization (NII) technique as applied in one embodiment is always based on highly reliable state metric data.
Iteration i+2 is may then be performed according to the decoding scheme used in iteration i. That is, the forward recursion is again continuous and “perfect”, and refined forward state metrics for subsequent iterations are saved. The backward recursion is again window-based and “imperfect”, but highly reliable backward state metrics from a previous “perfect” backward recursion are available to initialize the border state metrics at the acquisition phases of the backward recursions. In other words, in iteration i+2, the NII approach may again be applied and uses the backward metrics stored in the “perfect” backward recursion in previous iteration i+1.
In one embodiment the variation of the forward/backward decoding scheme is not performed every iteration. By way of example, it is possible to process a first number of iterations according to a first decoding scheme (e.g. as exemplified in the left hand portion of
Further, even if the decoding scheme is varied or inverted iteration-by-iteration, it is to be noted that the forward/backward metrics used for initialization in an actual iteration do not necessarily need to be computed and stored during the preceding iteration. It is also possible that forward/backward metrics which are computed and stored a plurality of iterations earlier are used in an actual iteration. Also in this embodiment, the forward/backward metrics used in an actual iteration have been computed during an earlier iteration in which the different or inverse (in view of the scheduling of forward and backward recursions) decoding scheme was operated. As a result, also in this case a “perfect” recursion is exploited to generate reliable state metrics for initialization of the “imperfect” actual recursion.
By using the proposed solution, forward and backward recursions are always performed almost perfectly. In fact, apart from the first iteration (where, for the window-based recursion, the state metrics of the acquisition windows are equiprobably initialized), the window-based recursion is initialized with perfectly computed state metrics from a previous iteration. Even though these values are computed at a previous iteration, which causes a little lack in reliability, it is possible to show that this lack almost disappears after a few iterations.
It is to be noted that the combination of decoding scheme variation with next (or later) iteration initialization during iterative decoding significantly reduces the dependency of the performance on the window size, i.e. smaller window sizes (or smaller acquisition lengths) can be chosen for the combined scheme compared to known schemes to achieve the same performance. A small window size (e.g. 20-130, more specifically 20-70, still more specifically 20-40) can be used to achieve performance near the performance available with the non-window-based Max-Log-MAP algorithm for practical code rate 0.98). Small window sizes can drastically reduce the required memory space of the iterative decoder.
Further, the concepts explained above allow to use very short acquisition phases even for high code rates. The shorter the acquisition phase, the less computational effort and power consumption is needed. As mentioned earlier, it may even be possible to eliminate an acquisition phase in the window-based recursion.
In one embodiment a multiple worker (e.g. multiple computation units such as multiple processors) implementation is used. Multiple workers are especially useful for high throughput solutions. When multiple workers are considered, the code block is sub-divided into adjacent code sub-blocks of data. Each worker processes one sub-block in parallel with the other workers, and the sub-blocks may be considered as independent codeword segments within an iteration. Multiple worker solutions are implemented by parallel decoder architectures in which the iterative decoder structure for each worker is identical to the one described above for a single worker. That is, according to one or more embodiment, each worker may use iterative decoder 100 and/or iterative decoder 200 as illustrated in
More specifically, in one embodiment illustrated in
In iteration i iterative decoding uses a “perfect” continuous forward recursion and an “imperfect” window-based backward recursion for both workers P1, P2. For the sake of brevity and in order to avoid reiteration, reference is made to the description of the corresponding decoding scheme illustrated in the left hand portion of
In the embodiment shown in
Decoding scheme variation from iteration i to iteration i+1 (or, more generally, from a previous iteration to a later iteration) may be performed in the same way as described above with respect to the one worker solution. Further, the storage of state metrics computed in a “perfect” continuous recursion and the use of these stored state metrics in a later “imperfect” window-based recursion of the same type correspond to the aforementioned techniques used in the single worker solution. In this respect, all features and embodiments disclosed for the single worker solution may likewise be applied to the multiple worker solution.
The iterative decoding process for one, multiple or each code sub-block(s) SBx may comprise the concepts of decoding scheme variation and NII. In iteration i=1, a decoding scheme similar to the decoding scheme illustrated in
In one embodiment, only one acquisition unit is used. By way of example, as illustrated in
As mentioned earlier, the meaning of the term NII as used throughout the description may also comprise “later iteration initialization”, i.e. in general, the iteration which is initialized is either the next or a later iteration.
In one embodiment, the NII concept may further comprise the initialization of multiple iterations. By way of example, in
In one embodiment, code sub-blocks SBx of different x may be processed by using different decoding schemes. By way of example, at i=1, code sub-blocks SB1 and SB3 may be processed as shown in
In
In one embodiment, the first decoding schemes used in a first iteration and the second decoding scheme used in a second iteration are different in view of the structure of the decoding schemes. By way of example, in a first iteration, a first decoding scheme of a first structure such as the ladder-structure scheme illustrated in
More specifically, in iteration i a first continuous forward recursion frec and a subsequent continuous backward recursion brec are operated by both workers (e.g. processors). In iteration i+1 the decoding scheme is varied or, more specifically inverted in view of forward and backward processing, i.e. the recursion directions are interchanged. Thus, in iteration i+1 a first continuous backward recursion brec and a subsequent continuous forward recursion frec are operated.
Here, the variation of the decoding scheme from iteration i to iteration i+1 allows the recursion in iteration i+1 to be initialized as follows. The backward recursion brec in sub-block SB2 is deterministically initialized thanks to the termination bits at the end of the code block. The backward recursion brec in sub-block SB1 is a mere continuation of the backward recursion brec of sub-block SB2 in iteration i and is therefore perfectly initialized. The forward recursion frec in sub-block SB2 is initialized by using forward metrics computed and stored at the end of the forward recursion frec in sub-block SB1 in the preceding iteration i. Finally, the forward recursion frec in sub-block SB1 is deterministically initialized as the initial trellis state is known. Thus, even in the case if a non-window-based decoding scheme, the concept of decoding scheme variation (e.g. inversion) from one iteration to another iteration may considerably improve the decoding performance.
In one embodiment the decoding scheme used in iteration i+2 is identical to the decoding scheme used in iteration i, i.e. the inversion of the decoding scheme is performed iteration-by-iteration. In this case, in iteration i+2, the forward recursion frec in sub-block SB2 is a mere continuation of the forward recursion frec in sub-block SB1 in previous iteration i+1, and the backward recursion in sub-block SB1 is initialized by backward metrics computed by the backward recursion brec in sub-block SB2 in iteration i+1 at the lowest trellis index of sub-block SB2.
Thus, in one embodiment state metrics computed in a recursion for sub-block SB1 in iteration i are used to initialize a recursion in sub-block SB2 in a later iteration (e.g. next iteration i+1), and state metrics computed in a recursion in sub-block SB2 in iteration i are used to initialize a recursion in sub-block SB1 in a later iteration (e.g. next iteration i+1). In other words, the recursion scheme variation during iterative decoding may result in that sub-blocks are no longer decoded independently of each other. In contrast, state metric information is exchanged between sub-blocks from one iteration to another iteration.
It is to be noted that all features described herein in the context of decoding a code block in single worker solutions may be applied to decoding a code sub-block in multiple worker solutions. Further, all features described herein in the context of decoding a code sub-block in multiple worker solutions may be used for decoding a code block in single worker solutions.
In general, in one or more embodiments described herein, the required storage memory space may be substantially reduced resulting in chip area and power consumption reduction of the chip set. In this respect, it is to be noted that the reduction in window size WS does not only allow to reduce the amount of state metrics to be stored, but also determines the cache sizes for branch metrics, read/write addresses, etc.
Further, the design of the window size WS may thus be chosen to be considerably smaller than in conventional designs.
Still further, latency may be reduced. The initial latency at each iteration in most window-based algorithms is a multiple of window size WS. Therefore, the overall decoding latency may also be significantly reduced by the concepts described herein compared to conventional solutions that use larger window sizes WS to attain the same BLER TPut performance (BLER: block error rate; TPut: throughput). Alternatively, for a given decoding latency, a window size reduction leads to a smaller required clock rate of the decoding hardware which is beneficial in terms of chip area and power consumption.
In addition, while a particular feature or aspect of an embodiment of the invention may have been disclosed with respect to only one of several implementations, such feature or aspect may be combined with one or more other features or aspects of the other implementations as may be desired and advantageous for any given or particular application. This application is intended to cover any adaptations or variations of the specific embodiments discussed herein, and the invention is intended to be limited only by the claims and the equivalence thereof.
Berkmann, Jens, Huebner, Axel, Fresia, Maria
Patent | Priority | Assignee | Title |
Patent | Priority | Assignee | Title |
7200799, | Apr 30 2001 | Regents of the University of Minnesota | Area efficient parallel turbo decoding |
7346833, | Nov 05 2002 | MEDIATEK, INC | Reduced complexity turbo decoding scheme |
7584407, | Jan 20 2004 | Samsung Electronics Co., Ltd. | Decoder and method for performing decoding operation using map algorithm in mobile communication system |
7836376, | Nov 15 2005 | STMICROELECTRONICS INTERNATIONAL N V | Method and apparatus for encoding blocks of data with a blocks oriented code and for decoding such blocks with a controllable latency decoding, in particular for a wireless communication system of the WLAN or WPAN type |
7849377, | Dec 22 2003 | Koninklijke Philips Electronics N V | SISO decoder with sub-block processing and sub-block based stopping criterion |
20020097816, | |||
20030101402, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Feb 08 2011 | Intel Mobile Communications GmbH | (assignment on the face of the patent) | / |
Date | Maintenance Fee Events |
Date | Maintenance Schedule |
Sep 24 2016 | 4 years fee payment window open |
Mar 24 2017 | 6 months grace period start (w surcharge) |
Sep 24 2017 | patent expiry (for year 4) |
Sep 24 2019 | 2 years to revive unintentionally abandoned end. (for year 4) |
Sep 24 2020 | 8 years fee payment window open |
Mar 24 2021 | 6 months grace period start (w surcharge) |
Sep 24 2021 | patent expiry (for year 8) |
Sep 24 2023 | 2 years to revive unintentionally abandoned end. (for year 8) |
Sep 24 2024 | 12 years fee payment window open |
Mar 24 2025 | 6 months grace period start (w surcharge) |
Sep 24 2025 | patent expiry (for year 12) |
Sep 24 2027 | 2 years to revive unintentionally abandoned end. (for year 12) |