WO2023023732A1 - Modified staircase forward error correction coding - Google Patents

Modified staircase forward error correction coding Download PDF

Info

Publication number
WO2023023732A1
WO2023023732A1 PCT/AU2022/050959 AU2022050959W WO2023023732A1 WO 2023023732 A1 WO2023023732 A1 WO 2023023732A1 AU 2022050959 W AU2022050959 W AU 2022050959W WO 2023023732 A1 WO2023023732 A1 WO 2023023732A1
Authority
WO
WIPO (PCT)
Prior art keywords
symbol
block
blocks
symbol block
sub
Prior art date
Application number
PCT/AU2022/050959
Other languages
French (fr)
Inventor
Min QIU
Jinhong Yuan
Original Assignee
Newsouth Innovations Pty Limited
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Priority claimed from AU2021902765A external-priority patent/AU2021902765A0/en
Application filed by Newsouth Innovations Pty Limited filed Critical Newsouth Innovations Pty Limited
Priority to AU2022332699A priority Critical patent/AU2022332699A1/en
Publication of WO2023023732A1 publication Critical patent/WO2023023732A1/en

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/29Coding, 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/2906Coding, 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
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/25Error detection or forward error correction by signal space coding, i.e. adding redundancy in the signal constellation, e.g. Trellis Coded Modulation [TCM]
    • H03M13/251Error 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
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/27Coding, 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 using interleaving techniques
    • H03M13/2703Coding, 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 using interleaving techniques the interleaver involving at least two directions
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/27Coding, 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 using interleaving techniques
    • H03M13/2703Coding, 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 using interleaving techniques the interleaver involving at least two directions
    • H03M13/2707Simple row-column interleaver, i.e. pure block interleaving
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/29Coding, 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/2906Coding, 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
    • H03M13/2927Decoding strategies
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0041Arrangements at the transmitter end
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0045Arrangements at the receiver end
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0045Arrangements at the receiver end
    • H04L1/0047Decoding adapted to other signal detection operation
    • H04L1/0048Decoding adapted to other signal detection operation in conjunction with detection of multiuser or interfering signals, e.g. iteration between CDMA or MIMO detector and FEC decoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0056Systems characterized by the type of code used
    • H04L1/0057Block codes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0056Systems characterized by the type of code used
    • H04L1/0061Error detection codes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0056Systems characterized by the type of code used
    • H04L1/0064Concatenated codes
    • H04L1/0066Parallel concatenated codes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/02Arrangements for detecting or preventing errors in the information received by diversity reception
    • H04L1/04Arrangements for detecting or preventing errors in the information received by diversity reception using frequency diversity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/11Error 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/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/13Linear codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic 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/1515Reed-Solomon codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic 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/152Bose-Chaudhuri-Hocquenghem [BCH] codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/13Linear codes
    • H03M13/19Single error correction without using particular properties of the cyclic codes, e.g. Hamming codes, extended or generalised Hamming codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/29Coding, 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/2957Turbo codes and decoding

