US20220052712A1 - Methods and devices for rate adaptive forward error correction using a flexible irregular error correcting code - Google Patents
Methods and devices for rate adaptive forward error correction using a flexible irregular error correcting code Download PDFInfo
- Publication number
- US20220052712A1 US20220052712A1 US16/994,103 US202016994103A US2022052712A1 US 20220052712 A1 US20220052712 A1 US 20220052712A1 US 202016994103 A US202016994103 A US 202016994103A US 2022052712 A1 US2022052712 A1 US 2022052712A1
- Authority
- US
- United States
- Prior art keywords
- row
- parity
- syndrome
- bit sequence
- encoding
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/004—Arrangements for detecting or preventing errors in the information received by using forward error control
- H04L1/0041—Arrangements at the transmitter end
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/37—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
- H03M13/3707—Adaptive decoding and hybrid decoding, e.g. decoding methods or techniques providing more than one decoding algorithm for one code
- H03M13/3715—Adaptation to the number of estimated errors or to the channel state
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/1575—Direct decoding, e.g. by a direct determination of the error locator polynomial from syndromes and subsequent analysis or by matrix operations involving syndromes, e.g. for codes with a small minimum Hamming distance
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/25—Error detection or forward error correction by signal space coding, i.e. adding redundancy in the signal constellation, e.g. Trellis Coded Modulation [TCM]
- H03M13/251—Error detection or forward error correction by signal space coding, i.e. adding redundancy in the signal constellation, e.g. Trellis Coded Modulation [TCM] with block coding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/29—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
- H03M13/2906—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/29—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
- H03M13/2942—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes wherein a block of parity bits is computed only from combined information bits or only from parity bits, e.g. a second block of parity bits is computed from a first block of parity bits obtained by systematic encoding of a block of information bits, or a block of parity bits is obtained by an XOR combination of sub-blocks of information bits
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/65—Purpose and implementation aspects
- H03M13/6508—Flexibility, adaptability, parametrability and configurability of the implementation
- H03M13/6516—Support of multiple code parameters, e.g. generalized Reed-Solomon decoder for a variety of generator polynomials or Galois fields
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/0001—Systems modifying transmission characteristics according to link quality, e.g. power backoff
- H04L1/0009—Systems modifying transmission characteristics according to link quality, e.g. power backoff by adapting the channel coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/004—Arrangements for detecting or preventing errors in the information received by using forward error control
- H04L1/0041—Arrangements at the transmitter end
- H04L1/0042—Encoding specially adapted to other signal generation operation, e.g. in order to reduce transmit distortions, jitter, or to improve signal shape
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/004—Arrangements for detecting or preventing errors in the information received by using forward error control
- H04L1/0056—Systems characterized by the type of code used
- H04L1/0067—Rate matching
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/1177—Regular LDPC codes with parity-check matrices wherein all rows and columns have the same row weight and column weight, respectively
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/152—Bose-Chaudhuri-Hocquenghem [BCH] codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/37—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
- H03M13/39—Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes
- H03M13/3972—Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes using sliding window techniques or parallel windows
Definitions
- the present disclosure is related to forward error correction in digital communications, and in particular to methods and devices for rate adaptive forward error correction using a flexible irregular error correcting code.
- FEC forward-error-correction
- a redundancy overhead is added to the payload data at the transmitter side, using an encoding called an error correcting code (ECC).
- ECC error correcting code
- the ECC allows for errors to be detected and corrected, up to a certain threshold, at the receiver side.
- the threshold depends on the amount and type of coding overhead and the type of error pattern.
- a higher bit error rate (BER) threshold improves error correction performance but may introduce higher error correction overhead to the ECC and therefore lower data throughput.
- Overhead is introduced to the ECC in the form of error correction bits added to each block of data bits during ECC encoding. The higher the ratio of non-data bits to data bits in a given block of the output signal, the higher the overhead and the lower the throughput.
- a FEC module achieves error correction by performing an error detection check on a single bit sequence of the received signal.
- the bit sequence includes a plurality of data bits of payload data and one or more non-data bits added by the ECC encoding process, such as parity bits.
- Parity bits are set by the ECC encoder at the transmitter based on the bit values of the data bits in the sequence according to a mathematical calculation.
- the FEC module at the receiver can perform a corresponding mathematical calculation using the received data bits and parity bits of the sequence to confirm whether the bit sequence constitutes an ECC codeword, i.e. whether the bit sequence complies with the ECC encoding scheme and therefore contains no bit errors. If the calculation performed by the receiver indicates that bit errors are present, the parity bits can typically also be used by the FEC module to locate the specific bit errors present in the bit sequence and thereby flip those bits to correct the bit errors.
- the BER threshold is typically defined, in optical communication systems, as the maximum input BER (i.e. the BER of the received signal) at which the output BER (i.e. the BER of the error-corrected output signal) remains below 1e-15.
- an optimally efficient FEC would use the minimum amount of overhead (OH) to correct the target number of errors.
- overhead is constant per codeword: the ECC encoder at the transmitter encodes a codeword by adding a fixed number of payload data bits to a fixed number of parity bits. Using a higher number of parity bits relative to the number of data bits in the codeword increases overhead but may allow for more bit errors to be detected and/or corrected per bit sequence.
- Some modern optical modems are able to accommodate a range of transmission distances and channel conditions.
- Various techniques are used to achieve such flexibility, such as different quadrature amplitude modulation (QAM) constellation designs (e.g., from 16 QAM to 64 QAM to 128 QAM), and probabilistic constellation shaping (PCS).
- QAM quadrature amplitude modulation
- PCS probabilistic constellation shaping
- the constellation points have unequal probabilities of being transmitted. This may be achieved by having unequal numbers of 0's and 1's in the data bits and using a systematic FEC which preserves the information bits in the encoded sequence (with unequal numbers of 0's and 1's). In this case, the mapping function sees different constellation point labels with unequal probabilities, and therefore outputs constellation points with unequal probabilities. This allows some designs to transmit the constellation points with low magnitude (i.e. low energy) more frequently than the constellation points with high magnitude (i.e. high energy).
- the Euclidean distance between the constellation points is greater compared to uniform constellation distribution, the input BER at the receiver is reduced accordingly, and the FEC overhead can be reduced.
- the PCS distributions must be configured in accordance with different channel conditions in order to balance PCS and FEC overhead.
- the required FEC overhead varies as a function of the channel SNR and optical transmission distance, as demonstrated by J. Cho and P. J. Winzer, “Probabilistic Constellation Shaping for Optical Fiber Communications”, Journal of Lightwave Technology, vol. 37, no. 6, pp. 1590-1607, 15 Mar. 2019, which is hereby incorporated by reference in its entirety.
- a first approach is referred to as shortening.
- a modem is used having a single FEC module with a fixed overhead.
- One may achieve higher overhead and higher error-correcting capability by shortening the number of data bits included in each codeword (i.e. shortening the data bit sequence included in the codeword), or achieve a lower overhead and lower error-correcting capability by puncturing the FEC.
- bit positions in a codeword are fixed in value (e.g., 0) prior to the transmission, with these positions being known to both the transmitter and the receiver. Therefore, the bits in these locations do not need to be transmitted, and are set to the fixed value directly at the receiver. Since these locations cannot be used to transmit any payload data, the number of data bits per codeword is decreased relative to the fixed number of parity bits, and therefore the effective overhead of the FEC increased. However, since these bit locations will not have errors, the number of potentially erroneous data bits is decreased relative to the fixed number of parity bits per codeword, such that the effective tolerable input BER is also increased.
- Shortening and puncturing have a number of drawbacks.
- the shortened or punctured FEC module typically has worse performance compared to a FEC module specifically designed for the same effectively overhead.
- shortening and puncturing both change the transmitted number of bits for a given codeword.
- different overhead levels require different transmitted block lengths, different framing structures, and different buffer sizes at the receiver. This imposes additional complexity in hardware implementations.
- a second approach to variable FEC overhead is to use a modem having several FEC modules, each designed to target a different input BER.
- the drawbacks of having several such FEC modules is the high complexity imposed on both the FEC design and the modem implementation. This high complexity constrains the number of FEC modules that can be included in the modem, which leads to a limited number of FEC overhead levels that can be supported.
- each codeword of the ECC uses one of two or more different encodings, each encoding having a different number of parity bits.
- the FEC overhead can be finely adjusted in some examples, achieving flexible levels of FEC overhead in response to increased or decreased noise or perturbations in a communication channel.
- each ECC codeword has a fixed length but a reconfigurable division between data bits and parity bits, thereby providing a tunable or variable level of FEC overhead without requiring different transmitted block lengths, different framing structures, or different buffer sizes at the receiver, and without incurring the performance losses resulting from shortening or puncturing.
- a small number of encodings (such as two or three) with distinct FEC overhead levels are used, thereby requiring only a small number of FEC decoding units, but a given data block can include a mix of codewords of each encodings in different proportions to achieve a highly granular level of desired overall FEC overhead per data block.
- a single gated FEC decoder can be used by the receiver to perform FEC on each of two or more encodings, thereby minimizing the complexity associated with multiple parallel FEC modules.
- a “signal” or “data signal” may refer to a digital signal containing some number of payload data bits (also called “data bits” or “information bits”) as well as, optionally, some number of ECC bits (also called “parity bits” or “overhead bits”) used for performing FEC decoding, error detection, and error correction.
- the bits of a signal may be visualized as being organized into two-dimensional “data blocks” according to an organizational scheme known to (i.e., mutually predetermined by) both the transmitter and receiver.
- An ongoing signal may thus constitute a stream of bits, the stream of bits being periodically organized into data blocks by an encoder or a decoder.
- the bits of a signal may thus be conceived of as a sequence of data blocks that are transmitted and/or received, even if the constituent bits are transmitted and/or received as a linear sequence of bits.
- a sequence of data blocks may be transmitted, for example, starting with an initial data block, and followed by a subsequent data block in the sequence; the initial data block may thus be regarded as a “prior” data block in the sequence relative to the subsequent data block. This relationship of prior and subsequent data blocks continues to hold as each further subsequent data block is encoded, decoded, transmitted, and/or received.
- an error correcting code is a code used for error correction.
- ECC error correcting code
- Different types of ECCs are encoded and decoded according to different FEC encoding and decoding schemes.
- Example FEC encoding and decoding schemes are described herein for encoding and decoding ECCs.
- Examples of ECCs include zipper codes and product codes. Zipper codes include staircase codes and oFEC (open forward error correction) codes as special cases, but zipper codes may also be described in general terms.
- bit error may refer to a bit of a signal that has been corrupted by noise or other impairment in transit across a communication channel, yielding a different bit value as detected at the receiver than the corresponding bit value set by the transmitter.
- statements that a second item is “based on” a first item may mean that characteristics of the second item are affected or determined at least in part by characteristics of the first item.
- the first item may be considered an input to an operation or calculation, or a series of operations or calculations, that produces the second item as an output that is not independent from the first item.
- Data blocks as described herein may be conceptualized as two-dimensional bit arrays in the context of staircase codes. Some data blocks (called “row-wise” data blocks) may be organized as a sequence of codewords corresponding to rows of the data block, whereas other data blocks (called “column-wise” data blocks) may be organized as a sequence of codewords corresponding to columns of the data block. All operations and characteristics described herein with respect to data blocks may refer to rows of a row-wise data block or columns of a column-wise data block; unless otherwise indicated, these references will be appreciated to apply equally to both types of data blocks, with row and column references replaced with their counterparts as appropriate. Thus, references to rows or columns in a given example are arbitrary; row-wise and column-wise data blocks may be encoded and decoded according to identical principles in some embodiments.
- a “coded bit sequence” may refer to a bit sequence of a data block of an encoded ECC containing both parity bits and data bits, such as a row or column of a data block of a staircase code, a real buffer of a codeword of a zipper code, or a horizontal portion of a codeword of an oFEC code.
- codeword sometimes understood in the context of FEC to mean a well-formed (i.e. error-free) encoded bit sequence of an ECC, may be used herein to mean both valid (i.e. error-free) and invalid (i.e., containing errors) codewords.
- An invalid codeword may be a valid codeword with bit errors introduced, e.g., as a result of transmission. In FEC decoding, it may be unknown whether a given codeword is invalid or valid before it is decoded.
- parity check matrices are described herein as numerical format matrices, not binary format matrices, such that the entries of the parity check matrix are numbers of a Galois field, not individual bits.
- a parity check matrix is described as having a given number of rows, this refers to the Galois field number representation of the matrix, not a binary representation of the matrix.
- a digital data signal is received by a forward error correction (FEC) encoder of a transmitter, comprising a plurality of data bits.
- FEC enabled data signal is generated by the FEC encoder.
- the FEC enabled data signal comprises a sequence of data blocks.
- Each data block comprises a plurality of coded bit sequences.
- Each coded bit sequence comprises a data bit sequence comprising one or more of the data bits and a parity bit sequence comprising one or more parity bits.
- Each parity bit sequence is based on its respective data bit sequence and one or more bits of a prior data block.
- Each data block includes at least one parity bit sequence of a first encoding and at least one parity bit sequence of a second encoding.
- Each parity bit sequence of the first encoding has a first predetermined number of parity bits.
- Each parity bit sequence of the second encoding has a second predetermined number of parity bits greater than the first predetermined number. (A number is “predetermined” when it is defined or otherwise decided upon in any fashion at any time prior to the time the number is applied.)
- the FEC-enabled data signal is transmitted.
- the FEC enabled data signal is encoded as a staircase code.
- the sequence of data blocks alternates between row-wise data blocks and column-wise data blocks.
- the plurality of coded bit sequences of each row-wise data block comprise a plurality of rows.
- the plurality of rows define a plurality of columns.
- Each parity bit sequence is based on its respective data bit sequence and a corresponding row of a prior column-wise data block.
- the plurality of coded bit sequences of each column-wise data block comprise a plurality of columns.
- the plurality of columns define a plurality of rows.
- Each parity bit sequence is based on its respective data bit sequence and a corresponding column of a prior row-wise data block.
- At least one data block of the sequence of data blocks contains at least one parity bit sequence of a third encoding, each parity bit sequence of the third encoding having a third predetermined number of parity bits greater than the second predetermined number.
- each data block of the sequence of data blocks includes a first number of parity bit sequences of the first encoding, a second number of parity bit sequences of the second encoding, and a third number of parity bit sequences of the third encoding.
- the first number, second number, and third number are determined based on a target error correction overhead level.
- the method further comprises receiving channel condition information, updating the target error correction overhead level based on the channel condition information, and changing the first number, second number, and third number based on the updated target error correction overhead level.
- the parity bit sequences of each encoding are distributed among the rows or columns such that a number of adjacent parity bit sequences of the same encoding is minimized.
- each row-wise data block has the same distribution of parity bit sequences of each encoding among its rows
- each column-wise data block has the same distribution of parity bit sequences of each encoding among its columns.
- the method further comprises generating a parity bit sequence in a row-wise data block.
- a binary vector is identified, comprising an unknown parity bit sequence, the data bits of the row of the parity bit sequence in the row-wise data block, and the bits of the corresponding row of the prior column-wise data block.
- a valid parity bit sequence is identified such that, by setting the unknown parity bit sequence to the valid parity bit sequence and multiplying the binary vector by a transpose of a parity check matrix to generate a syndrome, the syndrome comprising a vector having a number of elements equal to a number of rows of the parity check matrix, each element of the syndrome is equal to zero.
- the parity bit sequence is set to the valid parity bit sequence.
- the parity bit sequence is of the first encoding.
- the parity check matrix comprises a one row matrix defined by a primitive element ⁇ of a Galois field such that the first element of the parity check matrix is one, and each subsequent element of the parity check matrix is a times the previous element.
- the parity bit sequence is of the second encoding.
- the parity check matrix comprises a two row matrix defined by a primitive element ⁇ of a Galois field such that the first element of the first row of the parity check matrix is one, each subsequent element of the first row of the parity check matrix is a times the previous element, the first element of the second row of the parity check matrix is one, and each subsequent element of the second row of the parity check matrix is ⁇ 3 times the previous element.
- the parity bit sequence is of the third encoding.
- the parity check matrix comprises a three row matrix defined by a primitive element ⁇ of a Galois field such that the first element of the first row of the parity check matrix is one, each subsequent element of the first row of the parity check matrix is ⁇ times the previous element, the first element of the second row of the parity check matrix is one, each subsequent element of the second row of the parity check matrix is ⁇ 3 times the previous element, the first element of the third row of the parity check matrix is one, and each subsequent element of the third row of the parity check matrix is ⁇ 5 times the previous element.
- a forward error correction (FEC) enabled received signal is received by a FEC decoder of a receiver.
- the FEC enabled received signal comprises a sequence of data blocks.
- Each data block comprises a plurality of coded bit sequences.
- Each coded bit sequence comprises a data bit sequence comprising one or more data bits and a parity bit sequence comprising one or more parity bits.
- Each data block includes at least one parity bit sequence of a first encoding and at least one parity bit sequence of a second encoding.
- Each parity bit sequence of the first encoding has a first predetermined number of parity bits.
- Each parity bit sequence of the second encoding has a second predetermined number of parity bits greater than the first predetermined number.
- a parity check is performed by the FEC decoder using the parity bit sequence of the coded bit sequence to detect at least one bit error in a prior data block.
- the sequence of data blocks alternates between row-wise data blocks and column-wise data blocks.
- the plurality of coded bit sequences of each row-wise data block comprise a plurality of rows. Each row comprises a data bit sequence comprising one or more of the data bits and a parity bit sequence comprising one or more parity bits.
- the plurality of rows defines a plurality of columns.
- the plurality of coded bit sequences of each column-wise data block comprise a plurality of columns.
- Each column comprises a data bit sequence comprising one or more of the data bits and a parity bit sequence comprising one or more parity bits.
- the plurality of columns define a plurality of rows.
- Performing a parity check using the parity bit sequence of a row of a row-wise data block comprises using the parity bit sequence to detect at least one bit error in the corresponding row of a prior column-wise data block.
- Performing a parity check using the parity bit sequence of a column of a column-wise data block comprises using the parity bit sequence to detect at least one bit error in the corresponding column of a prior row-wise data block.
- At least one data block of the sequence of data blocks contains at least one parity bit sequence of a third encoding, each parity bit sequence of the third encoding having a third predetermined number of parity bits greater than the second predetermined number.
- each row-wise data block has the same distribution of parity bit sequences of each encoding among its rows
- each column-wise data block has the same distribution of parity bit sequences of each encoding among its columns.
- detecting a bit error in the corresponding row of the prior column-wise data block using a parity bit sequence comprises identifying a binary vector comprising the parity bit sequence, the data bits of the row of the row-wise data block, and the bits of the corresponding row of the prior column-wise data block.
- the binary vector is multiplied by a transpose of a parity check matrix to generate a syndrome.
- the syndrome comprises a vector having a number of elements equal to a number of rows of the parity check matrix. Based on the elements of the syndrome, the binary vector is determined to contain at least one bit error.
- the parity bit sequence is of the first encoding.
- the parity check matrix comprises a one row matrix defined by a primitive element ⁇ of a Galois field such that the first element of the parity check matrix is one, and each subsequent element of the parity check matrix is ⁇ times the previous element.
- the method further comprises, in response to determining that the first element of the syndrome is not zero, using a syndrome decoder module of the FEC decoder to correct the one or more detected errors.
- the syndrome decoder module is configured to provide the first element of the syndrome to a one-error decoder unit of the FEC decoder, use the one-error decoder unit to locate a single bit error in the binary vector based on the first element of the syndrome, and correct the single bit error.
- the parity bit sequence is of the second encoding.
- the parity check matrix comprises a two row matrix defined by a primitive element ⁇ of a Galois field such that the first element of the first row of the parity check matrix is one, each subsequent element of the first row of the parity check matrix is ⁇ times the previous element, the first element of the second row of the parity check matrix is one, and each subsequent element of the second row of the parity check matrix is ⁇ 3 times the previous element.
- the method further comprises, in response to determining that the first element or second element of the syndrome is not zero, using a syndrome decoder module of the FEC decoder to correct the one or more detected errors.
- the syndrome decoder module is configured to calculate a value D3 by adding the cube of the first element of the syndrome to the second element of the syndrome. If D3 is zero, the syndrome decoder module is configured to provide the first element of the syndrome to a one-error decoder unit of the FEC decoder, use the one-error decoder unit to locate a single bit error in the binary vector based on the first element of the syndrome, and correct the single bit error. If D3 is not zero, the syndrome decoder module is configured to provide the first and second elements of the syndrome to a two-error decoder unit of the FEC decoder, use the two-error decoder unit to locate two bit errors in the binary vector based on the first element of the syndrome, and correct the two bit errors.
- the parity bit sequence is of the third encoding.
- the parity check matrix comprises a three row matrix defined by a primitive element ⁇ of a Galois field such that the first element of the first row of the parity check matrix is one, each subsequent element of the first row of the parity check matrix is ⁇ times the previous element, the first element of the second row of the parity check matrix is one, each subsequent element of the second row of the parity check matrix is ⁇ 3 times the previous element, the first element of the third row of the parity check matrix is one, and each subsequent element of the third row of the parity check matrix is ⁇ 5 times the previous element.
- the method further comprises, in response to determining that any of the three elements of the syndrome is not zero, using a syndrome decoder module of the FEC decoder to correct the one or more detected errors.
- the syndrome decoder module is configured to calculate a value D3 by adding the cube of the first element of the syndrome to the second element of the syndrome. If D3 is zero, the syndrome decoder module is configured to provide the first element of the syndrome to a one-error decoder unit of the FEC decoder, use the one-error decoder unit to locate a single bit error in the binary vector based on the first element of the syndrome, and correct the single bit error.
- the syndrome decoder module is configured to calculate a value D5 by adding the first element of the syndrome, raised to the fifth power, to the third element of the syndrome, if the first element of the syndrome, multiplied by D5, is equal to the second element of the syndrome, multiplied by D3 provide the first and second elements of the syndrome to a two-error decoder unit of the FEC decoder, use the two-error decoder unit to locate two bit errors in the binary vector based on the first and second elements of the syndrome, and correct the two bit errors.
- the syndrome decoder module is configured to provide the first, second, and third elements of the syndrome to a three-error decoder unit of the FEC decoder, use the three-error decoder unit to locate three bit errors in the binary vector based on the first, second, and third elements of the syndrome, and correct the three bit errors.
- the syndrome decoder module is a gated syndrome decoder module further configured to detect and correct bit errors in the data bit sequence of a row of a row-wise data block or in the corresponding row of the prior column-wise data block using a parity bit sequence of the first encoding or second encoding.
- a forward error correction (FEC) decoder comprises a syndrome generation module configured to receive a forward error correction (FEC) enabled received signal.
- the FEC enabled signal comprises a sequence of data blocks.
- the syndrome generation module is configured to, for a coded bit sequence of a received data block, perform a parity check using a parity bit sequence of the coded bit sequence to detect any bit errors in a binary vector based on one or more elements of a calculated syndrome.
- the binary vector comprises the parity bit sequence, the data bit sequence of the coded bit sequence, and one or more bits of a prior data block.
- the FEC decoder comprises a gated syndrome decoder module comprising a first decoder unit and a second decoder unit.
- the gated syndrome decoder module is configured, in response to the syndrome generation module detecting one or more bit errors, to perform several steps. If a first number of bit errors are detected based on the syndrome, or if the parity bit sequence is encoded using a first encoding provide at least one element of the syndrome to the first decoder unit, the gated syndrome decoder module is configured to use the first decoder unit to locate the bit errors in the binary vector based on the syndrome, and correct the bit errors.
- the gated syndrome decoder module is configured to provide at least one element of the syndrome to the second decoder unit, use the second decoder unit to locate the bit errors in the binary vector based on the syndrome, and correct the bit errors.
- FIG. 1 is a block diagram of an optical communication system showing an example of an environment in which example embodiments of the present disclosure may operate.
- FIG. 2 is a schematic diagram of a flexible irregular staircase code used for forward error correction, in accordance with examples described herein.
- FIG. 3 is a block diagram of an example FEC decoder usable in the example optical receiver of FIG. 1 , in accordance with examples described herein.
- FIG. 4 is a flowchart of an example method for encoding the staircase code of FIG. 2 , in accordance with examples described herein.
- FIG. 5 is a flowchart of an example method for decoding the staircase code of FIG. 2 to detect and correct bit errors in a received signal, in accordance with examples described herein.
- FIG. 6 is a flowchart of an example method for locating and correcting bit errors in an irregular ECC using a gated FEC decoder having three error decoder units, in accordance with examples described herein.
- FIG. 7A is a visualization of a conventional zipper code.
- FIG. 7B is a visualization of a flexible irregular zipper code used for forward error correction, in accordance with examples described herein.
- FIG. 8 is a schematic diagram of a flexible irregular oFEC code used for forward error correction with an expanded detail view of a single block of a block row, in accordance with examples described herein.
- each codeword of the ECC uses one of two or more different encodings, each encoding having a different number of parity bits.
- the FEC overhead can be finely adjusted in some examples, achieving flexible levels of FEC overhead in response to increased or decreased noise or perturbations in a communication channel.
- FIG. 1 shows a simplified block diagram of an optical communication system 100 using FEC.
- Example embodiments will be described with reference to this example optical system 100 , as part of an optical transmitter 102 (also referred to simply as transmitter 102 ) and/or optical receiver 104 also called simply receiver 104 ).
- transmitter 102 also referred to simply as transmitter 102
- optical receiver 104 also called simply receiver 104 .
- the present disclosure is not limited to photonic or optical communication but may also be used for FEC in an electrical, radio-frequency, or other wired or wireless digital communication system, and that the use of the terms “transmitter” or “receiver” may refer to any type of transmitter or receiver using FEC.
- the transmitter 102 transmits data through an optical channel 106 such as a fiber-optic channel, and the receiver 104 receives the data after it has passed through the optical channel 106 .
- an optical channel 106 such as a fiber-optic channel
- the receiver 104 receives the data after it has passed through the optical channel 106 .
- FEC bit error rate
- a digital data signal comprising a plurality of data bits 110 (i.e. information bits) goes through FEC encoder 112 to generate encoded bits in the form of a FEC enabled data signal 114 .
- the FEC enabled data signal 114 may be a staircase code or other ECC in some embodiments, as described in greater detail below with reference to FIG. 2 .
- the operation of the FEC encoder 112 in some embodiments is described in greater detail below with reference to FIG. 4 .
- the total number of encoded bits (Lc) of the FEC enabled data signal 114 is typically greater than the total number of data bits (Li).
- the FEC enabled data signal 114 is received by a mapping and pulse shaping module 116 , which applies mapping to translate the encoded bits of the FEC enabled data signal 114 to discrete constellation points, according to some constellation label design, then converts the constellation points to digital pulses according to some pre-defined pulse-shaping function, thereby generating a digital electrical signal 118 .
- a pre-equalizer 120 is optionally used on the transmitter side to compensate for some of the channel distortions, thereby generating an equalized digital electrical signal 122 from the digital electrical signal 118 , which is modulated into an analog optical signal 126 by a modulation module 124 .
- the received analog optical signal 128 received over the optical channel 106 demodulated to a digital electrical signal 132 by a demodulation module 130 , and equalized to generate an equalized digital electrical signal 136 by a post-equalizer 134 , which compensates for the most of the remaining channel distortions.
- the post-equalizer cannot generally compensate for noise introduced by the optical channel 106 .
- a demapping module 138 then translates the equalized digital electrical signal 136 back to a bit sequence, which is equivalent to the encoded bits from the transmitter with errors introduced from the optical channel 106 . This bit sequence may be referred to in some examples as a FEC enabled received signal 140 .
- a FEC decoder 142 is used to correct most of the errors of the FEC enabled received signal 140 and produce recovered information bits, which may be referred to in some examples as an error-corrected digital signal 144 .
- the probability for a recovered information bit of the error-corrected digital signal 144 to be erroneous is designed to be lower than 1e-15 in some embodiments.
- the operation of the FEC decoder 142 in some embodiments is described in greater detail below with reference to FIG. 5 .
- the ECC is a staircase code.
- the ECC is a non-staircase zipper code.
- the ECC is an oFEC code. Example embodiments will be described in the context of a staircase code with reference to FIGS. 2-6 , and non-staircase alternatives will then be described with reference to FIGS. 7A, 7B, and 8 .
- Bose-Chaudhuri-Hocquenghem (BCH) component codes also called BCH codes or BCH encodings
- BCH Bose-Chaudhuri-Hocquenghem
- each bit is protected by two BCH component codewords.
- Some examples include product codes, staircase codes, oFEC codes, and zipper codes.
- Product codes are described in greater detail by P. Elias, “Error-free coding”, IEEE Trans. Inf. Theory, vol. 4, no. 4, pp. 29-37, September 1954, which is hereby incorporated by reference in its entirety, and are briefly described immediately below.
- Staircase codes are described in greater detail by B. Smith, A. Farhood, A. Hunt, F. Kschischang, and J. Lodge, “Staircase Codes: FEC for 100 Gb/s OTN”, J. Lightwave Technol.
- BCH codes form a class of cyclic error-correcting codes that are constructed using polynomials over a finite field (also called a Galois field).
- a finite field also called a Galois field.
- One of the key features of BCH codes is that during code design, there is a precise control over the number of symbol errors correctable by the code. In particular, it is possible to design binary BCH codes that can correct multiple bit errors.
- Another potential advantage of BCH codes is the ease with which they can be decoded, namely, via an algebraic method known as syndrome decoding. This may simplify the design of a FEC decoder 142 using BCH codes, allowing it to use small low-power electronic hardware.
- BCH1, BCH2, and BCH3 respectively, with a 1-error-correcting BCH1 code also being known as a Hamming code.
- BCH1, BCH2, or BCH3 a 1-error-correcting BCH1 code also being known as a Hamming code.
- Many spatially-coupled product-like ECCs employed in optical systems use BCH codes which can correct 3 errors or fewer (i.e. BCH1, BCH2, or BCH3), to benefit from the low complexity of the FEC decoder design.
- Product codes organize bits into rectangular arrays, or data blocks, consisting of a number of rows and a number of columns.
- each bit is part of both a “row codeword” and a “column codeword”.
- each row contains a number of parity bits at one end
- each column contains a number of parity bits at one end, creating a vertical parity edge (e.g., visualized as a right edge of the rectangle) and a horizontal parity edge (e.g., visualized as the bottom edge of the rectangle) of a fixed number of parity bits.
- parity on parity area consisting of parity bits used to perform error checking on codewords consisting entirely of parity bits.
- This parity on parity area represents wasted bits that cannot be eliminated through puncturing without reducing the performance of a product code.
- Product codes are block codes that are encoded and decoded one data block at a time independently of other data blocks in a data block sequence.
- staircase codes exhibit a convolutional structure, which never terminates.
- a staircase code can be visualized as a sequence of rectangular data blocks stacked in a staircase-like structure, with a second data block positioned to the right of an initial data block, a third data block positioned above the second data block, a fourth data block to the left of the third data block, and so on.
- each row and column of the “staircase” forms a codeword: thus, each row of the initial data block is concatenated to the corresponding row of the second data block to form a single row-wise codeword, whereas each column of the second data block is concatenated with the corresponding column of the third data block to form a single column-wise codeword, and so on.
- the second data block may be referred to as a “row-wise” data block
- the third data block may be referred to as a “column-wise” data block.
- a row-wise data block includes an edge of parity bits at its edge distal from the prior data block (i.e.
- a column-wise data block includes an edge of parity bits at its edge distal from the prior data block (i.e. the top edge of the third data block in this example).
- an iterative sliding window decoding can be employed, in which the prior sub-blocks can help the current block detect and correct errors.
- staircase codes usually have higher input BER thresholds relative to product codes, given the same overhead.
- the present disclosure describes embodiments in which a single decoder structure may be used to decode codewords with different overhead levels.
- the decoder in some embodiments has low design and implementation complexity, allows the overhead level to be finely tuned and dynamically reconfigured, and achieves performance on par with or superior to existing approaches.
- One or more advantages relative to shortening, including low hardware design complexity, low implementation complexity, high tenability, and/or better performance, may be achieved in some embodiments using spatially-coupled product-like codes with irregular BCH component codes (1-, 2-, or 3-error correcting BCH), without increasing algorithmic design complexity.
- the three types of codewords (BCH1, BCH2, and BCH3) can all be decoded in some embodiments by a gated version of a BCH3 decoder, resulting in low design and decoding complexity.
- the proportions of the three BCH codes can be adjusted based on the target overhead level, achieving high tenability. The performance of some embodiments may exceed shortening.
- a first example base code structure for the flexible irregular ECC namely a flexible irregular staircase code, is now described in detail with reference to FIG. 2 .
- FIG. 2 shows a schematic diagram of a flexible irregular staircase code used for forward error correction in accordance with some embodiments described herein.
- the irregular staircase code 200 is a sequence of data blocks, including, in sequence, an initial data block 202 , a first row-wise data block 204 , a first column-wise data block 206 , a second row-wise data block 208 , a second column-wise data block 210 , and a third row-wise data block 212 .
- the initial data block 202 would be encoded and transmitted prior to the first row-wise data block 204 and would constitute a “prior” data block relative to the first row-wise data block 204 .
- the transmitter's FEC encoder 112 receives the digital data signal 110 and encodes it into the irregular staircase code 200 as the sequence of data blocks, alternating between row-wise data blocks and column-wise data blocks.
- the receiver's FEC decoder 142 receives the FEC enabled received signal 140 and decodes it into the sequence of data blocks making up the irregular staircase code 200 .
- Each row-wise data block 204 , 208 , 212 comprises a plurality of rows.
- Each row comprises a data bit sequence (e.g., data bit sequence 232 of first row-wise data block 204 ) comprising one or more of the data bits, and a parity bit sequence (e.g., parity bit sequence 234 of second row-wise data block 204 ), comprising one or more parity bits.
- a data bit sequence e.g., data bit sequence 232 of first row-wise data block 204
- a parity bit sequence e.g., parity bit sequence 234 of second row-wise data block 204
- parity bit sequence of each row-wise codeword (e.g., parity bit sequence 234 of second row-wise data block 208 ) is encoded based on its respective data bit sequence (e.g., data bit sequence 232 of second row-wise data block 208 ) and a corresponding row of a prior column-wise data block (e.g., row 230 of first column-wise data block 206 ).
- each column-wise data block 206 , 210 comprises a plurality of columns.
- Each column comprises a data bit sequence (e.g., data bit sequence 242 of first column-wise data block 206 ) comprising one or more of the data bits, and a parity bit sequence (e.g., parity bit sequence 244 of first column-wise data block 206 ), comprising one or more parity bits.
- the plurality of columns of a column-wise data block define a plurality of rows, such that a given bit is located in one row and one column.
- parity bit sequence of each column-wise codeword (e.g., parity bit sequence 244 of first column-wise data block 206 ) is encoded based on its respective data bit sequence (e.g., data bit sequence 242 of first column-wise data block 206 ) and a corresponding column of a prior row-wise data block (e.g., column 240 of first row-wise data block 204 ).
- the initial data block 202 may in some embodiments be encoded and decoded at the start of a communication.
- the initial data block 202 may contain no parity bits.
- the initial data block 202 may contain only bit values known to the transmitter 102 and receiver 104 , such as a data block of entirely zero bit values, thus eliminating the need to transmit the initial data block 202 —i.e., the entire initial data block 202 may be eliminated from the signal through a process equivalent to shortening.
- the rows or columns of the initial data block 202 may be used as part of the row-wise or column-wise codewords of a subsequent data block (e.g. first row-wise data block 204 ).
- decoding of the staircase code 200 may take place within a sliding window 250 encompassing multiple data blocks (shown as five data blocks in FIG. 2 ).
- the sliding window is described in greater detail below with reference to FIG. 5 .
- each data block may have tens, hundreds, or thousands of rows and columns, and the parity bit sequence may comprise a small fraction of the length of a given codeword.
- each codeword thus contains a parity bit sequence.
- the example staircase code 200 is “irregular” insofar as its individual codewords may use different encodings having a different number of parity bits.
- each data block contains at least one parity bits sequence of a first encoding 222 , such as BCH1, consisting of a first predetermined number of parity bits; at least one parity bits sequence of a second encoding 224 , such as BCH2, consisting of a second predetermined number of parity bits greater than the first predetermined number; and at least one parity bits sequence of a third encoding 226 , such as BCH3, consisting of a third predetermined number of parity bits greater than the second predetermined number.
- some examples may only use two encodings, or may use more than three encodings.
- an alternative embodiment may use only a first encoding 222 and a second encoding 224 .
- the two encodings used in other embodiments could be, e.g., BCH1 for the first encoding 222 and BCH3 for the second encoding 224 , or BCH2 for the first encoding 222 and BCH3 for the second encoding 224 .
- the allocation or distribution of codewords using each encoding may be determined in some embodiments with reference to a target error correction overhead level.
- a higher desired level of error correction i.e. higher overhead
- BCH3 codewords i.e. codewords having parity bit sequences of the third encoding 226
- a lower desired level of error correction i.e. lower overhead
- BCH1 codewords i.e. codewords having parity bit sequences of the first encoding 222
- each data block of the sequence of data blocks may be encoded to include a first number of parity bit sequences of the first encoding, a second number of parity bit sequences of the second encoding, and a third number of parity bit sequences of the third encoding, wherein the first number, second number, and third number are determined based on the target error correction overhead level.
- the target error correction overhead level may be determined dynamically based on channel conditions or other operating parameters.
- the receiver 104 in some embodiments may be configured to provide feedback to the transmitter 102 to indicate the SNR of the received signal or other information indicative of environmental conditions or channel conditions.
- the receiver 104 and/or transmitter 102 may also communicate further to optimization of the target error correction overhead level based on the nature of the data being transmitted, the operating mode of the receiver 104 , or any other factor that might require tuning of the FEC overhead level. This communication could take place at power-up, at the beginning of a communication, or periodically during a communication to dynamically adapt the FEC overhead level to changing conditions or requirements.
- the transmitter 102 and/or receiver 104 may in some embodiments be a transceiver or modem configured to both transmit and receive data over the optical channel 106 or through some other channel or medium, thereby enabling communication of information from the receiver 104 to the transmitter 102 .
- channel conditions may be assessed (e.g., by the receiver 104 based on the BER of the received optical signal 128 ) and used to dynamically change the distribution of codeword encodings of the ECC.
- the receiver 104 or transmitter 102 may then determine a new target error correction overhead level based on the assessed channel conditions.
- the receiver 104 may transmit channel condition information to the transmitter 102 indicating the assessed channel conditions.
- the transmitter 102 may then update the target error correction overhead level based on the received channel condition information.
- the first number, second number, and third number, and therefore the distribution of codeword encodings within each data block of the ECC, may be changed based on the updated target error correction overhead level.
- the FEC encoder 112 will then encode the changed ECC.
- the new ECC codeword encoding distribution will be made known to the receiver 104 (e.g., either transmitted directly from the transmitter 102 or generated at the receiver 104 based on a predetermined algorithm using the channel condition data generated by the receiver 104 ), and the FEC decoder 142 will thereafter use the new ECC codeword encoding to decode the received ECC.
- the distribution of codewords of each encoding within a given data block may be configured by the FEC encoder 112 of the transmitter 102 .
- the FEC encoder 112 may distribute the codewords to achieve a homogeneous or evenly-distributed distribution of codewords of different encodings among the rows or columns of a data block, to avoid clustering of multiple codewords of the first encoding 222 or multiple codewords of the third encoding 226 in adjacent rows or columns.
- the parity bit sequences of each encoding are distributed among the rows or columns of a given data block such that a number of adjacent parity bit sequences of the same encoding is minimized.
- the data blocks have different distributions of codeword encodings from each other, while in other embodiments the data blocks all have the same distribution of codeword encodings.
- all row-wise data blocks have the same distribution of codeword encodings and all column-wise data blocks have the same distribution of codeword encodings.
- using a single distribution for all data blocks, or two distributions (one row-wise, one column-wise) facilitates coordination of the encoding and decoding between the transmitter 102 and receiver 104 , as the data signal does not need to include additional metadata indicating the distribution for each transmitted data block.
- the distribution could be automatically generated for each data block based on a seed value or the target error correction overhead level, allowing the transmitter 102 and receiver 104 to know the distribution for each data block without exchanging any metadata other than the current target error correction overhead level.
- the distribution patterns may be predefined, in which case they may be stored, or they may be regenerated based on a set of parameters.
- Each of the patterns i.e. distributions of codeword encodings
- Each of the patterns i.e. distributions of codeword encodings
- Metadata regarding distributions of codeword encodings in each data block may be coordinated between the transmitter 102 and receiver 104 using the mechanisms described above for exchanging information regarding the target error correction overhead level.
- Encoding of the flexible, irregular ECC such as the irregular staircase code 200
- a FEC encoder 112 may be performed by a FEC encoder 112 and is described in detail below with reference to FIG. 4 .
- Decoding the ECC to perform error detection and error correction may be carried out by a FEC decoder 142 and is described in detail below with reference to FIG. 5 .
- An example architecture for a FEC decoder 142 will now be described with reference to FIG. 3 .
- FIG. 3 shows an example FEC decoder 142 used to decode an irregular ECC having three different codeword encodings configured to correct up to one, two, or three bit errors per codeword, respectively.
- the detailed operation of the FEC decoder 142 is described below with reference to FIG. 5 .
- the FEC decoder 142 receives the FEC enabled received signal 140 consisting of the encoded bits and errors, e.g. irregular staircase code 200 containing bit errors due to transmission over the optical channel 106 .
- Each two adjacent data blocks of the received FEC enabled received signal 140 are used to identify row-wise or column-wise bit sequences to determine if they constitute codewords (i.e., no bit errors).
- Each row or column is processed independently until a bit error is detected.
- a syndrome generation module 302 is used to generate or calculate a syndrome vector based on the bit values of the current row or column being processed. For a row of a received row-wise data block, the syndrome generation module 302 performs a parity check using a parity bit sequence of the row to detect any bit errors in a data bit sequence of the row or in a corresponding row of a prior column-wise data block based on one or more elements of the calculated syndrome. The corresponding operation is carried out on each column of a column-wise data block.
- the resulting syndrome vector is passed to a syndrome decoder module 304 , which includes three error decoder units: a one error decoder unit 306 capable of detecting and correcting up to one bit error, a two error decoder unit 308 capable of detecting and correcting up to two bit errors, and a three error decoder unit 310 capable of detecting and correcting up to three bit errors.
- the one error decoder unit 306 can be used to correct errors in BCH1 codewords
- the two error decoder unit 308 can be used to correct errors in BCH2 codewords
- the three error decoder unit 310 can be used to correct errors in BCH3 codewords.
- the one error decoder unit 306 can be used to correct it, and when two errors are detected in a BCH3 codeword, the two error decoder unit 308 can be used to correct it.
- the syndrome decoder module 304 thus operates as a gated decoder, combining some of the advantages of multiple parallel FEC decoders described above with flexibility and tunability.
- the syndrome decoder module 304 may contain only two or more than three error decoder units configured to correct a different number of bit errors.
- the FEC decoder 142 outputs the error-corrected digital signal 144 .
- staircase code constitutes a special case of a zipper code (described below with reference to FIGS. 7A-7B )
- the described method 400 could be generalized to non-staircase zipper codes, such as oFEC codes (described below with reference to FIG. 8 ), based on the particular details of how such codes are encoded.
- FIG. 4 shows a flowchart of an example method 400 for encoding the irregular staircase code 200 .
- the method 400 may in some embodiments be performed by a FEC encoder 112 of a transmitter, such as an optical transmitter 102 .
- the method 400 repeats steps 402 , 404 , and 418 for each received data block of a received digital data signal 110 .
- the method 400 repeats sub-steps 406 , 408 , and 410 of step 404 for each row or column of the current data block.
- Optional steps 420 and 422 are shown in dashed lines.
- the encoding of the initial data block 202 may not adhere to the pattern of encoding steps shown in the flowchart of FIG. 4 , as the initial data block 202 may not include parity bits in some embodiments.
- the initial data block 202 may in some embodiments be populated entirely with data bits of the received digital data signal 110 , or in other embodiments with non-information-bearing fixed bit values (e.g., all zero bit values).
- method 400 describes the encoding of each subsequent row-wise and column-wise data block of the irregular staircase code 200 .
- the FEC encoder 112 receives the digital data signal 110 . This steps is repeated for each set of data bits received that are sufficient to populate a data block of the staircase code 200 . It will be appreciated that the steps of method 400 are presented as a linear sequence, but in some embodiments may occur in parallel or otherwise in a different order or concurrently. For example, the process of generating data blocks from the received data bits of the digital data signal 110 may occur continuously while the data blocks are being encoded and transmitted.
- Step 404 the FEC encoder 112 generates a data block of the FEC enabled data signal 114 , i.e. a row-wise of column-wise data block of the irregular staircase code 200 .
- Step 404 is made up of sub-steps 406 , 408 , and 410 .
- the FEC encoder 112 determines a parity bit sequence encoding for each row or column of a data block.
- each row is assigned an encoding from the first encoding 222 (e.g. BCH1), second encoding 224 (e.g. BCH2), or third encoding 226 (e.g. BCH3) (for embodiments using three encodings).
- This assignment may be based on the distribution of codeword encodings, as described above with reference to FIG. 2 .
- steps 408 and 410 are performed.
- a row (for row-wise data blocks) or column (for column-wise data blocks) of the data block is populated with data bits from the received digital data signal 110 .
- Step 410 a parity bit sequence is generated for the row or column. Step 410 is performed as sub-steps 412 , 414 , and 416 .
- a binary vector is identified.
- the binary vector consists of the as-yet-unknown parity bits (e.g., parity bit sequence 234 ), concatenated to the data bits of the row or column of the current data block (e.g., data bit sequence 232 ), and to the bits of the corresponding row or column of the prior data block (e.g., row 230 ).
- the parity bits of the binary vector will be a codeword of the staircase code 200 .
- a valid parity bit sequence is identified. This determination is made based on the encoding used for the codeword. For example, if the parity bit sequence 234 uses a BCH encoding, then identifying a valid parity bit sequence may be accomplished using a parity check matrix defined by numbers of a Galois field. BCH codeword encoding will now be described in detail.
- t is a 1 by k binary vector
- x is a 1 by n binary vector
- G is a k by n binary matrix
- parity matrices for BCH1, BCH2, and BCH3 are all n columns wide (n being the length of a codeword) and can be written in GF element format (as opposed to binary format) as follows, assuming use of the same Galois field for (GF) each encoding, wherein ⁇ is the primitive element of the Galois field:
- H 1 [ 1 ⁇ ⁇ ⁇ 2 ⁇ ⁇ ... ]
- H 2 [ 1 ⁇ ⁇ 2 ⁇ ⁇ ... 1 ⁇ 3 ⁇ 6 ⁇ ⁇ ... ]
- H 3 [ 1 ⁇ ⁇ 2 ⁇ ⁇ ... 1 ⁇ 3 ⁇ 6 ⁇ ⁇ ... 1 ⁇ 5 ⁇ 10 ⁇ ⁇ ... ]
- the parity check matrix comprises a one row matrix defined by a primitive element ⁇ of a Galois field such that the first element of the parity check matrix is one, and each subsequent element of the parity check matrix is ⁇ times the previous element.
- the parity check matrix comprises a two row matrix defined by a primitive element ⁇ of a Galois field such that the first element of the first row of the parity check matrix is one, each subsequent element of the first row of the parity check matrix is ⁇ times the previous element, the first element of the second row of the parity check matrix is one, and each subsequent element of the second row of the parity check matrix is ⁇ 3 times the previous element.
- the parity check matrix comprises a three row matrix defined by a primitive element ⁇ of a Galois field such that the first element of the first row of the parity check matrix is one, each subsequent element of the first row of the parity check matrix is ⁇ times the previous element, the first element of the second row of the parity check matrix is one, each subsequent element of the second row of the parity check matrix is ⁇ 3 times the previous element, the first element of the third row of the parity check matrix is one, and each subsequent element of the third row of the parity check matrix is ⁇ 5 times the previous element.
- the binary vector (in numeric format) is multiplied by the transpose of the parity check matrix to generate a syndrome, the syndrome comprising a vector having a number of elements equal to a number of rows of the parity check matrix (in GF or numeric format, not binary format).
- BCH1 encoding and decoding uses S 1 only, BCH2 decoding uses S 1 and S 3 only, and BCH3 decoding uses S 1 , S 3 , and S 5 .
- Values must be identified for the unknown parity bits such that the calculated syndrome must have all of its elements (e.g., S 1 and S 3 for BCH2) equal to zero. Identifying a valid parity bit sequence for such an encoding may be performed a number of different ways in different embodiments. Some embodiments perform this identification by solving for the unknown parity bits, e.g., by performing the multiplication by the parity check matrix using a binary vector with unknown bit values and then solving the resulting equation for the unknown parity bit values. It will be appreciated that solving such mathematical calculations or constraints may be performed by electronic hardware and/or software in various ways.
- the parity bit sequence is set to be equal to a valid parity bit sequence, e.g. based on the solved constraints or equations described above, such that the binary vector (including the valid parity bits) multiplied by the transpose of the parity check matrix generates a syndrome vector wherein each element is equal to zero.
- This operation is equivalent to multiplying binary vector t by generator matrix G to generate codeword x, as described above.
- the FEC enabled data signal 114 is transmitted. In some embodiments, this may mean propagating the FEC enabled data signal 114 through the other modules 116 , 120 , and 124 of the optical transmitter 102 to transmit the resulting optical signal 126 across the optical channel 106 using the modulation module 124 . In some embodiments, the FEC enabled data signal 114 is propagated and transmitted as the initial data block 202 , followed by each subsequent data block in sequence: 204 , 206 , 208 , 210 , 212 , etc.
- the encoding of the irregular staircase code 200 may be dynamically adapted to channel conditions. As described above, channel conditions may be assessed and used to dynamically change the distribution of codeword encodings of the irregular staircase code 200 or other flexible ECC.
- a new target error correction overhead level may be determined (e.g. by the FEC encoder 142 ) based on the assessed channel conditions as a result of receiving channel condition information (e.g., sent by the receiver 104 based on BER or other distortions detected in the received optical signal 128 ).
- the first number, second number, and third number, and therefore the distribution of codeword encodings within each data block of the irregular staircase code 200 or other flexible ECC may be changed based on the updated target error correction overhead level.
- the FEC encoder 112 will then return to step 402 to encode the next data block using the changed ECC encoding.
- staircase code constitutes a special case of a zipper code (described below with reference to FIGS. 7A-7B )
- the described method 500 could be generalized to non-staircase zipper codes, such as oFEC codes (described below with reference to FIG. 8 ), based on the particular details of how such codes are decoded.
- FIG. 5 shows a flowchart of an example method for decoding the irregular staircase code 200 of FIG. 2 to detect and correct bit errors in a received signal.
- the method 500 may in some embodiments be performed by a FEC decoder 142 of a receiver, such as an optical receiver 104 .
- the method 500 repeats steps 502 , 504 , and 520 for each received data block of a received FEC enabled received signal 140 .
- the method 500 repeats sub-steps 506 , 508 , 516 , and 518 of step 504 for each row or column of the current data block.
- the decoding of the initial data block 202 may not adhere to the pattern of decoding steps shown in the flowchart of FIG. 5 , as the initial data block 202 may not include parity bits in some embodiments, and may not include information-bearing bits of any kind in some embodiments.
- the initial data block 202 may be populated entirely with data bits of the received digital data signal 110 , or entirely with fixed non-information-baring bits (e.g., all zero bit values), and does not have parity checks performed on it.
- method 500 describes the decoding of each subsequent row-wise and column-wise data block of the irregular staircase code 200 .
- the FEC decoder 142 receives a data block of the FEC enabled received signal 140 , for example from the demapping module 138 .
- the FEC decoder 142 performs parity checks on the data block of FEC enabled received signal 140 . These parity checks are performed as sub-steps 506 , 508 , 516 , and 518 .
- the FEC decoder 142 determines parity bit sequence encodings for each row or column of the data block.
- the distribution of codewords of each encoding within a given data block may be based on the distribution of codeword encodings described above with reference to FIG. 2 . This information may, for example, be received from the transmitter 102 at startup.
- Sub-steps 508 , 516 , and 518 are performed for each row or column of the current data block.
- the FEC decoder 142 performs a parity check on the row or column. This parity check is performed as sub-steps 510 , 512 , and 514 .
- a binary vector is identified, as in method 400 of FIG. 4 .
- the binary vector corresponds to a codeword (if valid, i.e. it contains no bit errors): it consists of the parity bits of the current row or column (e.g., parity bit sequence 234 ), the data bits of the current row or column (e.g., data bit sequence 232 ), and a row or column of a prior data block (e.g., row 230 ).
- the syndrome generation module 302 is used to generate the syndrome, as described above with reference to method 400 .
- the binary vector is multiplied by the transpose of the parity check matrix for the given encoding. Syndrome generation in decoding will now be described in detail.
- the BCH decoder computes a syndrome vector s, by taking the product of ⁇ and the transpose H T of the parity check matrix H:
- ⁇ is a 1 by n vector
- s is a 1 by (n-k) vector
- H is a (n-k) by n matrix.
- the syndrome decoder module 304 detects bit errors based on the syndrome s.
- the vector s alone is the sufficient information needed to compute e.
- a BCH3 decoder can be gated (such as gated FEC decoder 142 of FIG. 3 ) to perform bit error detection, location, and correction in BCH1, BCH2, and BCH3 codewords as described below.
- Table 1 defines operations to perform in response to different values of S 1 , S 3 , S 5 , D 3 , and D 5 for a BCH3 decoder
- H 1 and H 2 are sub-matrices of H 3 (as shown above with reference to FIG. 4 ), the BCH1 decoder and BCH2 decoder may be implemented as sub-modules of the BCH3 decoder.
- a flow chart of an example gated BCH3 decoder is described in detail below with reference to FIG. 6 .
- the syndrome decoder module 304 may determine that the binary vector contains at least one bit error. In embodiments wherein the syndrome is always calculated using the BCH3 parity check matrix regardless of the encoding used for the current codeword, this determination may disregard the third element of the syndrome for BCH1 and BCH2, and may also disregard the second element of the syndrome for BCH1.
- the syndrome decoder module 304 is used to locate bit errors in the binary vector.
- the syndrome decoder module 304 corrects the bit errors, e.g., by flipping the value of the bit where the bit error is located.
- At least step 516 , and possibly step 518 in some embodiments, are performed by one of the error decoder units 306 , 308 , 310 , in accordance with the operations identified in Table 1 above.
- the syndrome decoder module 304 is configured to provide the first element of the syndrome to the one error decoder unit 306 , use the one error decoder unit 306 to locate a single bit error in the binary vector based on the first element of the syndrome, and correct the single bit error.
- the syndrome decoder module 304 is configured to calculate value D 3 by adding the cube of the first element of the syndrome to the second element of the syndrome. If D 3 is zero, the syndrome decoder module 304 is configured to provide the first element of the syndrome to the one error decoder unit 306 , use the one error decoder unit 306 to locate a single bit error in the binary vector based on the first element of the syndrome, and correct the single bit error. If D 3 is not zero the syndrome decoder module 304 is configured to provide the first and second elements of the syndrome to the two error decoder unit 308 , use the two error decoder unit 308 to locate two bit errors in the binary vector based on the first element of the syndrome, and correct the two bit errors.
- the syndrome decoder module 304 is configured to calculate value D 3 by adding the cube of the first element of the syndrome to the second element of the syndrome. If D 3 is zero, the syndrome decoder module 304 is configured to provide the first element of the syndrome to the one error decoder unit 306 , use the one error decoder unit 306 to locate a single bit error in the binary vector based on the first element of the syndrome, and correct the single bit error. If D 3 is not zero, the syndrome decoder module 304 is configured to calculate a value D 5 by adding the first element of the syndrome, raised to the fifth power, to the third element of the syndrome.
- the syndrome decoder module 304 is configured to provide the first and second elements of the syndrome to the two error decoder unit 308 , use the two error decoder unit 308 to locate two bit errors in the binary vector based on the first and second elements of the syndrome, and correct the two bit errors.
- the syndrome decoder module 304 is configured to provide the first, second, and third elements of the syndrome to the three error decoder unit 310 , use the three error decoder unit 310 to locate three bit errors in the binary vector based on the first, second, and third elements of the syndrome, and correct the three bit errors.
- the two other conditions are: first, that the first element of the syndrome, multiplied by D 5 , is not equal to the second element of the syndrome, multiplied by D 3 ; and second, that S 1 is equal to zero.
- decoding of the staircase code 200 takes place within a sliding window 250 encompassing multiple data blocks at any given time.
- the sliding window 250 shown in FIG. 2 encompasses five data blocks; however, in various example embodiments, a sliding window may be used that encompasses a greater number of data blocks n 5 .
- Each data block within the sliding window 250 is decoded one or more times, typically in a predetermined order, before the sliding window 250 slides up and to the right such that the oldest k data blocks to the left and below exit the sliding window 250 and a new k blocks to the right and above are added to the sliding window 250 , wherein 1 ⁇ k ⁇ n.
- a flexible, gated BCH3 decoder can be used to decode BCH1, BCH2, or BCH3 encoded coded bit sequences.
- the FEC encoder 112 may need to switch among three different generator matrices, the gated FEC decoder 142 may only need a single flexible, gated BCH3 decoder structure.
- a flexible gated BCH3 decoder always uses H 3 as the parity check matrix to decode BCH1, BCH2, and BCH3 codewords.
- a BCH3 syndrome generation module 302 may be used to generate the syndrome for BCH1 and BCH2 binary vectors using the single BCH parity check matrix H 3 , with the third and/or second rows of the resulting syndrome being discarded or disregarded as appropriate.
- FIG. 6 shows a flowchart of an example method 600 for locating and correcting bit errors in a binary vector of an irregular ECC using a gated FEC decoder having three error decoder units corresponding to three encodings: BCH1, BCH2, and BCH3.
- the syndrome generation module 302 calculates the syndrome for a row or column of a received data block.
- the binary vector is identified (comprising the row or column of the data block as well as a row or column of a prior data block) and multiplied by the transpose of the parity check matrix to generate the syndrome.
- the only parity check matrix used is the parity check matrix for BCH3, H 3 .
- the generated syndrome always has three rows (in its numerical representation).
- the method 600 terminates for the current binary vector. However, in response to determining that the binary vector is not a valid codeword (i.e., determining that the binary vector contains one or more bit errors), the method 600 proceeds to step 604 .
- the syndrome decoder module 304 checks whether the current codeword is a codeword of the first encoding, i.e. BCH1 in this example. If so, the method 600 proceeds to step 606 , otherwise to step 608 .
- up to one bit error is located and/or corrected in the codeword using the one bit error decoder 306 .
- the first element of the syndrome S 1 is passed to the one bit error decoder 306 to locate the bit error.
- D 3 is computed as described above with reference to FIG. 5 .
- the syndrome decoder module 304 checks whether D 3 is equal to zero. If so, the method 600 proceeds to step 606 , otherwise to step 612 .
- the syndrome decoder module 304 checks whether the current codeword is a codeword of the second encoding, i.e. BCH2 in this example. If so, the method 600 proceeds to step 614 , otherwise to step 616 .
- two bit errors are located and/or corrected in the codeword using the two bit error decoder 308 .
- the first two elements of the syndrome S 1 and S 3 are passed to the two bit error decoder 308 to locate the bit errors.
- D 5 is computed as described above with reference to FIG. 5 .
- the syndrome decoder module 304 checks whether S 1 D 5 is equal to S 3 D 3 . If so, the method 600 proceeds to step 614 , otherwise to step 620 .
- three bit errors are located and/or corrected in the codeword using the three bit error decoder 310 . All three elements of the syndrome S 1 , S 3 , and S 5 are passed to the three bit error decoder 310 to locate the bit errors
- the gated syndrome decoder module 304 comprises a first decoder unit (one error decoder unit 306 ), a second decoder unit (two error decoder unit 308 ), and a third decoder unit (three error decoder unit 310 ).
- the gated syndrome decoder module 304 is configured, in response to the syndrome generation module 302 detecting one or more bit errors, to carry out the steps of method 600 .
- the gated syndrome decoder module 304 is configured to provide at least one element of the syndrome (e.g., the first element) to the first decoder unit, use the first decoder unit to locate the bit errors in the binary vector based on the syndrome, and correct the bit errors.
- the gated syndrome decoder module 304 is configured to provide at least two elements of the syndrome (e.g., the first two elements) to the second decoder unit, use the second decoder unit to locate the bit errors in the binary vector based on the syndrome, and correct the bit errors.
- the gated syndrome decoder module 304 is configured to provide at least three elements of the syndrome (e.g., all three elements) to the third decoder unit, use the third decoder unit to locate the bit errors in the binary vector based on the syndrome, and correct the bit errors.
- a third number e.g., three
- the parity bit sequence is encoded using a third encoding (e.g., BCH3), the third number being greater than the second number
- the gated syndrome decoder module 304 is configured to provide at least three elements of the syndrome (e.g., all three elements) to the third decoder unit, use the third decoder unit to locate the bit errors in the binary vector based on the syndrome, and correct the bit errors.
- a staircase code as shown in FIG. 2 is a special case of a zipper code.
- a zipper code is characterized by two major components: a zipping pair and an interleaver map.
- a zipper code is composed of a sequence of codewords c 0 , c 1 , . . . , wherein each c i is a codeword of a constituent code C(n, k, d), and wherein n, k, and d respectively denote the block length, dimension, and minimum Hamming distance of C.
- the sequence of codewords is called a buffer.
- One can denote the (i, j)-th entry of a buffer to be the j-th entry of the i-th codeword, wherein (i, j) ⁇ ⁇ [n] and [n] ⁇ 0,1, . . . , n ⁇ 1 ⁇ .
- B i ⁇ (i,j): j ⁇ n ⁇ [m i ] ⁇
- A is called the virtual set and B is called the real set. Together, the pair (A,B) is called a zipping pair.
- the parameter m i is the width of virtual buffer at the i-th codeword. For a buffer with zipping pair (A,B), its entries are denoted by:
- c i (c A i , c B i ) ⁇ C denotes the i-th codeword
- the virtual buffer is the bit sequence ⁇ c A i ⁇
- the real buffer is the bit sequence ⁇ c B i ⁇ .
- FIG. 7A shows a visualization of an example zipper code 700 .
- Each i-th row of the visualization corresponds to the i-th codeword.
- the first row consists of a virtual buffer 702 , and a real buffer 704 , the real buffer 704 including one or more parity bits 706 .
- each codeword contains a fixed number of parity bits 706 , shown here as bit length r 718 .
- the entire codeword is of bit length n 712
- bit length k 714 is equal to the codeword length n 712 minus parity bit length r 718 .
- the virtual buffer of the first codeword is of bit length m 1 716 ; each subsequent codeword would have a bit length m 2 , m 3 , etc.
- the set of virtual buffers (“virtual set”) and set of real buffers (“real set”) are populated with data bits as dictated by the second major component of the zipper code, the interleaver map.
- An interleaver map is defined as a function
- Encoding the i-th constituent code of a zipper code is performed in three steps.
- First, the bit positions of the real buffer 704 c i,m i , . . . , c i,n-r-1 are filled in with data bits from the data signal to be encoded.
- Third, the parity symbols c i,n-r , . . . , c i,n-1 are computed using (c i,0 , . . . , c i,n-r-1 ) (i.e. the duplicate bits of virtual buffer 702 and the data bits of the real buffer 704 ) as the information bits of the codeword.
- Various encodings may be used to calculate the parity bits of a zipper code.
- various interleaver maps are possible. The presently described examples are not limited to any particular encodings scheme(s) or interleaver map.
- a sequence of several sequential codewords may be transmitted together as a unit, comparable to a data block, sometime called a chunk.
- the set of virtual buffers 702 of a chunk of codewords of a zipper code 700 may, depending on the interleaver map used, contain data bits from the set of real buffers 704 from a prior chunk.
- the rows of the zipper code are encoded and decoded using the parity bits 706 to check for errors, not only in the data bits of the current row (i.e. real buffer 704 ) of the current data block (i.e. the current chunk), but also in one or more bits of a previous data block (i.e. a prior chunk) that are interleaved into the virtual buffer 702 of the current row.
- the operation of the zipper code 700 is analogous to the operation of the staircase code, in which a given codeword in a given data block uses its parity bits to check for errors, not only in the data bits of the current row or column of the current data block, but also in data bits of a prior data block.
- the techniques described above with respect to the flexible irregular staircase code 200 may be applied equally to a zipper code.
- multiple different encodings such as BCH1/2/3 codes
- the component codes can choose from BCH1, BCH2, and BCH3 codewords all having the same block length.
- the proportions of these three different codewords within a given chunk are adjustable based on the target overhead.
- the flexible BCH3 decoder design described above with reference to method 600 of FIG. 6 can be used for flexible decoding (for both hard-decoding and soft-decoding).
- FIG. 7B shows a visualization of an example flexible irregular zipper code 750 .
- a first codeword (i.e. row) of the irregular zipper code 750 consists of a virtual buffer 752 and a real buffer 754 .
- each codeword contains a variable number of parity bits 756 , representing two or more different encodings used for the codewords.
- three encodings are shown: a first encoding 762 (e.g. BCH1), a second encoding 764 (e.g. BCH2), and a third encoding 766 (e.g. BCH3).
- a first encoding 762 e.g. BCH1
- a second encoding 764 e.g. BCH2
- a third encoding 766 e.g. BCH3
- the process of encoding and/or decoding takes place over a sliding window 776 , which may indicate the number of rows within which bits are interleaved by the interleaving map; i.e., if the sliding window is M rows tall, then a bit located within the real buffer of a row i must be duplicated in the virtual buffer of a row numbered between i ⁇ M and i+M.
- the sliding window 776 will encompass multiple chunks.
- a current chunk 772 i.e. the chunk currently being encoded
- a single real buffer 754 of the zipper code 750 may be referred to as a coded bit sequence containing parity bits and data bits.
- Each codeword contains not only the coded bit sequence (i.e. real buffer 754 ), but also a virtual buffer 752 that may contain one or more bits from a prior data block (i.e. a prior chunk, such as prior chunk 778 ).
- a FEC encoder receives a digital data signal comprising a plurality of data bits and generates a FEC enabled data signal, namely the irregular zipper code 750 .
- the FEC enabled data signal comprises a sequence of data blocks, namely chunks of the zipper code 750 .
- Each data block comprises a plurality of coded bit sequences (i.e. real buffers 754 ).
- Each coded bit sequence comprises a data bit sequence (i.e. the non-parity bits of the real buffer 754 ) comprising one or more of the data bits from the received digital data signal, and a parity bit sequence comprising one or more parity bits 756 .
- Each parity bit sequence is based on its respective data bit sequence (i.e. the rest of the real buffer 754 ) and, in some examples, one or more bits of a prior data block, e.g., interleaved duplicate bits from prior chunk 778 .
- Each data block includes at least one parity bit sequence of a first encoding 762 and at least one parity bit sequence of a second encoding 764 .
- Each parity bit sequence of the first encoding 762 has a first predetermined number of parity bits
- each parity bit sequence of the second encoding 764 has a second predetermined number of parity bits greater than the first predetermined number (e.g., BCH2 has a greater number of parity bits per codeword than BCH1).
- the FEC-enabled data signal is transmitted as described above with reference to the staircase code 200 .
- a FEC decoder receives a FEC enabled received signal comprising a sequence of data blocks (i.e., chunks of the zipper code 750 ) as described above. For each coded bit sequence (i.e. real buffer 754 ) of each received data block, the FEC decoder performs a parity check using the parity bit sequence 756 of the coded bit sequence 754 to detect, in some examples, at least one bit error in a prior data block, e.g., a bit error in prior chunk 778 .
- oFEC Open Forward Error Correction
- staircase codes Similar to staircase codes, oFEC codes can also use BCH codes as the component codes. Each bit is protected by two component codes, and they form a convolutional structure, just like the zipper codes and staircase codes described above. Instead of using hard-decoding, oFEC performs Chase-based soft-decoding, and uses sub-block permutation to increase the minimum distance. As a result, oFEC codes may have a higher input BER threshold compared to staircase codes with the same overhead.
- the Chase-based soft-decoding also utilizes hard-decision BCH decoders.
- FIG. 8 shows an example irregular oFEC code 800 using codewords of multiple encodings in varying proportions to achieve tunable FEC overhead levels, as with the irregular staircase code 200 and irregular zipper code 750 described above.
- the irregular oFEC code 800 consists of codewords spread out over multiple data blocks. Instead of row-wise and column-wise data blocks in a staircase code or chunks with interleaved duplicate bits in the zipper code, the data blocks of the oFEC code 800 may be regarded as “block rows”, each block row consisting of a number of blocks 804 , each block consisting of a number of bit rows 806 .
- a codeword of the irregular oFEC code 800 consists of a horizontal bit row 804 spanning an entire block row, and multiple vertical segments located in blocks 804 of prior block rows 802 .
- a first codeword is shown consisting of horizontal bit row 810 and multiple vertical segments 812 .
- a second codeword is shown consisting of horizontal bit row 820 and multiple vertical segments 822 .
- the vertical segments are defined by bits spanning multiple prior horizontal bit rows of prior codewords, such as the first vertical segment 830 of the second codeword intersecting with the horizontal bit row 810 of the first codeword. This is analogous to the intersection of a codeword (e.g. a row-wise codeword) of a current data block of the staircase code 200 with multiple codewords (e.g. column-wise codewords) of a prior block.
- the irregular oFEC code 800 can implement the techniques described above with respect to the irregular zipper code 750 .
- a flexible irregular oFEC design like the irregular oFEC code 800 may have all the benefits of the flexible irregular staircase code 200 . Compared to staircase codes, oFEC codes may offer stronger protection to the bits due to their soft-decoding and increased minimum distance, at the cost of higher decoding complexity.
- the present disclosure is described, at least in part, in terms of methods, a person of ordinary skill in the art will understand that the present disclosure is also directed to the various components for performing at least some of the aspects and features of the described methods, be it by way of hardware components, software or any combination of the two. Accordingly, the technical solution of the present disclosure may be embodied in the form of a software product.
- a suitable software product may be stored in a pre-recorded storage device or other similar non-volatile or non-transitory computer readable medium, including DVDs, CD-ROMs, USB flash disk, a removable hard disk, or other storage media, for example.
- the software product includes instructions tangibly stored thereon that enable a processor device (e.g., a personal computer, a server, or a network device) to execute examples of the methods disclosed herein.
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Probability & Statistics with Applications (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Algebra (AREA)
- General Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Quality & Reliability (AREA)
- Error Detection And Correction (AREA)
- Detection And Prevention Of Errors In Transmission (AREA)
Abstract
Methods and devices for performing rate adaptive forward error correction using a flexible irregular error-correcting code, such as a staircase code. Each codeword of the ECC uses one of two or more different encodings, each encoding having a different number of parity bits. By adjusting the proportions of codewords of each encoding included in a data block, the FEC overhead can be finely adjusted, achieving flexible levels of FEC overhead in response to increased or decreased noise or perturbations in a communication channel. Three types of flexible irregular zipper codes are described: general zipper codes, staircase codes, and oFEC codes.
Description
- This is the first patent application related to this matter.
- The present disclosure is related to forward error correction in digital communications, and in particular to methods and devices for rate adaptive forward error correction using a flexible irregular error correcting code.
- Most modern fiber-optic communication systems employ forward-error-correction (FEC) to protect data from channel perturbations and noise. In a typical FEC configuration, a redundancy overhead is added to the payload data at the transmitter side, using an encoding called an error correcting code (ECC). The ECC allows for errors to be detected and corrected, up to a certain threshold, at the receiver side. The threshold depends on the amount and type of coding overhead and the type of error pattern. A higher bit error rate (BER) threshold improves error correction performance but may introduce higher error correction overhead to the ECC and therefore lower data throughput. Overhead is introduced to the ECC in the form of error correction bits added to each block of data bits during ECC encoding. The higher the ratio of non-data bits to data bits in a given block of the output signal, the higher the overhead and the lower the throughput.
- Typically, a FEC module achieves error correction by performing an error detection check on a single bit sequence of the received signal. The bit sequence includes a plurality of data bits of payload data and one or more non-data bits added by the ECC encoding process, such as parity bits. Parity bits are set by the ECC encoder at the transmitter based on the bit values of the data bits in the sequence according to a mathematical calculation. The FEC module at the receiver can perform a corresponding mathematical calculation using the received data bits and parity bits of the sequence to confirm whether the bit sequence constitutes an ECC codeword, i.e. whether the bit sequence complies with the ECC encoding scheme and therefore contains no bit errors. If the calculation performed by the receiver indicates that bit errors are present, the parity bits can typically also be used by the FEC module to locate the specific bit errors present in the bit sequence and thereby flip those bits to correct the bit errors.
- The BER threshold is typically defined, in optical communication systems, as the maximum input BER (i.e. the BER of the received signal) at which the output BER (i.e. the BER of the error-corrected output signal) remains below 1e-15. Given a target input BER threshold, an optimally efficient FEC would use the minimum amount of overhead (OH) to correct the target number of errors. In some instances, overhead is constant per codeword: the ECC encoder at the transmitter encodes a codeword by adding a fixed number of payload data bits to a fixed number of parity bits. Using a higher number of parity bits relative to the number of data bits in the codeword increases overhead but may allow for more bit errors to be detected and/or corrected per bit sequence.
- Some modern optical modems are able to accommodate a range of transmission distances and channel conditions. Various techniques are used to achieve such flexibility, such as different quadrature amplitude modulation (QAM) constellation designs (e.g., from 16 QAM to 64 QAM to 128 QAM), and probabilistic constellation shaping (PCS). These techniques, applied to various optical channel noise levels, lead to a range of different input BER levels at the receiver, and therefore require variable and adaptable levels of FEC overhead in order to achieve high spectral efficiency.
- In PCS, the constellation points have unequal probabilities of being transmitted. This may be achieved by having unequal numbers of 0's and 1's in the data bits and using a systematic FEC which preserves the information bits in the encoded sequence (with unequal numbers of 0's and 1's). In this case, the mapping function sees different constellation point labels with unequal probabilities, and therefore outputs constellation points with unequal probabilities. This allows some designs to transmit the constellation points with low magnitude (i.e. low energy) more frequently than the constellation points with high magnitude (i.e. high energy). Thus, given a constant signal-to-noise ratio (SNR), the Euclidean distance between the constellation points is greater compared to uniform constellation distribution, the input BER at the receiver is reduced accordingly, and the FEC overhead can be reduced. However, by limiting the number of 0's and 1's in the data bits, the entropy of the data bit sequence is reduced, and the effective data rate (i.e. throughput) is sacrificed. To achieve an optimal data rate, the PCS distributions must be configured in accordance with different channel conditions in order to balance PCS and FEC overhead. With the optimal PCS design, the required FEC overhead varies as a function of the channel SNR and optical transmission distance, as demonstrated by J. Cho and P. J. Winzer, “Probabilistic Constellation Shaping for Optical Fiber Communications”, Journal of Lightwave Technology, vol. 37, no. 6, pp. 1590-1607, 15 Mar. 2019, which is hereby incorporated by reference in its entirety.
- A number of approaches have been made to achieving variable FEC overhead in optical modems. However, each existing approach has various drawbacks.
- A first approach is referred to as shortening. A modem is used having a single FEC module with a fixed overhead. One may achieve higher overhead and higher error-correcting capability by shortening the number of data bits included in each codeword (i.e. shortening the data bit sequence included in the codeword), or achieve a lower overhead and lower error-correcting capability by puncturing the FEC.
- To shorten a FEC, certain bit positions in a codeword are fixed in value (e.g., 0) prior to the transmission, with these positions being known to both the transmitter and the receiver. Therefore, the bits in these locations do not need to be transmitted, and are set to the fixed value directly at the receiver. Since these locations cannot be used to transmit any payload data, the number of data bits per codeword is decreased relative to the fixed number of parity bits, and therefore the effective overhead of the FEC increased. However, since these bit locations will not have errors, the number of potentially erroneous data bits is decreased relative to the fixed number of parity bits per codeword, such that the effective tolerable input BER is also increased.
- To puncture a FEC, certain bit positions in a codeword, after encoding, are omitted from the transmission, with the positions known to both the transmitter and receiver. The receiver FEC treats these locations as erasures while performing decoding. The process reduces the number of bits transmitted over the channel for a given bit sequence, lowers the effective overhead, and lowers the tolerable input BER.
- Shortening and puncturing have a number of drawbacks. The shortened or punctured FEC module typically has worse performance compared to a FEC module specifically designed for the same effectively overhead. Furthermore, shortening and puncturing both change the transmitted number of bits for a given codeword. Hence, different overhead levels require different transmitted block lengths, different framing structures, and different buffer sizes at the receiver. This imposes additional complexity in hardware implementations.
- A second approach to variable FEC overhead is to use a modem having several FEC modules, each designed to target a different input BER. The drawbacks of having several such FEC modules is the high complexity imposed on both the FEC design and the modem implementation. This high complexity constrains the number of FEC modules that can be included in the modem, which leads to a limited number of FEC overhead levels that can be supported.
- There thus exists a need for an ECC encoding and decoding scheme having variable FEC overhead that overcomes one or more of the drawbacks of the existing approaches.
- In various embodiments described herein, methods and devices are disclosed that provide rate adaptive forward error correction using a flexible irregular error-correcting code, such as a staircase code. In some embodiments, each codeword of the ECC uses one of two or more different encodings, each encoding having a different number of parity bits. By adjusting the proportions of codewords of each encoding included in a data block, the FEC overhead can be finely adjusted in some examples, achieving flexible levels of FEC overhead in response to increased or decreased noise or perturbations in a communication channel.
- Some embodiments may overcome one or more of the drawbacks of the existing approaches described above. In some examples, each ECC codeword has a fixed length but a reconfigurable division between data bits and parity bits, thereby providing a tunable or variable level of FEC overhead without requiring different transmitted block lengths, different framing structures, or different buffer sizes at the receiver, and without incurring the performance losses resulting from shortening or puncturing. In some examples, a small number of encodings (such as two or three) with distinct FEC overhead levels are used, thereby requiring only a small number of FEC decoding units, but a given data block can include a mix of codewords of each encodings in different proportions to achieve a highly granular level of desired overall FEC overhead per data block. In some examples, a single gated FEC decoder can be used by the receiver to perform FEC on each of two or more encodings, thereby minimizing the complexity associated with multiple parallel FEC modules. Other potential advantages may be appreciated based on the disclosure as a whole.
- As described herein, a “signal” or “data signal” may refer to a digital signal containing some number of payload data bits (also called “data bits” or “information bits”) as well as, optionally, some number of ECC bits (also called “parity bits” or “overhead bits”) used for performing FEC decoding, error detection, and error correction. The bits of a signal may be visualized as being organized into two-dimensional “data blocks” according to an organizational scheme known to (i.e., mutually predetermined by) both the transmitter and receiver. An ongoing signal may thus constitute a stream of bits, the stream of bits being periodically organized into data blocks by an encoder or a decoder. The bits of a signal may thus be conceived of as a sequence of data blocks that are transmitted and/or received, even if the constituent bits are transmitted and/or received as a linear sequence of bits. A sequence of data blocks may be transmitted, for example, starting with an initial data block, and followed by a subsequent data block in the sequence; the initial data block may thus be regarded as a “prior” data block in the sequence relative to the subsequent data block. This relationship of prior and subsequent data blocks continues to hold as each further subsequent data block is encoded, decoded, transmitted, and/or received.
- As used herein, an error correcting code (ECC) is a code used for error correction. Different types of ECCs are encoded and decoded according to different FEC encoding and decoding schemes. Example FEC encoding and decoding schemes are described herein for encoding and decoding ECCs. Examples of ECCs include zipper codes and product codes. Zipper codes include staircase codes and oFEC (open forward error correction) codes as special cases, but zipper codes may also be described in general terms.
- A “bit error” (or simply “error”) may refer to a bit of a signal that has been corrupted by noise or other impairment in transit across a communication channel, yielding a different bit value as detected at the receiver than the corresponding bit value set by the transmitter.
- As used herein, statements that a second item (e.g., a signal, value, scalar, vector, matrix, calculation, or bit sequence) is “based on” a first item may mean that characteristics of the second item are affected or determined at least in part by characteristics of the first item. The first item may be considered an input to an operation or calculation, or a series of operations or calculations, that produces the second item as an output that is not independent from the first item.
- Data blocks as described herein may be conceptualized as two-dimensional bit arrays in the context of staircase codes. Some data blocks (called “row-wise” data blocks) may be organized as a sequence of codewords corresponding to rows of the data block, whereas other data blocks (called “column-wise” data blocks) may be organized as a sequence of codewords corresponding to columns of the data block. All operations and characteristics described herein with respect to data blocks may refer to rows of a row-wise data block or columns of a column-wise data block; unless otherwise indicated, these references will be appreciated to apply equally to both types of data blocks, with row and column references replaced with their counterparts as appropriate. Thus, references to rows or columns in a given example are arbitrary; row-wise and column-wise data blocks may be encoded and decoded according to identical principles in some embodiments.
- As used herein, a “coded bit sequence” may refer to a bit sequence of a data block of an encoded ECC containing both parity bits and data bits, such as a row or column of a data block of a staircase code, a real buffer of a codeword of a zipper code, or a horizontal portion of a codeword of an oFEC code.
- The term “codeword”, sometimes understood in the context of FEC to mean a well-formed (i.e. error-free) encoded bit sequence of an ECC, may be used herein to mean both valid (i.e. error-free) and invalid (i.e., containing errors) codewords. An invalid codeword may be a valid codeword with bit errors introduced, e.g., as a result of transmission. In FEC decoding, it may be unknown whether a given codeword is invalid or valid before it is decoded.
- In the context of zipper and oFEC codes, the meaning of the terms “data block”, “prior data block”, and “coded bit sequence” are defined below in reference to
FIGS. 7A, 7B, and 8 . - Unless otherwise indicated, parity check matrices are described herein as numerical format matrices, not binary format matrices, such that the entries of the parity check matrix are numbers of a Galois field, not individual bits. Thus, when a parity check matrix is described as having a given number of rows, this refers to the Galois field number representation of the matrix, not a binary representation of the matrix.
- According to a first aspect, the disclosure provides a method. A digital data signal is received by a forward error correction (FEC) encoder of a transmitter, comprising a plurality of data bits. A FEC enabled data signal is generated by the FEC encoder. The FEC enabled data signal comprises a sequence of data blocks. Each data block comprises a plurality of coded bit sequences. Each coded bit sequence comprises a data bit sequence comprising one or more of the data bits and a parity bit sequence comprising one or more parity bits. Each parity bit sequence is based on its respective data bit sequence and one or more bits of a prior data block. Each data block includes at least one parity bit sequence of a first encoding and at least one parity bit sequence of a second encoding. Each parity bit sequence of the first encoding has a first predetermined number of parity bits. Each parity bit sequence of the second encoding has a second predetermined number of parity bits greater than the first predetermined number. (A number is “predetermined” when it is defined or otherwise decided upon in any fashion at any time prior to the time the number is applied.) The FEC-enabled data signal is transmitted.
- In some examples, the FEC enabled data signal is encoded as a staircase code. The sequence of data blocks alternates between row-wise data blocks and column-wise data blocks. The plurality of coded bit sequences of each row-wise data block comprise a plurality of rows. The plurality of rows define a plurality of columns. Each parity bit sequence is based on its respective data bit sequence and a corresponding row of a prior column-wise data block. The plurality of coded bit sequences of each column-wise data block comprise a plurality of columns. The plurality of columns define a plurality of rows. Each parity bit sequence is based on its respective data bit sequence and a corresponding column of a prior row-wise data block.
- In some examples, at least one data block of the sequence of data blocks contains at least one parity bit sequence of a third encoding, each parity bit sequence of the third encoding having a third predetermined number of parity bits greater than the second predetermined number.
- In some examples, each data block of the sequence of data blocks includes a first number of parity bit sequences of the first encoding, a second number of parity bit sequences of the second encoding, and a third number of parity bit sequences of the third encoding. The first number, second number, and third number are determined based on a target error correction overhead level. The method further comprises receiving channel condition information, updating the target error correction overhead level based on the channel condition information, and changing the first number, second number, and third number based on the updated target error correction overhead level.
- In some examples, for each data block, the parity bit sequences of each encoding are distributed among the rows or columns such that a number of adjacent parity bit sequences of the same encoding is minimized.
- In some examples, each row-wise data block has the same distribution of parity bit sequences of each encoding among its rows, and each column-wise data block has the same distribution of parity bit sequences of each encoding among its columns.
- In some examples, the method further comprises generating a parity bit sequence in a row-wise data block. A binary vector is identified, comprising an unknown parity bit sequence, the data bits of the row of the parity bit sequence in the row-wise data block, and the bits of the corresponding row of the prior column-wise data block. A valid parity bit sequence is identified such that, by setting the unknown parity bit sequence to the valid parity bit sequence and multiplying the binary vector by a transpose of a parity check matrix to generate a syndrome, the syndrome comprising a vector having a number of elements equal to a number of rows of the parity check matrix, each element of the syndrome is equal to zero. The parity bit sequence is set to the valid parity bit sequence.
- In some examples, the parity bit sequence is of the first encoding. The parity check matrix comprises a one row matrix defined by a primitive element α of a Galois field such that the first element of the parity check matrix is one, and each subsequent element of the parity check matrix is a times the previous element.
- In some examples, the parity bit sequence is of the second encoding. The parity check matrix comprises a two row matrix defined by a primitive element α of a Galois field such that the first element of the first row of the parity check matrix is one, each subsequent element of the first row of the parity check matrix is a times the previous element, the first element of the second row of the parity check matrix is one, and each subsequent element of the second row of the parity check matrix is α3 times the previous element.
- In some examples, the parity bit sequence is of the third encoding. The parity check matrix comprises a three row matrix defined by a primitive element α of a Galois field such that the first element of the first row of the parity check matrix is one, each subsequent element of the first row of the parity check matrix is α times the previous element, the first element of the second row of the parity check matrix is one, each subsequent element of the second row of the parity check matrix is α3 times the previous element, the first element of the third row of the parity check matrix is one, and each subsequent element of the third row of the parity check matrix is α5 times the previous element.
- According to a further aspect, the disclosure provides a method. A forward error correction (FEC) enabled received signal is received by a FEC decoder of a receiver. The FEC enabled received signal comprises a sequence of data blocks. Each data block comprises a plurality of coded bit sequences. Each coded bit sequence comprises a data bit sequence comprising one or more data bits and a parity bit sequence comprising one or more parity bits. Each data block includes at least one parity bit sequence of a first encoding and at least one parity bit sequence of a second encoding. Each parity bit sequence of the first encoding has a first predetermined number of parity bits. Each parity bit sequence of the second encoding has a second predetermined number of parity bits greater than the first predetermined number. For each coded bit sequence of each received data block, a parity check is performed by the FEC decoder using the parity bit sequence of the coded bit sequence to detect at least one bit error in a prior data block.
- In some examples, the sequence of data blocks alternates between row-wise data blocks and column-wise data blocks. The plurality of coded bit sequences of each row-wise data block comprise a plurality of rows. Each row comprises a data bit sequence comprising one or more of the data bits and a parity bit sequence comprising one or more parity bits. The plurality of rows defines a plurality of columns. The plurality of coded bit sequences of each column-wise data block comprise a plurality of columns. Each column comprises a data bit sequence comprising one or more of the data bits and a parity bit sequence comprising one or more parity bits. The plurality of columns define a plurality of rows. Performing a parity check using the parity bit sequence of a row of a row-wise data block comprises using the parity bit sequence to detect at least one bit error in the corresponding row of a prior column-wise data block. Performing a parity check using the parity bit sequence of a column of a column-wise data block comprises using the parity bit sequence to detect at least one bit error in the corresponding column of a prior row-wise data block.
- In some examples, at least one data block of the sequence of data blocks contains at least one parity bit sequence of a third encoding, each parity bit sequence of the third encoding having a third predetermined number of parity bits greater than the second predetermined number.
- In some examples, each row-wise data block has the same distribution of parity bit sequences of each encoding among its rows, and each column-wise data block has the same distribution of parity bit sequences of each encoding among its columns.
- In some examples, detecting a bit error in the corresponding row of the prior column-wise data block using a parity bit sequence comprises identifying a binary vector comprising the parity bit sequence, the data bits of the row of the row-wise data block, and the bits of the corresponding row of the prior column-wise data block. The binary vector is multiplied by a transpose of a parity check matrix to generate a syndrome. The syndrome comprises a vector having a number of elements equal to a number of rows of the parity check matrix. Based on the elements of the syndrome, the binary vector is determined to contain at least one bit error.
- In some examples, the parity bit sequence is of the first encoding. The parity check matrix comprises a one row matrix defined by a primitive element α of a Galois field such that the first element of the parity check matrix is one, and each subsequent element of the parity check matrix is α times the previous element. The method further comprises, in response to determining that the first element of the syndrome is not zero, using a syndrome decoder module of the FEC decoder to correct the one or more detected errors. The syndrome decoder module is configured to provide the first element of the syndrome to a one-error decoder unit of the FEC decoder, use the one-error decoder unit to locate a single bit error in the binary vector based on the first element of the syndrome, and correct the single bit error.
- In some examples, the parity bit sequence is of the second encoding. The parity check matrix comprises a two row matrix defined by a primitive element α of a Galois field such that the first element of the first row of the parity check matrix is one, each subsequent element of the first row of the parity check matrix is α times the previous element, the first element of the second row of the parity check matrix is one, and each subsequent element of the second row of the parity check matrix is α3 times the previous element. The method further comprises, in response to determining that the first element or second element of the syndrome is not zero, using a syndrome decoder module of the FEC decoder to correct the one or more detected errors. The syndrome decoder module is configured to calculate a value D3 by adding the cube of the first element of the syndrome to the second element of the syndrome. If D3 is zero, the syndrome decoder module is configured to provide the first element of the syndrome to a one-error decoder unit of the FEC decoder, use the one-error decoder unit to locate a single bit error in the binary vector based on the first element of the syndrome, and correct the single bit error. If D3 is not zero, the syndrome decoder module is configured to provide the first and second elements of the syndrome to a two-error decoder unit of the FEC decoder, use the two-error decoder unit to locate two bit errors in the binary vector based on the first element of the syndrome, and correct the two bit errors.
- In some examples, the parity bit sequence is of the third encoding. The parity check matrix comprises a three row matrix defined by a primitive element α of a Galois field such that the first element of the first row of the parity check matrix is one, each subsequent element of the first row of the parity check matrix is α times the previous element, the first element of the second row of the parity check matrix is one, each subsequent element of the second row of the parity check matrix is α3 times the previous element, the first element of the third row of the parity check matrix is one, and each subsequent element of the third row of the parity check matrix is α5 times the previous element. The method further comprises, in response to determining that any of the three elements of the syndrome is not zero, using a syndrome decoder module of the FEC decoder to correct the one or more detected errors. The syndrome decoder module is configured to calculate a value D3 by adding the cube of the first element of the syndrome to the second element of the syndrome. If D3 is zero, the syndrome decoder module is configured to provide the first element of the syndrome to a one-error decoder unit of the FEC decoder, use the one-error decoder unit to locate a single bit error in the binary vector based on the first element of the syndrome, and correct the single bit error. If D3 is not zero, the syndrome decoder module is configured to calculate a value D5 by adding the first element of the syndrome, raised to the fifth power, to the third element of the syndrome, if the first element of the syndrome, multiplied by D5, is equal to the second element of the syndrome, multiplied by D3 provide the first and second elements of the syndrome to a two-error decoder unit of the FEC decoder, use the two-error decoder unit to locate two bit errors in the binary vector based on the first and second elements of the syndrome, and correct the two bit errors. If the first element of the syndrome, multiplied by D5, is not equal to the second element of the syndrome, multiplied by D3, or the first element of the syndrome is equal to zero, the syndrome decoder module is configured to provide the first, second, and third elements of the syndrome to a three-error decoder unit of the FEC decoder, use the three-error decoder unit to locate three bit errors in the binary vector based on the first, second, and third elements of the syndrome, and correct the three bit errors.
- In some examples, the syndrome decoder module is a gated syndrome decoder module further configured to detect and correct bit errors in the data bit sequence of a row of a row-wise data block or in the corresponding row of the prior column-wise data block using a parity bit sequence of the first encoding or second encoding.
- According to a further aspect, a forward error correction (FEC) decoder is provided. The FEC decoder comprises a syndrome generation module configured to receive a forward error correction (FEC) enabled received signal. The FEC enabled signal comprises a sequence of data blocks. The syndrome generation module is configured to, for a coded bit sequence of a received data block, perform a parity check using a parity bit sequence of the coded bit sequence to detect any bit errors in a binary vector based on one or more elements of a calculated syndrome. The binary vector comprises the parity bit sequence, the data bit sequence of the coded bit sequence, and one or more bits of a prior data block. The FEC decoder comprises a gated syndrome decoder module comprising a first decoder unit and a second decoder unit. The gated syndrome decoder module is configured, in response to the syndrome generation module detecting one or more bit errors, to perform several steps. If a first number of bit errors are detected based on the syndrome, or if the parity bit sequence is encoded using a first encoding provide at least one element of the syndrome to the first decoder unit, the gated syndrome decoder module is configured to use the first decoder unit to locate the bit errors in the binary vector based on the syndrome, and correct the bit errors. If a second number of bit errors are detected based on the syndrome, and if the parity bit sequence is encoded using a second encoding, the second number being greater than the first number, the gated syndrome decoder module is configured to provide at least one element of the syndrome to the second decoder unit, use the second decoder unit to locate the bit errors in the binary vector based on the syndrome, and correct the bit errors.
- Reference will now be made, by way of example, to the accompanying drawings which show example embodiments of the present application, and in which:
-
FIG. 1 is a block diagram of an optical communication system showing an example of an environment in which example embodiments of the present disclosure may operate. -
FIG. 2 is a schematic diagram of a flexible irregular staircase code used for forward error correction, in accordance with examples described herein. -
FIG. 3 is a block diagram of an example FEC decoder usable in the example optical receiver ofFIG. 1 , in accordance with examples described herein. -
FIG. 4 is a flowchart of an example method for encoding the staircase code ofFIG. 2 , in accordance with examples described herein. -
FIG. 5 is a flowchart of an example method for decoding the staircase code ofFIG. 2 to detect and correct bit errors in a received signal, in accordance with examples described herein. -
FIG. 6 is a flowchart of an example method for locating and correcting bit errors in an irregular ECC using a gated FEC decoder having three error decoder units, in accordance with examples described herein. -
FIG. 7A is a visualization of a conventional zipper code. -
FIG. 7B is a visualization of a flexible irregular zipper code used for forward error correction, in accordance with examples described herein. -
FIG. 8 is a schematic diagram of a flexible irregular oFEC code used for forward error correction with an expanded detail view of a single block of a block row, in accordance with examples described herein. - Similar reference numerals may be used in different figures to denote similar components.
- In examples disclosed herein, methods and devices are described that provide rate adaptive forward error correction using a flexible irregular error-correcting code, such as a staircase code. In some embodiments, each codeword of the ECC uses one of two or more different encodings, each encoding having a different number of parity bits. By adjusting the proportions of codewords of each encoding included in a data block, the FEC overhead can be finely adjusted in some examples, achieving flexible levels of FEC overhead in response to increased or decreased noise or perturbations in a communication channel.
-
FIG. 1 shows a simplified block diagram of anoptical communication system 100 using FEC. Example embodiments will be described with reference to this exampleoptical system 100, as part of an optical transmitter 102 (also referred to simply as transmitter 102) and/oroptical receiver 104 also called simply receiver 104). It will be appreciated that the present disclosure is not limited to photonic or optical communication but may also be used for FEC in an electrical, radio-frequency, or other wired or wireless digital communication system, and that the use of the terms “transmitter” or “receiver” may refer to any type of transmitter or receiver using FEC. - The
transmitter 102 transmits data through anoptical channel 106 such as a fiber-optic channel, and thereceiver 104 receives the data after it has passed through theoptical channel 106. By using FEC, a very low error probability can be achieved, e.g., a bit error rate (BER) of below 1e-15 in some implementations. - At the
transmitter 102, a digital data signal comprising a plurality of data bits 110 (i.e. information bits) goes throughFEC encoder 112 to generate encoded bits in the form of a FEC enabled data signal 114. The FEC enabled data signal 114 may be a staircase code or other ECC in some embodiments, as described in greater detail below with reference toFIG. 2 . The operation of theFEC encoder 112 in some embodiments is described in greater detail below with reference toFIG. 4 . - The total number of encoded bits (Lc) of the FEC enabled data signal 114 is typically greater than the total number of data bits (Li). The quantity (Lc-Li)/Li is called the overhead (OH) of the FEC, while the quantity r=Li/Lc is called the code rate of the FEC. The FEC enabled data signal 114 is received by a mapping and
pulse shaping module 116, which applies mapping to translate the encoded bits of the FEC enabled data signal 114 to discrete constellation points, according to some constellation label design, then converts the constellation points to digital pulses according to some pre-defined pulse-shaping function, thereby generating a digitalelectrical signal 118. A pre-equalizer 120 is optionally used on the transmitter side to compensate for some of the channel distortions, thereby generating an equalized digitalelectrical signal 122 from the digitalelectrical signal 118, which is modulated into an analogoptical signal 126 by amodulation module 124. - At the
receiver 104, the received analogoptical signal 128 received over theoptical channel 106, demodulated to a digitalelectrical signal 132 by ademodulation module 130, and equalized to generate an equalized digitalelectrical signal 136 by a post-equalizer 134, which compensates for the most of the remaining channel distortions. However, the post-equalizer cannot generally compensate for noise introduced by theoptical channel 106. Ademapping module 138 then translates the equalized digitalelectrical signal 136 back to a bit sequence, which is equivalent to the encoded bits from the transmitter with errors introduced from theoptical channel 106. This bit sequence may be referred to in some examples as a FEC enabled receivedsignal 140. AFEC decoder 142 is used to correct most of the errors of the FEC enabled receivedsignal 140 and produce recovered information bits, which may be referred to in some examples as an error-correcteddigital signal 144. The probability for a recovered information bit of the error-correcteddigital signal 144 to be erroneous is designed to be lower than 1e-15 in some embodiments. The operation of theFEC decoder 142 in some embodiments is described in greater detail below with reference toFIG. 5 . - Different FEC encoding and decoding schemes, or ECCs, may be used in various embodiments. In some embodiments, the ECC is a staircase code. In some embodiments, the ECC is a non-staircase zipper code. In some embodiments, the ECC is an oFEC code. Example embodiments will be described in the context of a staircase code with reference to
FIGS. 2-6 , and non-staircase alternatives will then be described with reference toFIGS. 7A, 7B, and 8 . - One family of widely used ECCs in optical systems is the family of spatially-coupled product-like codes with Bose-Chaudhuri-Hocquenghem (BCH) component codes (also called BCH codes or BCH encodings), as described by A. Y. Sukmadji, U. Martínez-Peñas and F. R. Kschischang, “Zipper Codes: Spatially-Coupled Product-Like Codes with Iterative Algebraic Decoding”, 2019 16th Canadian Workshop on Information Theory (CWIT), Hamilton, ON, Canada, 2019, pp. 1-6, (hereinafter “Sukmadji”) which is hereby incorporated by reference in its entirety. In this family of codes, each bit is protected by two BCH component codewords. Some examples include product codes, staircase codes, oFEC codes, and zipper codes. Product codes are described in greater detail by P. Elias, “Error-free coding”, IEEE Trans. Inf. Theory, vol. 4, no. 4, pp. 29-37, September 1954, which is hereby incorporated by reference in its entirety, and are briefly described immediately below. Staircase codes are described in greater detail by B. Smith, A. Farhood, A. Hunt, F. Kschischang, and J. Lodge, “Staircase Codes: FEC for 100 Gb/s OTN”, J. Lightwave Technol. 30, 110-117, 2012, which is hereby incorporated by reference in its entirety, and are briefly described below with reference to
FIG. 2 . oFEC is described in detail by Point-to-Point Coherent Optics Physical Layer 2.0 Specification P2PCO-SP-PHYv2.0-I01-190311, which is hereby incorporated by reference in its entirety, and described briefly below in reference toFIG. 8 . Zipper codes are described in greater detail by Sukmadji, supra, and are briefly described below with reference toFIGS. 7A-7B . - BCH codes form a class of cyclic error-correcting codes that are constructed using polynomials over a finite field (also called a Galois field). One of the key features of BCH codes is that during code design, there is a precise control over the number of symbol errors correctable by the code. In particular, it is possible to design binary BCH codes that can correct multiple bit errors. Another potential advantage of BCH codes is the ease with which they can be decoded, namely, via an algebraic method known as syndrome decoding. This may simplify the design of a
FEC decoder 142 using BCH codes, allowing it to use small low-power electronic hardware. - Thus, there are simple algebraic ways to solve for the error locations in 1-, 2-, or 3-error-correction BCH codes (called BCH1, BCH2, and BCH3 respectively, with a 1-error-correcting BCH1 code also being known as a Hamming code). Many spatially-coupled product-like ECCs employed in optical systems use BCH codes which can correct 3 errors or fewer (i.e. BCH1, BCH2, or BCH3), to benefit from the low complexity of the FEC decoder design.
- Product codes organize bits into rectangular arrays, or data blocks, consisting of a number of rows and a number of columns. In a product code, each bit is part of both a “row codeword” and a “column codeword”. Thus, each row contains a number of parity bits at one end, and each column contains a number of parity bits at one end, creating a vertical parity edge (e.g., visualized as a right edge of the rectangle) and a horizontal parity edge (e.g., visualized as the bottom edge of the rectangle) of a fixed number of parity bits. The corner where the parity bits of the two parity edges overlap (e.g., visualized as the bottom right corner of the rectangle) is effectively a “parity on parity” area, consisting of parity bits used to perform error checking on codewords consisting entirely of parity bits. This parity on parity area represents wasted bits that cannot be eliminated through puncturing without reducing the performance of a product code. Thus, there is a need to reduce the size of the parity on parity area in each data block to increase efficiency and throughput.
- Whereas a conventional product code uses a single type of component code throughout, there have also been proposals for designing irregular product codes, wherein the rows of the data block have a varying number of parity bits. The number of parity bits starts at a relatively high number at a first end of each of the two parity edges, and tapers down to zero or relatively few parity bits as the parity edges approach the corner where they would ordinarily overlap. Some irregular product code designs may provide more fixed overhead options and better performance relative to conventional product codes. However, they do not provide flexible (used herein to mean dynamically reconfigurable or tunable) overhead levels, and they also have the consequence of offering uneven bit protection levels (i.e., if the parity edges are the right and bottom edges, the bits located in the bottom right corner experience the weakest protection level, whereas bits located in the top left corner experience the strongest protection level).
- Product codes are block codes that are encoded and decoded one data block at a time independently of other data blocks in a data block sequence. In contrast, staircase codes exhibit a convolutional structure, which never terminates. A staircase code can be visualized as a sequence of rectangular data blocks stacked in a staircase-like structure, with a second data block positioned to the right of an initial data block, a third data block positioned above the second data block, a fourth data block to the left of the third data block, and so on. Each row and column of the “staircase” forms a codeword: thus, each row of the initial data block is concatenated to the corresponding row of the second data block to form a single row-wise codeword, whereas each column of the second data block is concatenated with the corresponding column of the third data block to form a single column-wise codeword, and so on. In this example, the second data block may be referred to as a “row-wise” data block, whereas the third data block may be referred to as a “column-wise” data block. Typically, a row-wise data block includes an edge of parity bits at its edge distal from the prior data block (i.e. the right edge of the second data block in this example), and a column-wise data block includes an edge of parity bits at its edge distal from the prior data block (i.e. the top edge of the third data block in this example). Due to the convolutional structure of a staircase code, an iterative sliding window decoding can be employed, in which the prior sub-blocks can help the current block detect and correct errors. As a result, staircase codes usually have higher input BER thresholds relative to product codes, given the same overhead.
- The present disclosure describes embodiments in which a single decoder structure may be used to decode codewords with different overhead levels. The decoder in some embodiments has low design and implementation complexity, allows the overhead level to be finely tuned and dynamically reconfigured, and achieves performance on par with or superior to existing approaches. One or more advantages relative to shortening, including low hardware design complexity, low implementation complexity, high tenability, and/or better performance, may be achieved in some embodiments using spatially-coupled product-like codes with irregular BCH component codes (1-, 2-, or 3-error correcting BCH), without increasing algorithmic design complexity. The three types of codewords (BCH1, BCH2, and BCH3) can all be decoded in some embodiments by a gated version of a BCH3 decoder, resulting in low design and decoding complexity. In some embodiments, the proportions of the three BCH codes can be adjusted based on the target overhead level, achieving high tenability. The performance of some embodiments may exceed shortening.
- A first example base code structure for the flexible irregular ECC, namely a flexible irregular staircase code, is now described in detail with reference to
FIG. 2 . -
FIG. 2 shows a schematic diagram of a flexible irregular staircase code used for forward error correction in accordance with some embodiments described herein. Theirregular staircase code 200 is a sequence of data blocks, including, in sequence, aninitial data block 202, a first row-wise data block 204, a first column-wise data block 206, a second row-wise data block 208, a second column-wise data block 210, and a third row-wise data block 212. Thus, the initial data block 202 would be encoded and transmitted prior to the first row-wise data block 204 and would constitute a “prior” data block relative to the first row-wise data block 204. The transmitter'sFEC encoder 112 receives the digital data signal 110 and encodes it into theirregular staircase code 200 as the sequence of data blocks, alternating between row-wise data blocks and column-wise data blocks. Similarly, the receiver'sFEC decoder 142 receives the FEC enabled receivedsignal 140 and decodes it into the sequence of data blocks making up theirregular staircase code 200. - Each row-wise data block 204, 208, 212 comprises a plurality of rows. Each row comprises a data bit sequence (e.g., data bit
sequence 232 of first row-wise data block 204) comprising one or more of the data bits, and a parity bit sequence (e.g.,parity bit sequence 234 of second row-wise data block 204), comprising one or more parity bits. Collectively, the plurality of rows of a row-wise data block define a plurality of columns, such that a given bit is located in one row and one column. The parity bit sequence of each row-wise codeword (e.g.,parity bit sequence 234 of second row-wise data block 208) is encoded based on its respective data bit sequence (e.g., data bitsequence 232 of second row-wise data block 208) and a corresponding row of a prior column-wise data block (e.g.,row 230 of first column-wise data block 206). - Similarly, each column-wise data block 206, 210 comprises a plurality of columns. Each column comprises a data bit sequence (e.g., data bit
sequence 242 of first column-wise data block 206) comprising one or more of the data bits, and a parity bit sequence (e.g.,parity bit sequence 244 of first column-wise data block 206), comprising one or more parity bits. Collectively, the plurality of columns of a column-wise data block define a plurality of rows, such that a given bit is located in one row and one column. The parity bit sequence of each column-wise codeword (e.g.,parity bit sequence 244 of first column-wise data block 206) is encoded based on its respective data bit sequence (e.g., data bitsequence 242 of first column-wise data block 206) and a corresponding column of a prior row-wise data block (e.g.,column 240 of first row-wise data block 204). - As seen in
FIG. 2 , the only exception to this pattern is theinitial data block 202, which may in some embodiments be encoded and decoded at the start of a communication. In some embodiments, the initial data block 202 may contain no parity bits. In other embodiments, the initial data block 202 may contain only bit values known to thetransmitter 102 andreceiver 104, such as a data block of entirely zero bit values, thus eliminating the need to transmit the initial data block 202—i.e., the entire initial data block 202 may be eliminated from the signal through a process equivalent to shortening. The rows or columns of the initial data block 202 may be used as part of the row-wise or column-wise codewords of a subsequent data block (e.g. first row-wise data block 204). - In some embodiments, decoding of the
staircase code 200 may take place within a slidingwindow 250 encompassing multiple data blocks (shown as five data blocks inFIG. 2 ). The sliding window is described in greater detail below with reference toFIG. 5 . - It will be appreciated that the rows, columns, and data and parity bit sequences shown in
FIG. 2 are simplified for illustrative purposes and are not shown to scale. In some embodiments, each data block may have tens, hundreds, or thousands of rows and columns, and the parity bit sequence may comprise a small fraction of the length of a given codeword. - Each codeword thus contains a parity bit sequence. However, the
example staircase code 200 is “irregular” insofar as its individual codewords may use different encodings having a different number of parity bits. In the exampleirregular staircase code 200, each data block contains at least one parity bits sequence of afirst encoding 222, such as BCH1, consisting of a first predetermined number of parity bits; at least one parity bits sequence of asecond encoding 224, such as BCH2, consisting of a second predetermined number of parity bits greater than the first predetermined number; and at least one parity bits sequence of athird encoding 226, such as BCH3, consisting of a third predetermined number of parity bits greater than the second predetermined number. It will be appreciated that some examples may only use two encodings, or may use more than three encodings. For example, an alternative embodiment may use only afirst encoding 222 and asecond encoding 224. Furthermore, the two encodings used in other embodiments could be, e.g., BCH1 for thefirst encoding 222 and BCH3 for thesecond encoding 224, or BCH2 for thefirst encoding 222 and BCH3 for thesecond encoding 224. - The allocation or distribution of codewords using each encoding may be determined in some embodiments with reference to a target error correction overhead level. A higher desired level of error correction (i.e. higher overhead) may dictate a larger proportion BCH3 codewords (i.e. codewords having parity bit sequences of the third encoding 226) relative to BCH2 and BCH1 codewords, whereas a lower desired level of error correction (i.e. lower overhead) may dictate a larger proportion BCH1 codewords (i.e. codewords having parity bit sequences of the first encoding 222) relative to BCH2 and BCH3 codewords. Thus, each data block of the sequence of data blocks may be encoded to include a first number of parity bit sequences of the first encoding, a second number of parity bit sequences of the second encoding, and a third number of parity bit sequences of the third encoding, wherein the first number, second number, and third number are determined based on the target error correction overhead level.
- In some embodiments, the target error correction overhead level may be determined dynamically based on channel conditions or other operating parameters. For example, the
receiver 104 in some embodiments may be configured to provide feedback to thetransmitter 102 to indicate the SNR of the received signal or other information indicative of environmental conditions or channel conditions. Thereceiver 104 and/ortransmitter 102 may also communicate further to optimization of the target error correction overhead level based on the nature of the data being transmitted, the operating mode of thereceiver 104, or any other factor that might require tuning of the FEC overhead level. This communication could take place at power-up, at the beginning of a communication, or periodically during a communication to dynamically adapt the FEC overhead level to changing conditions or requirements. Thetransmitter 102 and/orreceiver 104 may in some embodiments be a transceiver or modem configured to both transmit and receive data over theoptical channel 106 or through some other channel or medium, thereby enabling communication of information from thereceiver 104 to thetransmitter 102. In some embodiments, channel conditions may be assessed (e.g., by thereceiver 104 based on the BER of the received optical signal 128) and used to dynamically change the distribution of codeword encodings of the ECC. Thereceiver 104 ortransmitter 102 may then determine a new target error correction overhead level based on the assessed channel conditions. In some embodiments, thereceiver 104 may transmit channel condition information to thetransmitter 102 indicating the assessed channel conditions. Thetransmitter 102 may then update the target error correction overhead level based on the received channel condition information. The first number, second number, and third number, and therefore the distribution of codeword encodings within each data block of the ECC, may be changed based on the updated target error correction overhead level. TheFEC encoder 112 will then encode the changed ECC. The new ECC codeword encoding distribution will be made known to the receiver 104 (e.g., either transmitted directly from thetransmitter 102 or generated at thereceiver 104 based on a predetermined algorithm using the channel condition data generated by the receiver 104), and theFEC decoder 142 will thereafter use the new ECC codeword encoding to decode the received ECC. - The distribution of codewords of each encoding within a given data block may be configured by the
FEC encoder 112 of thetransmitter 102. TheFEC encoder 112 may distribute the codewords to achieve a homogeneous or evenly-distributed distribution of codewords of different encodings among the rows or columns of a data block, to avoid clustering of multiple codewords of thefirst encoding 222 or multiple codewords of thethird encoding 226 in adjacent rows or columns. In some embodiments, the parity bit sequences of each encoding are distributed among the rows or columns of a given data block such that a number of adjacent parity bit sequences of the same encoding is minimized. - In some embodiments, the data blocks have different distributions of codeword encodings from each other, while in other embodiments the data blocks all have the same distribution of codeword encodings. In still other embodiments, such as the
example staircase code 200 inFIG. 2 , all row-wise data blocks have the same distribution of codeword encodings and all column-wise data blocks have the same distribution of codeword encodings. Typically, using a single distribution for all data blocks, or two distributions (one row-wise, one column-wise), facilitates coordination of the encoding and decoding between thetransmitter 102 andreceiver 104, as the data signal does not need to include additional metadata indicating the distribution for each transmitted data block. In some embodiments, however, the distribution could be automatically generated for each data block based on a seed value or the target error correction overhead level, allowing thetransmitter 102 andreceiver 104 to know the distribution for each data block without exchanging any metadata other than the current target error correction overhead level. The distribution patterns may be predefined, in which case they may be stored, or they may be regenerated based on a set of parameters. Each of the patterns (i.e. distributions of codeword encodings) may be assigned an index in some embodiments: this allows the transmitter and receiver to communicate only this index at startup to coordinate the distribution of codeword encodings. Metadata regarding distributions of codeword encodings in each data block may be coordinated between thetransmitter 102 andreceiver 104 using the mechanisms described above for exchanging information regarding the target error correction overhead level. - Encoding of the flexible, irregular ECC, such as the
irregular staircase code 200, may be performed by aFEC encoder 112 and is described in detail below with reference toFIG. 4 . Decoding the ECC to perform error detection and error correction may be carried out by aFEC decoder 142 and is described in detail below with reference toFIG. 5 . An example architecture for aFEC decoder 142 will now be described with reference toFIG. 3 . -
FIG. 3 shows anexample FEC decoder 142 used to decode an irregular ECC having three different codeword encodings configured to correct up to one, two, or three bit errors per codeword, respectively. The detailed operation of theFEC decoder 142 is described below with reference toFIG. 5 . - The
FEC decoder 142 receives the FEC enabled receivedsignal 140 consisting of the encoded bits and errors, e.g.irregular staircase code 200 containing bit errors due to transmission over theoptical channel 106. Each two adjacent data blocks of the received FEC enabled receivedsignal 140 are used to identify row-wise or column-wise bit sequences to determine if they constitute codewords (i.e., no bit errors). Each row or column is processed independently until a bit error is detected. - A
syndrome generation module 302 is used to generate or calculate a syndrome vector based on the bit values of the current row or column being processed. For a row of a received row-wise data block, thesyndrome generation module 302 performs a parity check using a parity bit sequence of the row to detect any bit errors in a data bit sequence of the row or in a corresponding row of a prior column-wise data block based on one or more elements of the calculated syndrome. The corresponding operation is carried out on each column of a column-wise data block. - The resulting syndrome vector is passed to a
syndrome decoder module 304, which includes three error decoder units: a oneerror decoder unit 306 capable of detecting and correcting up to one bit error, a twoerror decoder unit 308 capable of detecting and correcting up to two bit errors, and a threeerror decoder unit 310 capable of detecting and correcting up to three bit errors. In some embodiments, the oneerror decoder unit 306 can be used to correct errors in BCH1 codewords, the twoerror decoder unit 308 can be used to correct errors in BCH2 codewords, and the threeerror decoder unit 310 can be used to correct errors in BCH3 codewords. Furthermore, when a single bit error is detected in a BCH2 or BCH3 codeword, the oneerror decoder unit 306 can be used to correct it, and when two errors are detected in a BCH3 codeword, the twoerror decoder unit 308 can be used to correct it. Thesyndrome decoder module 304 thus operates as a gated decoder, combining some of the advantages of multiple parallel FEC decoders described above with flexibility and tunability. In alternate embodiments, thesyndrome decoder module 304 may contain only two or more than three error decoder units configured to correct a different number of bit errors. - Once the bit errors have been corrected, the
FEC decoder 142 outputs the error-correcteddigital signal 144. - An
example method 400 for encodingirregular staircase code 200 is now described with reference toFIG. 4 . As a staircase code constitutes a special case of a zipper code (described below with reference toFIGS. 7A-7B ), it will be appreciated that the describedmethod 400 could be generalized to non-staircase zipper codes, such as oFEC codes (described below with reference toFIG. 8 ), based on the particular details of how such codes are encoded. -
FIG. 4 shows a flowchart of anexample method 400 for encoding theirregular staircase code 200. Themethod 400 may in some embodiments be performed by aFEC encoder 112 of a transmitter, such as anoptical transmitter 102. Themethod 400 repeatssteps method 400 repeats sub-steps 406, 408, and 410 ofstep 404 for each row or column of the current data block.Optional steps - As described above with reference to
FIG. 2 , the encoding of the initial data block 202 may not adhere to the pattern of encoding steps shown in the flowchart ofFIG. 4 , as the initial data block 202 may not include parity bits in some embodiments. Thus, in some embodiments, the initial data block 202 may in some embodiments be populated entirely with data bits of the received digital data signal 110, or in other embodiments with non-information-bearing fixed bit values (e.g., all zero bit values). However,method 400 describes the encoding of each subsequent row-wise and column-wise data block of theirregular staircase code 200. - At 402, the
FEC encoder 112 receives the digital data signal 110. This steps is repeated for each set of data bits received that are sufficient to populate a data block of thestaircase code 200. It will be appreciated that the steps ofmethod 400 are presented as a linear sequence, but in some embodiments may occur in parallel or otherwise in a different order or concurrently. For example, the process of generating data blocks from the received data bits of the digital data signal 110 may occur continuously while the data blocks are being encoded and transmitted. - At 404, the
FEC encoder 112 generates a data block of the FEC enabled data signal 114, i.e. a row-wise of column-wise data block of theirregular staircase code 200. Step 404 is made up ofsub-steps - At
sub-step 406, theFEC encoder 112 determines a parity bit sequence encoding for each row or column of a data block. Thus, for a row-wise data block, each row is assigned an encoding from the first encoding 222 (e.g. BCH1), second encoding 224 (e.g. BCH2), or third encoding 226 (e.g. BCH3) (for embodiments using three encodings). This assignment may be based on the distribution of codeword encodings, as described above with reference toFIG. 2 . - For each row or column of the current data block, steps 408 and 410 are performed. At 408, a row (for row-wise data blocks) or column (for column-wise data blocks) of the data block is populated with data bits from the received digital data signal 110.
- At 410, a parity bit sequence is generated for the row or column. Step 410 is performed as
sub-steps - At 412, a binary vector is identified. The binary vector consists of the as-yet-unknown parity bits (e.g., parity bit sequence 234), concatenated to the data bits of the row or column of the current data block (e.g., data bit sequence 232), and to the bits of the corresponding row or column of the prior data block (e.g., row 230). Thus, once the parity bits of the binary vector are determined, the binary vector will be a codeword of the
staircase code 200. - At 414, a valid parity bit sequence is identified. This determination is made based on the encoding used for the codeword. For example, if the
parity bit sequence 234 uses a BCH encoding, then identifying a valid parity bit sequence may be accomplished using a parity check matrix defined by numbers of a Galois field. BCH codeword encoding will now be described in detail. - Let t be the binary vector. An (n, k) BCH encoder, over Galois field (GF) of size 2m, utilizes a generator matrix G to generate the codeword x:
-
x=tG, - wherein t is a 1 by k binary vector, x is a 1 by n binary vector, and G is a k by n binary matrix.
- The parity matrices for BCH1, BCH2, and BCH3 (H1, H2, and H3, respectively) are all n columns wide (n being the length of a codeword) and can be written in GF element format (as opposed to binary format) as follows, assuming use of the same Galois field for (GF) each encoding, wherein α is the primitive element of the Galois field:
-
- Thus, for parity bit sequences of the
first encoding 222, wherein the first encoding is BCH1, the parity check matrix comprises a one row matrix defined by a primitive element α of a Galois field such that the first element of the parity check matrix is one, and each subsequent element of the parity check matrix is α times the previous element. For parity bit sequences of thesecond encoding 224, wherein the second encoding is BCH2, the parity check matrix comprises a two row matrix defined by a primitive element α of a Galois field such that the first element of the first row of the parity check matrix is one, each subsequent element of the first row of the parity check matrix is α times the previous element, the first element of the second row of the parity check matrix is one, and each subsequent element of the second row of the parity check matrix is α3 times the previous element. For parity bit sequences of thethird encoding 226, wherein the third encoding is BCH3, the parity check matrix comprises a three row matrix defined by a primitive element α of a Galois field such that the first element of the first row of the parity check matrix is one, each subsequent element of the first row of the parity check matrix is α times the previous element, the first element of the second row of the parity check matrix is one, each subsequent element of the second row of the parity check matrix is α3 times the previous element, the first element of the third row of the parity check matrix is one, and each subsequent element of the third row of the parity check matrix is α5 times the previous element. - The binary vector (in numeric format) is multiplied by the transpose of the parity check matrix to generate a syndrome, the syndrome comprising a vector having a number of elements equal to a number of rows of the parity check matrix (in GF or numeric format, not binary format). The syndrome is defined for BCH1 as S1, for BCH2 as [S1, S3], and for BCH3 as [S1, S3, S5] wherein S1=cH1 T, [S1, S3]=cH2 T, [S1, S3, S5]=cH3 T, and wherein c is the binary vector in numeric format, H1 T is the transpose of the parity check matrix H1, H2 1 is the transpose of the parity check matrix H2, and H3 1 is the transpose of the parity check matrix H3. BCH1 encoding and decoding uses S1 only, BCH2 decoding uses S1 and S3 only, and BCH3 decoding uses S1, S3, and S5.
- Values must be identified for the unknown parity bits such that the calculated syndrome must have all of its elements (e.g., S1 and S3 for BCH2) equal to zero. Identifying a valid parity bit sequence for such an encoding may be performed a number of different ways in different embodiments. Some embodiments perform this identification by solving for the unknown parity bits, e.g., by performing the multiplication by the parity check matrix using a binary vector with unknown bit values and then solving the resulting equation for the unknown parity bit values. It will be appreciated that solving such mathematical calculations or constraints may be performed by electronic hardware and/or software in various ways.
- At 416, the parity bit sequence is set to be equal to a valid parity bit sequence, e.g. based on the solved constraints or equations described above, such that the binary vector (including the valid parity bits) multiplied by the transpose of the parity check matrix generates a syndrome vector wherein each element is equal to zero. This operation is equivalent to multiplying binary vector t by generator matrix G to generate codeword x, as described above.
- At 418, the FEC enabled data signal 114 is transmitted. In some embodiments, this may mean propagating the FEC enabled data signal 114 through the
other modules optical transmitter 102 to transmit the resultingoptical signal 126 across theoptical channel 106 using themodulation module 124. In some embodiments, the FEC enabled data signal 114 is propagated and transmitted as theinitial data block 202, followed by each subsequent data block in sequence: 204, 206, 208, 210, 212, etc. - In some embodiments, the encoding of the
irregular staircase code 200 may be dynamically adapted to channel conditions. As described above, channel conditions may be assessed and used to dynamically change the distribution of codeword encodings of theirregular staircase code 200 or other flexible ECC. - At 420, optionally, a new target error correction overhead level may be determined (e.g. by the FEC encoder 142) based on the assessed channel conditions as a result of receiving channel condition information (e.g., sent by the
receiver 104 based on BER or other distortions detected in the received optical signal 128). - At 422, optionally, the first number, second number, and third number, and therefore the distribution of codeword encodings within each data block of the
irregular staircase code 200 or other flexible ECC, may be changed based on the updated target error correction overhead level. TheFEC encoder 112 will then return to step 402 to encode the next data block using the changed ECC encoding. - An
example method 500 for decodingirregular staircase code 200 to detect and correct bit errors is now described with reference toFIG. 5 . As a staircase code constitutes a special case of a zipper code (described below with reference toFIGS. 7A-7B ), it will be appreciated that the describedmethod 500 could be generalized to non-staircase zipper codes, such as oFEC codes (described below with reference toFIG. 8 ), based on the particular details of how such codes are decoded. -
FIG. 5 shows a flowchart of an example method for decoding theirregular staircase code 200 ofFIG. 2 to detect and correct bit errors in a received signal. Themethod 500 may in some embodiments be performed by aFEC decoder 142 of a receiver, such as anoptical receiver 104. Themethod 500 repeatssteps signal 140. Similarly, themethod 500 repeats sub-steps 506, 508, 516, and 518 ofstep 504 for each row or column of the current data block. - As described above with reference to
FIG. 2 andFIG. 4 , the decoding of the initial data block 202 may not adhere to the pattern of decoding steps shown in the flowchart ofFIG. 5 , as the initial data block 202 may not include parity bits in some embodiments, and may not include information-bearing bits of any kind in some embodiments. Thus, in some embodiments, the initial data block 202 may be populated entirely with data bits of the received digital data signal 110, or entirely with fixed non-information-baring bits (e.g., all zero bit values), and does not have parity checks performed on it. However,method 500 describes the decoding of each subsequent row-wise and column-wise data block of theirregular staircase code 200. - At 502, the
FEC decoder 142 receives a data block of the FEC enabled receivedsignal 140, for example from thedemapping module 138. - At 504, the
FEC decoder 142 performs parity checks on the data block of FEC enabled receivedsignal 140. These parity checks are performed assub-steps - At 506, the
FEC decoder 142 determines parity bit sequence encodings for each row or column of the data block. The distribution of codewords of each encoding within a given data block may be based on the distribution of codeword encodings described above with reference toFIG. 2 . This information may, for example, be received from thetransmitter 102 at startup. -
Sub-steps - At 508, the
FEC decoder 142 performs a parity check on the row or column. This parity check is performed assub-steps - At 510, a binary vector is identified, as in
method 400 ofFIG. 4 . The binary vector corresponds to a codeword (if valid, i.e. it contains no bit errors): it consists of the parity bits of the current row or column (e.g., parity bit sequence 234), the data bits of the current row or column (e.g., data bit sequence 232), and a row or column of a prior data block (e.g., row 230). - At 512, the
syndrome generation module 302 is used to generate the syndrome, as described above with reference tomethod 400. The binary vector is multiplied by the transpose of the parity check matrix for the given encoding. Syndrome generation in decoding will now be described in detail. - Let γ be the binary vector, which is equivalent to a BCH codeword plus some possible errors γ=x⊕e, where ⊕ is the bit-wise exclusive or operator, and e is a 1 by n binary vector. The BCH decoder computes a syndrome vector s, by taking the product of γ and the transpose HT of the parity check matrix H:
-
s=γH T, - wherein γ is a 1 by n vector, s is a 1 by (n-k) vector, and H is a (n-k) by n matrix.
- At 514, the
syndrome decoder module 304 detects bit errors based on the syndrome s. The binary vector γ is a codeword if and only if s=0. When s≠0 and the Hamming weight of e is lower than or equal to the maximum number of errors the BCH code can correct, the vector s alone is the sufficient information needed to compute e. Once e is computed, x can be recovered by x=γ ⊕e. - As in
method 400, define S1=γH1 T, [S1, S3]=γH2 T, and [S1, S3, S5]=γH3 T. BCH1 decoding requires S1 only, BCH2 decoding requires S1 and S3, and BCH3 decoding requires S1, S3, and S5. In some embodiments, a BCH3 decoder can be gated (such asgated FEC decoder 142 ofFIG. 3 ) to perform bit error detection, location, and correction in BCH1, BCH2, and BCH3 codewords as described below. - A BCH3 decoder may detect and handle the cases of 0, 1, 2, or 3 errors separately, as set out in Table 1 below, wherein D3=S1 3+S3 and D5=S1 5+S5.
-
TABLE 1 BCH3 Decoder # of errors, v S1 S3 S5 D3 D5 Operation v = 0 0 0 0 0 0 No error to correct v = 1 ≠ 0 ≠ 0 ≠ 0 0 0 Pass S1 to 1 error decoder v = 2 ≠ 0 ≠ 0 S1D5 = S3D3 Pass S1 and S3 to 2 error decoder v = 3 ≠ 0 Either S1 or D5 3 error decoder column condition for row v = 2 not satisfied - Whereas Table 1 defines operations to perform in response to different values of S1, S3, S5, D3, and D5 for a BCH3 decoder, it will be appreciated that sub-tables of Table 1 represent the operations to perform by a BCH2 encoder (rows v=0 through v=2, with columns S5 and D5 eliminated) or a BCH1 encoder (rows v=0 and v=1, with columns S3, S5, D3 and D5 eliminated).
- As H1 and H2 are sub-matrices of H3 (as shown above with reference to
FIG. 4 ), the BCH1 decoder and BCH2 decoder may be implemented as sub-modules of the BCH3 decoder. A flow chart of an example gated BCH3 decoder is described in detail below with reference toFIG. 6 . - Thus, in response to determining that any element of the syndrome is not zero, the
syndrome decoder module 304 may determine that the binary vector contains at least one bit error. In embodiments wherein the syndrome is always calculated using the BCH3 parity check matrix regardless of the encoding used for the current codeword, this determination may disregard the third element of the syndrome for BCH1 and BCH2, and may also disregard the second element of the syndrome for BCH1. - At 516, the
syndrome decoder module 304 is used to locate bit errors in the binary vector. At 518, once the bit errors have been located, thesyndrome decoder module 304 corrects the bit errors, e.g., by flipping the value of the bit where the bit error is located. Atleast step 516, and possibly step 518 in some embodiments, are performed by one of theerror decoder units - Thus, for BCH1, the
syndrome decoder module 304 is configured to provide the first element of the syndrome to the oneerror decoder unit 306, use the oneerror decoder unit 306 to locate a single bit error in the binary vector based on the first element of the syndrome, and correct the single bit error. - For BCH2, the
syndrome decoder module 304 is configured to calculate value D3 by adding the cube of the first element of the syndrome to the second element of the syndrome. If D3 is zero, thesyndrome decoder module 304 is configured to provide the first element of the syndrome to the oneerror decoder unit 306, use the oneerror decoder unit 306 to locate a single bit error in the binary vector based on the first element of the syndrome, and correct the single bit error. If D3 is not zero thesyndrome decoder module 304 is configured to provide the first and second elements of the syndrome to the twoerror decoder unit 308, use the twoerror decoder unit 308 to locate two bit errors in the binary vector based on the first element of the syndrome, and correct the two bit errors. - For BCH3, the
syndrome decoder module 304 is configured to calculate value D3 by adding the cube of the first element of the syndrome to the second element of the syndrome. If D3 is zero, thesyndrome decoder module 304 is configured to provide the first element of the syndrome to the oneerror decoder unit 306, use the oneerror decoder unit 306 to locate a single bit error in the binary vector based on the first element of the syndrome, and correct the single bit error. If D3 is not zero, thesyndrome decoder module 304 is configured to calculate a value D5 by adding the first element of the syndrome, raised to the fifth power, to the third element of the syndrome. If the first element of the syndrome, multiplied by D5, is equal to the second element of the syndrome, multiplied by D3, thesyndrome decoder module 304 is configured to provide the first and second elements of the syndrome to the twoerror decoder unit 308, use the twoerror decoder unit 308 to locate two bit errors in the binary vector based on the first and second elements of the syndrome, and correct the two bit errors. If D3 is not equal to zero, and either of two other conditions is satisfied, thesyndrome decoder module 304 is configured to provide the first, second, and third elements of the syndrome to the threeerror decoder unit 310, use the threeerror decoder unit 310 to locate three bit errors in the binary vector based on the first, second, and third elements of the syndrome, and correct the three bit errors. The two other conditions are: first, that the first element of the syndrome, multiplied by D5, is not equal to the second element of the syndrome, multiplied by D3; and second, that S1 is equal to zero. - In some embodiments, decoding of the
staircase code 200 takes place within a slidingwindow 250 encompassing multiple data blocks at any given time. The slidingwindow 250 shown inFIG. 2 encompasses five data blocks; however, in various example embodiments, a sliding window may be used that encompasses a greater number of data blocks n 5. Each data block within the slidingwindow 250 is decoded one or more times, typically in a predetermined order, before the slidingwindow 250 slides up and to the right such that the oldest k data blocks to the left and below exit the slidingwindow 250 and a new k blocks to the right and above are added to the slidingwindow 250, wherein 1≤k≤n. - As described above with reference to
FIG. 5 , a flexible, gated BCH3 decoder can be used to decode BCH1, BCH2, or BCH3 encoded coded bit sequences. Whereas theFEC encoder 112 may need to switch among three different generator matrices, thegated FEC decoder 142 may only need a single flexible, gated BCH3 decoder structure. In some embodiments, a flexible gated BCH3 decoder always uses H3 as the parity check matrix to decode BCH1, BCH2, and BCH3 codewords. In some embodiments, a BCH3syndrome generation module 302 may be used to generate the syndrome for BCH1 and BCH2 binary vectors using the single BCH parity check matrix H3, with the third and/or second rows of the resulting syndrome being discarded or disregarded as appropriate. -
FIG. 6 shows a flowchart of anexample method 600 for locating and correcting bit errors in a binary vector of an irregular ECC using a gated FEC decoder having three error decoder units corresponding to three encodings: BCH1, BCH2, and BCH3. - At 602, the
syndrome generation module 302 calculates the syndrome for a row or column of a received data block. As described above with reference toFIG. 5 , the binary vector is identified (comprising the row or column of the data block as well as a row or column of a prior data block) and multiplied by the transpose of the parity check matrix to generate the syndrome. In this case, the only parity check matrix used is the parity check matrix for BCH3, H3. Thus, the generated syndrome always has three rows (in its numerical representation). - At 603, if the elements of the generated syndrome indicate that the binary vector is a valid codeword (as described above), no bit errors should be corrected in the binary vector and the next binary vector can be processed: the
method 600 terminates for the current binary vector. However, in response to determining that the binary vector is not a valid codeword (i.e., determining that the binary vector contains one or more bit errors), themethod 600 proceeds to step 604. - At 604, the
syndrome decoder module 304 checks whether the current codeword is a codeword of the first encoding, i.e. BCH1 in this example. If so, themethod 600 proceeds to step 606, otherwise to step 608. - At 606, up to one bit error is located and/or corrected in the codeword using the one
bit error decoder 306. The first element of the syndrome S1, is passed to the onebit error decoder 306 to locate the bit error. - At 608, D3 is computed as described above with reference to
FIG. 5 . - At 610, the
syndrome decoder module 304 checks whether D3 is equal to zero. If so, themethod 600 proceeds to step 606, otherwise to step 612. - At 612, the
syndrome decoder module 304 checks whether the current codeword is a codeword of the second encoding, i.e. BCH2 in this example. If so, themethod 600 proceeds to step 614, otherwise to step 616. - At 614, two bit errors are located and/or corrected in the codeword using the two
bit error decoder 308. The first two elements of the syndrome S1 and S3 are passed to the twobit error decoder 308 to locate the bit errors. - At 616, D5 is computed as described above with reference to
FIG. 5 . - At 618, the
syndrome decoder module 304 checks whether S1D5 is equal to S3D3. If so, themethod 600 proceeds to step 614, otherwise to step 620. - At 620, three bit errors are located and/or corrected in the codeword using the three
bit error decoder 310. All three elements of the syndrome S1, S3, and S5 are passed to the threebit error decoder 310 to locate the bit errors - Thus, the gated
syndrome decoder module 304 comprises a first decoder unit (one error decoder unit 306), a second decoder unit (two error decoder unit 308), and a third decoder unit (three error decoder unit 310). The gatedsyndrome decoder module 304 is configured, in response to thesyndrome generation module 302 detecting one or more bit errors, to carry out the steps ofmethod 600. If a first number (e.g., one) of bit errors are detected based on the syndrome, or if the parity bit sequence is encoded using a first encoding (e.g., BCH1), the gatedsyndrome decoder module 304 is configured to provide at least one element of the syndrome (e.g., the first element) to the first decoder unit, use the first decoder unit to locate the bit errors in the binary vector based on the syndrome, and correct the bit errors. If a second number (e.g., two) of bit errors are detected based on the syndrome, and if the parity bit sequence is encoded using a second encoding (e.g., BCH2), the second number being greater than the first number, the gatedsyndrome decoder module 304 is configured to provide at least two elements of the syndrome (e.g., the first two elements) to the second decoder unit, use the second decoder unit to locate the bit errors in the binary vector based on the syndrome, and correct the bit errors. In the example embodiment ofmethod 600, if a third number (e.g., three) of bit errors are detected based on the syndrome, and if the parity bit sequence is encoded using a third encoding (e.g., BCH3), the third number being greater than the second number, the gatedsyndrome decoder module 304 is configured to provide at least three elements of the syndrome (e.g., all three elements) to the third decoder unit, use the third decoder unit to locate the bit errors in the binary vector based on the syndrome, and correct the bit errors. - As noted above, a staircase code as shown in
FIG. 2 is a special case of a zipper code. A zipper code is characterized by two major components: a zipping pair and an interleaver map. - A zipper code is composed of a sequence of codewords c0, c1, . . . , wherein each ci is a codeword of a constituent code C(n, k, d), and wherein n, k, and d respectively denote the block length, dimension, and minimum Hamming distance of C. The sequence of codewords is called a buffer. One can denote the (i, j)-th entry of a buffer to be the j-th entry of the i-th codeword, wherein (i, j)∈×[n] and [n]={0,1, . . . , n−1}. Now, let m0, m1, . . . be a sequence of integers such that for all i, 0≤mi≤k. Denote Ai={(i,j): j∈=[mi]}, Bi={(i,j): j∈n \[mi]}, and
-
A=U i A i ,B=U i B i. - A is called the virtual set and B is called the real set. Together, the pair (A,B) is called a zipping pair. The parameter mi is the width of virtual buffer at the i-th codeword. For a buffer with zipping pair (A,B), its entries are denoted by:
-
c Ai =(c i,0 , . . . ,c i,mi −1) and c Bi =(c i,mi , . . . ,c i,n−1). - Thus, ci=(cA
i , cBi )∈C denotes the i-th codeword, the virtual buffer is the bit sequence {cAi }, and the real buffer is the bit sequence {cBi }. -
FIG. 7A shows a visualization of anexample zipper code 700. Each i-th row of the visualization corresponds to the i-th codeword. Thus, the first row consists of avirtual buffer 702, and areal buffer 704, thereal buffer 704 including one ormore parity bits 706. In a conventional zipper code, each codeword contains a fixed number ofparity bits 706, shown here asbit length r 718. The entire codeword is ofbit length n 712, andbit length k 714 is equal to thecodeword length n 712 minus paritybit length r 718. The virtual buffer of the first codeword is ofbit length m 1 716; each subsequent codeword would have a bit length m2, m3, etc. - The set of virtual buffers (“virtual set”) and set of real buffers (“real set”) are populated with data bits as dictated by the second major component of the zipper code, the interleaver map. An interleaver map is defined as a function
-
ϕ:A→B - associating each bit in the virtual set with a bit in the real set. Every symbol in the virtual buffer is a duplicate of its associated symbol in the real buffer. In other words, in a valid codeword, for every (i,j)∈A, there exists a bit value ci, j=cϕ(i,j).
- Encoding the i-th constituent code of a zipper code is performed in three steps. First, the bit positions of the real buffer 704 ci,m
i , . . . , ci,n-r-1 are filled in with data bits from the data signal to be encoded. Second, thevirtual buffer 702 is filled in by duplicating the symbols from the locations prescribed by the interleaver map, that is, for each j∈Ai, ci,j=cϕ(i,j). Third, the parity symbols ci,n-r, . . . , ci,n-1 are computed using (ci,0, . . . , ci,n-r-1) (i.e. the duplicate bits ofvirtual buffer 702 and the data bits of the real buffer 704) as the information bits of the codeword. - Various encodings may be used to calculate the parity bits of a zipper code. Also, various interleaver maps are possible. The presently described examples are not limited to any particular encodings scheme(s) or interleaver map.
- A sequence of several sequential codewords may be transmitted together as a unit, comparable to a data block, sometime called a chunk. It will be appreciated that the set of
virtual buffers 702 of a chunk of codewords of azipper code 700 may, depending on the interleaver map used, contain data bits from the set ofreal buffers 704 from a prior chunk. Thus, the rows of the zipper code are encoded and decoded using theparity bits 706 to check for errors, not only in the data bits of the current row (i.e. real buffer 704) of the current data block (i.e. the current chunk), but also in one or more bits of a previous data block (i.e. a prior chunk) that are interleaved into thevirtual buffer 702 of the current row. In this sense, the operation of thezipper code 700 is analogous to the operation of the staircase code, in which a given codeword in a given data block uses its parity bits to check for errors, not only in the data bits of the current row or column of the current data block, but also in data bits of a prior data block. - The techniques described above with respect to the flexible
irregular staircase code 200 may be applied equally to a zipper code. When multiple different encodings, such as BCH1/2/3 codes, are used as the component codes for a zipper code, one may apply the same ideas described above to construct flexible irregular zipper codes with tunable overhead. The component codes can choose from BCH1, BCH2, and BCH3 codewords all having the same block length. The proportions of these three different codewords within a given chunk are adjustable based on the target overhead. The flexible BCH3 decoder design described above with reference tomethod 600 ofFIG. 6 can be used for flexible decoding (for both hard-decoding and soft-decoding). -
FIG. 7B shows a visualization of an example flexibleirregular zipper code 750. A first codeword (i.e. row) of theirregular zipper code 750 consists of avirtual buffer 752 and areal buffer 754. Unlike theconventional zipper code 700, however, each codeword contains a variable number ofparity bits 756, representing two or more different encodings used for the codewords. Here, three encodings are shown: a first encoding 762 (e.g. BCH1), a second encoding 764 (e.g. BCH2), and a third encoding 766 (e.g. BCH3). As in the case of thestaircase code 200 ofFIG. 2 , three encodings are shown, but the number of encodings may be any number two or more. - The process of encoding and/or decoding takes place over a sliding
window 776, which may indicate the number of rows within which bits are interleaved by the interleaving map; i.e., if the sliding window is M rows tall, then a bit located within the real buffer of a row i must be duplicated in the virtual buffer of a row numbered between i−M and i+M.The sliding window 776 will encompass multiple chunks. A current chunk 772 (i.e. the chunk currently being encoded) is shown, as is afuture chunk 774 yet to be encoded. - All of the techniques described above, e.g. those with respect to coordinating the distribution of codewords of each encoding within a data block (i.e. a chunk), may be equally applied to the
irregular zipper code 752. Rather than rows of row-wise data blocks and columns of column-wise data blocks, a singlereal buffer 754 of thezipper code 750 may be referred to as a coded bit sequence containing parity bits and data bits. Each codeword contains not only the coded bit sequence (i.e. real buffer 754), but also avirtual buffer 752 that may contain one or more bits from a prior data block (i.e. a prior chunk, such as prior chunk 778). - Thus, to encode the
irregular zipper code 750 in some embodiments, a FEC encoder receives a digital data signal comprising a plurality of data bits and generates a FEC enabled data signal, namely theirregular zipper code 750. The FEC enabled data signal comprises a sequence of data blocks, namely chunks of thezipper code 750. Each data block comprises a plurality of coded bit sequences (i.e. real buffers 754). Each coded bit sequence comprises a data bit sequence (i.e. the non-parity bits of the real buffer 754) comprising one or more of the data bits from the received digital data signal, and a parity bit sequence comprising one ormore parity bits 756. Each parity bit sequence is based on its respective data bit sequence (i.e. the rest of the real buffer 754) and, in some examples, one or more bits of a prior data block, e.g., interleaved duplicate bits fromprior chunk 778. - Each data block includes at least one parity bit sequence of a
first encoding 762 and at least one parity bit sequence of asecond encoding 764. Each parity bit sequence of thefirst encoding 762 has a first predetermined number of parity bits, and each parity bit sequence of thesecond encoding 764 has a second predetermined number of parity bits greater than the first predetermined number (e.g., BCH2 has a greater number of parity bits per codeword than BCH1). - Once the FEC-enabled data signal has been generated, it is transmitted as described above with reference to the
staircase code 200. - To decode the
irregular zipper code 750 in some embodiments, a FEC decoder receives a FEC enabled received signal comprising a sequence of data blocks (i.e., chunks of the zipper code 750) as described above. For each coded bit sequence (i.e. real buffer 754) of each received data block, the FEC decoder performs a parity check using theparity bit sequence 756 of the codedbit sequence 754 to detect, in some examples, at least one bit error in a prior data block, e.g., a bit error inprior chunk 778. - Similar techniques can be applied to oFEC (Open Forward Error Correction) codes, another special case of zipper codes. Similar to staircase codes, oFEC codes can also use BCH codes as the component codes. Each bit is protected by two component codes, and they form a convolutional structure, just like the zipper codes and staircase codes described above. Instead of using hard-decoding, oFEC performs Chase-based soft-decoding, and uses sub-block permutation to increase the minimum distance. As a result, oFEC codes may have a higher input BER threshold compared to staircase codes with the same overhead.
- One may construct an irregular oFEC by using three different component BCH codes (e.g., BCH1, BCH2, and BCH3) with the same block length, similar to the techniques described above with reference to
irregular staircase code 200 andirregular zipper code 750. The Chase-based soft-decoding also utilizes hard-decision BCH decoders. One may replace the hard-decision BCH decoders in an oFEC decoder with the flexible BCH3 decoder described above with reference toFIG. 6 to obtain a flexible oFEC decoder that can be used to decode BCH1, BCH2, and BCH3 component codes. -
FIG. 8 shows an exampleirregular oFEC code 800 using codewords of multiple encodings in varying proportions to achieve tunable FEC overhead levels, as with theirregular staircase code 200 andirregular zipper code 750 described above. Theirregular oFEC code 800 consists of codewords spread out over multiple data blocks. Instead of row-wise and column-wise data blocks in a staircase code or chunks with interleaved duplicate bits in the zipper code, the data blocks of theoFEC code 800 may be regarded as “block rows”, each block row consisting of a number ofblocks 804, each block consisting of a number ofbit rows 806. - A codeword of the
irregular oFEC code 800 consists of ahorizontal bit row 804 spanning an entire block row, and multiple vertical segments located inblocks 804 ofprior block rows 802. A first codeword is shown consisting ofhorizontal bit row 810 and multiplevertical segments 812. A second codeword is shown consisting ofhorizontal bit row 820 and multiplevertical segments 822. It will be appreciated that the vertical segments are defined by bits spanning multiple prior horizontal bit rows of prior codewords, such as the firstvertical segment 830 of the second codeword intersecting with thehorizontal bit row 810 of the first codeword. This is analogous to the intersection of a codeword (e.g. a row-wise codeword) of a current data block of thestaircase code 200 with multiple codewords (e.g. column-wise codewords) of a prior block. - By using codewords with variable numbers of parity bits (not shown) corresponding to multiple encodings (e.g., BCH1, BCH2, and BCH3), the
irregular oFEC code 800 can implement the techniques described above with respect to theirregular zipper code 750. - A flexible irregular oFEC design like the
irregular oFEC code 800 may have all the benefits of the flexibleirregular staircase code 200. Compared to staircase codes, oFEC codes may offer stronger protection to the bits due to their soft-decoding and increased minimum distance, at the cost of higher decoding complexity. - General
- Although the present disclosure describes methods and processes with steps in a certain order, one or more steps of the methods and processes may be omitted or altered as appropriate. One or more steps may take place in an order other than that in which they are described, as appropriate.
- Although the present disclosure is described, at least in part, in terms of methods, a person of ordinary skill in the art will understand that the present disclosure is also directed to the various components for performing at least some of the aspects and features of the described methods, be it by way of hardware components, software or any combination of the two. Accordingly, the technical solution of the present disclosure may be embodied in the form of a software product. A suitable software product may be stored in a pre-recorded storage device or other similar non-volatile or non-transitory computer readable medium, including DVDs, CD-ROMs, USB flash disk, a removable hard disk, or other storage media, for example. The software product includes instructions tangibly stored thereon that enable a processor device (e.g., a personal computer, a server, or a network device) to execute examples of the methods disclosed herein.
- The present disclosure may be embodied in other specific forms without departing from the subject matter of the claims. The described example embodiments are to be considered in all respects as being only illustrative and not restrictive. Selected features from one or more of the above-described embodiments may be combined to create alternative embodiments not explicitly described, features suitable for such combinations being understood within the scope of this disclosure.
- All values and sub-ranges within disclosed ranges are also disclosed. Also, although the systems, devices and processes disclosed and shown herein may comprise a specific number of elements/components, the systems, devices and assemblies could be modified to include additional or fewer of such elements/components. For example, although any of the elements/components disclosed may be referenced as being singular, the embodiments disclosed herein could be modified to include a plurality of such elements/components. The subject matter described herein intends to cover and embrace all suitable changes in technology.
Claims (22)
1. A method comprising:
receiving, at a forward error correction (FEC) encoder of a transmitter, a digital data signal comprising a plurality of data bits;
generating, at the FEC encoder, a FEC enabled data signal encoded as a staircase code,
the FEC enabled data signal comprising a sequence of data blocks alternating between row-wise data blocks and column-wise data blocks;
each row-wise data block comprising a plurality of rows, the plurality of rows defining a plurality of columns, each row comprising:
a data bit sequence comprising one or more of the data bits; and
a parity bit sequence comprising one or more parity bits, each parity bit sequence being based on its respective data bit sequence and a corresponding row of a prior column-wise data block;
each column-wise data block comprising a plurality of columns, the plurality of columns defining a plurality of rows, each column comprising:
a data bit sequence comprising one or more of the data bits; and
a parity bit sequence comprising one or more parity bits, each parity bit sequence being based on its respective data bit sequence and a corresponding column of a prior row-wise data block;
each data block including at least one parity bit sequence of a first encoding and at least parity bit sequence of a second encoding;
each parity bit sequence of the first encoding having a first predetermined number of parity bits;
each parity bit sequence of the second encoding having a second predetermined number of parity bits greater than the first predetermined number; and
transmitting the FEC enabled data signal.
2. (canceled)
3. The method of claim 1 , wherein at least one data block of the sequence of data blocks contains at least one parity bit sequence of a third encoding, each parity bit sequence of the third encoding having a third predetermined number of parity bits greater than the second predetermined number.
4. The method of claim 3 , wherein each data block of the sequence of data blocks includes:
a first number of parity bit sequences of the first encoding;
a second number of parity bit sequences of the second encoding; and
a third number of parity bit sequences of the third encoding,
the first number, second number, and third number being determined based on a target error correction overhead level,
the method further comprising:
receiving channel condition information;
updating the target error correction overhead level based on the channel condition information; and
changing the first number, second number, and third number based on the updated target error correction overhead level.
5. The method of claim 4 , wherein, for each data block, the parity bit sequences of each encoding are distributed among the rows or columns such that a number of adjacent parity bit sequences of the same encoding is minimized.
6. The method of claim 4 , wherein:
each row-wise data block has the same distribution of parity bit sequences of each encoding among its rows; and
each column-wise data block has the same distribution of parity bit sequences of each encoding among its columns.
7. The method of claim 3 , further comprising generating a parity bit sequence in a row-wise data block by:
identifying a binary vector comprising:
an unknown parity bit sequence;
the data bits of the row of the parity bit sequence in the row-wise data block; and
the bits of the corresponding row of the prior column-wise data block;
identifying a valid parity bit sequence such that, by setting the unknown parity bit sequence to the valid parity bit sequence and multiplying the binary vector by a transpose of a parity check matrix to generate a syndrome, the syndrome comprising a vector having a number of elements equal to a number of rows of the parity check matrix, each element of the syndrome is equal to zero; and
setting the parity bit sequence to the valid parity bit sequence.
8. The method of claim 7 , wherein:
the parity bit sequence is of the first encoding; and
the parity check matrix comprises a one row matrix defined by a primitive element α of a Galois field such that:
the first element of the parity check matrix is one; and
each subsequent element of the parity check matrix is α times the previous element.
9. The method of claim 7 , wherein:
the parity bit sequence is of the second encoding; and
the parity check matrix comprises a two row matrix defined by a primitive element α of a Galois field such that:
the first element of the first row of the parity check matrix is one;
each subsequent element of the first row of the parity check matrix is α times the previous element;
the first element of the second row of the parity check matrix is one; and
each subsequent element of the second row of the parity check matrix is α3 times the previous element.
10. The method of claim 7 , wherein:
the parity bit sequence is of the third encoding; and
the parity check matrix comprises a three row matrix defined by a primitive element α of a Galois field such that:
the first element of the first row of the parity check matrix is one;
each subsequent element of the first row of the parity check matrix is α times the previous element;
the first element of the second row of the parity check matrix is one;
each subsequent element of the second row of the parity check matrix is α3 times the previous element;
the first element of the third row of the parity check matrix is one; and
each subsequent element of the third row of the parity check matrix is α5 times the previous element.
11. The method of claim 1 , further comprising:
receiving, at a forward error correction (FEC) decoder of a receiver, the FEC enabled data signal; and
for each row of each data row-wise block of the FEC enabled data signal, performing, at the FEC decoder, a parity check using the parity bit sequence of the row to detect at least one bit error in a prior data block of the FEC enabled data signal
for each column of each column-wise data block of the FEC enabled data signal, performing, at the FEC decoder, a parity check using the parity bit sequence of the column to detect at least one bit error in a prior data block of the FEC enabled data signal.
12. (canceled)
13. The method of claim 11 , wherein at least one data block of the sequence of data blocks contains at least one parity bit sequence of a third encoding, each parity bit sequence of the third encoding having a third predetermined number of parity bits greater than the second predetermined number.
14. The method of claim 13 , wherein:
each row-wise data block has the same distribution of parity bit sequences of each encoding among its rows; and
each column-wise data block has the same distribution of parity bit sequences of each encoding among its columns.
15. The method of claim 13 , wherein detecting a bit error in the corresponding row of the prior column-wise data block using a parity bit sequence comprises:
identifying a binary vector comprising:
the parity bit sequence;
the data bits of the row of the row-wise data block; and
the bits of the corresponding row of the prior column-wise data block;
multiplying the binary vector by a transpose of a parity check matrix to generate a syndrome, the syndrome comprising a vector having a number of elements equal to a number of rows of the parity check matrix; and
based on the elements of the syndrome, determining that the binary vector contains at least one bit error.
16. The method of claim 15 , wherein:
the parity bit sequence is of the first encoding; and
the parity check matrix comprises a one row matrix defined by a primitive element α of a Galois field such that:
the first element of the parity check matrix is one; and
each subsequent element of the parity check matrix is α times the previous element,
the method further comprising, in response to determining that the first element of the syndrome is not zero, using a syndrome decoder module of the FEC decoder to correct the one or more detected errors, the syndrome decoder module being configured to:
provide the first element of the syndrome to a one-error decoder unit of the FEC decoder;
use the one-error decoder unit to locate a single bit error in the binary vector based on the first element of the syndrome; and
correct the single bit error.
17. The method of claim 15 , wherein:
the parity bit sequence is of the second encoding; and
the parity check matrix comprises a two row matrix defined by a primitive element α of a Galois field such that:
the first element of the first row of the parity check matrix is one;
each subsequent element of the first row of the parity check matrix is α times the previous element;
the first element of the second row of the parity check matrix is one; and
each subsequent element of the second row of the parity check matrix is α3 times the previous element,
the method further comprising, in response to determining that the first element or second element of the syndrome is not zero, using a syndrome decoder module of the FEC decoder to correct the one or more detected errors, the syndrome decoder module being configured to:
calculate a value D3 by adding the cube of the first element of the syndrome to the second element of the syndrome;
if D3 is zero:
provide the first element of the syndrome to a one-error decoder unit of the FEC decoder;
use the one-error decoder unit to locate a single bit error in the binary vector based on the first element of the syndrome; and
correct the single bit error; and
if D3 is not zero:
provide the first and second elements of the syndrome to a two-error decoder unit of the FEC decoder;
use the two-error decoder unit to locate two bit errors in the binary vector based on the first element of the syndrome; and
correct the two bit errors.
18. The method of claim 13 , wherein:
the parity bit sequence is of the third encoding; and
the parity check matrix comprises a three row matrix defined by a primitive element α of a Galois field such that:
the first element of the first row of the parity check matrix is one;
each subsequent element of the first row of the parity check matrix is α times the previous element;
the first element of the second row of the parity check matrix is one;
each subsequent element of the second row of the parity check matrix is α3 times the previous element;
the first element of the third row of the parity check matrix is one; and
each subsequent element of the third row of the parity check matrix is α5 times the previous element.
the method further comprising, in response to determining that any of the three elements of the syndrome is not zero, using a syndrome decoder module of the FE decoder to correct the one or more detected errors, the syndrome decoder module being configured to:
calculate a value D3 by adding the cube of the first element of the syndrome to the second element of the syndrome;
if D3 is zero:
provide the first element of the syndrome to a one-error decoder unit of the FEC decoder;
use the one-error decoder unit to locate a single bit error in the binary vector based on the first element of the syndrome; and
correct the single bit error; and
if D3 is not zero:
calculate a value D5 by adding the first element of the syndrome, raised to the fifth power, to the third element of the syndrome;
if the first element of the syndrome, multiplied by D5, is equal to the second element of the syndrome, multiplied by D3:
provide the first and second elements of the syndrome to a two-error decoder unit of the FEC decoder;
use the two-error decoder unit to locate two bit errors in the binary vector based on the first and second elements of the syndrome; and
correct the two bit errors; and
if:
the first element of the syndrome, multiplied by D5, is not equal to the second element of the syndrome, multiplied by D3;
or the first element of the syndrome is equal to zero:
provide the first, second, and third elements of the syndrome to a three-error decoder unit of the FEC decoder;
use the three-error decoder unit to locate three bit errors in the binary vector based on the first, second, and third elements of the syndrome; and
correct the three bit errors.
19. The method of claim 18 , wherein the syndrome decoder module is a gated syndrome decoder module further configured to detect and correct bit errors in the data bit sequence of a row of a row-wise data block or in the corresponding row of the prior column-wise data block using a parity bit sequence of the first encoding or second encoding.
20. (canceled)
21. (canceled)
22. A transmitter, comprising:
a forward error correction (FEC) encoder configured to:
receive, at a forward error correction (FEC) encoder of a transmitter, a digital data signal comprising a plurality of data bits;
generate, at the FEC encoder, a FEC enabled data signal encoded as a staircase code,
the FEC enabled data signal comprising a sequence of data blocks alternating between row-wise data blocks and column-wise data blocks;
each row-wise data block comprising a plurality of rows, the plurality of rows defining a plurality of columns, each row comprising:
a data bit sequence comprising one or more of the data bits; and
a parity bit sequence comprising one or more parity bits, each parity bit sequence being based on its respective data bit sequence and a corresponding row of a prior column-wise data block;
each column-wise data block comprising a plurality of columns, the plurality of columns defining a plurality of rows, each column comprising:
a data bit sequence comprising one or more of the data bits; and
a parity bit sequence comprising one or more parity bits, each parity bit sequence being based on its respective data bit sequence and a corresponding column of a prior row-wise data block;
each data block including at least one parity bit sequence of a first encoding and at least parity bit sequence of a second encoding;
each parity bit sequence of the first encoding having a first predetermined number of parity bits;
each parity bit sequence of the second encoding having a second predetermined number of parity bits greater than the first predetermined number; and
transmit the FEC enabled data signal.
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/994,103 US11239944B1 (en) | 2020-08-14 | 2020-08-14 | Methods and devices for rate adaptive forward error correction using a flexible irregular error correcting code |
PCT/CN2021/085484 WO2022033053A1 (en) | 2020-08-14 | 2021-04-03 | Methods and devices for rate adaptive forward error correction using a flexible irregular error correcting code |
CN202180057070.9A CN116114178A (en) | 2020-08-14 | 2021-04-03 | Method and apparatus for rate adaptive forward error correction using flexible irregular error correction codes |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/994,103 US11239944B1 (en) | 2020-08-14 | 2020-08-14 | Methods and devices for rate adaptive forward error correction using a flexible irregular error correcting code |
Publications (2)
Publication Number | Publication Date |
---|---|
US11239944B1 US11239944B1 (en) | 2022-02-01 |
US20220052712A1 true US20220052712A1 (en) | 2022-02-17 |
Family
ID=80034552
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US16/994,103 Active US11239944B1 (en) | 2020-08-14 | 2020-08-14 | Methods and devices for rate adaptive forward error correction using a flexible irregular error correcting code |
Country Status (3)
Country | Link |
---|---|
US (1) | US11239944B1 (en) |
CN (1) | CN116114178A (en) |
WO (1) | WO2022033053A1 (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024026584A1 (en) * | 2022-07-30 | 2024-02-08 | Qualcomm Incorporated | Techniques for staircase encoding with block-code-based shaping |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11184112B1 (en) * | 2020-11-14 | 2021-11-23 | Ciena Corporation | OpenFEC error marking |
KR102673257B1 (en) | 2021-01-14 | 2024-06-05 | 창신 메모리 테크놀로지즈 아이엔씨 | comparison system |
US11990201B2 (en) * | 2021-01-14 | 2024-05-21 | Changxin Memory Technologies, Inc. | Storage system |
CN114765056B (en) | 2021-01-14 | 2024-07-12 | 长鑫存储技术有限公司 | Storage System |
DE102021133678A1 (en) * | 2021-01-20 | 2022-07-21 | Infineon Technologies Ag | BIT ERRORS CORRECTION |
US11709734B2 (en) * | 2021-04-30 | 2023-07-25 | Micron Technology, Inc. | Error correction with syndrome computation in a memory device |
US12101101B2 (en) * | 2022-10-26 | 2024-09-24 | Huawei Technologies Co., Ltd. | Zipper code framework-based communication systems and methods |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6226769B1 (en) * | 1997-12-12 | 2001-05-01 | 3Com Corporation | Forward error correction system for packet based real time media |
US6934305B1 (en) * | 1999-01-15 | 2005-08-23 | Cisco Technology, Inc. | Method and apparatus for detecting errors in a backplane frame |
US20070153724A1 (en) * | 2006-01-03 | 2007-07-05 | Samsung Electronics Co., Ltd. | Apparatus and method for enhancing link performance of multicast service in wireless system |
US7555695B2 (en) * | 2004-06-09 | 2009-06-30 | Fujitsu Limited | Data transmitting apparatus, data receiving apparatus, data transmitting method, and data receiving method |
US20180011762A1 (en) * | 2016-07-08 | 2018-01-11 | Toshiba Corporation | Pool-level solid state drive error correction |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8555136B2 (en) | 2007-07-25 | 2013-10-08 | Qualcomm Incorporated | Optimized decoding in a receiver |
US8751910B2 (en) | 2011-04-13 | 2014-06-10 | Cortina Systems, Inc. | Staircase forward error correction coding |
WO2012164929A1 (en) | 2011-05-31 | 2012-12-06 | 三菱電機株式会社 | Error correction coding device, error correction decoding device and method therefor |
EP3419180B1 (en) | 2017-06-19 | 2022-11-02 | Universite De Bretagne Sud | Simplified, presorted, syndrome-based, extended min-sum (ems) decoding of non-binary ldpc codes |
US10998922B2 (en) | 2017-07-28 | 2021-05-04 | Mitsubishi Electric Research Laboratories, Inc. | Turbo product polar coding with hard decision cleaning |
-
2020
- 2020-08-14 US US16/994,103 patent/US11239944B1/en active Active
-
2021
- 2021-04-03 CN CN202180057070.9A patent/CN116114178A/en active Pending
- 2021-04-03 WO PCT/CN2021/085484 patent/WO2022033053A1/en active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6226769B1 (en) * | 1997-12-12 | 2001-05-01 | 3Com Corporation | Forward error correction system for packet based real time media |
US6934305B1 (en) * | 1999-01-15 | 2005-08-23 | Cisco Technology, Inc. | Method and apparatus for detecting errors in a backplane frame |
US7555695B2 (en) * | 2004-06-09 | 2009-06-30 | Fujitsu Limited | Data transmitting apparatus, data receiving apparatus, data transmitting method, and data receiving method |
US20070153724A1 (en) * | 2006-01-03 | 2007-07-05 | Samsung Electronics Co., Ltd. | Apparatus and method for enhancing link performance of multicast service in wireless system |
US20180011762A1 (en) * | 2016-07-08 | 2018-01-11 | Toshiba Corporation | Pool-level solid state drive error correction |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024026584A1 (en) * | 2022-07-30 | 2024-02-08 | Qualcomm Incorporated | Techniques for staircase encoding with block-code-based shaping |
Also Published As
Publication number | Publication date |
---|---|
CN116114178A (en) | 2023-05-12 |
WO2022033053A1 (en) | 2022-02-17 |
US11239944B1 (en) | 2022-02-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11239944B1 (en) | Methods and devices for rate adaptive forward error correction using a flexible irregular error correcting code | |
EP3659261B1 (en) | Turbo product code based on polar codes | |
EP2477335B1 (en) | Apparatus and method for transmitting and reveiving data in communication/broadcasting system | |
EP2768146B1 (en) | Apparatus and method for transmitting and receiving data in communication/broadcasting system | |
CN111865497B (en) | Transmitter and method of generating additional parity check thereof | |
US10992416B2 (en) | Forward error correction with compression coding | |
US10211949B2 (en) | Receiver and signal processing method thereof | |
US9432052B2 (en) | Puncture-aware low density parity check (LDPC) decoding | |
US20100241923A1 (en) | Communication device employing LDPC (Low Density Parity Check) coding with Reed-Solomon (RS) and/or binary product coding | |
EP1655845A1 (en) | Iterative decoding of serial concatenated codes with algebraic decoding of the outer code | |
CN113826327A (en) | Method and apparatus for decoding data in a communication or broadcast system | |
KR20140145978A (en) | Method and apparatus for encoding and decoding of low density parity check codes | |
US10374632B2 (en) | Low density parity check coded modulation for optical communications | |
CA2505057A1 (en) | Rate-compatible low-density parity-check (ldpc) codes | |
EP1901434A1 (en) | An interleaving scheme for a LDPC coded 16APSK system | |
CA2899917C (en) | Impaired carrier coding | |
US20230065312A1 (en) | Transmitter and shortening method thereof | |
EP1901435A1 (en) | An interleaving scheme for an LDPC coded 32APSK system | |
KR102547369B1 (en) | Receiver and decoding method thereof | |
EP2406908B1 (en) | Mimo communication method and devices | |
KR20200132720A (en) | Apparatus and method for decoding of data in communication or broadcasting system | |
EP1901438A2 (en) | An interleaving scheme for a LDPC coded QPSK/8PSK system | |
Kaur | Comparative Analysis of Error Correcting Codes for Noisy Channel | |
KR20090117584A (en) | Apparatus and mathod for encoding low density parity check code |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
FEPP | Fee payment procedure |
Free format text: ENTITY STATUS SET TO UNDISCOUNTED (ORIGINAL EVENT CODE: BIG.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY |
|
AS | Assignment |
Owner name: HUAWEI TECHNOLOGIES CO., LTD., CHINA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:PAN, CHUNPO;REEL/FRAME:057381/0930 Effective date: 20200812 |
|
STCF | Information on status: patent grant |
Free format text: PATENTED CASE |