Definitions

  • the present invention relates generally to a modified staircase forward error correction coding.
  • FEC Forward Error Correction
  • FIG. 1 An example of a conventional FEC coding is called the staircase FEC (shown in Fig. 1). The staircase FEC will be discussed hereinafter in relation to Fig. 1.
  • the symbol block decomposition and transposition enable the input and parity data of the preceding symbol block to be interwoven within the preceding symbol block. Such interweaving of the input and parity data allows the use of stronger component FEC codes, which in turn improves the overall forward error correction capability of the modified staircase FEC.
  • a method of generating a sequence of symbol blocks, the generated symbol blocks comprising data encoded with forward error correction (FEC) encoding comprising: decomposing one of the symbol blocks; transposing the decomposed symbol block; and generating a proceeding symbol block using the decomposed and transposed symbol block.
  • FEC forward error correction
  • a method of decoding a sequence of received symbol blocks, the received symbol blocks comprising data encoded with forward error correction (FEC) encoding comprising: decomposing one of the symbol blocks; transposing the decomposed symbol block; and determining whether a proceeding received symbol block is correct based on the transposed, decomposed symbol block.
  • FEC forward error correction
  • a computer program product including a computer readable medium having recorded thereon a computer program for implementing any one of the methods described above.
  • Fig. 1 shows a prior art arrangement for performing staircase forward error correction (FEC) coding
  • Fig. 2 shows an arrangement for performing a modified staircase forward error correction (FEC) coding according to the present disclosure
  • Fig. 3 is a flow diagram of a method of performing the modified staircase FEC shown in Fig. 2;
  • Fig. 4 is a flow diagram of a sub-process of generating symbol blocks of the modified staircase FEC of Fig. 3;
  • FIGs. 5 and 6 show illustrations of the symbol blocks of different indices being processed according to the sub-process of Fig. 4;
  • Figs. 7A and 7B show a flow diagram of a method of decoding symbol blocks that are generated using the modified staircase FEC coding of Figs. 2 to 6;
  • Figs. 8A and 8B form a schematic block diagram of a general purpose computer system upon which arrangements described can be practiced.
  • Fig. 9 is a flow diagram of a sub-process of generating symbol blocks of the modified staircase FEC of Fig. 3 when a coupling width is larger than 2;
  • Figs. 10A and 10B show a flow diagram of a method of decoding symbol blocks that are generated using the modified staircase FEC coding of Fig. 9.
  • Fig. 1 shows a conventional staircase FEC 100 having symbol blocks Bi, where each symbol block B i is formed by input data K i and parity data P i (i.e. , the redundant data).
  • B 0 is a symbol block having predetermined symbols.
  • a combination of two symbol blocks B i forms the codewords of component FEC code C, such that of each row in [B T i-1 , B i ] or each column in [B i-1 , B T i ] is a codeword of component FEC code C.
  • component FEC code C is a set of all codewords generated by the FEC encoding.
  • a sequence of symbol blocks Bi , B2, ... are subsequently transmitted via a communication channel and received by a decoder.
  • Each symbol block B i is a two-dimensional array of m by m.
  • Each codeword of component FEC code C has a length of n, where the information in the codeword has a length of k.
  • the parity data P i accordingly is a two-dimensional array of m by n-k.
  • the input data K i is a two-dimensional array of m by k-m.
  • the input data K i is concatenated with the transpose of the preceding symbol block B T i-1 .
  • Each row of the concatenated data i.e., [B T i-1 , K i ]
  • the parity data P i can also be equivalently obtained by processing the encoding method on each column of the transpose of the concatenated data (i.e., [B T i-1 , K i ] T ).
  • each row in [B T i-1 , B i ] or each column in in [B i -i , B T j] is a codeword of the FEC component code C.
  • the transpose of the symbol blocks B i with even indices together with the symbol blocks B i with odd indices results in a staircase-like structure shown in Fig. 1.
  • Fig. 2 shows an illustration of a modified staircase FEC 200 in accordance with the present disclosure.
  • the preceding symbol block B i-1 is used to encode a current symbol block B i .
  • the preceding symbol block B i .1 is first decomposed and transposed before being used to obtain the parity data.
  • the decomposition of a preceding symbol block B i-1 involves dividing the preceding symbol block B i-1 into sub-blocks B i-1 , 1, B i-1 , 2, ... , B i-1 , q and transposing each sub- block.
  • the arrangement of dividing the preceding symbol block B i-1 and transposing each sub-block will be used in describing the modified staircase FEC 200.
  • the sub- blocks indicated by dashed lines i.e. , the predetermined symbol blocks Oi and the predetermined symbol blocks Bo
  • the predetermined symbol blocks Oi and the predetermined symbol blocks Bo are involved in the encoding but are not transmitted.
  • the modified staircase code 200 generates component FEC code Cj.
  • the component FEC code Ci is the set of all codewords generated by the FEC encoding, where each codeword has length ni, predetermined symbol block length ei, data length K i ei, and parity data length ni- K. i
  • Each row of a combination of a symbol block B i , the rearranged preceding symbol block B i-1 , and a predetermined symbol block 0; (or each column of the transpose of that combination) is a codeword of the component FEC code Cj.
  • the predetermined symbol block 0 includes predetermined symbols that are known by the encoder-decoder pair.
  • predetermined symbol block is a zero matrix, where all the predetermined symbols are zero.
  • component FEC codes include but not limited to Bose-Chaudhuri-Hocquenghem codes (BCH) codes, low-density parity-check (LDPC) codes, turbo codes, polar codes, Reed- Solomon (RS) codes, and Hamming codes.
  • BCH Bose-Chaudhuri-Hocquenghem codes
  • LDPC low-density parity-check
  • RS Reed- Solomon
  • the modified staircase FEC 200 has ten parameters that can be adjusted to set the dimension (i.e. , the number of rows and columns) of data block K i , and parity data block P i and, subsequently the symbol block B i . These ten parameters are and e 2 . These ten parameters are positive integers. For parameters there are further requirements where rr?i must be divisible by and must be divisible by The parameters qi , q2 are called symbol block index as these parameters determine the number of sub-blocks decomposed from the preceding symbol block B i-1 , and subsequently the number of transposed sub-blocks and the determination of the parity data (which will be described hereinafter).
  • Each symbol block B i is a two-dimensional array. When / is an odd number, B i is an by m1 matrix filled with symbols.
  • the data block K i is an matrix.
  • the parity data P i is an matrix.
  • C 1 will be used to indicate component FEC code Ci when / is an odd number.
  • m indicates the length of a codeword of the component FEC code C 1 .
  • ki indicates the length of the codeword of C 1 without the parity data P i .
  • ei indicates the length of the predetermined symbol block Oiwhen / is an odd number. Accordingly, the codeword length of C 1 satisfies
  • B i is an rm/qi by m2 matrix filled with rm rm/qi symbols.
  • the data K i is an matrix.
  • the parity data P i is an matrix.
  • C2 will be used to indicate component FEC code Ci when / is an even number.
  • m indicates the length of a codeword of the component FEC code C2.
  • k2 indicates the length of the codeword of the component FEC code C2 without the parity data P i .
  • e 2 indicates the length of the predetermined symbol block Oi when / is an even number. Accordingly, the codeword length of component FEC code C2 satisfies The predetermined symbol block Oi can be different dependent on whether / is an odd or even number.
  • the input data K i is concatenated with a decomposed and transposed preceding symbol block B i-1 and the symbol block Oi.
  • Each row of the concatenated data i.e., predetermined symbol block Oi + decomposed and transposed preceding symbol block B i .i+ data K i
  • the encoding method include but not limited to BCH encoding, turbo encoding, LDPC encoding, polar encoding, RS encoding and Hamming encoding.
  • the modified staircase FEC 200 will be described in further detail in relation to Figs. 3 to 6 hereinafter.
  • the preceding symbol block Bi is subdivided into sub-blocks Bi ,1 , Bi , 2 , and B1,3.
  • Sub-blocks Bi ,1 , Bi , 2 , and B1,3 are then rearranged by moving sub- blocks B1 ,2 and B1,3 below sub-block B1 ,1.
  • the rearranged sub-blocks B1 ,1 , B1 , 2 , and B1,3 are then transposed and concatenated with data K2 and the symbol block O 2 to obtain the parity data P 2 .
  • Symbol block 82 is then obtained by combining the data K2 with the parity data P 2 .
  • a codeword of component FEC code C2 relating to symbol block B 2 is then a column of the symbol block O 2 , the transposed and rearranged sub-blocks Bi ,1 , Bi , 2 , and Bi ,3, the data K 2 , and the parity data P 2 .
  • FIG. 2 The rearrangement of sub-blocks shown in Fig. 2 is an example rearrangement. There are other rearrangements such as permutation, and the like.
  • Fig. 3 shows a flow diagram of a method 300 for generating symbol blocks Bi , B 2 ,... , BL for received input data.
  • the method 300 is a software application program 1333 executable within the computer system 1300 (see the discussion below in relation to Figs. 8A and 8B).
  • sub-process 400 a sequence of symbol blocks Bi , B2,... , BL associated with the sequence of input data K i is generated.
  • the generated sequence of symbol blocks Bi , B2,... , BL can then be sent via the communication channel.
  • the method 300 concludes at the conclusion of the sub-process 400.
  • Fig. 4 shows a flow diagram of the sub-process 400.
  • Sub-process 400 is a software application program 1333 executable within the computer system 1300 (see the discussion below in relation to Figs. 8A and 8B).
  • Sub-process 400 commences at step 402 by initialising the predetermined symbol block Bo.
  • An example of the predetermined symbols Bo is a zero matrix.
  • Sub-process 400 proceeds from step 402 to step 404.
  • step 404 sub-process 400 determines whether the index i is an even or odd number. If the index i is an odd number, then sub-process 400 proceeds from step 404 to step 406A. Otherwise, if the index i is an even number, sub-process 400 proceeds from step 404 to step 406B.
  • step 406A sub-process 400 divides the preceding symbol block B i-1 .
  • symbol block Bo which is the preceding symbol block B i-1 and is initialised at step 402
  • q2 is used as the index i is an odd number.
  • Bo is divided into 2 sub-blocks B 0 ,1 and Bo, 2.
  • Fig. 5(a) shows an example of a preceding symbol block B i-1 when i is an odd number.
  • the preceding symbol block B i-1 is an rm/qi by m2 matrix, as the index i of the preceding symbol block is an even number (see the discussion in relation to Fig. 2 above).
  • Each sub-block B i-1 ,1 and Bi-1 ,2 is an m1/q1 by m2/ q2 matrix.
  • Sub-process 400 proceeds from step 406A to step 408A once the preceding symbol block B i .1 has been subdivided.
  • each of the sub-blocks is transposed.
  • the transposed sub-blocks are represented by Fig. 5(c) shows an illustration of the sub-blocks B i-1 ,I and B i-1 ,2 being transposed.
  • Sub-process 400 proceeds from step 408A to step 410A once all sub-blocks has been transposed.
  • step 410A the transposed sub-blocks are rearranged.
  • the rearrangement is a permutation function of
  • the permutation function TT(.) permutes the row and column position of matrix
  • Step 410A of sub-process 400 is an optional process. If Step 410A is not performed, sub-process 400 proceeds from step 408A to step 412A. Otherwise, sub-process 400 proceeds from step 408A to step 410A and then to step 412A.
  • step 412A the transposed sub-blocks are concatenated with the predetermined symbol block Oi and the data K i to obtain a concatenated block of
  • the predetermined symbol block Oi is an rri2/q2 by ei matrix and includes predetermined symbols that are known to the encoder-decoder pair.
  • the data K i is an matrix. Accordingly, the concatenated block is an by matrix.
  • Fig. 5(d) shows the concatenated block Sub-process 400 proceeds from step 412A to 414A.
  • the parity data P i for the concatenated block is determined.
  • the parity data Pi is obtained for each row of the concatenated block by performing FEC encoding of C 1 on that row.
  • the parity data Pi can be equivalently obtained by performing FEC encoding of C 1 on each column of the matrix transpose of the concatenated block .
  • examples of the FEC encoding include but not limited to BCH encoding, RS encoding, LDPC encoding, Hamming encoding, turbo encoding, and polar encoding. Accordingly, the codeword matrix is represented by where each row of Ci is a codeword of C 1 .
  • Fig. 5(e) shows the concatenated block being combined with the obtained parity data P i .
  • Each row of the combined concatenated block and parity data P i forms a codeword of component FEC code C 1 .
  • Sub-process 400 proceeds from step 414A to step 415A.
  • step 415A sub-process 400 generates a symbol block B i for the associated index /.
  • the symbol block B i is a combination of the data K i and the parity data P i .
  • the data K i is embedded within the generated symbol block B i .
  • Fig. 5(f) shows the data K i being combined with the parity data P i .
  • Sub-process 400 proceeds from step 415A to step 417.
  • sub-process 400 concludes.
  • the symbol blocks B i obtained at steps 415A and 415B (which correspond to the input data received at step 302) are sent via the communication channel.
  • the predetermined symbol block Oi can be removed to reduce the amount of data being transmitted.
  • the decoder provides the symbol block Oi when decoding the received symbol blocks B i (without the symbol block Oi).
  • step 406B sub-process 400 divides the preceding symbol block B i-1 .
  • symbol block B1 (which is the preceding symbol block B i-1 ) is divided into q1 sub- blocks.
  • q 1 is used as the index i is an even number.
  • B1 is divided into 3 sub-blocks B1,1 , B1, 2 , and B1,3.
  • Fig. 6(a) shows an example of a preceding symbol block B i-1 when i is an even number.
  • the preceding symbol block B i-1 is an matrix, as the index i of the preceding symbol block is an even number (see the discussion in relation to Fig. 2 above).
  • Fig. 6(b) then shows the preceding symbol block B i-1 being divided into 3 sub-blocks, as Each sub-block is an by mat rix.
  • Sub-process 400 proceeds from step 406B to step 408B once the preceding symbol block B i .1 has been subdivided.
  • each of the sub-blocks is transposed.
  • the transposed sub-blocks are represented by Fig. 6(c) shows an illustration of the sub-blocks being transposed.
  • Sub-process 400 proceeds from step 408B to step 410B once all sub-blocks has been transposed.
  • step 410B the transposed sub-blocks are rearranged.
  • the rearrangement is a permutation function of
  • the permutation function TT(.) permutes the row and column position of matrix
  • Step 410B of sub-process 400 is an optional process. If Step 410B is not performed, sub-process 400 proceeds from step 408B to step 412B. Otherwise, sub-process 400 proceeds from step 408A to step 410B and then to step 412B.
  • step 412B the transposed sub-blocks are concatenated with the predetermined symbol block Oi and the data K i to obtain a concatenated block of
  • the predetermined symbol block Oi is an by e2 matrix and includes predetermined symbols that are known to the encoder-decoder pair.
  • the data K i is an matrix. Accordingly, the concatenated block is an by matrix.
  • Fig. 6(d) shows the concatenated block
  • Sub-process 400 proceeds from step 412B to 414B.
  • step 414B the parity data Pi for the concatenated block is determined.
  • the parity data Pi is obtained for each row of the concatenated block by performing FEC encoding of component FEC code C2 on that row.
  • the parity data Pi can be equivalently obtained by performing FEC encoding of component FEC code C2 on each column of the matrix transpose of the concatenated block
  • examples of the FEC encoding include but not limited to BCH encoding, RS encoding, LDPC encoding, Hamming encoding, turbo encoding, and polar encoding. Accordingly, the codeword matrix is represented by where each row of Ci is a codeword of component FEC code C 2 .
  • Sub-process 400 proceeds from step 414B to step 415B.
  • Fig. 2 shows that the codewords of component FEC code C2 and its associated symbol blocks Bi (when i is an even number) are in arranged in columns.
  • the column arrangement is for illustration only, to demonstrate the staircase-like structure of the modified staircase FEC code.
  • the codeword matrix is represented by Performing a matrix transpose leads to
  • the matrix transpose (when i is an even number) combined with the codeword matrix Ci (when i is an odd number) gives the illustration in Fig. 2. As described hereinbefore, the sub-blocks indicated by dashed lines are involved in the encoding but are not transmitted. It is unnecessary to perform the matrix transpose (when i is an even number) when generating the symbol blocks Bi.
  • step 415B sub-process 400 generates a symbol block Bi for the associated index i.
  • the symbol block Bi is a combination of the data Ki and the parity data Pi.
  • Fig. 6(f) shows the data Ki being combined with the parity data Pi.
  • Sub-process 400 proceeds from step 415B to step 417, which is already described hereinbefore.
  • the codeword length of such a modified staircase FEC code 200 is In contrast, the codeword length of the conventional staircase FEC code 100 is when L symbol blocks are transmitted.
  • Both the modified staircase FEC code 200 and conventional staircase FEC code 100 have the same code rate if the encoding codes used are the same. Therefore, the modified staircase FEC code 200 has shorter codeword length in comparison to the conventional staircase codes.
  • the modified staircase FEC code 200 can therefore employ encoding codes with stronger error correction capability to achieve improved error correction performance, while having a similar codeword length and the same code rate as the conventional staircase FEC code 100.
  • the modified staircase FEC code 200 provides a similar error correction capability and achieves the same code rate as the conventional staircase FEC code 100 but with shorter codeword length, thereby reducing the latency caused by transmitting the codewords.
  • the overall code rate of the modified staircase FEC code 200 is 0.9407.
  • Each symbol block B i is filled with 260100 bits, where B i is a 255 by 1020 binary matrix. When / is an odd number, K i is a 255 by 965 binary matrix and P i is a 255 by 54 binary matrix. When / is an even number, K i is a 255 by 954 binary matrix and P i is a 255 by 65 binary matrix.
  • the overall code rate of the modified staircase FEC code 200 is 0.9303.
  • the symbol block B i is filled with 193041 bits, where B i is a 241 by 801 binary matrix, K i is a 241 by 736 binary matrix and P i is a 241 by 65 binary matrix.
  • the symbol block B i is filled with 257388 bits, where B i is a 267 by 964 binary matrix, K i is a 267 by 910 binary matrix and P i is a 267 by 54 binary matrix.
  • Figs. 7A and 7B show a flow diagram of a method 800 of decoding a sequence of received symbol blocks Yj to obtain the input data K i .
  • the method 800 is a software application program 1333 executable within the computer system 1300 (see the discussion below in relation to Figs. 8A and 8B).
  • the method 800 commences at step 802 by receiving a sequence of symbol blocks Yj.
  • the symbol blocks Bi are transmitted but not the predetermined symbol block Oi.
  • the decoder also has a parameter called decoding window size W, where 2 ⁇ W ⁇ L.
  • the decoding window W sets the number of received symbol blocks Yj to be considered when performing the decoding.
  • the decoder outputs YL-W+I , ... YL based on the received last W symbol blocks YL-W+I , ... YL.
  • the window size W can be adjusted to adapt to specific latency and performance requirement. When the window size W is large, the decoding performance is better but the latency is higher compared to when the window size W is smaller.
  • the method 800 proceeds from step 802 to step 804.
  • the decoder can choose to operate either in forward scheduling or backward scheduling.
  • forward scheduling among the W received symbol blocks is decoded first, followed by
  • backward scheduling among the W received symbol blocks is decoded first, followed by
  • step 805 the method 800 determines whether (/ + w -1) is an even or odd number. is the w-th symbol block among the W received symbol blocks Y,...,Yj+w-i in a decoding window with size W and 1 ⁇ w ⁇ W. If (/ + w -1) is an even number, then the method 800 proceeds from step 805 to step 806A. Otherwise, if (/ + w-1) is an odd number, the method 800 proceeds from step 805 to step 806B.
  • step 806A the preceding symbol block Yj +w -2 is divided into qi sub-blocks is used as the index of the current symbol block is an even number.
  • the method 800 proceeds from step 806A to step 810A.
  • step 810A each of the sub-block of the preceding symbol block is transposed.
  • the transposed sub-blocks are represented by is an matrix. Therefore, by rri2qi/q2 matrix. If the optional rearrangement step 410A or 41 OB is performed, then the transposed sub-blocks also need to be rearranged accordingly.
  • the method 800 proceeds from step 810A to 812A.
  • step 812A the method 800 constructs a concatenated symbol block
  • the concatenated symbol block is a combination of the predetermined symbol block the transposed sub-blocks of step 810A, and the symbol block .
  • the predetermined symbol block is known by the decoder, as discussed hereinbefore in relation to steps 412A and 412B.
  • the symbol block is by e2 matrix, while the symbol block is an matrix.
  • the concatenated symbol block is an by matrix.
  • the method 800 proceeds from step 812A to 814A.
  • step 814A the method 800 calculates a first syndrome block of the concatenated symbol block and a first index set associated with the concatenated symbol block
  • the first syndrome block is calculated using the equation: where H2 is the parity-check matrix of the component FEC code C2.
  • the parity-check matrix H2 is an n2-k2 by n2 matrix related to the encoding used to obtain the parity data P i .
  • a vector c is a codeword of component FEC code C2 if it satisfies Syndrome block is an by matrix.
  • the first index set is calculated using the equation where s r is the r-th row of If the first syndrome block , the method 800 then proceeds from step 814A to 816A. Otherwise, if the first syndrome block , the method 800 skips the subsequent steps 816A and 818A such that the method 800 effectively proceeds from step 814A to step 820.
  • step 816A the r-th row of the concatenated symbol block is decoded by a component FEC decoder, which corresponds to the FEC encoder used in the sub-process 400.
  • the FEC decoder uses and the first index set which are computed in step 814A.
  • Examples of component FEC decoders include but not limited to BCH decoding, turbo decoding, polar decoding, LDPC decoding, Hamming decoding, and RS decoding.
  • the component FEC decoder returns a decoded sequence.
  • the decoder of the component FEC code C2 can correct up to t2 errors. If the number of errors in a row of the concatenated symbol block is no larger than t2, the decoded sequence is correct. Otherwise, the decoded sequence is incorrect.
  • a decoded symbol block is obtained by the FEC decoder, where each row in is the decoded sequence corresponding to a corresponding row in The method 800 proceeds from step 816A to 818A.
  • step 818A the method 800 calculates a second syndrome block and a second index set based on the decoded symbol block
  • the second syndrome block is calculated using the equation:
  • the second index set is calculated using the equation: where is the r-th row of the second syndrome block is the r-th row of decoded symbol block is the r-th row of predetermined symbol block and are the sub-vectors by taking the first e2 elements of and respectively.
  • the method 800 then proceeds from step 818A to 819A.
  • step 819A the method 800 updates the received symbol blocks and dependent on the r-th rows of the decoded symbol block that have zero syndrome (i.e. , in the second syndrome block and no errors in the first e2 symbols (i.e., where and the second index set are determined in step 818A. Having a zero syndrome in the second syndrome block means that the particular row of the decoded symbol block is a valid codeword of component FEC code C2.
  • step 819A determines whether the received symbol blocks and are correct and, if incorrect, then rectifies the received symbol blocks symbol blocks and accordingly. The method 800 proceeds from step 819A to step 820.
  • step 820 Before describing step 820, the corresponding steps 806B to 818B will be described first.
  • step 806B the preceding symbol block Yj +W .2 is divided into q2 sub-blocks is used as the index of the current symbol block i+w-1 is an odd number.
  • the method 800 proceeds from step 806B to step 810B.
  • step 81 OB each of the sub-blocks of the preceding symbol block is transposed.
  • the transposed sub-blocks are represented by is an mi/qi by m2 matrix. Therefore, is an rri2/q2 by miq2/qi matrix. If the optional rearrangement step 410A or 410B is performed, then the transposed sub-blocks also need to be rearranged accordingly.
  • the method 800 proceeds from step 810B to 812B.
  • step 812B the method 800 constructs a concatenated symbol block
  • the concatenated symbol block is a combination of the predetermined symbol block the transposed sub-blocks of step 810B, and the symbol block Accordingly,
  • the predetermined symbol block is known by the decoder, as discussed hereinbefore in relation to steps 412A and 412B.
  • the symbol block is matrix, while the symbol block is an by m1 matrix.
  • the concatenated symbol block is an matrix.
  • the method 800 proceeds from step 812B to 814B.
  • step 814B the method 800 calculates a first syndrome block of the concatenated symbol block and a first index set associated with the concatenated symbol block
  • the first syndrome block is calculated using the equation: where Hi is the parity-check matrix of the component FEC code C 1 .
  • the parity-check matrix Hi is an ni-ki by m matrix related to the encoding used to obtain the parity data P i .
  • Syndrome block is an rri2/q2 by matrix.
  • the first index set is calculated using the equation where s r is the r-th row of If the first syndrome block the method 800 then proceeds from step 814B to 816B. Otherwise, if the first syndrome block , the method 800 skips the subsequent steps 816B and 818B such that the method 800 effectively proceeds from step 814B to step 820.
  • step 816B the r-th row of the concatenated symbol block is decoded by a component FEC decoder, which corresponds to the FEC encoder used in the sub-process 400.
  • the FEC decoder uses r and the first index set which are computed in step 814B.
  • Examples of component FEC decoders include but not limited to BCH decoding, turbo decoding, polar decoding, LDPC decoding, Hamming decoding, and RS decoding.
  • the component FEC decoder returns a decoded sequence.
  • the decoder of the component FEC code C 1 can correct up to ti errors.
  • a decoded symbol block is obtained by the FEC decoder, where each row in the decoded symbol block is the decoded sequence corresponding to a corresponding row in .
  • the method 800 proceeds from step 816B to 818B.
  • step 818B the method 800 calculates a second syndrome block and a second index set based on the decoded symbol block
  • the second syndrome block is calculated using the equation:
  • the second index set is calculated using the equation: where is the r-th row of the second syndrome block is the r-th row of decoded symbol block is the r-th row of predetermined symbol block r (l: e£) and are the sub-vectors by taking the first ei elements of d r and o r , respectively.
  • the method 800 then proceeds from step 818B to 819B.
  • step 819B the method 800 updates the received symbol blocks and dependent on the r-th rows of the decoded symbol block that have zero syndrome (i.e. , in the second syndrome block and no errors in the first ei symbols (i.e., where and the second index set are determined in step 818B. Having a zero syndrome in the second syndrome block means that the particular row of the decoded symbol block is a valid codeword of component FEC code C 1 .
  • step 819B determines whether the received symbol blocks 2 and are correct and, if incorrect, then rectifies the received symbol blocks symbol blocks and accordingly.
  • the method 800 proceeds from step 819B to step 820.
  • the method 800 determines whether predetermined requirements of the decoding process are met.
  • the predetermined requirement is the number of times I that a cycle of steps 806A/806B to 820 has been performed. If the number of cycle I ⁇ Imax, then the method 800 determines that the predetermined requirement is not met. The method 800 then increases the number of cycle I by 1 .
  • the method 800 determines whether the syndrome blocks The determination that the syndrome block confirms that the decoding of the last W received blocks YL-W+I , ... ,YL is successful.
  • the predetermined requirements can be combined.
  • the decoder performs either forward scheduling or backward scheduling when processing the received symbol blocks within the decoding window W.
  • the method 800 sets the decoder to perform backward scheduling regardless whether the decoder is initially set to perform forward scheduling or backward scheduling. Accordingly, in a first cycle, the decoder performs forward scheduling for a first group (as determined by the size of the decoding window W) of received symbol blocks and performs backward scheduling in subsequent cycles for the subsequent groups of the received symbol blocks. Alternatively, the decoder performs backward scheduling in all cycles for all groups of the received symbol blocks.
  • step 826 the method 800 determines whether there are remaining received data symbols Yi,...Yi+w-1 to process. In one arrangement, the determination is performed by determining whether the index iL-W+1 , where L is the last index (see step 802 above). If i ⁇ L- W+1 (YES), then the method 800 determines that there are remaining data symbols Yi,... Y+w-1 to process. The method 800 then increases the index i by 1. The method 800 then proceeds from step 826 to step 805. Otherwise (i.e., i>L-W+1) (NO), the method 800 concludes.
  • the modified staircase FEC codes can be extended by increasing the number of coupled symbol blocks B i .
  • the modified staircase FEC code uses a preceding symbol block B i-1 to encode the current symbol block B i , meaning two symbol blocks B i are coupled.
  • the number of symbol blocks B i coupled together is called a coupling width U, such that an amount II of the symbol blocks B i are correlated.
  • U-1 sub-blocks from U-1 preceding symbol blocks B i +u-i,... ,B i-1 are used to obtain the current symbol block B i .
  • the encoding process is the sub-process 400.
  • a component FEC code Ci is the set of all codewords generated by its corresponding FEC encoding for the modified staircase code. Each codeword has length ni, predetermined symbol length ei, data length K- i ei and parity data length ni-K. i Each row of a combination of a symbol block B i , the rearranged sub-blocks of preceding symbol blocks B i +u-i,... ,B i .i, and a predetermined symbol block Oi or each column of the transpose of that combination is a codeword of the component FEC code Ci.
  • Fig. 9 shows a flow diagram of sub-process 500.
  • Sub-process 500 is a software application program 1333 executable within the computer system 1300 (see the discussion below in relation to Figs. 8A and 8B).
  • Sub-process 500 commences at step 502 by initialising predetermined symbol block Bo,... ., Bu-2. Examples of the predetermined symbols blocks Bo,... ., BU-2 are zero matrices.
  • Sub-process 500 proceeds from step 502 to step 504.
  • each of the sub-blocks of the preceding symbol blocks is transposed.
  • the transposed sub-blocks are represented by
  • the transposition of the sub-blocks can be followed with rearrangement of the transposed sub-blocks (see steps 410A and 410B above).
  • Sub-process 500 then proceeds from step 506 to step 507.
  • step 507 sub-process 500 recombines the transposed sub-blocks of each of the preceding symbol blocks For example, sub-blocks are recombined into B T ,- U+I . Therefore, the recombined, preceding symbol blocks are Sub-process 500 then proceeds from step 507 to step 508.
  • step 508 each of the recombined, preceding symbol blocks is divided into U-1 sub-blocks of size m/(U-1) by m/q such that Sub-process 500 then proceeds from step 508 to step 510.
  • step 510 sub-process 500 determines whether the index / is an even or odd number. If the index / is an odd number, then sub-process 500 proceeds from step 510 to step 511 A. Otherwise, if the index / is an even number, sub-process 500 proceeds from step 510 to step 511 B.
  • step 511A the l-th transposed sub-blocks obtained at step 508 from where , are concatenated with the predetermined symbol block Oi and the data K i to obtain a concatenated block of
  • the predetermined symbol block Oi is an m/q by ei matrix (as i is an odd number) and includes predetermined symbols that are known to the encoder-decoder pair.
  • the data K i is an m/q by matrix. Accordingly, the concatenated symbol block is an matrix.
  • Sub-process 500 proceeds from step 511A to step 512A.
  • step 512A the parity data P i for the concatenated block is determined.
  • FEC encoding of component FEC code C 1 is performed as the index i is an odd number.
  • the parity data P i is obtained for each row of the concatenated block by performing FEC encoding of component FEC code C 1 on that row.
  • examples of the FEC encoding include but not limited to BCH encoding, RS encoding, LDPC encoding, Hamming encoding, turbo encoding, and polar encoding. Accordingly, the codeword matrix is represented by where each row of C; is a codeword of component FEC code C 1 .
  • Sub-process 500 proceeds from step 512A to step 514A.
  • step 514A sub-process 500 generates a symbol block B i for the associated index i.
  • the symbol block B i is a combination of the data K i and the parity data P i .
  • Sub-process 500 proceeds from step 514A to step 515.
  • the predetermined symbol block Oi can be removed to reduce the amount of data being transmitted.
  • the decoder provides the symbol block Oi when decoding the received symbol blocks B i (without the symbol block Oi).
  • the predetermined symbol block Oi is an m/q by e 2 matrix (as i is an even number) and includes predetermined symbols that are known to the encoder-decoder pair.
  • the data K i is an m/q by k2-m-e2 matrix. Accordingly, the concatenated symbol block is an m/q by k2 matrix.
  • Sub-process 500 proceeds from step 511 B to step 512B.
  • step 512B the parity data P i for the concatenated block is determined.
  • FEC encoding of component FEC code C2 is performed as the index / is an even number.
  • the parity data P i is obtained for each row of the concatenated block by performing FEC encoding of component FEC code C2 on that row.
  • examples of the FEC encoding include but not limited to BCH encoding, RS encoding, LDPC encoding, Hamming encoding, turbo encoding, and polar encoding. Accordingly, the codeword matrix is represented by where each row of C; is a codeword of component FEC code C 1 .
  • Sub-process 500 proceeds from step 512B to step 514B.
  • step 514B sub-process 500 generates a symbol block B i for the associated index /.
  • the symbol block B i is a combination of the data K i and the parity data P i .
  • Sub-process 500 proceeds from step 514B to step 515, which is already described hereinbefore.
  • the modified staircase FEC code has a coupling width II of greater than 2 and the encoding is performed by sub-process 500.
  • the decoding of such a modified staircase FEC code is performed by a decoding method 900 (shown in Fig. 10).
  • the method 900 is a software application program 1333 executable within the computer system 1300 (see the discussion below in relation to Figs. 8A and 8B).
  • the method 900 commences at step 902 by receiving a sequence of symbol blocks Yj.
  • the symbol blocks B i are transmitted, but not the predetermined symbol block Oi.
  • the decoder also has a parameter called decoding window size W, where ll ⁇ W ⁇ L.
  • the decoding window W sets the number of received symbol blocks Yj to be considered when performing the decoding.
  • the decoder receives symbol blocks (or equivalently is the w-th symbol block among the W received symbol blocks Y,...,Y+w-i in a decoding window with size W and 1 ⁇ w ⁇ W) and output Yj.
  • step 902 The method 900 proceeds from step 902 to step 904.
  • step 904 the predetermined symbol blocks are initialised based on the received symbol blocks Y.
  • Step 904 also initialises syndrome blocks because their associated symbol blocks are predetermined and known by the decoder. The values of syndrome blocks are used for improving the decoding reliability.
  • each row of a combination of three symbol blocks Oi, sub-blocks of B i .u+1,... , B i .1 and B i is a codeword of component FEC code Ci.
  • the parameters m, q, ni, ki, n2, k2, ei , and e2as well as the types of component FEC codes C 1 and C2 are known by the decoder.
  • the method 900 proceeds from step 904 to 905.
  • the decoder can choose to operate either in forward scheduling or backward scheduling.
  • forward scheduling among the W received symbol blocks is decoded first, followed by
  • backward scheduling among the W received symbol blocks is decoded first, followed by
  • step 905 each of the preceding symbol blocks is divided into q sub- blocks of size m/q by m/q, The method 900 proceeds from step 905 to step 906.
  • each of the sub-blocks of the preceding symbol block is transposed.
  • the transposed sub-blocks are represented by 2,q].
  • Each of the preceding symbol blocks is an m/q by m matrix. Therefore, each of the sub-blocks transposed preceding symbol blocks is still an m/q by m matrix. If the optional rearrangement step is performed after step 506 is performed, then the transposed sub-blocks also need to be rearranged accordingly.
  • the method 900 proceeds from step 906 to 907.
  • step 907 the method 900 recombines the transposed sub-blocks of each of the preceding symbol blocks For example, sub-blocks are recombined into Therefore, the recombined, preceding symbol blocks are The method 900 then proceeds from step 907 to step 908.
  • step 908 each of the recombined, preceding symbol blocks are divided into U-1 sub-blocks of size m/(U-1) by m/q such that The method 900 then proceeds from step 908 to step 909.
  • step 909 the method 900 determines whether (/ + w -1) is an even or odd number. If (/ + w -1) is an even number, then the method 900 proceeds from step 909 to step 910A. Otherwise, if (/ + w -1) is an odd number, the method 900 proceeds from step 909 to step 910B.
  • step 910A the method 900 determines a concatenated symbol block
  • the predetermined symbol block is known by the decoder, as discussed hereinbefore in relation to step 511 A.
  • the predetermined symbol block is an m/q by e2 matrix as is an even number, while the symbol block is an m/q by m matrix.
  • the concatenated symbol bloc is an m/q by n 2 matrix.
  • the method 900 proceeds from step 910A to 911 A.
  • step 911A the method 900 calculates a first syndrome block of the concatenated symbol block and a first index set associated with the concatenated symbol block
  • the first syndrome block is calculated using the equation: where H2 is the parity-check matrix of the component FEC code C2.
  • the parity-check matrix H2 is an n2-k2 by n2 matrix related to the encoding used to obtain the parity data P i .
  • the first syndrome block Sj+ w -i is an m/q by n2-k2 matrix.
  • the first index set is calculated using the equation where s r is the r-th row of If the first syndrome block the method 900 then proceeds from step 911A to 912A. Otherwise, if the first syndrome block the method 900 then proceeds from step 911 A to step 915.
  • step 912A the r-th row of the concatenated symbol block is decoded by a component FEC decoder, which corresponds to the FEC encoder used in the sub-process 800.
  • the FEC decoder uses and the first index set which are computed in step 911 A.
  • Examples of component FEC decoders include but not limited to BCH decoding, turbo decoding, polar decoding, LDPC decoding, Hamming decoding, and RS decoding.
  • the component FEC decoder returns a decoded sequence.
  • the decoder of the component FEC code C2 can correct up to t2 errors. If the number of errors in a row of the concatenated symbol block is no larger than t2, the decoded sequence is correct.
  • a decoded symbol block is obtained by the FEC decoder, where each row in the decoded symbol block is the decoded sequence corresponding to a corresponding row in the concatenated symbol block Dj+ w -i .
  • the method 900 proceeds from step 912A to step 913A.
  • step 913A the method 900 calculates a second syndrome block and a second index set l i+w -i based on the decoded symbol block
  • the second syndrome block is calculated using the equation:
  • the second index set is calculated using the equation: where s r is the r-th row of the second syndrome block is the r-th row of decoded symbol block is the r-th row of predetermined symbol block an d are th® sub-vectors by taking the first e 2 elements of d r and o r , respectively.
  • the method 900 then proceeds from step 913A to 914A.
  • step 913A determines whether the received symbol blocks and are correct and, if incorrect, then rectifies the received symbol blocks symbol blocks and accordingly.
  • the method 900 proceeds from step 914A to step 915. [00144] Before describing step 915, the corresponding steps 91 OB to 914B will be described first.
  • step 91 OB the method 900 determines a concatenated symbol block
  • the predetermined symbol block is known by the decoder, as discussed hereinbefore in relation to step 511 B.
  • the predetermined symbol block is an m/q by ei matrix as i+w-1 is an odd number, while the symbol block is an m/q by m matrix.
  • the concatenated symbol block Dj+w-i is an m/q by matrix.
  • the method 900 proceeds from step 910B to 911 B.
  • step 911 B the method 900 calculates a first syndrome block of the concatenated symbol block and a first index set associated with the concatenated symbol block
  • the first syndrome block is calculated using the equation: where Hi is the parity-check matrix of the component FEC code C 1 .
  • the parity-check matrix Hi is an ni-ki by ni matrix related to the encoding used to obtain the parity data P i .
  • the first syndrome block is an m/q by m-ki matrix.
  • the first index set is calculated using the equation where s r is the r-th row of If the first syndrome block the method 900 then proceeds from step 911 B to 912B. Otherwise, if the first syndrome block the method 900 then proceeds from step 911 B to step 915.
  • step 912B the r-th row of the concatenated symbol block is decoded by a component FEC decoder, which corresponds to the FEC encoder used in the sub-process 800.
  • the FEC decoder uses and the first index set which are computed in step 911 B.
  • Examples of component FEC decoders include but not limited to BCH decoding, turbo decoding, polar decoding, LDPC decoding, Hamming decoding, and RS decoding.
  • the component FEC decoder returns a decoded sequence.
  • the decoder of the component FEC code C 1 can correct up to ti errors.
  • a decoded symbol block is obtained by the FEC decoder, where each row in the decoded symbol block is the decoded sequence corresponding to a corresponding row in the concatenated symbol block .
  • the method 900 proceeds from step 912B to 913B.
  • step 913B the method 900 calculates a second syndrome block and a second index set based on the decoded symbol block
  • the second syndrome block is calculated using the equation:
  • the second index set is calculated using the equation: where s r is the r-th row of the second syndrome block is the r-th row of decoded symbol block is the r-th row of predetermined symbol block ( ) and are the sub-vectors by taking the first ei elements of d r and o r , respectively.
  • the method 900 then proceeds from step 913B to 914B.
  • step 914B the method 900 updates the received symbol blocks dependent on the r-th rows of the decoded symbol block that have zero syndrome (i.e. , in the second syndrome block and no errors in the first ei symbols , where and the second index set are determined in step 913B. Having a zero syndrome means that the particular row of the decoded symbol block is a valid codeword of component FEC code C 1 .
  • step 909 If the syndrome of the r-th row of the decoded symbol block is zero and at that row the first ei symbols are correct, then the method 900 replaces the r-th row of the concatenated symbol block with the r-th row of the decoded symbol block As discussed in step 909 above, the concatenated symbol block Thus, updating the concatenated symbol block results in the received symbol blocks being updated (where / is an odd number). Therefore, the combination of steps 914A and 914B results in all the received symbol blocks Y being updated (dependent on the syndrome of the corresponding second syndrome block). In other words, step 913B determines whether the received symbol blocks and are correct and, if incorrect, then rectifies the received symbol blocks symbol blocks and accordingly. The method 900 proceeds from step 914B to step 915.
  • step 915 the method 900 determines whether there are remaining decoding window to process.
  • the method 900 determines whether predetermined requirements of the decoding process are met.
  • the predetermined requirement is the number of times I that a cycle of steps 905 to 915 has been performed. If the number of cycle l ⁇ l max , then the method 900 determines that the predetermined requirement is not met. The method 900 then increases the number of cycle by 1.
  • the predetermined requirements can be combined.
  • step 917 If the method 900 determines that the predetermined requirements are met (YES), then the method 900 proceeds from step 917 to step 919. Otherwise (NO), the method 900 proceeds from step 917 to step 905.
  • the method 900 determines that the predetermined requirements are met (YES)
  • the decoder performs either forward scheduling or backward scheduling when processing the received symbol blocks within the decoding window W.
  • the method 900 sets the decoder to perform backward scheduling regardless whether the decoder is initially set to perform forward scheduling or backward scheduling. Accordingly, in a first cycle, the decoder performs forward scheduling for a first group (as determined by the size of the decoding window W) of received symbol blocks and performs backward scheduling in subsequent cycles for the subsequent groups of the received symbol blocks. Alternatively, the decoder performs backward scheduling in all cycles for all groups of the received symbol blocks. If the predetermined requirements are met for times, then the method 900 proceeds from step 917 to step 919.
  • the method 900 proceeds from step 919 to step 921.
  • step 921 the method 900 determines whether there are remaining received data symbols to process. In one arrangement, the determination is performed by determining whether the index where L is the last index (see step 902 above). W+1 (YES), then the method 900 determines that there are remaining data symbols to process. The method 900 then increases the index / by 1. The method 900 then proceeds from step 921 to step 905. Otherwise (i.e., />L-W+1) (NO), the method 900 concludes.
  • FIGs. 8A and 8B depict a general-purpose computer system 1300, upon which an FEC encoder or an FEC decoder described can be practiced.
  • the computer system 1300 includes: a computer module 1301; input devices such as a keyboard 1302, a mouse pointer device 1303, a scanner 1326, a camera 1327, and a microphone 1380; and output devices including a printer 1315, a display device 1314 and loudspeakers 1317.
  • An external Modulator-Demodulator (Modem) transceiver device 1316 may be used by the computer module 1301 for communicating to and from a communications network 1320 via a connection 1321.
  • the communications network 1320 may be a wide-area network (WAN), such as the Internet, a cellular telecommunications network, or a private WAN.
  • WAN wide-area network
  • the modem 1316 may be a traditional “dial-up” modem.
  • the modem 1316 may be a broadband modem.
  • a wireless modem may also be used for wireless connection to the communications network 1320.
  • the computer module 1301 typically includes at least one processor unit 1305, and a memory unit 1306.
  • the memory unit 1306 may have semiconductor random access memory (RAM) and semiconductor read only memory (ROM).
  • the computer module 1301 also includes an number of input/output (I/O) interfaces including: an audio-video interface 1307 that couples to the video display 1314, loudspeakers 1317 and microphone 1380; an I/O interface 1313 that couples to the keyboard 1302, mouse 1303, scanner 1326, camera 1327 and optionally a joystick or other human interface device (not illustrated); and an interface 1308 for the external modem 1316 and printer 1315.
  • the modem 1316 may be incorporated within the computer module 1301 , for example within the interface 1308.
  • the computer module 1301 also has a local network interface 1311 , which permits coupling of the computer system 1300 via a connection 1323 to a local-area communications network 1322, known as a Local Area Network (LAN).
  • LAN Local Area Network
  • the local communications network 1322 may also couple to the wide network 1320 via a connection 1324, which would typically include a so-called “firewall” device or device of similar functionality.
  • the local network interface 1311 may comprise an Ethernet circuit card, a Bluetooth® wireless arrangement or an IEEE 802.11 wireless arrangement; however, numerous other types of interfaces may be practiced for the interface 1311.
  • the I/O interfaces 1308 and 1313 may afford either or both of serial and parallel connectivity, the former typically being implemented according to the Universal Serial Bus (USB) standards and having corresponding USB connectors (not illustrated).
  • Storage devices 1309 are provided and typically include a hard disk drive (HDD) 1310. Other storage devices such as a floppy disk drive and a magnetic tape drive (not illustrated) may also be used.
  • An optical disk drive 1312 is typically provided to act as a non-volatile source of data.
  • Portable memory devices such optical disks (e.g., CD-ROM, DVD, Blu-ray DiscTM), USB-RAM, portable, external hard drives, and floppy disks, for example, may be used as appropriate sources of data to the system 1300.
  • the components 1305 to 1313 of the computer module 1301 typically communicate via an interconnected bus 1304 and in a manner that results in a conventional mode of operation of the computer system 1300 known to those in the relevant art.
  • the processor 1305 is coupled to the system bus 1304 using a connection 1318.
  • the memory 1306 and optical disk drive 1312 are coupled to the system bus 1304 by connections 1319. Examples of computers on which the described arrangements can be practised include IBM-PC’s and compatibles, Sun Sparcstations, Apple MacTM or like computer systems.
  • the method of encoding data to codewords and decoding codewords into data may be implemented using the computer system 1300 wherein the processes of Figs. 3, 4, 8A, and 8B, described above, may be implemented as one or more software application programs 1333 executable within the computer system 1300.
  • the steps of the method of Figs. 3, 4, 8A, and 8B are effected by instructions 1331 (see Fig. 8B) in the software 1333 that are carried out within the computer system 1300.
  • the software instructions 1331 may be formed as one or more code modules, each for performing one or more particular tasks.
  • the software may also be divided into two separate parts, in which a first part and the corresponding code modules performs the encoding and decoding methods and a second part and the corresponding code modules manage a user interface between the first part and the user.
  • the software may be stored in a computer readable medium, including the storage devices described below, for example.
  • the software is loaded into the computer system 1300 from the computer readable medium, and then executed by the computer system 1300.
  • a computer readable medium having such software or computer program recorded on the computer readable medium is a computer program product.
  • the use of the computer program product in the computer system 1300 preferably effects an advantageous apparatus for encoding data into codewords and decoding codewords into data.
  • the software 1333 is typically stored in the HDD 1310 or the memory 1306.
  • the software is loaded into the computer system 1300 from a computer readable medium, and executed by the computer system 1300.
  • the software 1333 may be stored on an optically readable disk storage medium (e.g., CD-ROM) 1325 that is read by the optical disk drive 1312.
  • a computer readable medium having such software or computer program recorded on it is a computer program product.
  • the use of the computer program product in the computer system 1300 preferably effects an apparatus for encoding data into codewords and decoding codewords into data.
  • the application programs 1333 may be supplied to the user encoded on one or more CD-ROMs 1325 and read via the corresponding drive 1312, or alternatively may be read by the user from the networks 1320 or 1322. Still further, the software can also be loaded into the computer system 1300 from other computer readable media.
  • Computer readable storage media refers to any non-transitory tangible storage medium that provides recorded instructions and/or data to the computer system 1300 for execution and/or processing.
  • Examples of such storage media include floppy disks, magnetic tape, CD-ROM, DVD, Blu-rayTM Disc, a hard disk drive, a ROM or integrated circuit, USB memory, a magneto- optical disk, or a computer readable card such as a PCMCIA card and the like, whether or not such devices are internal or external of the computer module 1301.
  • Examples of transitory or non-tangible computer readable transmission media that may also participate in the provision of software, application programs, instructions and/or data to the computer module 1301 include radio or infra-red transmission channels as well as a network connection to another computer or networked device, and the Internet or Intranets including e-mail transmissions and information recorded on Websites and the like.
  • GUIs graphical user interfaces
  • a user of the computer system 1300 and the application may manipulate the interface in a functionally adaptable manner to provide controlling commands and/or input to the applications associated with the GUI(s).
  • Other forms of functionally adaptable user interfaces may also be implemented, such as an audio interface utilizing speech prompts output via the loudspeakers 1317 and user voice commands input via the microphone 1380.
  • Fig. 8B is a detailed schematic block diagram of the processor 1305 and a “memory” 1334.
  • the memory 1334 represents a logical aggregation of all the memory modules (including the HDD 1309 and semiconductor memory 1306) that can be accessed by the computer module 1301 in Fig. 8A.
  • a power-on self-test (POST) program 1350 executes.
  • the POST program 1350 is typically stored in a ROM 1349 of the semiconductor memory 1306 of Fig. 8A.
  • a hardware device such as the ROM 1349 storing software is sometimes referred to as firmware.
  • the POST program 1350 examines hardware within the computer module 1301 to ensure proper functioning and typically checks the processor 1305, the memory 1334 (1309, 1306), and a basic input-output systems software (BIOS) module 1351, also typically stored in the ROM 1349, for correct operation. Once the POST program 1350 has run successfully, the BIOS 1351 activates the hard disk drive 1310 of Fig. 8A.
  • BIOS basic input-output systems software
  • Activation of the hard disk drive 1310 causes a bootstrap loader program 1352 that is resident on the hard disk drive 1310 to execute via the processor 1305.
  • the operating system 1353 is a system level application, executable by the processor 1305, to fulfil various high level functions, including processor management, memory management, device management, storage management, software application interface, and generic user interface.
  • the operating system 1353 manages the memory 1334 (1309, 1306) to ensure that each process or application running on the computer module 1301 has sufficient memory in which to execute without colliding with memory allocated to another process. Furthermore, the different types of memory available in the system 1300 of Fig. 8A must be used properly so that each process can run effectively. Accordingly, the aggregated memory 1334 is not intended to illustrate how particular segments of memory are allocated (unless otherwise stated), but rather to provide a general view of the memory accessible by the computer system 1300 and how such is used.
  • the processor 1305 includes a number of functional modules including a control unit 1339, an arithmetic logic unit (ALU) 1340, and a local or internal memory 1348, sometimes called a cache memory.
  • the cache memory 1348 typically includes a number of storage registers 1344 - 1346 in a register section.
  • One or more internal busses 1341 functionally interconnect these functional modules.
  • the processor 1305 typically also has one or more interfaces 1342 for communicating with external devices via the system bus 1304, using a connection 1318.
  • the memory 1334 is coupled to the bus 1304 using a connection 1319.
  • the application program 1333 includes a sequence of instructions 1331 that may include conditional branch and loop instructions.
  • the program 1333 may also include data 1332 which is used in execution of the program 1333.
  • the instructions 1331 and the data 1332 are stored in memory locations 1328, 1329, 1330 and 1335, 1336, 1337, respectively.
  • a particular instruction may be stored in a single memory location as depicted by the instruction shown in the memory location 1330.
  • an instruction may be segmented into a number of parts each of which is stored in a separate memory location, as depicted by the instruction segments shown in the memory locations 1328 and 1329.
  • the processor 1305 is given a set of instructions which are executed therein.
  • the processor 1305 waits for a subsequent input, to which the processor 1305 reacts to by executing another set of instructions.
  • Each input may be provided from one or more of a number of sources, including data generated by one or more of the input devices 1302, 1303, data received from an external source across one of the networks 1320, 1302, data retrieved from one of the storage devices 1306, 1309 or data retrieved from a storage medium 1325 inserted into the corresponding reader 1312, all depicted in Fig. 8A.
  • the execution of a set of the instructions may in some cases result in output of data. Execution may also involve storing data or variables to the memory 1334.
  • the disclosed arrangements use input variables 1354, which are stored in the memory 1334 in corresponding memory locations 1355, 1356, 1357.
  • the arrangements produce output variables 1361, which are stored in the memory 1334 in corresponding memory locations 1362, 1363, 1364.
  • Intermediate variables 1358 may be stored in memory locations 1359, 1360, 1366 and 1367.
  • each fetch, decode, and execute cycle comprises:
  • a fetch operation which fetches or reads an instruction 1331 from a memory location 1328, 1329, 1330;
  • a further fetch, decode, and execute cycle for the next instruction may be executed.
  • a store cycle may be performed by which the control unit 1339 stores or writes a value to a memory location 1332.
  • Each step or sub-process in the processes of Figs. 3, 4, 8A, and 8B is associated with one or more segments of the program 1333 and is performed by the register section 1344, 1345, 1347, the ALU 1340, and the control unit 1339 in the processor 1305 working together to perform the fetch, decode, and execute cycles for every instruction in the instruction set for the noted segments of the program 1333.
  • the method of encoding and decoding may alternatively be implemented in dedicated hardware such as one or more integrated circuits performing the functions or sub functions of the methods shown in Figs. 3, 4, 8A, and 8B.
  • dedicated hardware may include graphic processors, digital signal processors, or one or more microprocessors and associated memories.
  • the word “comprising” means “including principally but not necessarily solely” or “having” or “including”, and not “consisting only of”. Variations of the word “comprising”, such as “comprise” and “comprises” have correspondingly varied meanings.

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Theoretical Computer Science (AREA)
  • Error Detection And Correction (AREA)

Abstract

The present specification relates to a method of generating a sequence of symbol blocks. The generated symbol blocks comprises data encoded with forward error correction (FEC) encoding. The method comprises decomposing one of the symbol blocks. The decomposed symbol block is the transposed. A proceeding symbol block is then generated using the decomposed and transposed symbol block.

Description

MODIFIED STAIRCASE FORWARD ERROR CORRECTION CODING
Technical Field
[0001] The present invention relates generally to a modified staircase forward error correction coding.
Background
[0002] Transmission of data over a noisy or unreliable communication channel would typically result in errors in portions of the transmitted data when received by a receiving device. One method for resolving the errors is called Forward Error Correction (FEC) where redundant data is added into the data itself, such that a decoder can detect and correct some transmission errors. The combination of redundant data and the data is called codewords.
[0003] An example of a conventional FEC coding is called the staircase FEC (shown in Fig. 1). The staircase FEC will be discussed hereinafter in relation to Fig. 1.
Summary
[0004] Disclosed are arrangements to modify the staircase FEC by decomposing the preceding symbol block (which is used to encode a current symbol block) and transposing the decomposed, preceding symbol block used to encode the current symbol block. The symbol block decomposition and transposition enable the input and parity data of the preceding symbol block to be interwoven within the preceding symbol block. Such interweaving of the input and parity data allows the use of stronger component FEC codes, which in turn improves the overall forward error correction capability of the modified staircase FEC.
[0005] According to one aspect of the present disclosure, there is provided a method of generating a sequence of symbol blocks, the generated symbol blocks comprising data encoded with forward error correction (FEC) encoding, the method comprising: decomposing one of the symbol blocks; transposing the decomposed symbol block; and generating a proceeding symbol block using the decomposed and transposed symbol block.
[0006] According to another aspect of the present disclosure, there is provided a method of decoding a sequence of received symbol blocks, the received symbol blocks comprising data encoded with forward error correction (FEC) encoding, the method comprising: decomposing one of the symbol blocks; transposing the decomposed symbol block; and determining whether a proceeding received symbol block is correct based on the transposed, decomposed symbol block.
[0007] According to another aspect of the present disclosure, there is provided an apparatus for implementing any one of the aforementioned methods.
[0008] According to another aspect of the present disclosure, there is provided a computer program product including a computer readable medium having recorded thereon a computer program for implementing any one of the methods described above.
[0009] Other aspects are also disclosed.
Brief Description of the Drawings
[0010] Some aspects of the prior art and at least one embodiment of the present invention will now be described with reference to the drawings and appendices, in which:
[0011] Fig. 1 shows a prior art arrangement for performing staircase forward error correction (FEC) coding;
[0012] Fig. 2 shows an arrangement for performing a modified staircase forward error correction (FEC) coding according to the present disclosure;
[0013] Fig. 3 is a flow diagram of a method of performing the modified staircase FEC shown in Fig. 2;
[0014] Fig. 4 is a flow diagram of a sub-process of generating symbol blocks of the modified staircase FEC of Fig. 3;
[0015] Figs. 5 and 6 show illustrations of the symbol blocks of different indices being processed according to the sub-process of Fig. 4;
[0016] Figs. 7A and 7B show a flow diagram of a method of decoding symbol blocks that are generated using the modified staircase FEC coding of Figs. 2 to 6; and
[0017] Figs. 8A and 8B form a schematic block diagram of a general purpose computer system upon which arrangements described can be practiced. [0018] Fig. 9 is a flow diagram of a sub-process of generating symbol blocks of the modified staircase FEC of Fig. 3 when a coupling width is larger than 2; and
[0019] Figs. 10A and 10B show a flow diagram of a method of decoding symbol blocks that are generated using the modified staircase FEC coding of Fig. 9.
Detailed Description
[0020] Where reference is made in any one or more of the accompanying drawings to steps and/or features, which have the same reference numerals, those steps and/or features have for the purposes of this description the same function(s) or operation(s), unless the contrary intention appears.
[0021] Fig. 1 shows a conventional staircase FEC 100 having symbol blocks Bi, where each symbol block Bi is formed by input data Ki and parity data Pi (i.e. , the redundant data).
However, when /=0, then B0 is a symbol block having predetermined symbols. A combination of two symbol blocks Bi forms the codewords of component FEC code C, such that of each row in [BT i-1 , Bi] or each column in [Bi-1 , BT i] is a codeword of component FEC code C. Accordingly, component FEC code C is a set of all codewords generated by the FEC encoding. A sequence of symbol blocks Bi , B2, ... are subsequently transmitted via a communication channel and received by a decoder.
[0022] Each symbol block Bi is a two-dimensional array of m by m. Each codeword of component FEC code C has a length of n, where the information in the codeword has a length of k. The parity data Pi accordingly is a two-dimensional array of m by n-k. The input data Ki is a two-dimensional array of m by k-m.
[0023] To obtain the parity data Pi, the input data Ki is concatenated with the transpose of the preceding symbol block BT i-1. Each row of the concatenated data (i.e., [BT i-1, Ki]) is then processed with an encoding method to obtain the parity data on each row. The parity data Pi can also be equivalently obtained by processing the encoding method on each column of the transpose of the concatenated data (i.e., [BT i-1, Ki]T).
[0024] Once all the parity data on each row is obtained, the parity data Pi is then added to each symbol block Bi, such that Bi = [Ki, Pi], Equivalently, the transpose of the symbol block Bi is obtained, such that BTj = [Ki, Pi]T. As indicated above, each row in [BT i-1, Bi] or each column in in [Bi-i , BTj] is a codeword of the FEC component code C. The transpose of the symbol blocks Bi with even indices together with the symbol blocks Bi with odd indices results in a staircase-like structure shown in Fig. 1.
[0025] It is to be noted that the discussions contained in the "Background" section and that above relating to a conventional arrangement relate to discussions of an encoding method which forms public knowledge through their respective publication and/or use. Such should not be interpreted as a representation by the present inventor(s) or the patent applicant that such documents or method in any way form part of the common general knowledge in the art.
[0026] Fig. 2 shows an illustration of a modified staircase FEC 200 in accordance with the present disclosure. In the modified staircase FEC 200, the preceding symbol block Bi-1 is used to encode a current symbol block Bi. During the encoding process, the preceding symbol block Bi.1 is first decomposed and transposed before being used to obtain the parity data. In one arrangement, the decomposition of a preceding symbol block Bi-1 involves dividing the preceding symbol block Bi-1 into sub-blocks Bi-1 , 1, Bi-1 , 2, ... , Bi-1 , q and transposing each sub- block. Hereinafter, the arrangement of dividing the preceding symbol block Bi-1 and transposing each sub-block will be used in describing the modified staircase FEC 200. In Fig. 2, the sub- blocks indicated by dashed lines (i.e. , the predetermined symbol blocks Oi and the predetermined symbol blocks Bo) are involved in the encoding but are not transmitted.
[0027] The modified staircase FEC 200 includes symbol block Bi, where each symbol block Bi is formed by input data Ki and parity data Pi (i.e., the redundant data). / is an index identifying the order of the symbol block Bi and the associated data Ki and parity data Pi, where i=1 ,2,..., L. Each symbol block Bi is sub-divided into sub-blocks Bi-1 , Bi,2, ... , Bi,q. The parameters L and q are predetermined.
[0028] The modified staircase code 200 generates component FEC code Cj. The component FEC code Ci is the set of all codewords generated by the FEC encoding, where each codeword has length ni, predetermined symbol block length ei, data length Kiei, and parity data length ni- K.i Each row of a combination of a symbol block Bi, the rearranged preceding symbol block Bi-1 , and a predetermined symbol block 0; (or each column of the transpose of that combination) is a codeword of the component FEC code Cj. The predetermined symbol block 0; includes predetermined symbols that are known by the encoder-decoder pair. An example of predetermined symbol block is a zero matrix, where all the predetermined symbols are zero. Examples of component FEC codes include but not limited to Bose-Chaudhuri-Hocquenghem codes (BCH) codes, low-density parity-check (LDPC) codes, turbo codes, polar codes, Reed- Solomon (RS) codes, and Hamming codes. [0029] However, when /=0, Bo does not contain the input data Ki and parity data Pi. Bo instead contains predetermined symbols. An example of predetermined symbols is a zero matrix, where all the predetermined symbols are zero.
[0030] The modified staircase FEC 200 has ten parameters that can be adjusted to set the dimension (i.e. , the number of rows and columns) of data block Ki, and parity data block Pi and, subsequently the symbol block Bi. These ten parameters are and
Figure imgf000007_0001
e2. These ten parameters are positive integers. For parameters
Figure imgf000007_0002
there are further requirements where rr?i must be divisible by and must be divisible by The parameters
Figure imgf000007_0011
Figure imgf000007_0012
Figure imgf000007_0003
qi , q2 are called symbol block index as these parameters determine the number of sub-blocks decomposed from the preceding symbol block Bi-1 , and subsequently the number of transposed sub-blocks and the determination of the parity data (which will be described hereinafter).
[0031] Each symbol block Bi is a two-dimensional array. When / is an odd number, Bi is an by m1 matrix filled with symbols. The data block Ki is an
Figure imgf000007_0004
Figure imgf000007_0005
matrix. The parity data Pi is an matrix. Hereinafter, for ease of description, C
Figure imgf000007_0006
1 will be used to indicate component FEC code Ci when / is an odd number.
[0032] m indicates the length of a codeword of the component FEC code C1. ki indicates the length of the codeword of C1 without the parity data Pi. ei indicates the length of the predetermined symbol block Oiwhen / is an odd number. Accordingly, the codeword length of C1 satisfies
Figure imgf000007_0007
[0033] When / is an even number, Bi is an rm/qi by m2 matrix filled with rm rm/qi symbols. The data Ki is an
Figure imgf000007_0008
matrix. The parity data Pi is an matrix.
Figure imgf000007_0009
Hereinafter, for ease of description, C2 will be used to indicate component FEC code Ci when / is an even number.
[0034] m indicates the length of a codeword of the component FEC code C2. k2 indicates the length of the codeword of the component FEC code C2 without the parity data Pi. e2 indicates the length of the predetermined symbol block Oi when / is an even number. Accordingly, the codeword length of component FEC code C2 satisfies
Figure imgf000007_0010
The predetermined symbol block Oi can be different dependent on whether / is an odd or even number.
[0035] To obtain the parity data Pi, the input data Ki is concatenated with a decomposed and transposed preceding symbol block Bi-1 and the symbol block Oi. Each row of the concatenated data (i.e., predetermined symbol block Oi + decomposed and transposed preceding symbol block Bi.i+ data Ki) is then processed with an encoding method to obtain the parity data Pi on each row. Examples of the encoding method include but not limited to BCH encoding, turbo encoding, LDPC encoding, polar encoding, RS encoding and Hamming encoding. The modified staircase FEC 200 will be described in further detail in relation to Figs. 3 to 6 hereinafter. Fig. 2 shows an example where the preceding symbol block is divided by either qi=3 or q2=2.
Therefore, in the example shown in Fig. 2, when i=2 (which is an even number), the preceding symbol block Bi is subdivided by q1=3 to obtain sub-blocks Bi ,1 , Bi ,2, and B1,3. When /=3 (which is an odd number), the preceding symbol block B2 is subdivided by <72=2 to obtain sub-blocks B2,1 , and B2,2.
[0036] When encoding the symbol block 82, the preceding symbol block Bi is subdivided into sub-blocks Bi ,1 , Bi ,2, and B1,3. Sub-blocks Bi ,1 , Bi ,2, and B1,3 are then rearranged by moving sub- blocks B1 ,2 and B1,3 below sub-block B1 ,1. The rearranged sub-blocks B1 ,1 , B1 ,2, and B1,3 are then transposed and concatenated with data K2 and the symbol block O2 to obtain the parity data P2. Symbol block 82 is then obtained by combining the data K2 with the parity data P2. A codeword of component FEC code C2 relating to symbol block B2 is then a column of the symbol block O2, the transposed and rearranged sub-blocks Bi ,1 , Bi ,2, and Bi ,3, the data K2, and the parity data P2.
[0037] The rearrangement of sub-blocks shown in Fig. 2 is an example rearrangement. There are other rearrangements such as permutation, and the like.
[0038] The overall code rate of the modified staircase FEC code is:
Figure imgf000008_0002
Figure imgf000008_0001
[0039] Fig. 3 shows a flow diagram of a method 300 for generating symbol blocks Bi , B2,... , BL for received input data. The method 300 is a software application program 1333 executable within the computer system 1300 (see the discussion below in relation to Figs. 8A and 8B).
[0040] The method 300 commences at step 302 by receiving input data to be transmitted through a communication channel. Examples of input data include voice data, text messages, computer files, and the like. The method 300 then proceeds from step 302 to step 304. [0041] In step 304, the received input data is divided into a sequence of input data Ki, where i = 1 ,... ,L. The method 300 proceeds from step 304 to sub-process 400. In an alternative arrangement, sub-process 500 is used (rather than sub-process 400) if a coupling width II is greater than 2. The coupling width II is described hereinafter in relation to Fig. 9 and its associated description.
[0042] In sub-process 400, a sequence of symbol blocks Bi , B2,... , BL associated with the sequence of input data Ki is generated. The generated sequence of symbol blocks Bi , B2,... , BL can then be sent via the communication channel. The method 300 concludes at the conclusion of the sub-process 400.
[0043] Fig. 4 shows a flow diagram of the sub-process 400. Sub-process 400 is a software application program 1333 executable within the computer system 1300 (see the discussion below in relation to Figs. 8A and 8B).
[0044] Sub-process 400 commences at step 402 by initialising the predetermined symbol block Bo. An example of the predetermined symbols Bo is a zero matrix. Sub-process 400 proceeds from step 402 to step 404.
[0045] In step 404, sub-process 400 determines whether the index i is an even or odd number. If the index i is an odd number, then sub-process 400 proceeds from step 404 to step 406A. Otherwise, if the index i is an even number, sub-process 400 proceeds from step 404 to step 406B.
[0046] In step 406A, sub-process 400 divides the preceding symbol block Bi-1. For example, when i=1 , symbol block Bo (which is the preceding symbol block Bi-1 and is initialised at step 402) is divided into q 2 sub-blocks. As discussed hereinbefore in relation to Fig. 2, q2 is used as the index i is an odd number. As shown in the example of Fig. 2 where q 2 = 2, Bo is divided into 2 sub-blocks B0,1 and Bo, 2.
[0047] Fig. 5(a) shows an example of a preceding symbol block Bi-1 when i is an odd number. The preceding symbol block Bi-1 is an rm/qi by m2 matrix, as the index i of the preceding symbol block is an even number (see the discussion in relation to Fig. 2 above). Fig. 5(b) then shows the preceding symbol block Bi-1 being divided into 2 sub-blocks, as q2 = 2. Each sub-block Bi-1 ,1 and Bi-1 ,2 is an m1/q1 by m2/ q2 matrix. [0048] Sub-process 400 proceeds from step 406A to step 408A once the preceding symbol block Bi.1 has been subdivided.
[0049] In step 408A, each of the sub-blocks
Figure imgf000010_0003
is transposed. The transposed sub-blocks are represented by Fig. 5(c) shows an
Figure imgf000010_0004
illustration of the sub-blocks Bi-1 ,I and Bi-1 ,2 being transposed.
[0050] Sub-process 400 proceeds from step 408A to step 410A once all sub-blocks
Figure imgf000010_0005
has been transposed.
Figure imgf000010_0006
[0051] In step 410A, the transposed sub-blocks
Figure imgf000010_0001
are rearranged. In one arrangement, the rearrangement is a permutation function of
Figure imgf000010_0007
Figure imgf000010_0008
[0052] The permutation function TT(.) permutes the row and column position of matrix
Figure imgf000010_0009
Figure imgf000010_0010
[0053] Step 410A of sub-process 400 is an optional process. If Step 410A is not performed, sub-process 400 proceeds from step 408A to step 412A. Otherwise, sub-process 400 proceeds from step 408A to step 410A and then to step 412A.
[0054] In step 412A, the transposed sub-blocks
Figure imgf000010_0002
are concatenated with the predetermined symbol block Oi and the data Ki to obtain a concatenated block of As discussed hereinbefore, the predetermined symbol block Oi is an rri2/q2
Figure imgf000010_0011
by ei matrix and includes predetermined symbols that are known to the encoder-decoder pair. The data Ki is an matrix. Accordingly, the concatenated block
Figure imgf000010_0012
Figure imgf000010_0013
is an by matrix.
Figure imgf000010_0017
Figure imgf000010_0018
[0055] Fig. 5(d) shows the concatenated block Sub-process 400 proceeds from
Figure imgf000010_0014
step 412A to 414A.
[0056] In step 414A, the parity data Pi for the concatenated block is determined.
Figure imgf000010_0015
The parity data Pi is obtained for each row of the concatenated block by performing
Figure imgf000010_0016
FEC encoding of C1 on that row. The parity data Pi can be equivalently obtained by performing FEC encoding of C1 on each column of the matrix transpose of the concatenated block . As discussed hereinbefore, examples of the FEC encoding include but not limited to BCH encoding, RS encoding, LDPC encoding, Hamming encoding, turbo encoding, and polar encoding. Accordingly, the codeword matrix is represented by where each
Figure imgf000011_0001
row of Ci is a codeword of C1.
[0057] Fig. 5(e) shows the concatenated block
Figure imgf000011_0002
being combined with the obtained parity data Pi. Each row of the combined concatenated block and parity data Pi
Figure imgf000011_0003
forms a codeword of component FEC code C1.
[0058] Sub-process 400 proceeds from step 414A to step 415A.
[0059] In step 415A, sub-process 400 generates a symbol block Bi for the associated index /. The symbol block Bi is a combination of the data Ki and the parity data Pi. In other words, the data Ki is embedded within the generated symbol block Bi. Fig. 5(f) shows the data Ki being combined with the parity data Pi. Sub-process 400 proceeds from step 415A to step 417.
[0060] In step 417, sub-process 400 determines whether there are remaining symbol blocks Bi to process. In one arrangement, the determination is performed by determining whether the index i=L, where L is the last index (see step 304 above). If /<L, then sub-process 400 determines that there are remaining symbol blocks Bi to process. Sub-process 400 then increases the index i by 1. Sub-process 400 then proceeds from step 417 to step 404.
Otherwise (i.e. , i=L), sub-process 400 concludes. At the conclusion of sub-process 400, the symbol blocks Bi obtained at steps 415A and 415B (which correspond to the input data received at step 302) are sent via the communication channel. When transmitting the symbol blocks Bi, the predetermined symbol block Oi can be removed to reduce the amount of data being transmitted. As the predetermined symbol block Oi is known by the decoder, the decoder provides the symbol block Oi when decoding the received symbol blocks Bi (without the symbol block Oi).
[0061] The corresponding steps 406B to 415B for obtaining the symbol block Bi, when the index i is an even number, will now be described.
[0062] In step 406B, sub-process 400 divides the preceding symbol block Bi-1 . For example, when i=2, symbol block B1 (which is the preceding symbol block Bi-1) is divided into q1 sub- blocks. As discussed hereinbefore in relation to Fig. 2, q 1 is used as the index i is an even number. As shown in the example of Fig. 2 where q1 = 3, B1 is divided into 3 sub-blocks B1,1 , B1,2, and B1,3. [0063] Fig. 6(a) shows an example of a preceding symbol block Bi-1 when i is an even number. The preceding symbol block Bi-1 is an
Figure imgf000012_0023
matrix, as the index i of the preceding symbol block is an even number (see the discussion in relation to Fig. 2 above). Fig. 6(b) then shows the preceding symbol block Bi-1 being divided into 3 sub-blocks, as
Figure imgf000012_0002
Each sub-block
Figure imgf000012_0003
is an by mat
Figure imgf000012_0004
Figure imgf000012_0005
rix.
Figure imgf000012_0006
[0064] Sub-process 400 proceeds from step 406B to step 408B once the preceding symbol block Bi.1 has been subdivided.
[0065] In step 408B, each of the sub-blocks
Figure imgf000012_0007
is transposed. The transposed sub-blocks are represented by Fig. 6(c) shows an
Figure imgf000012_0008
illustration of the sub-blocks being transposed.
Figure imgf000012_0009
[0066] Sub-process 400 proceeds from step 408B to step 410B once all sub-blocks
Figure imgf000012_0010
has been transposed.
Figure imgf000012_0011
[0067] In step 410B, the transposed sub-blocks
Figure imgf000012_0001
are rearranged. In one arrangement, the rearrangement is a permutation function of
Figure imgf000012_0012
Figure imgf000012_0013
[0068] The permutation function TT(.) permutes the row and column position of matrix
Figure imgf000012_0014
Figure imgf000012_0015
[0069] Step 410B of sub-process 400 is an optional process. If Step 410B is not performed, sub-process 400 proceeds from step 408B to step 412B. Otherwise, sub-process 400 proceeds from step 408A to step 410B and then to step 412B.
[0070] In step 412B, the transposed sub-blocks are
Figure imgf000012_0022
concatenated with the predetermined symbol block Oi and the data Ki to obtain a concatenated block of As discussed hereinbefore, the predetermined symbol block Oi is an
Figure imgf000012_0016
Figure imgf000012_0017
by e2 matrix and includes predetermined symbols that are known to the encoder-decoder pair. The data Ki is an matrix. Accordingly, the concatenated block
Figure imgf000012_0018
Figure imgf000012_0019
is an by matrix.
Figure imgf000012_0020
[0071] Fig. 6(d) shows the concatenated block Sub-process 400 proceeds from
Figure imgf000012_0021
step 412B to 414B. [0072] In step 414B, the parity data Pi for the concatenated block
Figure imgf000013_0001
is determined. The parity data Pi is obtained for each row of the concatenated block by performing
Figure imgf000013_0002
FEC encoding of component FEC code C2 on that row. The parity data Pi can be equivalently obtained by performing FEC encoding of component FEC code C2 on each column of the matrix transpose of the concatenated block
Figure imgf000013_0003
As discussed hereinbefore, examples of the FEC encoding include but not limited to BCH encoding, RS encoding, LDPC encoding, Hamming encoding, turbo encoding, and polar encoding. Accordingly, the codeword matrix is represented by where each row of Ci is a codeword of component FEC code
Figure imgf000013_0004
C2.
[0073] Sub-process 400 proceeds from step 414B to step 415B.
[0074] Fig. 2 shows that the codewords of component FEC code C2 and its associated symbol blocks Bi (when i is an even number) are in arranged in columns. The column arrangement is for illustration only, to demonstrate the staircase-like structure of the modified staircase FEC code. As described in the paragraph immediately above, the codeword matrix is represented by Performing a matrix transpose leads to
Figure imgf000013_0005
Figure imgf000013_0006
The matrix transpose (when i is an even number) combined with the codeword
Figure imgf000013_0008
Figure imgf000013_0007
matrix Ci (when i is an odd number) gives the illustration in Fig. 2. As described hereinbefore, the sub-blocks indicated by dashed lines are involved in the encoding but are not transmitted. It is unnecessary to perform the matrix transpose (when i is an even number) when
Figure imgf000013_0009
generating the symbol blocks Bi.
[0075] In step 415B, sub-process 400 generates a symbol block Bi for the associated index i. The symbol block Bi is a combination of the data Ki and the parity data Pi. Fig. 6(f) shows the data Ki being combined with the parity data Pi. Sub-process 400 proceeds from step 415B to step 417, which is already described hereinbefore.
[0076] In one example, a modified staircase FEC 200 has symbol blocks Bi where i=1 ,... ,L and L is an even number. The codeword length of such a modified staircase FEC code 200 is In contrast, the codeword length of the conventional staircase FEC code
Figure imgf000013_0010
100 is
Figure imgf000014_0001
when L symbol blocks are transmitted. Both the modified staircase FEC code 200 and conventional staircase FEC code 100 have the same code rate if the encoding codes used are the same. Therefore, the modified staircase FEC code 200 has shorter codeword length in comparison to the conventional staircase codes. The modified staircase FEC code 200 can therefore employ encoding codes with stronger error correction capability to achieve improved error correction performance, while having a similar codeword length and the same code rate as the conventional staircase FEC code 100. Otherwise, if both the modified and conventional FEC codes use the same encoding codes, the modified staircase FEC code 200 provides a similar error correction capability and achieves the same code rate as the conventional staircase FEC code 100 but with shorter codeword length, thereby reducing the latency caused by transmitting the codewords.
[0077] In one example, the parameters set are m1 = m
Figure imgf000014_0002
2 = 1020 and q1 = q2 = 4. The FEC component code C1 is a binary BCH code with k1 = 1993, n1 = 2047, and e1 = 7. The FEC component code C2 is a binary BCH code with fo = 1982, n2 = 2047, and 62 = 7. The overall code rate of the modified staircase FEC code 200 is 0.9407. Each symbol block Bi is filled with 260100 bits, where Bi is a 255 by 1020 binary matrix. When / is an odd number, Ki is a 255 by 965 binary matrix and Pi is a 255 by 54 binary matrix. When / is an even number, Ki is a 255 by 954 binary matrix and Pi is a 255 by 65 binary matrix.
[0078] In another example, the parameters are m1 = 964, m2 = 801, q1 = 3, and q2 = 4. The FEC component code C1 is a binary BCH code with k1 = 1993, n1 = 2047, and ei = 360. The FEC component code C2 is a binary BCH code with fo = 1982, n2 = 2047, and 62 = 178. The overall code rate of the modified staircase FEC code 200 is 0.9303. When / is an even number, the symbol block Bi is filled with 193041 bits, where Bi is a 241 by 801 binary matrix, Ki is a 241 by 736 binary matrix and Pi is a 241 by 65 binary matrix. When / is an odd number, the symbol block Bi is filled with 257388 bits, where Bi is a 267 by 964 binary matrix, Ki is a 267 by 910 binary matrix and Pi is a 267 by 54 binary matrix.
[0079] Figs. 7A and 7B show a flow diagram of a method 800 of decoding a sequence of received symbol blocks Yj to obtain the input data Ki. The method 800 is a software application program 1333 executable within the computer system 1300 (see the discussion below in relation to Figs. 8A and 8B).
[0080] The method 800 commences at step 802 by receiving a sequence of symbol blocks Yj.
As discussed above in relation to step 417 of sub-process 400, the symbol blocks Bi, are transmitted but not the predetermined symbol block Oi. For ease of identification between the symbol blocks being transmitted and the symbol blocks being received, the transmitted symbol blocks Bi are represented by the received symbol blocks Y, where i=1,... ,L. The decoder also has a parameter called decoding window size W, where 2<W<L. The decoding window W sets the number of received symbol blocks Yj to be considered when performing the decoding. The decoder receives symbol blocks Yj, ... ,Y+w-i (or equivalently Y+w-i , w = 1 , ... , W) and output Y if i<L-W+1. However, if i=L-W+1, the decoder outputs YL-W+I , ... YL based on the received last W symbol blocks YL-W+I , ... YL. The window size W can be adjusted to adapt to specific latency and performance requirement. When the window size W is large, the decoding performance is better but the latency is higher compared to when the window size W is smaller.
[0081] The method 800 proceeds from step 802 to step 804.
[0082] In step 804, the predetermined symbol block Yo= Bo is initialised based on the received symbol blocks Yj. As discussed in relation to sub-process 400, each row of a combination of three symbol blocks Oi, Bi-1 and Bi is a codeword of component FEC code Ci. The parameters and e2, as well as the types of component FEC codes C1 and C2
Figure imgf000015_0001
are known by the decoder. The method 800 proceeds from step 804 to 805.
[0083] Within the decoding window W, the decoder can choose to operate either in forward scheduling or backward scheduling. When forward scheduling is performed, among the W received symbol blocks
Figure imgf000015_0013
is decoded first, followed by
Figure imgf000015_0012
When backward scheduling is performed, among the W received symbol blocks is
Figure imgf000015_0011
decoded first, followed by
Figure imgf000015_0010
[0084] In step 805, the method 800 determines whether (/ + w -1) is an even or odd number.
Figure imgf000015_0002
is the w-th symbol block among the W received symbol blocks Y,...,Yj+w-i in a decoding window with size W and 1 < w < W. If (/ + w -1) is an even number, then the method 800 proceeds from step 805 to step 806A. Otherwise, if (/ + w-1) is an odd number, the method 800 proceeds from step 805 to step 806B.
[0085] In step 806A, the preceding symbol block Yj+w-2 is divided into qi sub-blocks
Figure imgf000015_0003
is used as the index of the current symbol block
Figure imgf000015_0005
is an even
Figure imgf000015_0004
number. The method 800 proceeds from step 806A to step 810A.
[0086] In step 810A, each of the sub-block of the preceding
Figure imgf000015_0006
symbol block
Figure imgf000015_0007
is transposed. The transposed sub-blocks are represented by is an matrix. Therefore, by
Figure imgf000015_0008
Figure imgf000015_0009
rri2qi/q2 matrix. If the optional rearrangement step 410A or 41 OB is performed, then the transposed sub-blocks also need to be rearranged accordingly. The method 800 proceeds from step 810A to 812A.
[0087] In step 812A, the method 800 constructs a concatenated symbol block
Figure imgf000016_0003
The concatenated symbol block is a combination of the predetermined symbol block the
Figure imgf000016_0001
Figure imgf000016_0004
transposed sub-blocks of step 810A, and the symbol block . Accordingly,
Figure imgf000016_0002
Figure imgf000016_0005
The predetermined symbol block is known by the decoder, as discussed
Figure imgf000016_0006
Figure imgf000016_0007
hereinbefore in relation to steps 412A and 412B. The symbol block
Figure imgf000016_0008
is by e2 matrix,
Figure imgf000016_0009
while the symbol block
Figure imgf000016_0010
is an matrix. The concatenated symbol block is
Figure imgf000016_0011
Figure imgf000016_0012
an by matrix. The method 800 proceeds from step 812A to 814A.
Figure imgf000016_0013
[0088] In step 814A, the method 800 calculates a first syndrome block of the
Figure imgf000016_0014
concatenated symbol block and a first index set associated with the concatenated symbol
Figure imgf000016_0015
block
Figure imgf000016_0016
[0089] The first syndrome block
Figure imgf000016_0017
is calculated using the equation:
Figure imgf000016_0018
where H2 is the parity-check matrix of the component FEC code C2. The parity-check matrix H2 is an n2-k2 by n2 matrix related to the encoding used to obtain the parity data Pi. A vector c is a codeword of component FEC code C2 if it satisfies Syndrome block is an
Figure imgf000016_0019
Figure imgf000016_0020
Figure imgf000016_0021
by matrix.
Figure imgf000016_0022
[0090] The first index set is calculated using the equation
Figure imgf000016_0023
where sr is the r-th row of If the first syndrome block , the method 800 then
Figure imgf000016_0024
Figure imgf000016_0025
proceeds from step 814A to 816A. Otherwise, if the first syndrome block , the method
Figure imgf000016_0026
800 skips the subsequent steps 816A and 818A such that the method 800 effectively proceeds from step 814A to step 820.
[0091] In step 816A, the r-th row of the concatenated symbol block
Figure imgf000016_0027
is decoded by a component FEC decoder, which corresponds to the FEC encoder used in the sub-process 400. The FEC decoder uses and the first index set which are computed in step
Figure imgf000016_0028
Figure imgf000016_0029
814A. Examples of component FEC decoders include but not limited to BCH decoding, turbo decoding, polar decoding, LDPC decoding, Hamming decoding, and RS decoding. The component FEC decoder returns a decoded sequence. The decoder of the component FEC code C2 can correct up to t2 errors. If the number of errors in a row of the concatenated symbol block is no larger than t2, the decoded sequence is correct. Otherwise, the decoded
Figure imgf000016_0030
sequence is incorrect. A decoded symbol block is obtained by the FEC decoder, where
Figure imgf000016_0031
each row in is the decoded sequence corresponding to a corresponding row in
Figure imgf000017_0001
Figure imgf000017_0002
The method 800 proceeds from step 816A to 818A.
[0092] In step 818A, the method 800 calculates a second syndrome block and a second
Figure imgf000017_0003
index set based on the decoded symbol block
Figure imgf000017_0004
The second syndrome block
Figure imgf000017_0005
is calculated using the equation: The second index set is calculated
Figure imgf000017_0006
Figure imgf000017_0007
Figure imgf000017_0008
using the equation:
Figure imgf000017_0009
where is the r-th row
Figure imgf000017_0010
Figure imgf000017_0011
of the second syndrome block is the r-th row of decoded symbol block is
Figure imgf000017_0012
Figure imgf000017_0013
the r-th row of predetermined symbol block and are the sub-vectors
Figure imgf000017_0014
Figure imgf000017_0015
by taking the first e2 elements of
Figure imgf000017_0016
and respectively. The method 800 then proceeds from
Figure imgf000017_0017
step 818A to 819A.
[0093] In step 819A, the method 800 updates the received symbol blocks and
Figure imgf000017_0018
Figure imgf000017_0019
dependent on the r-th rows of the decoded symbol block
Figure imgf000017_0020
that have zero syndrome (i.e. , in the second syndrome block and no errors in the first e2 symbols (i.e.,
Figure imgf000017_0021
Figure imgf000017_0022
Figure imgf000017_0023
where and the second index set are determined in step 818A.
Figure imgf000017_0024
Figure imgf000017_0025
Figure imgf000017_0026
Having a zero syndrome in the second syndrome block
Figure imgf000017_0027
means that the particular row of the decoded symbol block is a valid codeword of component FEC code C2. If the
Figure imgf000017_0028
syndrome of the r-th row of the decoded symbol block
Figure imgf000017_0029
is zero and in that row the first e2 symbols are correct, then the method 800 replaces the r-th row of the concatenated symbol block with the r-th row of the decoded symbol block As discussed in
Figure imgf000017_0030
Figure imgf000017_0031
step 812A above, the concatenated symbol block
Figure imgf000017_0032
Thus, updating the concatenated symbol block results in the received symbol blocks and being
Figure imgf000017_0033
Figure imgf000017_0034
Figure imgf000017_0035
updated (where / is an even number). In other words, step 819A determines whether the received symbol blocks and are correct and, if incorrect, then rectifies the received
Figure imgf000017_0036
Figure imgf000017_0037
symbol blocks symbol blocks and accordingly. The method 800 proceeds from step
Figure imgf000017_0038
Figure imgf000017_0039
819A to step 820.
[0094] Before describing step 820, the corresponding steps 806B to 818B will be described first.
[0095] In step 806B, the preceding symbol block Yj+W.2 is divided into q2 sub-blocks
Figure imgf000017_0040
is used as the index of the current symbol block i+w-1 is an odd number.
Figure imgf000017_0041
The method 800 proceeds from step 806B to step 810B. [0096] In step 81 OB, each of the sub-blocks
Figure imgf000018_0001
of the preceding symbol block is transposed. The transposed sub-blocks are represented by
Figure imgf000018_0002
is an mi/qi by m2 matrix. Therefore,
Figure imgf000018_0004
is an rri2/q2 by
Figure imgf000018_0003
miq2/qi matrix. If the optional rearrangement step 410A or 410B is performed, then the transposed sub-blocks also need to be rearranged accordingly. The method 800 proceeds from step 810B to 812B.
[0097] In step 812B, the method 800 constructs a concatenated symbol block
Figure imgf000018_0005
The concatenated symbol block
Figure imgf000018_0006
is a combination of the predetermined symbol block
Figure imgf000018_0008
the transposed sub-blocks of step 810B, and the symbol block
Figure imgf000018_0007
Accordingly,
Figure imgf000018_0009
The predetermined symbol block is known by the decoder, as discussed
Figure imgf000018_0010
Figure imgf000018_0011
hereinbefore in relation to steps 412A and 412B. The symbol block
Figure imgf000018_0012
is
Figure imgf000018_0030
matrix, while the symbol block
Figure imgf000018_0013
is an
Figure imgf000018_0029
by m1 matrix. The concatenated symbol block is
Figure imgf000018_0014
an matrix. The method 800 proceeds from step 812B to 814B.
Figure imgf000018_0015
[0098] In step 814B, the method 800 calculates a first syndrome block
Figure imgf000018_0016
of the concatenated symbol block and a first index set associated with the concatenated symbol
Figure imgf000018_0017
block
[0099] The first syndrome block
Figure imgf000018_0018
is calculated using the equation:
Figure imgf000018_0019
where Hi is the parity-check matrix of the component FEC code C1. The parity-check matrix Hi is an ni-ki by m matrix related to the encoding used to obtain the parity data Pi. A vector c is a codeword of component FEC code C1 if it satisfies cHiT = 0. Syndrome block is an rri2/q2
Figure imgf000018_0020
by matrix.
[00100] The first index set is calculated using the equation
Figure imgf000018_0021
where sr is the r-th row of
Figure imgf000018_0022
If the first syndrome block the method 800 then
Figure imgf000018_0023
proceeds from step 814B to 816B. Otherwise, if the first syndrome block , the method
Figure imgf000018_0024
800 skips the subsequent steps 816B and 818B such that the method 800 effectively proceeds from step 814B to step 820.
Figure imgf000018_0025
[00101] In step 816B, the r-th row of the concatenated symbol block is decoded by a
Figure imgf000018_0026
component FEC decoder, which corresponds to the FEC encoder used in the sub-process 400. The FEC decoder uses r
Figure imgf000018_0027
and the first index set which are computed in step
Figure imgf000018_0028
814B. Examples of component FEC decoders include but not limited to BCH decoding, turbo decoding, polar decoding, LDPC decoding, Hamming decoding, and RS decoding. The component FEC decoder returns a decoded sequence. The decoder of the component FEC code C1 can correct up to ti errors. If the number of errors in a row of the concatenated symbol block is no larger than ti , the decoded sequence is correct. Otherwise, the decoded sequence is incorrect. A decoded symbol block
Figure imgf000019_0001
is obtained by the FEC decoder, where each row in the decoded symbol block
Figure imgf000019_0002
is the decoded sequence corresponding to a corresponding row in . The method 800 proceeds from step 816B to 818B.
Figure imgf000019_0003
[00102] In step 818B, the method 800 calculates a second syndrome block
Figure imgf000019_0004
and a second index set based on the decoded symbol block The second syndrome block
Figure imgf000019_0005
Figure imgf000019_0006
is calculated using the equation: The second index set
Figure imgf000019_0008
is calculated
Figure imgf000019_0007
using the equation:
Figure imgf000019_0009
Figure imgf000019_0035
where
Figure imgf000019_0036
is the r-th row of the second syndrome block is the r-th row of decoded symbol block is
Figure imgf000019_0010
Figure imgf000019_0011
the r-th row of predetermined symbol block r(l: e£) and are the sub-vectors
Figure imgf000019_0012
Figure imgf000019_0013
by taking the first ei elements of dr and or, respectively. The method 800 then proceeds from step 818B to 819B.
[00103] In step 819B, the method 800 updates the received symbol blocks
Figure imgf000019_0014
and
Figure imgf000019_0015
dependent on the r-th rows of the decoded symbol block
Figure imgf000019_0016
that have zero syndrome (i.e. ,
Figure imgf000019_0017
in the second syndrome block and no errors in the first ei symbols (i.e.,
Figure imgf000019_0018
Figure imgf000019_0019
where and the second index set
Figure imgf000019_0022
are determined in step 818B.
Figure imgf000019_0020
Figure imgf000019_0021
Having a zero syndrome in the second syndrome block means that the particular row of
Figure imgf000019_0023
the decoded symbol block is a valid codeword of component FEC code C1. If the
Figure imgf000019_0024
syndrome of the r-th row of the decoded symbol block
Figure imgf000019_0025
is zero and at that row the first ei symbols are correct, then the method 800 replaces the r-th row of the concatenated symbol block with the r-th row of the decoded symbol block
Figure imgf000019_0026
As discussed in step 812B above, the concatenated symbol block
Figure imgf000019_0027
Thus, updating the concatenated symbol block
Figure imgf000019_0028
results in the received symbol blocks and being
Figure imgf000019_0029
Figure imgf000019_0030
updated (where / is an odd number). Therefore, the combination of steps 819A and 819B results in all the received symbol blocks Y being updated (dependent on the syndrome of the corresponding second syndrome block). In other words, step 819B determines whether the received symbol blocks 2 and
Figure imgf000019_0032
are correct and, if incorrect, then rectifies the received
Figure imgf000019_0031
symbol blocks symbol blocks and
Figure imgf000019_0034
accordingly. The method 800 proceeds from step
Figure imgf000019_0033
819B to step 820.
[00104] In step 820, the method 800 determines whether there are remaining decoding window to process. The determination is performed by determining whether the index w=W, where W is the last index (see step 802 above). If w<W, then the method 800 determines that there are remaining decoding window to process. When forward scheduling is used, the method 800 then increases the index w by 1. The method 800 then proceeds from step 820 to step 805. Otherwise (i.e. , w=W), the method 800 proceeds to step 822. When backward scheduling is used, the determination is performed by determining whether the index w=1 , where 1 is the first index (see step 802 above). If w>1 , then the method 800 determines that there are remaining decoding window to process. The method 800 then reduces the index w by 1 . The method 800 then proceeds from step 820 to step 805. Otherwise (i.e., w=1), the method 800 proceeds to step 822.
[00105] In step 822, the method 800 determines whether predetermined requirements of the decoding process are met. In one arrangement, the predetermined requirement is the number of times I that a cycle of steps 806A/806B to 820 has been performed. If the number of cycle I< Imax, then the method 800 determines that the predetermined requirement is not met. The method 800 then increases the number of cycle I by 1 . In another arrangement, the method 800 determines whether the index i=L-W+1 , where L is the last index (see step 802 above). If i < L-W+1 , then the method 800 determines whether a syndrome block Sj=O (i.e., w=1). Since the FEC decoder processes W received symbol blocks Yi,... ,Yi+w-i and outputs updated symbol blocks Yj (a combination of steps 819A and 819B), the determination that the syndrome block Si=O confirms that the decoding of Yi is successful. Otherwise, if i >L-W+1 , the method 800 determines whether the syndrome blocks
Figure imgf000020_0001
The determination that the syndrome block
Figure imgf000020_0002
confirms that the decoding of the last W received blocks YL-W+I , ... ,YL is successful. The predetermined requirements can be combined.
[00106] As discussed above, the decoder performs either forward scheduling or backward scheduling when processing the received symbol blocks within the decoding window W. At step 822, the method 800 sets the decoder to perform backward scheduling regardless whether the decoder is initially set to perform forward scheduling or backward scheduling. Accordingly, in a first cycle, the decoder performs forward scheduling for a first group (as determined by the size of the decoding window W) of received symbol blocks and performs backward scheduling in subsequent cycles for the subsequent groups of the received symbol blocks. Alternatively, the decoder performs backward scheduling in all cycles for all groups of the received symbol blocks.
[00107] If the method 800 determines that the predetermined requirements are met (YES), then the method 800 proceeds from step 822 to step 824. Otherwise (NO), the method 800 proceeds from step 822 to step 805. [00108] In step 824, if i < L-W+1 , the updated symbol blocks Yi (i.e. , w=1) is output. Otherwise, if i >L-W+1 , the updated symbol blocks YL-W+I , ... ,YL are output. The method 800 proceeds from step 824 to step 826.
[00109] In step 826, the method 800 determines whether there are remaining received data symbols Yi,...Yi+w-1 to process. In one arrangement, the determination is performed by determining whether the index iL-W+1 , where L is the last index (see step 802 above). If i < L- W+1 (YES), then the method 800 determines that there are remaining data symbols Yi,... Y+w-1 to process. The method 800 then increases the index i by 1. The method 800 then proceeds from step 826 to step 805. Otherwise (i.e., i>L-W+1) (NO), the method 800 concludes.
[00110] The modified staircase FEC codes can be extended by increasing the number of coupled symbol blocks Bi. The modified staircase FEC code uses a preceding symbol block Bi-1 to encode the current symbol block Bi, meaning two symbol blocks Bi are coupled. The number of symbol blocks Bi coupled together is called a coupling width U, such that an amount II of the symbol blocks Bi are correlated. When the coupling width U>2, U-1 sub-blocks from U-1 preceding symbol blocks Bi+u-i,... ,Bi-1 are used to obtain the current symbol block Bi. The construction of modified staircase FEC codes with U>2 further improves the overall error correction capability of the modified staircase FEC codes compared to the case of U=2 (i.e., the modified staircase FEC code described above) when the modified staircase FEC codes in both cases employ the same component FEC codes and have the same codeword length and code rate. When U>2, each sub-block used for obtaining the current symbol block Bi must have the same size such that m1, m2, q1 and q2 satisfy m1=m2, q1=q2. Hereinafter, for ease of description, the parameters mi=m2=m, qi=q2=q will be used when describing the encoding of the modified staircase FEC code having a coupling width of U>2. When U=2, the encoding process is the sub-process 400.
[00111] A component FEC code Ci is the set of all codewords generated by its corresponding FEC encoding for the modified staircase code. Each codeword has length ni, predetermined symbol length ei, data length K-iei and parity data length ni-K.i Each row of a combination of a symbol block Bi, the rearranged sub-blocks of preceding symbol blocks Bi+u-i,... ,Bi.i, and a predetermined symbol block Oi or each column of the transpose of that combination is a codeword of the component FEC code Ci.
[00112] Fig. 9 shows a flow diagram of sub-process 500. Sub-process 500 is a software application program 1333 executable within the computer system 1300 (see the discussion below in relation to Figs. 8A and 8B). Sub-process 500 commences at step 502 by initialising predetermined symbol block Bo,... ., Bu-2. Examples of the predetermined symbols blocks Bo,... ., BU-2 are zero matrices. Sub-process 500 proceeds from step 502 to step 504.
[00113] In step 504, sub-process 500 divides each of the preceding symbol blocks
Figure imgf000022_0001
1, where i = U-1 , ... ,L and U>2. Each of these U-1 preceding symbol block is an m/q by m matrix. Each of the preceding symbol blocks
Figure imgf000022_0002
is divided into q sub-blocks of size m/q by m/q such that
Figure imgf000022_0003
Sub-process 500 then proceeds from step 504 to step 506.
[00114] In step 506, each of the sub-blocks of the preceding symbol blocks
Figure imgf000022_0004
is transposed. The transposed sub-blocks are
Figure imgf000022_0005
represented by
Figure imgf000022_0006
Similar to sub-process 400, the transposition of the sub-blocks can be followed with rearrangement of the transposed sub-blocks (see steps 410A and 410B above). Sub-process 500 then proceeds from step 506 to step 507.
[00115] In step 507, sub-process 500 recombines the transposed sub-blocks of each of the preceding symbol blocks
Figure imgf000022_0007
Figure imgf000022_0008
For example, sub-blocks are recombined into BT,- U+I .
Figure imgf000022_0009
Therefore, the recombined, preceding symbol blocks are Sub-process
Figure imgf000022_0010
500 then proceeds from step 507 to step 508.
[00116] In step 508, each of the recombined, preceding symbol blocks is
Figure imgf000022_0011
divided into U-1 sub-blocks of size m/(U-1) by m/q such that
Figure imgf000022_0012
Sub-process 500 then proceeds from step 508 to
Figure imgf000022_0013
step 510.
[00117] In step 510, sub-process 500 determines whether the index / is an even or odd number. If the index / is an odd number, then sub-process 500 proceeds from step 510 to step 511 A. Otherwise, if the index / is an even number, sub-process 500 proceeds from step 510 to step 511 B.
[00118] In step 511A, the l-th transposed sub-blocks obtained at step 508 from
Figure imgf000022_0014
where , are concatenated with the predetermined symbol block Oi and the data Ki to obtain a
Figure imgf000022_0015
concatenated block of As discussed hereinbefore, the
Figure imgf000022_0016
predetermined symbol block Oi is an m/q by ei matrix (as i is an odd number) and includes predetermined symbols that are known to the encoder-decoder pair. The data Ki is an m/q by matrix. Accordingly, the concatenated symbol block
Figure imgf000023_0001
is
Figure imgf000023_0002
an matrix. Sub-process 500 proceeds from step 511A to step 512A.
Figure imgf000023_0003
[00119] In step 512A, the parity data Pi for the concatenated block
Figure imgf000023_0004
Figure imgf000023_0005
is determined. As discussed hereinbefore in relation to step 414A, FEC encoding of component FEC code C1 is performed as the index i is an odd number. The parity data Pi is obtained for each row of the concatenated block by
Figure imgf000023_0006
performing FEC encoding of component FEC code C1 on that row. As discussed hereinbefore, examples of the FEC encoding include but not limited to BCH encoding, RS encoding, LDPC encoding, Hamming encoding, turbo encoding, and polar encoding. Accordingly, the codeword matrix is represented by where each row of C; is a
Figure imgf000023_0007
codeword of component FEC code C1.
[00120] Sub-process 500 proceeds from step 512A to step 514A.
[00121] In step 514A, sub-process 500 generates a symbol block Bi for the associated index i. The symbol block Bi is a combination of the data Ki and the parity data Pi. Sub-process 500 proceeds from step 514A to step 515.
[00122] In step 515, sub-process 500 determines whether there are remaining symbol blocks Bi to process. In one arrangement, the determination is performed by determining whether the index i=L, where L is the last index (see step 304 above). If i<L, then sub-process 500 determines that there are remaining symbol blocks Bi to process. Sub-process 500 then increases the index i by 1. Sub-process 500 then proceeds from step 515 to step 504. Otherwise (i.e. , i=L), sub-process 500 concludes. At the conclusion of sub-process 500, the symbol blocks Bi obtained at steps 514A and 514B (which correspond to the input data received at step 302) are sent via the communication channel. When transmitting the symbol blocks Bi, the predetermined symbol block Oi can be removed to reduce the amount of data being transmitted. As the predetermined symbol block Oi is known by the decoder, the decoder provides the symbol block Oi when decoding the received symbol blocks Bi (without the symbol block Oi).
[00123] The corresponding steps 511 B to 514B for obtaining the symbol block Bi, when the index i is an even number, will now be described.]
[00124] In step 511 B, the l-th transposed sub-blocks obtained at step 508 from Bi-u+i, where I=1 ,... U-1, are concatenated with the predetermined symbol block Oi and the data Ki to obtain a concatenated block of
Figure imgf000024_0001
As discussed hereinbefore, the predetermined symbol block Oi is an m/q by e2 matrix (as i is an even number) and includes predetermined symbols that are known to the encoder-decoder pair. The data Ki is an m/q by k2-m-e2 matrix. Accordingly, the concatenated symbol block
Figure imgf000024_0002
is an m/q by k2 matrix. Sub-process 500 proceeds from step 511 B to step 512B.
[00125] In step 512B, the parity data Pi for the concatenated block
Figure imgf000024_0003
is determined. As discussed hereinbefore in relation to step 414B, FEC encoding of component FEC code C2 is performed as the index / is an even number. The parity data Pi is obtained for each row of the concatenated block by
Figure imgf000024_0004
performing FEC encoding of component FEC code C2 on that row. As discussed hereinbefore, examples of the FEC encoding include but not limited to BCH encoding, RS encoding, LDPC encoding, Hamming encoding, turbo encoding, and polar encoding. Accordingly, the codeword matrix is represented by where each row of C; is a
Figure imgf000024_0005
codeword of component FEC code C1.
[00126] Sub-process 500 proceeds from step 512B to step 514B.
[00127] In step 514B, sub-process 500 generates a symbol block Bi for the associated index /. The symbol block Bi is a combination of the data Ki and the parity data Pi. Sub-process 500 proceeds from step 514B to step 515, which is already described hereinbefore.
[00128] When the modified staircase FEC code has a coupling width II of greater than 2 and the encoding is performed by sub-process 500. The decoding of such a modified staircase FEC code is performed by a decoding method 900 (shown in Fig. 10). The method 900 is a software application program 1333 executable within the computer system 1300 (see the discussion below in relation to Figs. 8A and 8B).
[00129] The method 900 commences at step 902 by receiving a sequence of symbol blocks Yj. As discussed above in relation to step 515 of sub-process 500, the symbol blocks Bi are transmitted, but not the predetermined symbol block Oi. For ease of identification between the symbol blocks being transmitted and the symbol blocks being received, the transmitted symbol blocks Bi are represented by the received symbol blocks Yj, where i=U-1 ,... ,L and U>2. The decoder also has a parameter called decoding window size W, where ll< W<L. The decoding window W sets the number of received symbol blocks Yj to be considered when performing the decoding. The decoder receives symbol blocks
Figure imgf000024_0006
(or equivalently is the w-th symbol block among the W received symbol blocks Y,...,Y+w-i in a decoding window with size W and 1 < w < W) and output Yj.
[00130] The method 900 proceeds from step 902 to step 904.
[00131] In step 904, the predetermined symbol blocks
Figure imgf000025_0001
are initialised based on the received symbol blocks Y. Step 904 also initialises syndrome blocks
Figure imgf000025_0002
because their associated symbol blocks are predetermined and known by the decoder. The values of syndrome blocks are used for improving the decoding reliability. As discussed in relation to sub-process 500, each row of a combination of three symbol blocks Oi, sub-blocks of Bi.u+1,... , Bi.1 and Bi is a codeword of component FEC code Ci. The parameters m, q, ni, ki, n2, k2, ei , and e2as well as the types of component FEC codes C1 and C2 are known by the decoder. The method 900 proceeds from step 904 to 905.
[00132] Within the decoding window W, the decoder can choose to operate either in forward scheduling or backward scheduling. When forward scheduling is performed, among the W received symbol blocks
Figure imgf000025_0003
is decoded first, followed by
Figure imgf000025_0004
When backward scheduling is performed, among the W received symbol blocks
Figure imgf000025_0005
is decoded first, followed by
Figure imgf000025_0006
[00133] In step 905, each of the preceding symbol blocks
Figure imgf000025_0007
is divided into q sub- blocks of size m/q by m/q,
Figure imgf000025_0008
The method 900 proceeds from step 905 to step 906.
Figure imgf000025_0009
[00134] In step 906, each of the sub-blocks of the preceding symbol block
Figure imgf000025_0010
is transposed. The transposed sub-blocks
Figure imgf000025_0011
are represented by
Figure imgf000025_0012
2,q]. Each of the preceding symbol blocks is an m/q by m matrix. Therefore, each
Figure imgf000025_0013
of the sub-blocks transposed preceding symbol blocks is still an m/q by m
Figure imgf000025_0014
matrix. If the optional rearrangement step is performed after step 506 is performed, then the transposed sub-blocks also need to be rearranged accordingly. The method 900 proceeds from step 906 to 907.
[00135] In step 907, the method 900 recombines the transposed sub-blocks of each of the preceding symbol blocks
Figure imgf000025_0015
For example, sub-blocks are recombined into
Figure imgf000025_0016
Figure imgf000025_0017
Therefore, the recombined, preceding symbol blocks are The
Figure imgf000026_0001
method 900 then proceeds from step 907 to step 908.
[00136] In step 908, each of the recombined, preceding symbol blocks are
Figure imgf000026_0002
divided into U-1 sub-blocks of size m/(U-1) by m/q such that
Figure imgf000026_0003
The method 900 then proceeds from step
Figure imgf000026_0004
908 to step 909.
[00137] In step 909, the method 900 determines whether (/ + w -1) is an even or odd number. If (/ + w -1) is an even number, then the method 900 proceeds from step 909 to step 910A. Otherwise, if (/ + w -1) is an odd number, the method 900 proceeds from step 909 to step 910B.
[00138] In step 910A, the method 900 determines a concatenated symbol block
Figure imgf000026_0005
The concatenated symbol block
Figure imgf000026_0006
is a combination of the predetermined symbol block
Figure imgf000026_0007
the l-th transposed sub-blocks from
Figure imgf000026_0008
where 1=1 ,... U-1 of step 908, and the symbol block
Figure imgf000026_0009
Accordingly, the concatenated symbol block
Figure imgf000026_0010
The predetermined symbol block
Figure imgf000026_0011
is known by the decoder, as discussed hereinbefore in relation to step 511 A. The predetermined symbol block
Figure imgf000026_0012
is an m/q by e2 matrix as
Figure imgf000026_0013
is an even number, while the symbol block
Figure imgf000026_0014
is an m/q by m matrix. The concatenated symbol bloc is an m/q by n2 matrix. The method 900 proceeds from step 910A to 911 A.
Figure imgf000026_0015
[00139] In step 911A, the method 900 calculates a first syndrome block
Figure imgf000026_0016
of the concatenated symbol block
Figure imgf000026_0017
and a first index set associated with the concatenated symbol block The first syndrome block is calculated using the equation:
Figure imgf000026_0018
Figure imgf000026_0019
where H2 is the parity-check matrix of the component FEC code C2. The parity-check matrix H2 is an n2-k2 by n2 matrix related to the encoding used to obtain the parity data Pi. The first syndrome block Sj+w-i is an m/q by n2-k2 matrix.
[00140] The first index set is calculated using the equation
Figure imgf000026_0020
where sr is the r-th row of If the first syndrome block
Figure imgf000026_0022
the method 900 then
Figure imgf000026_0021
proceeds from step 911A to 912A. Otherwise, if the first syndrome block the method
Figure imgf000026_0023
900 then proceeds from step 911 A to step 915.
[00141] In step 912A, the r-th row of the concatenated symbol block
Figure imgf000026_0024
is decoded by a component FEC decoder, which corresponds to the FEC encoder used in the sub-process 800. The FEC decoder uses and the first index set which are computed in step
Figure imgf000026_0025
Figure imgf000026_0026
911 A. Examples of component FEC decoders include but not limited to BCH decoding, turbo decoding, polar decoding, LDPC decoding, Hamming decoding, and RS decoding. The component FEC decoder returns a decoded sequence. The decoder of the component FEC code C2 can correct up to t2 errors. If the number of errors in a row of the concatenated symbol block is no larger than t2, the decoded sequence is correct. Otherwise, the decoded sequence is incorrect. A decoded symbol block is obtained by the FEC decoder, where
Figure imgf000027_0001
each row in the decoded symbol block is the decoded sequence corresponding to a
Figure imgf000027_0002
corresponding row in the concatenated symbol block Dj+w-i . The method 900 proceeds from step 912A to step 913A.
[00142] In step 913A, the method 900 calculates a second syndrome block and a second
Figure imgf000027_0003
index set li+w-i based on the decoded symbol block The second syndrome block
Figure imgf000027_0005
Figure imgf000027_0004
is calculated using the equation: The second index set is calculated
Figure imgf000027_0006
Figure imgf000027_0007
using the equation:
Figure imgf000027_0008
where sr is the r-th row
Figure imgf000027_0009
of the second syndrome block is the r-th row of decoded symbol block is
Figure imgf000027_0010
Figure imgf000027_0011
the r-th row of predetermined symbol block
Figure imgf000027_0012
and are th® sub-vectors
Figure imgf000027_0013
by taking the first e2 elements of dr and or, respectively. The method 900 then proceeds from step 913A to 914A.
[00143] In step 914A, the method 900 updates the received symbol blocks
Figure imgf000027_0014
dependent on the r-th rows of the decoded symbol block that have zero syndrome (i.e. ,
Figure imgf000027_0015
sr = 0) in the second syndrome block and no errors in the first e2 symbols (i.e., dr(1: e2) =
Figure imgf000027_0016
and the second index set are determined in step 913A.
Figure imgf000027_0017
Figure imgf000027_0018
Having a zero syndrome in the second syndrome block
Figure imgf000027_0030
means that the particular row of the decoded symbol block is a valid codeword of component FEC code C2. If the
Figure imgf000027_0019
syndrome of the r-th row of the decoded symbol block D is zero and at that row the first e2
Figure imgf000027_0020
symbols are correct, then the method 900 replaces the r-th row of the concatenated symbol block with the r-th row of the decoded symbol block
Figure imgf000027_0021
As discussed in step 909 above, the concatenated symbol block
Figure imgf000027_0022
Thus, updating the concatenated symbol block
Figure imgf000027_0024
results in the received symbol
Figure imgf000027_0023
blocks being updated (where / is an even number). In other words, step 913A
Figure imgf000027_0025
determines whether the received symbol blocks
Figure imgf000027_0026
and
Figure imgf000027_0027
are correct and, if incorrect, then rectifies the received symbol blocks symbol blocks and accordingly. The
Figure imgf000027_0028
Figure imgf000027_0029
method 900 proceeds from step 914A to step 915. [00144] Before describing step 915, the corresponding steps 91 OB to 914B will be described first.
[00145] In step 91 OB, the method 900 determines a concatenated symbol block The
Figure imgf000028_0001
concatenated symbol block is a combination of the predetermined symbol block Oi+w-i, the
Figure imgf000028_0002
l-th transposed sub-blocks from where 1=1 ,... U-1 of step 908, and the symbol block
Figure imgf000028_0003
Figure imgf000028_0004
Accordingly, the concatenated symbol block
Figure imgf000028_0005
The predetermined symbol block is known by the decoder, as discussed hereinbefore in
Figure imgf000028_0006
relation to step 511 B. The predetermined symbol block is an m/q by ei matrix as i+w-1 is
Figure imgf000028_0007
an odd number, while the symbol block is an m/q by m matrix. The concatenated symbol
Figure imgf000028_0008
block Dj+w-i is an m/q by
Figure imgf000028_0009
matrix. The method 900 proceeds from step 910B to 911 B.
[00146] In step 911 B, the method 900 calculates a first syndrome block
Figure imgf000028_0010
of the concatenated symbol block and a first index set associated with the concatenated symbol
Figure imgf000028_0011
block The first syndrome block
Figure imgf000028_0012
is calculated using the equation:
Figure imgf000028_0013
where Hi is the parity-check matrix of the component FEC code C1. The parity-check matrix Hi is an ni-ki by ni matrix related to the encoding used to obtain the parity data Pi. The first syndrome block
Figure imgf000028_0014
is an m/q by m-ki matrix.
[00147] The first index set is calculated using the equation
Figure imgf000028_0015
where sr is the r-th row of
Figure imgf000028_0016
If the first syndrome block
Figure imgf000028_0017
the method 900 then proceeds from step 911 B to 912B. Otherwise, if the first syndrome block the method
Figure imgf000028_0018
900 then proceeds from step 911 B to step 915.
[00148] In step 912B, the r-th row of the concatenated symbol block
Figure imgf000028_0019
is decoded by a component FEC decoder, which corresponds to the FEC encoder used in the sub-process 800. The FEC decoder uses and the first index set which are computed in step
Figure imgf000028_0020
Figure imgf000028_0021
911 B. Examples of component FEC decoders include but not limited to BCH decoding, turbo decoding, polar decoding, LDPC decoding, Hamming decoding, and RS decoding. The component FEC decoder returns a decoded sequence. The decoder of the component FEC code C1 can correct up to ti errors. If the number of errors in a row of the concatenated symbol block Dj+w-i is no larger than ti , the decoded sequence is correct. Otherwise, the decoded sequence is incorrect. A decoded symbol block is obtained by the FEC decoder, where
Figure imgf000028_0022
each row in the decoded symbol block is the decoded sequence corresponding to a
Figure imgf000028_0023
corresponding row in the concatenated symbol block . The method 900 proceeds from step
Figure imgf000028_0024
912B to 913B. [00149] In step 913B, the method 900 calculates a second syndrome block and a second
Figure imgf000029_0001
index set based on the decoded symbol block
Figure imgf000029_0003
The second syndrome block
Figure imgf000029_0002
is calculated using the equation: The second index set is calculated
Figure imgf000029_0004
Figure imgf000029_0005
using the equation:
Figure imgf000029_0006
where sr is the r-th row
Figure imgf000029_0007
of the second syndrome block is the r-th row of decoded symbol block is
Figure imgf000029_0008
Figure imgf000029_0009
the r-th row of predetermined symbol block
Figure imgf000029_0010
( ) and are the sub-vectors
Figure imgf000029_0029
Figure imgf000029_0030
by taking the first ei elements of dr and or, respectively. The method 900 then proceeds from step 913B to 914B.
[00150] In step 914B, the method 900 updates the received symbol blocks
Figure imgf000029_0011
dependent on the r-th rows of the decoded symbol block
Figure imgf000029_0012
that have zero syndrome (i.e. ,
Figure imgf000029_0013
in the second syndrome block
Figure imgf000029_0014
and no errors in the first ei symbols
Figure imgf000029_0031
, where and the second index set
Figure imgf000029_0017
are determined in step 913B.
Figure imgf000029_0015
Figure imgf000029_0016
Having a zero syndrome means that the particular row of the decoded symbol block
Figure imgf000029_0018
is a valid codeword of component FEC code C1. If the syndrome of the r-th row of the decoded symbol block is zero and at that row the first ei symbols are correct, then the method
Figure imgf000029_0019
900 replaces the r-th row of the concatenated symbol block
Figure imgf000029_0020
with the r-th row of the decoded symbol block
Figure imgf000029_0021
As discussed in step 909 above, the concatenated symbol block
Figure imgf000029_0022
Thus, updating the concatenated symbol block
Figure imgf000029_0024
results in the received symbol blocks
Figure imgf000029_0023
being updated (where / is an odd number). Therefore, the combination of steps 914A and 914B results in all the received symbol blocks Y being updated (dependent on the syndrome of the corresponding second syndrome block). In other words, step 913B determines whether the received symbol blocks and
Figure imgf000029_0026
are correct and, if incorrect, then rectifies the received
Figure imgf000029_0025
symbol blocks symbol blocks
Figure imgf000029_0027
and accordingly. The method 900 proceeds from step
Figure imgf000029_0028
914B to step 915.
[00151] In step 915, the method 900 determines whether there are remaining decoding window to process. When forward scheduling is used, the determination is performed by determining whether the index w=W, where W is the last index (see step 902 above). If w<W, then the method 900 determines that there are remaining decoding window to process. The method 900 then increases the index w by 1. The method 900 then proceeds from step 915 to step 905. Otherwise (i.e., w=W), the method 900 proceeds to step 917. When backward scheduling is used, the determination is performed by determining whether the index w=1, where 1 is the first index (see step 902 above). If w>1 , then the method 900 determines that there are remaining decoding window to process. The method 900 then reduces the index w by 1 . The method 900 then proceeds from step 915 to step 905. Otherwise (i.e., w=1), the method 900 proceeds to step 917.
[00152] In step 917, the method 900 determines whether predetermined requirements of the decoding process are met. In one arrangement, the predetermined requirement is the number of times I that a cycle of steps 905 to 915 has been performed. If the number of cycle l< lmax, then the method 900 determines that the predetermined requirement is not met. The method 900 then increases the number of cycle by 1. In another arrangement, the method 900 determines whether the index /=L-W+1 , where L is the last index (see step 902 above). If / < L- W+1 , then the method 900 determines whether a syndrome block Sj=O (i.e., w=1). Since the FEC decoder processes W received symbol blocks Y,... ,Y+w-i and outputs updated symbol blocks Yj (a combination of steps 914A and 914B), the determination that the syndrome block Sj=O confirms that the decoding of Yj is successful. Otherwise, if / >L-W+1 , the method 900 determines whether the syndrome blocks [SL-W+I , ... ,SL]=0. The determination that the syndrome block
Figure imgf000030_0001
confirms that the decoding of the last W received blocks YL-W+I , ... ,YL is successful. The predetermined requirements can be combined.
[00153] In an alternative arrangement, step 917 determines whether the syndrome block Sj.j=O for j=1 ,... , U-1. If
Figure imgf000030_0004
it means that the received symbol block Y-j was successfully decoded prior to the decoding of Y,... ,Y+w-i or Yj.j is the predetermined symbol block known by the decoder. Then,
Figure imgf000030_0003
j is assigned by its original value prior to the decoding of
Figure imgf000030_0005
Otherwise, if no changes are applied to . Updating results in the
Figure imgf000030_0002
Figure imgf000030_0006
Figure imgf000030_0007
concatenated symbol block Dj+k (see step 910A and 910B) for k=0,... ,U-2 being updated. Then, the updated syndrome blocks Sj+kfor k=0,... ,U-2, are computed by following step 905 to step 911 A if the index i+k is even or step 905 to step 911 B if the index i+k is odd.
[00154] If the method 900 determines that the predetermined requirements are met (YES), then the method 900 proceeds from step 917 to step 919. Otherwise (NO), the method 900 proceeds from step 917 to step 905.
[00155] In an alternative arrangement, if the method 900 determines that the predetermined requirements are met (YES), then the method 900 proceeds from step 917 to step 905 and sets the cycle I =lmax- Imax2. As discussed above, the decoder performs either forward scheduling or backward scheduling when processing the received symbol blocks within the decoding window W. At step 917, the method 900 sets the decoder to perform backward scheduling regardless whether the decoder is initially set to perform forward scheduling or backward scheduling. Accordingly, in a first cycle, the decoder performs forward scheduling for a first group (as determined by the size of the decoding window W) of received symbol blocks and performs backward scheduling in subsequent cycles for the subsequent groups of the received symbol blocks. Alternatively, the decoder performs backward scheduling in all cycles for all groups of the received symbol blocks. If the predetermined requirements are met for times, then the
Figure imgf000031_0001
method 900 proceeds from step 917 to step 919.
[00156] In step 919, if / < L-W+1, the updated symbol block Yj (i.e., w=1) is output. Otherwise, if / the updated symbol blocks are output. The method 900 proceeds from
Figure imgf000031_0002
Figure imgf000031_0003
step 919 to step 921.
[00157] In step 921, the method 900 determines whether there are remaining received data symbols
Figure imgf000031_0004
to process. In one arrangement, the determination is performed by determining whether the index
Figure imgf000031_0005
where L is the last index (see step 902 above).
Figure imgf000031_0006
W+1 (YES), then the method 900 determines that there are remaining data symbols
Figure imgf000031_0007
to process. The method 900 then increases the index / by 1. The method 900 then proceeds from step 921 to step 905. Otherwise (i.e., />L-W+1) (NO), the method 900 concludes.
Computer Description
[00158] Figs. 8A and 8B depict a general-purpose computer system 1300, upon which an FEC encoder or an FEC decoder described can be practiced.
[00159] As seen in Fig. 8A, the computer system 1300 includes: a computer module 1301; input devices such as a keyboard 1302, a mouse pointer device 1303, a scanner 1326, a camera 1327, and a microphone 1380; and output devices including a printer 1315, a display device 1314 and loudspeakers 1317. An external Modulator-Demodulator (Modem) transceiver device 1316 may be used by the computer module 1301 for communicating to and from a communications network 1320 via a connection 1321. The communications network 1320 may be a wide-area network (WAN), such as the Internet, a cellular telecommunications network, or a private WAN. Where the connection 1321 is a telephone line, the modem 1316 may be a traditional “dial-up” modem. Alternatively, where the connection 1321 is a high capacity (e.g., cable) connection, the modem 1316 may be a broadband modem. A wireless modem may also be used for wireless connection to the communications network 1320.
[00160] The computer module 1301 typically includes at least one processor unit 1305, and a memory unit 1306. For example, the memory unit 1306 may have semiconductor random access memory (RAM) and semiconductor read only memory (ROM). The computer module 1301 also includes an number of input/output (I/O) interfaces including: an audio-video interface 1307 that couples to the video display 1314, loudspeakers 1317 and microphone 1380; an I/O interface 1313 that couples to the keyboard 1302, mouse 1303, scanner 1326, camera 1327 and optionally a joystick or other human interface device (not illustrated); and an interface 1308 for the external modem 1316 and printer 1315. In some implementations, the modem 1316 may be incorporated within the computer module 1301 , for example within the interface 1308. The computer module 1301 also has a local network interface 1311 , which permits coupling of the computer system 1300 via a connection 1323 to a local-area communications network 1322, known as a Local Area Network (LAN). As illustrated in Fig. 8A, the local communications network 1322 may also couple to the wide network 1320 via a connection 1324, which would typically include a so-called “firewall” device or device of similar functionality. The local network interface 1311 may comprise an Ethernet circuit card, a Bluetooth® wireless arrangement or an IEEE 802.11 wireless arrangement; however, numerous other types of interfaces may be practiced for the interface 1311.
[00161] The I/O interfaces 1308 and 1313 may afford either or both of serial and parallel connectivity, the former typically being implemented according to the Universal Serial Bus (USB) standards and having corresponding USB connectors (not illustrated). Storage devices 1309 are provided and typically include a hard disk drive (HDD) 1310. Other storage devices such as a floppy disk drive and a magnetic tape drive (not illustrated) may also be used. An optical disk drive 1312 is typically provided to act as a non-volatile source of data. Portable memory devices, such optical disks (e.g., CD-ROM, DVD, Blu-ray Disc™), USB-RAM, portable, external hard drives, and floppy disks, for example, may be used as appropriate sources of data to the system 1300.
[00162] The components 1305 to 1313 of the computer module 1301 typically communicate via an interconnected bus 1304 and in a manner that results in a conventional mode of operation of the computer system 1300 known to those in the relevant art. For example, the processor 1305 is coupled to the system bus 1304 using a connection 1318. Likewise, the memory 1306 and optical disk drive 1312 are coupled to the system bus 1304 by connections 1319. Examples of computers on which the described arrangements can be practised include IBM-PC’s and compatibles, Sun Sparcstations, Apple Mac™ or like computer systems.
[00163] The method of encoding data to codewords and decoding codewords into data may be implemented using the computer system 1300 wherein the processes of Figs. 3, 4, 8A, and 8B, described above, may be implemented as one or more software application programs 1333 executable within the computer system 1300. In particular, the steps of the method of Figs. 3, 4, 8A, and 8B are effected by instructions 1331 (see Fig. 8B) in the software 1333 that are carried out within the computer system 1300. The software instructions 1331 may be formed as one or more code modules, each for performing one or more particular tasks. The software may also be divided into two separate parts, in which a first part and the corresponding code modules performs the encoding and decoding methods and a second part and the corresponding code modules manage a user interface between the first part and the user.
[00164] The software may be stored in a computer readable medium, including the storage devices described below, for example. The software is loaded into the computer system 1300 from the computer readable medium, and then executed by the computer system 1300. A computer readable medium having such software or computer program recorded on the computer readable medium is a computer program product. The use of the computer program product in the computer system 1300 preferably effects an advantageous apparatus for encoding data into codewords and decoding codewords into data.
[00165] The software 1333 is typically stored in the HDD 1310 or the memory 1306. The software is loaded into the computer system 1300 from a computer readable medium, and executed by the computer system 1300. Thus, for example, the software 1333 may be stored on an optically readable disk storage medium (e.g., CD-ROM) 1325 that is read by the optical disk drive 1312. A computer readable medium having such software or computer program recorded on it is a computer program product. The use of the computer program product in the computer system 1300 preferably effects an apparatus for encoding data into codewords and decoding codewords into data.
[00166] In some instances, the application programs 1333 may be supplied to the user encoded on one or more CD-ROMs 1325 and read via the corresponding drive 1312, or alternatively may be read by the user from the networks 1320 or 1322. Still further, the software can also be loaded into the computer system 1300 from other computer readable media. Computer readable storage media refers to any non-transitory tangible storage medium that provides recorded instructions and/or data to the computer system 1300 for execution and/or processing. Examples of such storage media include floppy disks, magnetic tape, CD-ROM, DVD, Blu-ray™ Disc, a hard disk drive, a ROM or integrated circuit, USB memory, a magneto- optical disk, or a computer readable card such as a PCMCIA card and the like, whether or not such devices are internal or external of the computer module 1301. Examples of transitory or non-tangible computer readable transmission media that may also participate in the provision of software, application programs, instructions and/or data to the computer module 1301 include radio or infra-red transmission channels as well as a network connection to another computer or networked device, and the Internet or Intranets including e-mail transmissions and information recorded on Websites and the like.
[00167] The second part of the application programs 1333 and the corresponding code modules mentioned above may be executed to implement one or more graphical user interfaces (GUIs) to be rendered or otherwise represented upon the display 1314. Through manipulation of typically the keyboard 1302 and the mouse 1303, a user of the computer system 1300 and the application may manipulate the interface in a functionally adaptable manner to provide controlling commands and/or input to the applications associated with the GUI(s). Other forms of functionally adaptable user interfaces may also be implemented, such as an audio interface utilizing speech prompts output via the loudspeakers 1317 and user voice commands input via the microphone 1380.
[00168] Fig. 8B is a detailed schematic block diagram of the processor 1305 and a “memory” 1334. The memory 1334 represents a logical aggregation of all the memory modules (including the HDD 1309 and semiconductor memory 1306) that can be accessed by the computer module 1301 in Fig. 8A.
[00169] When the computer module 1301 is initially powered up, a power-on self-test (POST) program 1350 executes. The POST program 1350 is typically stored in a ROM 1349 of the semiconductor memory 1306 of Fig. 8A. A hardware device such as the ROM 1349 storing software is sometimes referred to as firmware. The POST program 1350 examines hardware within the computer module 1301 to ensure proper functioning and typically checks the processor 1305, the memory 1334 (1309, 1306), and a basic input-output systems software (BIOS) module 1351, also typically stored in the ROM 1349, for correct operation. Once the POST program 1350 has run successfully, the BIOS 1351 activates the hard disk drive 1310 of Fig. 8A. Activation of the hard disk drive 1310 causes a bootstrap loader program 1352 that is resident on the hard disk drive 1310 to execute via the processor 1305. This loads an operating system 1353 into the RAM memory 1306, upon which the operating system 1353 commences operation. The operating system 1353 is a system level application, executable by the processor 1305, to fulfil various high level functions, including processor management, memory management, device management, storage management, software application interface, and generic user interface.
[00170] The operating system 1353 manages the memory 1334 (1309, 1306) to ensure that each process or application running on the computer module 1301 has sufficient memory in which to execute without colliding with memory allocated to another process. Furthermore, the different types of memory available in the system 1300 of Fig. 8A must be used properly so that each process can run effectively. Accordingly, the aggregated memory 1334 is not intended to illustrate how particular segments of memory are allocated (unless otherwise stated), but rather to provide a general view of the memory accessible by the computer system 1300 and how such is used.
[00171] As shown in Fig. 8B, the processor 1305 includes a number of functional modules including a control unit 1339, an arithmetic logic unit (ALU) 1340, and a local or internal memory 1348, sometimes called a cache memory. The cache memory 1348 typically includes a number of storage registers 1344 - 1346 in a register section. One or more internal busses 1341 functionally interconnect these functional modules. The processor 1305 typically also has one or more interfaces 1342 for communicating with external devices via the system bus 1304, using a connection 1318. The memory 1334 is coupled to the bus 1304 using a connection 1319.
[00172] The application program 1333 includes a sequence of instructions 1331 that may include conditional branch and loop instructions. The program 1333 may also include data 1332 which is used in execution of the program 1333. The instructions 1331 and the data 1332 are stored in memory locations 1328, 1329, 1330 and 1335, 1336, 1337, respectively. Depending upon the relative size of the instructions 1331 and the memory locations 1328-1330, a particular instruction may be stored in a single memory location as depicted by the instruction shown in the memory location 1330. Alternately, an instruction may be segmented into a number of parts each of which is stored in a separate memory location, as depicted by the instruction segments shown in the memory locations 1328 and 1329.
[00173] In general, the processor 1305 is given a set of instructions which are executed therein. The processor 1305 waits for a subsequent input, to which the processor 1305 reacts to by executing another set of instructions. Each input may be provided from one or more of a number of sources, including data generated by one or more of the input devices 1302, 1303, data received from an external source across one of the networks 1320, 1302, data retrieved from one of the storage devices 1306, 1309 or data retrieved from a storage medium 1325 inserted into the corresponding reader 1312, all depicted in Fig. 8A. The execution of a set of the instructions may in some cases result in output of data. Execution may also involve storing data or variables to the memory 1334. [00174] The disclosed arrangements use input variables 1354, which are stored in the memory 1334 in corresponding memory locations 1355, 1356, 1357. The arrangements produce output variables 1361, which are stored in the memory 1334 in corresponding memory locations 1362, 1363, 1364. Intermediate variables 1358 may be stored in memory locations 1359, 1360, 1366 and 1367.
[00175] Referring to the processor 1305 of Fig. 8B, the registers 1344, 1345, 1346, the arithmetic logic unit (ALU) 1340, and the control unit 1339 work together to perform sequences of micro-operations needed to perform “fetch, decode, and execute” cycles for every instruction in the instruction set making up the program 1333. Each fetch, decode, and execute cycle comprises:
[00176] a fetch operation, which fetches or reads an instruction 1331 from a memory location 1328, 1329, 1330;
[00177] a decode operation in which the control unit 1339 determines which instruction has been fetched; and
[00178] an execute operation in which the control unit 1339 and/or the ALU 1340 execute the instruction.
[00179] Thereafter, a further fetch, decode, and execute cycle for the next instruction may be executed. Similarly, a store cycle may be performed by which the control unit 1339 stores or writes a value to a memory location 1332.
[00180] Each step or sub-process in the processes of Figs. 3, 4, 8A, and 8B is associated with one or more segments of the program 1333 and is performed by the register section 1344, 1345, 1347, the ALU 1340, and the control unit 1339 in the processor 1305 working together to perform the fetch, decode, and execute cycles for every instruction in the instruction set for the noted segments of the program 1333.
[00181] The method of encoding and decoding may alternatively be implemented in dedicated hardware such as one or more integrated circuits performing the functions or sub functions of the methods shown in Figs. 3, 4, 8A, and 8B. Such dedicated hardware may include graphic processors, digital signal processors, or one or more microprocessors and associated memories. Industrial Applicability
[00182] The arrangements described are applicable to the computer and data processing industries and particularly for the modified staircase forward error correction coding.
[00183] The foregoing describes only some embodiments of the present invention, and modifications and/or changes can be made thereto without departing from the scope and spirit of the invention, the embodiments being illustrative and not restrictive.
[00184] In the context of this specification, the word “comprising” means “including principally but not necessarily solely” or “having” or “including”, and not “consisting only of”. Variations of the word "comprising", such as “comprise” and “comprises” have correspondingly varied meanings.

Claims

CLAIMS:
1. A method of generating a sequence of symbol blocks, the generated symbol blocks comprising data encoded with forward error correction (FEC) encoding, the method comprising: decomposing one of the symbol blocks; transposing the decomposed symbol block; and generating a proceeding symbol block using the decomposed and transposed symbol block.
2. The method of claim 1 , wherein a coupling width determines the number of the symbol blocks being decomposed and transposed, and wherein the proceeding symbol block is generated using the decomposed and transposed symbol blocks.
3. The method of claim 1 or 2, wherein a symbol block is decomposed by dividing the symbol block into sub-blocks.
4. The method of claim 3, wherein the step of transposing the decomposed symbol block comprises transposing each sub-block.
5. The method of any one of claims 1 to 4, further comprising: rearranging the transposed and decomposed symbol block.
6. The method of claim 5, wherein the rearrangement comprises a permutation function.
7. The method of any one of claims 3 to 6, when dependent on claim 2, further comprising: recombining the transposed sub-blocks into a corresponding symbol block; and dividing the recombined symbol block, based on the coupling width, into sub-blocks.
8. The method of any one of claims 1 to 7, further comprising: determining parity data based on the transposed, decomposed symbol block.
9. The method of any one of claims 1 to 8, wherein the step of generating the proceeding symbol block is based on the determined parity data.
10. The method of any one of claims 1 to 9, wherein the generated symbol block is transmitted.
11. The method of any one of claims 1 to 10, wherein the step of decomposing one of the symbol blocks is based on a symbol block index.
12. A method of decoding a sequence of received symbol blocks, the received symbol blocks comprising data encoded with forward error correction (FEC) encoding, the method comprising: decomposing one of the symbol blocks; transposing the decomposed symbol block; and determining whether a proceeding received symbol block is correct based on the transposed, decomposed symbol block.
13. The method of claim 12, wherein a coupling width determines the number of the received symbol blocks being decomposed and transposed, and wherein the proceeding symbol block is generated using the decomposed and transposed symbol blocks.
14. The method of claim 12 or 13, wherein a symbol block is decomposed by dividing the symbol block into sub-blocks.
15. The method of claim 14, wherein the step of transposing the decomposed symbol block comprises transposing each sub-block.
16. The method of claim 14 or 15, when dependent on claim 12, further comprising: recombining the transposed sub-blocks into a corresponding symbol block; and dividing the recombined symbol block, based on the coupling width, into sub-blocks.
17. The method of any one of claims 14 to 16, further comprising: determining a concatenated symbol block based on the divided symbol block; calculating a first syndrome block based on the concatenated symbol block; generating a decode symbol block based on the first syndrome block; calculating a second syndrome block based on the decoded symbol block; determining whether the decoded symbol block is correct based on the second syndrome block; and updating the received symbol block based on the determination whether the decoded symbol block is correct.
18. The method of any one of claims 12 to 17, wherein the step of decomposing one of the symbol blocks is based on a symbol block index.
19. The method of any one of claims 12 to 18, wherein, in a first cycle, a first group of the received symbol blocks is decoded in forward scheduling or backward scheduling, wherein the first group is determined by the size of a decoding window, and wherein, in subsequent cycles, subsequent groups of the received symbol blocks are decoded in backward scheduling, wherein each of the subsequent groups is determined by the size of the decoding window.
20. A computer program product comprising a method generating a sequence of symbol blocks according to any one of claims 1 to 11.
21. A computer program product comprising a method decoding a sequence of received symbol blocks according to any one of claims 12 to 19.
22. An apparatus configured for performing a method generating a sequence of symbol blocks according to any one of claims 1 to 11.
23. An apparatus configured for performing a method decoding a sequence of received symbol blocks according to any one of claims 12 to 19.
PCT/AU2022/050959 2021-08-25 2022-08-23 Modified staircase forward error correction coding WO2023023732A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
AU2022332699A AU2022332699A1 (en) 2021-08-25 2022-08-23 Modified staircase forward error correction coding

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
AU2021902765 2021-08-25
AU2021902765A AU2021902765A0 (en) 2021-08-25 Modified staircase forward error correction coding
AU2021902791A AU2021902791A0 (en) 2021-08-26 Modified staircase forward error correction coding
AU2021902791 2021-08-26

Publications (1)

Publication Number Publication Date
WO2023023732A1 true WO2023023732A1 (en) 2023-03-02

Family

ID=85321341

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/AU2022/050959 WO2023023732A1 (en) 2021-08-25 2022-08-23 Modified staircase forward error correction coding

Country Status (2)

Country Link
AU (1) AU2022332699A1 (en)
WO (1) WO2023023732A1 (en)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105429646A (en) * 2015-06-30 2016-03-23 南京大学 Coding and decoding methods of ode of tail-biting staircase codes
US20160308558A1 (en) * 2011-04-13 2016-10-20 Cortina Systems, Inc. Staircase forward error correction coding
WO2017178264A1 (en) * 2016-04-15 2017-10-19 Alcatel Lucent Method and apparatus for forward error correction encoding

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160308558A1 (en) * 2011-04-13 2016-10-20 Cortina Systems, Inc. Staircase forward error correction coding
CN105429646A (en) * 2015-06-30 2016-03-23 南京大学 Coding and decoding methods of ode of tail-biting staircase codes
WO2017178264A1 (en) * 2016-04-15 2017-10-19 Alcatel Lucent Method and apparatus for forward error correction encoding

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
BENJAMIN P. SMITH, ARASH FARHOOD, ANDREW HUNT, FRANK R. KSCHISCHANG, JOHN LODGE: "Staircase Codes: FEC for 100 Gb/s OTN", JOURNAL OF LIGHTWAVE TECHNOLOGY, IEEE, USA, vol. 30, no. 1, 19 January 2012 (2012-01-19), USA, pages 110 - 117, XP055677577, ISSN: 0733-8724, DOI: 10.1109/JLT.2011.2175479 *

Also Published As

Publication number Publication date
AU2022332699A1 (en) 2024-04-11

Similar Documents

Publication Publication Date Title
US10243589B2 (en) Multi-bit error correction method and apparatus based on a BCH code and memory system
TW201815077A (en) Apparatus and method for parallelized successive cancellation decoding and successive cancellation list decoding of polar codes, manufacturing method and constructing method
TWI557747B (en) Memory control module and method thereof and error correcting code encode/decode circuit and method thereof
WO2017194013A1 (en) Error correction coding method and device
US20030188253A1 (en) Method for iterative hard-decision forward error correction decoding
US9077378B2 (en) Integrated-interleaved low density parity check (LDPC) codes
US7296212B1 (en) Multi-dimensional irregular array codes and methods for forward error correction, and apparatuses and systems employing such codes and methods
US9548761B2 (en) Coding and decoding of error correcting codes
US20030188248A1 (en) Apparatus for iterative hard-decision forward error correction decoding
US20210175908A1 (en) Method and device for decoding staircase code, and storage medium
US9015548B2 (en) Error detection correction method and semiconductor memory apparatus
US20160049962A1 (en) Method and apparatus of ldpc encoder in 10gbase-t system
JP7429223B2 (en) Turbo product code decoding method, device, decoder and computer storage medium
US11075715B2 (en) Encoding method and apparatus
US11050440B2 (en) Encoder, decoder, encoding method and decoding method based on low-density parity-check code
CN109245775B (en) Decoder and method for realizing decoding
WO2023023732A1 (en) Modified staircase forward error correction coding
KR101304570B1 (en) Methods of Generating Parity Check Matrix, Error Correction Methods and Devices using thereof, and Memories and Electronic Device using thereof
US20130198582A1 (en) Supercharged codes
EP3737013B1 (en) Encoding method, decoding method and device
CN111600613B (en) Verification method, verification device, decoder, receiver and computer storage medium
EP4322411A1 (en) Encoding method, device and system, and decoding method, device and system
CN115499017B (en) Flash memory coding and decoding method and device, medium and solid state disk
TWI517595B (en) Data format with ecc information for on-the-fly decoding during data transfer and method for forming the data format
JP2009152781A (en) Error correction circuit

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 22859548

Country of ref document: EP

Kind code of ref document: A1

WWE Wipo information: entry into national phase

Ref document number: 2022332699

Country of ref document: AU

Ref document number: AU2022332699

Country of ref document: AU

NENP Non-entry into the national phase

Ref country code: DE

ENP Entry into the national phase

Ref document number: 2022332699

Country of ref document: AU

Date of ref document: 20220823

Kind code of ref document: A