Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHOD AND APPARATUS FOR FORWARD ERROR CORRECTION ENCODING
Document Type and Number:
WIPO Patent Application WO/2017/178264
Kind Code:
A1
Abstract:
Feed-forward or partial feed-forward staircase codes (FF-SC or PFF-SC) using the principle of staircase coding however without, at least partly, re-encoding parity bit blocks. Information symbols are mapped to information symbol positions in a sequence of two-dimensional symbol blocks, wherein a symbol block (B i ) has a preceding symbol block (B i -1) and a subsequent symbol block (B i +1) in the sequence, and wherein the symbol block (B i ) has information symbol positions and redundancy symbol positions. Redundancy symbols are generated for the redundancy symbol positions of the symbol blocks in the sequence. First redundancy symbols (X; P r )for the symbol block (B i ) are generated such that symbols at positions including or excluding redundancy symbol positions along a first dimension of the preceding symbol block ( B i -1) concatenated with symbols at information symbol positions and the first redundancy symbols (X; P r )along the first dimension of the symbol block (B i ) form a codeword of a first FEC component code. Second redundancy symbols (Y; P c ) for the subsequent symbol block (B i +1) are generated such that symbols at the information symbol positions along a second dimension of the symbol block (B i ) concatenated with symbols at symbol positions excluding redundancy symbol positions and the second redundancy symbols (Y; P c ) along the second dimension of the subsequent symbol block (B i +1) form a codeword of a second FEC component code. The first and second redundancy symbols (X; P r ; Y; P c ) carry the same redundancy information. The FF-SC or PFF-SC encoding concept allows easy termination and avoiding, or at least limiting, parity propagation, where a single non-zero information bit leads to an infinity extending parity sequence.

More Like This:
Inventors:
SCHMALEN LAURENT (DE)
ZHANG LEI (DE)
Application Number:
PCT/EP2017/057843
Publication Date:
October 19, 2017
Filing Date:
April 03, 2017
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
ALCATEL LUCENT (FR)
International Classes:
H03M13/29; H03M13/27; H03M13/15; H03M13/19
Foreign References:
US20120266051A12012-10-18
Other References:
BENJAMIN P SMITH ET AL: "Staircase Codes: FEC for 100 Gb/s OTN", JOURNAL OF LIGHTWAVE TECHNOLOGY, IEEE SERVICE CENTER, NEW YORK, NY, US, vol. 30, no. 1, 1 January 2012 (2012-01-01), pages 110 - 117, XP011397841, ISSN: 0733-8724, DOI: 10.1109/JLT.2011.2175479
SCHMALEN LAURENT ET AL: "Spatially Coupled Soft-Decision Error Correction for Future Lightwave Systems", JOURNAL OF LIGHTWAVE TECHNOLOGY, IEEE SERVICE CENTER, NEW YORK, NY, US, vol. 33, no. 5, 1 March 2015 (2015-03-01), pages 1109 - 1116, XP011575185, ISSN: 0733-8724, [retrieved on 20150309], DOI: 10.1109/JLT.2014.2379957
ITU: "SERIES G: TRANSMISSION SYSTEMS AND MEDIA, DIGITAL SYSTEMS AND NETWORKS Digital sections and digital line system - Optical fibre submarine cable systems Forward error correction for high bit-rate DWDM submarine systems ITU-T Recommendation G.975.1", ITU-T STANDARD IN FORCE (I), INTERNATIONAL TELECOMMUNICATION UNION, GENEVA, CH, no. g9751 2/4, 1 February 2004 (2004-02-01), pages 1 - 58, XP002474600
Attorney, Agent or Firm:
WETZEL, Emmanuelle et al. (DE)
Download PDF:
Claims:
Claims

A Forward Error Correction, FEC, encoding method, comprising:

mapping information symbols to information symbol positions in a sequence of two-dimensional symbol blocks, wherein a symbol block (B ) has a preceding symbol block (B,.i) and a subsequent symbol block (B,+i) in the sequence, wherein the symbol block (Β;) has information symbol positions and redundancy symbol positions;

generating redundancy symbols for the redundancy symbol positions of the symbol blocks in the sequence, wherein generating the redundancy symbols comprises

generating first redundancy symbols (X; Pr) for the symbol block (B ) such that symbols at symbol positions including or excluding redundancy symbol positions along a first dimension of the preceding symbol block (B,.i) concatenated with symbols at information symbol positions and the first redundancy symbols (X; Pr) along the first dimension of the symbol block (Β;) form a codeword of a first FEC component code,

generating second redundancy symbols (Y; Pc) for the subsequent symbol block (Bi+i) such that symbols at the information symbol positions along a second dimension of the symbol block (Β;) concatenated with symbols at symbol positions excluding redundancy symbol positions and the second redundancy symbols (Y; Pc) along the second dimension of the subsequent symbol block (B;+i) form a codeword of a second FEC component code.

The FEC encoding method of claim 1 , wherein the first and second redundancy symbols (X; Pi, Y; Pc) carry the same redundancy information.

The FEC encoding method of claim 2, further comprising:

transmitting the information symbols of the symbol block B, and of the subsequent symbol block B,+i along with either the first or the second redundancy symbols (X; Pr, Y, Pc).

4. The FEC encoding method of claim 1 , wherein the first and the second FEC component codes are systematic block codes.

5. The FEC encoding method of claim 1 , wherein the first FEC component code is the same as the second FEC component code.

6. The FEC encoding method of claim 1 , wherein a number of information symbol positions in subsequent symbol blocks is different. 7. The FEC encoding method of claim 1 , wherein the first FEC component code is different from the second FEC component code.

8. The FEC encoding method of claim 7, wherein a first generator polynomial corresponding to the first FEC component code is reciprocal to a second generator poly- nomial corresponding to the second FEC component code.

9. The FEC encoding method of claim 1 , wherein the first redundancy symbols (X; Pr) are a permuted version of the second redundancy symbols (Y; Pc). 10. The FEC encoding method of claim 1 , wherein the first redundancy symbols are a transposed version of the second redundancy symbols

1 1. The FEC encoding method of claim 1 , wherein the first redundancy symbols (X; Pr) are a cyclically shifted version of the second redundancy symbols (Y; Pc).

12. The FEC encoding method of claim 1 , wherein each of the first and second redundancy symbols (X; Pr; Y; Pc) comprises respective adjustable symbols (X; Y) and respective parity symbols (Pr; Pc), wherein computing the redundancy symbols comprises,

determining the first parity symbols (Pr) such that the symbols at symbol positions including or excluding redundancy symbol positions along the first dimension of the preceding symbol block (B,.i) concatenated with the symbols at the infor- mation symbol positions, the first adjustable symbols (X), and the first parity symbols (Pr) along the first dimension of the symbol block form a codeword of the first FEC component code,

determining the second parity symbols (Pc) such that the symbols at the information symbol positions along the second dimension of the symbol block B, concatenated with the symbols at the information symbol positions, the second adjustable symbols (Y), and the second parity symbols (Pc) along the second dimension of the subsequent symbol block B,+i form a codeword of the second FEC component code, wherein the second adjustable symbols (Y) are a permuted version of the first adjustable symbols (X) in accordance with a first permutation rule (πι), and

wherein the second parity symbols (Pc) are a permuted version of the first parity symbols (Pr) in accordance with a second permutation rule (π2).

The FEC encoding method of claim 12, wherein determining the first parity symbols (Pr) comprises determining first intermediate parity symbols (Pr) based on combining a concatenation of the symbols at the information symbol positions along the first dimension of the preceding symbol block B; i and the symbols at the information symbol positions along the first dimension of the symbol block B, according to a first portion of the first FEC component code, and

wherein determining the second parity symbols (Pc) comprises determining second intermediate parity symbols (Pc) based on combining a concatenation of the symbols at the information symbol positions along the second dimension of the symbol block Bi and the symbols at the information symbol positions along the second dimension of the subsequent symbol block B,+i according to a first portion of the second FEC component code.

The FEC encoding method of claim 12, wherein determining the first parity symbols (Pr) further comprises

determining one of the first or the second adjustable symbols (X; Y) based on a combination of first and second generator matrices corresponding to a respective second portion of the first and second FEC component code, first and second permutation matrices corresponding to the first and second permutation rule, and the first and the second intermediate parity symbols (Pr; Pc); and

determining the respective other adjustable symbols (Y; X) based on the determined first or the second adjustable symbols (X; Y) and the first permutation rule (πι)·

15. The FEC encoding method of claim 12, wherein a subset of information symbols (M2) of the symbol block (Β;) is a permuted version of a subset of information symbols (N2) of the subsequent symbol block (B;+i) according to a third permutation rule.

16. The FEC encoding method of claim 15, wherein a size of the respective subset of information symbols (M2; N2) depends on an expected error probability of a communication channel for the codewords.

17. The FEC encoding method of claim 1 , wherein the first redundancy symbols (X; Pr) for the symbol block are generated based on symbols at information and redundancy symbol positions along the first dimension of the preceding symbol block B;_ l concatenated with symbols at information symbol positions along the first dimension of the symbol block B,; and wherein the second redundancy symbols (Y; Pc) for the subsequent symbol block B,+i are generated based on symbols at information symbol positions along the second dimension of the symbol block B, concatenated with symbols at information symbol positions along the second dimension of the subsequent symbol block B;+i .

18. The FEC encoding method of claim 1 , wherein generating redundancy symbols of different symbol blocks in the sequence comprises using different code rates of the first and/or second component codes between the different symbol blocks, wherein a code rate is defined by a ratio between a number of useful information symbols included in a codeword and a total number of symbols in the codeword.

19. The FEC encoding method of claim 1, wherein generating the first redundancy symbols comprises generating a subset (2306-1) of the first redundancy symbols such that a concatenation of

- a first subset of symbols (2302-1) at a first subset of symbol positions including or excluding redundancy symbol positions along the first dimension of the preceding symbol block (B,--i),

- predetermined symbols at a second subset of symbol positions including or excluding redundancy symbol positions (2302-2) along the first dimension of the preceding symbol block (B ),

- a first subset of information symbols (2304-1) at a first subset of information symbol positions along the first dimension of the symbol block (B ),

- predetermined symbols at a second subset of information symbol positions (2304- 2) along the first dimension of the symbol block (B ), and

- the subset of first redundancy symbols (2306-1) along the first dimension of the symbol block (B2)

form a codeword of the first FEC component code.

20. The FEC encoding method of claim 19, wherein generating the second redundancy symbols (Y; Pc) comprises generating a subset (2310-1) of the second redundancy symbols such that a concatenation of

- the first subset of information symbols (2304-1) at the first subset of information symbol positions along the second dimension of the symbol block (B ),

- predetermined symbols at a third subset of information symbol positions (2304-3) along the second dimension of the symbol block (B;),

- a first subset of information symbols (2308-1) at a first subset of information symbol positions along the second dimension of the subsequent symbol block (B,+i),

- predetermined symbols at a third subset of information symbol positions (2308-3) along the second dimension of the subsequent symbol block (B;+i), and

- the subset (2310- 1 ) of the second redundancy symbols along the second dimension of the subsequent symbol block (B,+i)

form a codeword of the second FEC component code. The FEC encoding method of claim 1, wherein, in at least the symbol block (B ), number of information symbol positions along the first dimension differs from number of information symbol positions along the second dimension.

Description:
METHOD AND APPARATUS FOR

FORWARD ERROR CORRECTION ENCODING

The present disclosure generally relate to communication systems and, more particularly, to communication systems employing Forward Error Correction (FEC) coding such as staircase coding, for example.

Background High speed fiber optical communication systems are a challenging environment for FEC schemes. Modern high-speed optical communication systems require high-performing FEC engines that support throughputs of 100 Gbit/s and multiples thereof, that have low power consumption, that realize Net Coding Gains (NCGs) close to the theoretical capacity limits at a target Bit Error Rate (BER) of 10 ~15 , and that are preferably adapted to the peculiarities of the optical channel.

Although coding schemes that allow for soft-decision decoding are now well established in optical communications, especially in long-haul and submarine transmission systems which need to operate at the lowest possible Signal-to-Noise Ratio (SNR), hard-decision decoding is still predominant in the widely deployed metro networks, due to its low complexity leading to power-friendly receiver implementations. Such low-complexity receivers are also attractive for data center interconnect applications.

In the recent years, several new capacity-approaching coding schemes suitable for high- speed optical communications have been presented. Staircase codes are hard-decision decoded, spatially-coupled codes with practical application in forward error-correction for long-haul optical-fiber transmission systems. An ITU-T G.709-compatible staircase code with rate R = 239/255 was shown to operate within 0.56 dB of capacity in terms of the NCG at a bit-error rate (BER) of 10 ~15 . Its gap to capacity is smaller than all of the en- hanced coding schemes proposed in ITU-T recommendation G.975.1. Staircase codes with rates R > 6/7 were shown to be within 0.80 dB of capacity in terms of NCG at a BER of Such coding gains can be obtained by using an iterative, hard-decision decoding algorithm with decoder data-flow orders of magnitude lower than that of message-passing decoders for sparse-graph codes such as Turbo or Low-Density Parity-Check (LDPC) codes. For long-haul optical- fiber transmissions systems where bit-rates exceed 100 Gb/s, staircase codes are often the best practical solution.

Besides staircase code and variants thereof, several other code constructions based on spatial coupling of algebraic component codes have been proposed, e.g. braided BCH codes. Recently, multiple works show that these codes can approach capacity of the BSC under simple iterative decoding when the rate is large enough. However, all the proposed structures of spatially coupled algebraic product codes are recursive codes which lead to several practical drawbacks in their implementation: First, a recursive structure requires extra circuitry for terminating the code, which may be undesired in some applications where a low- complexity decoder implementation is crucial. Previous publications have not explicitly dealt with code termination but have only considered free-running, non-terminated codes.

A second drawback of recursive codes is the effect of parity-propagation or parity ringing; a single non-zero information bit leads to an infinitely extending parity sequence. This effect may be undesired in some optical transmission applications, where the transceivers are usually free-running due to the setup times of links and only some of the transmitted bits carry useful information. Parity propagation limits in this case the possibility of switching off the forward error correction circuitry during times when no useful data is transmitted, non-negligibly increasing the transceiver power consumption. Thus, there is a desire for codes that do not have parity-propagation.

Summary

According to a first aspect, the present disclosure provides an FEC encoding method. The method includes mapping information symbols to information symbol positions in a sequence of two-dimensional symbol blocks. Here, an information symbol shall be understood as a symbol of useful data. An z ' -th ( i E N) symbol block of the sequence has a preceding symbol block and a subsequent symbol block in the sequence. At least some symbol blocks comprise information symbol positions and redundancy symbol positions. The method further includes generating redundancy symbols for the redundancy symbol positions of the symbol blocks in the sequence. Generating the redundancy symbols includes generating first redundancy symbols (row or column redundancy symbols) for the z ' -th symbol block such that symbols at positions including or excluding redundancy symbol positions along a first dimension (row or column) of the preceding symbol block concatenated with symbols at information symbol positions and the first redundancy symbols along the first dimension of the z ' -th symbol block form a codeword of a first FEC component code (row or column component code). Generating the redundancy symbols further includes generating second redundancy symbols (column or row redundancy symbols) for the subsequent symbol block (z+1) such that symbols at information symbol positions along a second dimension (column or row) of the z ' -th symbol block concatenated with symbols at positions excluding redundancy symbol positions and the second redundancy symbols along the second dimension of the subsequent symbol block form a codeword of a second FEC component code (column or row component code).

In some embodiments, the first and second redundancy symbols can be mutually dependent according to a predetermined relationship. Despite different underlying information symbols in subsequent symbol blocks, the first and second redundancy symbols can be gener- ated to comprise the same redundancy information.

The first and second redundancy symbols in the respective redundancy symbol positions can also be arranged as respective two-dimensional redundancy symbol blocks. The first and second redundancy symbol blocks can be sub-blocks of the z ' -th and the subsequent symbol block.

In some embodiments, the method can further optionally include transmitting the information symbols of the z ' -th symbol block and of the subsequent symbol block (z+1) along with either the first or the second redundancy symbols. Since the first and second redun- dancy symbols comprise the same redundancy information, this redundancy information only needs to be transmitted once along with the z ' -th symbol block or the subsequent symbol block (z+1). Thus, the transmission can be performed more efficiently. In some embodiments, the first and the second FEC component codes are systematic block codes, respectively. Note that a systematic code is any error-correcting code in which the input data is embedded in the encoded output. In some embodiments, the first FEC component can be the same as the second FEC component code. For example, a first generator polynomial of the first FEC component code can be identical to a second generator polynomial of the second FEC component code.

In some embodiments, a number of information symbol positions in subsequent symbol blocks can be different.

In some embodiments, the first FEC component code can be different from the second FEC component code. For example, a first generator polynomial of the first FEC component code can be different from a second generator polynomial of the second FEC component code.

In some embodiments, a first generator polynomial corresponding to the first FEC component code can be reciprocal to a second generator polynomial corresponding to the second FEC component code. Reciprocal generator polynomials have the property that the "mirror image", i.e. the reflection around its center, of a codeword for the first FEC component code is a codeword for the second FEC component code.

In some embodiments, the first redundancy symbols can be a permuted version of the second redundancy symbols and vice versa. Thereby permutation relates to arranging the members of a set into some sequence or order, or if the set is already ordered, rearranging (reordering) its elements.

In some embodiments, the first redundancy symbols can be a matrix or vector transposed version of the second redundancy symbols and vice versa.

In some embodiments, the first redundancy symbols can be a cyclic shifted version of the second redundancy symbols and vice versa. In some embodiments, generating the redundancy symbols can optionally include generating, according to the first FEC component code, the first redundancy symbols for the z- th symbol block based on symbols at symbol positions including redundancy symbol positions along the first dimension of the preceding symbol block concatenated with infor- mation symbols at information symbol positions along the first dimension of the z ' -th symbol block, and generating, according to a second FEC component code, the second redundancy symbols for the subsequent symbol block (z ' +l) based on symbols at symbol positions excluding redundancy symbol positions along the second dimension of the z ' -th symbol block concatenated with information symbols at information symbol positions along the second dimension of the subsequent symbol block.

In some embodiments, each of the first and second redundancy symbols can optionally comprise respective adjustable (self-protection) symbols and respective parity symbols. Generating the redundancy symbols can include generating the first parity symbols such that the symbols at the symbol positions (including information symbol positions) including or excluding redundancy symbol positions along the first dimension of the preceding symbol block (z ' -l) concatenated with the symbols at the information symbol positions, the first adjustable symbols, and the first parity symbols along the first dimension of the z ' -th symbol block form a codeword of the first FEC component code. Generating the redun- dancy symbols can further include generating the second parity symbols such that the symbols at the information symbol positions along the second dimension of the z ' -th symbol block concatenated with the symbols at the information symbol positions, the second adjustable symbols, and the second parity symbols along the second dimension of the subsequent symbol block form a codeword of the second FEC component code. The second adjustable symbols can be a permuted version of the first adjustable symbols in accordance with a first permutation rule. The second parity symbols can be a permuted version of the first parity symbols in accordance with a second permutation rule.

In some embodiments, generating the first parity symbols can comprise generating first intermediate parity symbols based on combining a concatenation of the symbols at the information symbol positions along the first dimension of the preceding symbol block and the symbols at the information symbol positions along the first dimension of the z ' -th symbol block according to a first portion of the first FEC component code. Generating the second parity symbols can comprise generating second intermediate parity symbols based on combining a concatenation of the symbols at the information symbol positions along the second dimension of the z ' -th symbol block and the symbols at the information symbol positions along the second dimension of the subsequent symbol block according to a first portion of the second FEC component code.

In some embodiments, generating the first parity symbols can further include generating one of the first or the second adjustable symbols based on a combination of first and second generator matrices corresponding to a respective second portion of the first and second FEC component code, first and second permutation matrices corresponding to the first and second permutation rule, and the first and the second intermediate parity symbols. Generating the first parity symbols further includes generating the respective other adjustable symbols based on the determined first or the second adjustable symbols and the first permutation rule.

In some embodiments, a subset of information symbols of the z ' -th symbol block can be a permuted version of a subset of information symbols of the subsequent symbol block z ' +l . The subset of information symbols can be adjusted together with adjustable self-protection symbols and parity symbols such that information symbols, adjustable self-protection sym- bo Is and parity symbols form valid codewords.

In some embodiments, a size of the respective subset of information symbols can depend on an expected error probability of a communication channel. In some embodiments, generating redundancy symbols of different symbol blocks in the sequence can comprise using different code rates of the first and/or second component codes between the different symbol blocks. Thereby a code rate is defined by a ratio between a number of (useful or non-predetermined) information symbols included in a codeword and a total number of symbols in the codeword.

In some embodiments, generating the first redundancy symbols can comprise generating a subset of the first redundancy symbols such that a concatenation of - a first subset of symbols at a first subset of symbol positions (including information symbol positions) including or excluding redundancy symbol positions along the first dimension of the preceding symbol block z ' -l,

- predetermined symbols at a second subset of symbol positions (including infor- mation symbol positions) including or excluding redundancy symbol positions along the first dimension of the preceding symbol block z ' -l,

- a first subset of information symbols at a first subset of information symbol positions along the first dimension of the z ' -th symbol block,

- predetermined symbols at a second subset of information symbol positions along the first dimension of the z ' -th symbol block, and

- the subset of first redundancy symbols along the first dimension of the z ' -th symbol block

form a codeword of the first FEC component code. In some embodiments, generating the second redundancy symbols can optionally further comprise generating a subset of the second redundancy symbols such that a concatenation of

- the first subset of information symbols at the first subset of information symbol positions along the second dimension of the z ' -th symbol block,

- predetermined symbols at a third subset of information symbol positions along the second dimension of the z ' -th symbol block,

- a first subset of information symbols at a first subset of information symbol positions along the second dimension of the subsequent symbol block z ' +l,

- predetermined symbols at a third subset of information symbol positions along the second dimension of the subsequent symbol block z ' +l, and

- the subset of the second redundancy symbols along the second dimension of the subsequent symbol block z ' +l

form a codeword of the second FEC component code. In some embodiments, a number of information symbol positions along the first dimension can differs from a number of information symbol positions along the second dimension in of a symbol block. In some embodiments, each symbol block can comprise M x M information symbol positions, with M = (k - r)/2 and k denoting a length of an input message for the first or the second FEC component code, r = n— k denoting a number of parity bits in a component codeword, and n denoting a length of an output block of first or the second FEC component code.

In some embodiments, an initial symbol block of the sequence comprises predetermined initial symbols at information symbol positions.

In some embodiments, the method can be implemented via digital encoding circuitry installed within an FEC encoding apparatus. Such a digital encoding circuitry, e.g., a digital signal processor (DSP), a Field-Programmable Gate Array (FPGA), an Application-Specific Integrated Circuit (ASIC), or a general purpose processor, needs to be programmed accordingly. Hence, yet further embodiments also provide a computer program having a program code for performing embodiments of the method, when the computer program is executed on a programmable hardware device.

According to a further aspect of the present disclosure, it is also provided an FEC encoding apparatus. The FEC encoding apparatus comprises a mapper which is configured to map information symbols to information symbol positions in a sequence of two-dimensional symbol blocks, wherein an z ' -th symbol block of the sequence has a preceding symbol block and a subsequent symbol block in the sequence, wherein at least some symbol blocks have information symbol positions and redundancy symbol positions. The FEC encoding appa- ratus comprises an encoder which is configured to generate redundancy symbols for the redundancy symbol positions of the symbol blocks in the sequence. The encoder is configured to generate first redundancy symbols for the z ' -th symbol block such that symbols at positions including or excluding redundancy symbol positions along a first dimension of the preceding symbol block concatenated with the symbols at information symbol posi- tions and the first redundancy symbols along the first dimension of the z ' -th symbol block form a codeword of a first FEC component code. The encoder is also configured to generate second redundancy symbols for the subsequent symbol block such that symbols at the information symbol positions along a second dimension of the z ' -th symbol block concatenated with symbols at positions excluding redundancy symbol positions and the second redundancy symbols along the second dimension of the subsequent symbol block form a codeword of a second FEC component code.

Note that the amount of useful information symbols can vary between subsequent symbol blocks.

Despite different underlying information symbols in subsequent symbol blocks, the first and second redundancy symbols can comprise the same redundancy information in some embodiments.

Some embodiments relate to staircase codes with self-protected parity bits. This can lead to a considerably lower error floor without any performance degradation and without the parity-ringing effect, which can be crucial in future metro networks with distributed encoding. Embodiments can still guarantee good error floor properties and low residual bit error rates without a significant increase in complexity.

Brief description of the Figures

Some embodiments of apparatuses and/or methods will be described in the following by way of example only, and with reference to the accompanying figures, in which

Fig. 1 illustrates a block diagram of a sequence of two-dimensional symbol blocks;

Fig. 2 is a block diagram illustrating an example codeword;

Fig. 3 block diagram illustrating an example sub-division of a symbol

Fig. 4 illustrates a block diagram representation of an example staircase code; is an example staircase code block structure. Information bits (white) and parity bits (shaded) are shown. Bits in block Bo are fixed;

Fig. 6 is an example staircase code without parity re-encoding. Information bits

(white) and parity bits (shaded) are shown. Parity-bits are not used for re- encoding;

Fig. 7 is an example of a proposed feed-forward staircase code block structure, where information bits and column redundancy bits are transmitted. Row redundancy bits are punctured. Bits in block Bo are fixed. Small squares illustrate permutation selected for low error-floors; shows a toy example; Fig. 9 illustrates error probability curves for feed- forward and self-protecting feed-forward staircase codes;

Fig. 10 shows a first example of partial feed- forward staircase code where horizontal parities are re-encoded and vertical parities are not re-encoded;

Fig. 11 shows a second example of partial feed- forward staircase code where horizontal parities are re-encoded and vertical parities are not re-encoded;

Fig. 12 shows a variation of the second example of partial feed- forward staircase code where vertical parities are re-encoded and horizontal parities are not re-encoded;

Fig. 13 shows the effect of suppressed parity ringing in the code of the second example (Fig. 11);

Fig. 14 is a partial feed- forward staircase code with L=2 Fig. 15 shows the simulated error probability curves of feed-forward staircase codes and partial feed- forward staircase codes based on the second example (Fig. i i); Fig. 16 shows the simulated error probability curves of partial feed- forward staircase codes based on the second example (Fig. 12) at 5 different code rates;

Fig. 17 shows a first example of a partial feed- forward self-protecting staircase code with L=\;

Fig. 18 shows a second example of a partial feed- forward self-protecting staircase code with L=3;

Fig. 19 illustrates a detailed illustration of encoding of parity and extra redundancy blocks for self-protection, L=\

Fig. 20 shows a simulated bit-error-rate of a partial feed-forward self-protection staircase code with L=l, M=96, and R=3/4; Fig. 21 , 22 show a toy example;

Fig. 23 shows an example of a rate-compatible staircase code based on self-protecting staircase codes; Fig. 24 is an illustration of an optical system with one intermediate boarding node and intermediate channels each having error probability δι;

Fig. 25 shows an example of a rate-compatible staircase code for a system with 4 intermediate nodes;

Fig. 26 is an illustration of an optical system with three intermediate boarding nodes and intermediate channels each having error probability δι; Fig. 27 shows a iustification of linear redundancy adjustment, for small values of per-hop bit-error probability 5 , the optimal (minimum required) redundancy for successful transmission scales almost linearly with number of hops h;

Fig. 28 shows a block error rate for a 2-hop system with a rate-compatible staircase code containing L=13 blocks (excluding zero blocks). Labels indicate the number of blocks encoded by node 2;

Fig. 29 shows an illustration of constant block-length modification of the example of Fig. 23;

Fig. 30 shows an illustration of constant block-length modification of the solution of Fig. 23 for a 4-hop network;

Fig. 31 shows a simulated error rate performance of self-protecting staircase code with 3 different sizes of protruding blocks; Fig. 32 illustrates a minimal stall pattern used to estimate FF-SC error floors for component codes with t = 3; and

Fig. 33 shows block and bit-error probabilities of feed- forward and partial feed- forward self-protecting staircase codes with parameters of Tables I and II. Block and bit error-floor estimates are also shown.

Description of Examples

Various examples will now be described more fully with reference to the accompanying drawings in which some examples are illustrated. In the figures, the thicknesses of lines, layers and/or regions may be exaggerated for clarity. Accordingly, while examples are capable of various modifications and alternative forms, examples thereof are shown by way of example in the figures and will herein be described in detail. It should be understood, however, that there is no intent to limit examples to the particular forms disclosed, but on the contrary, examples are to cover all modifications, equivalents, and alternatives falling within the scope of the invention. Like numbers refer to like or similar elements throughout the description of the figures.

It will be understood that when an element is referred to as being "connected" or "coupled" to another element, it can be directly connected or coupled to the other element or inter- vening elements may be present. In contrast, when an element is referred to as being "directly connected" or "directly coupled" to another element, there are no intervening elements present. Other words used to describe the relationship between elements should be interpreted in a like fashion (e.g., "between" versus "directly between," "adjacent" versus "directly adjacent," etc.).

The terminology used herein is for the purpose of describing particular examples only and is not intended to be limiting. As used herein, the singular forms "a," "an" and "the" are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms "comprises," "comprising," "includes" and/or "including," when used herein, specify the presence of stated features, integers, steps, operations, elements and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components and/or groups thereof. Unless otherwise defined, all terms (including technical and scientific terms) used herein have the same meaning as commonly understood by one of ordinary skill in the art to which examples belong. It will be further understood that terms, e.g., those defined in commonly used dictionaries, should be interpreted as having a meaning that is consistent with their meaning in the context of the relevant art and will not be interpreted in an idealized or overly formal sense unless expressly so defined herein.

For a better understanding of examples described herein, let us first describe the concept of staircase codes. A staircase code is a block-wise recursively encoded FEC scheme. In staircase encoding, symbol blocks include data or information symbols and redundancy symbols, such as parity symbols. The information symbols can comprise useful data in some examples. In ex- amples, one or more information bits may be mapped to an information symbol. Information symbols in a stream of information symbols can be mapped to a series of two- dimensional symbol blocks. The parity symbols can be computed across multiple symbol blocks in such a manner that concatenating a row of the matrix transpose of a preceding encoded symbol block with a corresponding row of a symbol block that is currently being encoded forms a valid codeword of a FEC component code. In various examples, a conventional FEC code (e.g., Hamming, BCH, Reed-Solomon, etc.) in systematic form can be selected to serve as the component code.

For example, when encoding a second symbol block in the series of symbol blocks, the parity symbols in the first row of the second symbol block can be chosen so that the first row of the matrix transpose of a preceding first symbol block, the information symbols of the first row of the second symbol block, and the parity symbols of the same row of the second block together form a valid codeword of the FEC component code. Parity symbols could equivalent ly be computed by concatenating a column of the previous encoded sym- bol block with a corresponding column of the matrix transpose of the symbol block that is currently being encoded. With this type of relationship between symbol blocks, in a staircase structure that includes alternating encoded symbol blocks and matrix transposes of encoded symbol blocks, each two-block wide row along a stair "tread" and each two-block high column along a stair "riser" forms a valid codeword of the FEC component code.

Fig. 1 is a block diagram illustrating a sequence 100 of two-dimensional symbol blocks. In the sequence 100, each block B; (for i≥ 0) 102, 104, 106, 108, 110 can be an M x M array of symbols. As mentioned before, each symbol in each block 102, 104, 106, 108, 110 may be one or more bits in length. Staircase codes are characterized by the relationship between the symbols in successive blocks 102, 104, 106, 108, 110.

During FEC encoding according to a staircase code, a FEC code in systematic form can first be selected to serve as the component code. This code, hereinafter C, can be selected to have a codeword length of n = 2M symbols, r of which can be parity symbols. As illustrated in Fig. 2, which is a block diagram illustrating an example length 2M codeword 200, the leftmost 2M - r symbols 202 constitute information or data symbol positions of C, and the rightmost r symbols 204 are parity symbol positions, or more generally redundancy symbol positions, of C.

For illustrative purposes consider the example sub-division of a symbol block as shown in Fig. 3. The example symbol block 300 is sub-divided into M— r leftmost columns 302 and r rightmost columns 304, where B;,i denotes the sub-matrix including the leftmost col- umns, and similarly B^R denotes the sub-matrix including the rightmost columns of the symbol block B,.

Entries of an initial symbol block Bo can be set to predetermined symbol values, e.g., all zeros. For i > 1 , information symbols, specifically M{M ~ r) such symbols, which can in- elude information that is received from a information streaming source, for example, can be arranged or distributed into B;,i by mapping the symbols into B;,i. Then, the entries of 3i,R can be computed or generated. Thus, information symbols from a symbol stream can be mapped to information symbol positions B;,i in a sequence of two-dimensional symbol blocks Bi, and parity symbols for the parity symbol positions B^R in each symbol block can be computed.

In computing the parity symbols, an M x (2M—r) matrix, A = is the matrix-transpose of B, i, can be formed. The entries of B^R can then be computed such that each of the rows of the matrix [Bj^ B i L B i R ] is a valid codeword of C. That is, the elements in the y-th row of %,R can be exactly the r parity symbols that result from encoding the 2M ~ r symbols in the y-th row of A. Generally, the relationship between successive blocks in a staircase code satisfies the following relation: For any i > 1 , each of the rows of the matrix [Bj^ Β έ ] is a valid codeword of the component code C. An equivalent description of staircase codes, from which their name originates, is suggested in Figs. 4 and 5, which are equivalent block diagram representations of an example staircase code. Every row and every column that spans two symbol blocks 402, 404, 406, 408, 410, 412 in the "staircase" 400 is a valid codeword of C. It should be apparent that each two-block row in Fig. 4 is a row of the matrix [ _ 1 B i L B i R ], as described above for the computation of redundancy symbols. The columns are also consistent with this type of computation. Consider the first two-block column that spans the first column of Bi 404 and the first column of 406. In the example computation described above, the coding symbols for the first row of B 2 would be computed such that [B^ B 2 L B 2iR ] is a valid codeword of C. Since the first column of Bi 404 would be the first row in Bi r , and similarly the first column of B 2 r 406 would be the first row of B 2 , the staircase structure 400 is consistent with the foregoing example coding symbol computation.

Thus, the redundancy symbols for a block B, could be computed row-by-row using corresponding rows of Bj_ and B;, as described above. A column-by-column computation using corresponding columns of B, i and Bi T would be equivalent. Stated another way, parity symbols could be computed for the redundancy symbol positions in each symbol block Bi, where i is a positive integer, in a sequence such that symbols at symbol positions along one dimension (row or column) of the two-dimensional symbol block B, i in the sequence, concatenated with the information symbols and the parity symbols along the other dimension (column or row) in the symbol block Bi, form a codeword of a FEC component code. In a staircase code, symbols at symbol positions along the one dimension (row or column) of the symbol block i in the sequence, concatenated with the information symbols and the parity symbols along the other dimension (column or row) in the symbol block B, + i, also form a codeword of the FEC component code.

The two dimensions of the symbol blocks in this example are rows and columns. Thus, in one embodiment, the concatenation of symbols at symbol positions along a corresponding column and row of the symbol blocks Β,-iand Bi, respectively, forms a codeword of the FEC component code, and the concatenation of symbols at symbol positions along a corresponding column and row of the symbol blocks B, and B,+i, respectively, also forms a codeword of the FEC component code. The "roles" of columns and rows could instead be interchanged. The coding symbols could be computed such that the concatenation of symbols at symbol positions along a corresponding row and column of the symbol blocks B, i and Bi, respectively, forms a codeword of the FEC component code, and the concatenation of symbols at symbol positions along a corresponding row and column of the symbol blocks B, and B,+i , respectively also forms a codeword of the FEC component code.

As explained above, the fundamental building block of a conventional staircase code can be a binary, linear, systematic block code C(n, k), referred to as a component code, with block-length n (required to be even) and number of information bits k. Let R c = kin be the component code rate. For M= nil, the dimension of each staircase block is M x M. For a staircase code to have non-trivial rate (i.e. R > 0) the component code rate must satisfy

The first staircase block Bo the sequence comprises predetermined initial symbols at information symbol positions. For example, it can be fixed to all-zero bit-values. Let r = n - k be the number of parity bits in a component codeword. Let G denote a k x n systematic generator matrix for C. We can denote by G p the k x r sub-matrix of G containing the r columns which correspond to the parity bits in each codeword. For / £ {1, 2, . . . } , given block z ' -l, to encode the z ' -th block, first fill an M x (M - r) matrix M; with information bits. Next, calculate the M x r matrix of parity symbols or bits according to

where (.) T denotes matrix transpose. The z ' -th symbol block is then given by Bi = l Mi Pi . The rate of a staircase code is given by R = 2R C - 1, where we assumed that the smallest transmission granularity is a complete block B 2 . Staircase codes can be decoded using a sliding-window decoder. Consider the blocks in Fig. 5 now to be received blocks buffered in a decoding window of exemplary length 6, with all except Bo 502 corrupted by a Binary Symmetric Channel (BSC). Decoding proceeds in iterations. Let / E {1, 2 . . . , / max } denote decoding iterations, with the maximum number of iterations denoted by max. During iteration /, for each f £ {1, 2, . . . , 5}, form the matrix i-^ - i B i] and decode each row of the matrix by a component code decoder, e.g., a syndrome-based decoder or a bounded distance decoder. Once / = /max is reached, the window "slides" by shifting out decoded block Bo 502 and shifting in a newly received block B 6 . The decoding process continues indefinitely in this manner. In practice, the component code decoder can be implemented using efficient table-lookup methods for syndrome-based decoding to achieve very high decoding throughputs. Substituting B ^ - into (1), we obtain p i ~ [ [ Μ *-ι ρ *-ι] τ Μ g P which is a linear recursion of the parity-bit matrix Pi. We can refer to this as the parity-propagation property of staircase codes. The presence of feedback in the encoding process leads to a number of issues, the most significant of which is the lack of a termination mechanism. Although staircase codes were designed for continuous transmission applications where termination is not necessary, allowing the encoding process to terminate after a certain number of blocks could extend their domain of application significantly. Furthermore, a terminated staircase code could be decoded by two sliding window decoders working in parallel from both ends of the code. The decoding throughput is doubled at a cost of extra hardware, a favorable trade-off in high-throughput optical-fiber systems.

The most pragmatic approach to mitigate the effect of parity propagation would be to not re-encode the parity symbol block P, of the z ' -th symbol block when determining the parity symbol block P; +1 of the subsequent symbol block B; + i . In other words, in this example only symbols at information symbol positions of blocks B, and B,+i are encoded. Parity symbols positions are not (re-)encoded. Such an example is shown in Fig. 6. However, it becomes quickly obvious that this example suffers from some problems. Most importantly, if high-rate component codes with error correcting capability t are used, the occurrence of t + 1 errors in the parity-part of a component code will not be corrected. Hence, if there are t + 1 errors in the parity part of a vertical codeword, t+1 errors in the parity part of a horizontal codeword and an additional error in the intersection of both vertical and horizontal codewords, this additional error will not be corrected and will contribute to the error floor of the code, which will become unacceptably high for most applications. Especially in optical communications, where usually residual bit error rates in the range of 1(Γ 13 to 10 15 are required, a different approach is necessary. The present disclosure also proposes staircase codes which have so-called self-protected parity symbols or bits. This can lead to a considerably lower error floor without any performance degradation and without the parity-ringing effect. Consider the example self-protecting Feed-Forward Staircase Code (FF-SC) structure 700 shown in Fig. 7. Here, a row redundancy symbol sub-matrix [X P r ] 706 associated with a row component code) comprises the same redundancy information as a column redundancy symbol sub-matrix [Y P c ] 710 associated with a column component code. Note that the redundancy symbol sub-matrices [X P r ] 706 and [Y P c ] 710 can comprise respective parity symbols P r and P c as well as respective adjustable self-protection symbols X and Y, which will be explained further below.

Thus, some examples of the present disclosure propose an FEC encoding concept, where information symbols are mapped to information symbol positions in a sequence of two- dimensional symbol blocks Bo, Bi, B 2 , etc. Symbol block B, (i > 1) has a preceding symbol block B and a subsequent symbol block B,+i in the sequence. Except the initial symbol block Bo, each symbol block B, can have information symbol positions and redundancy symbol positions. For example, when generating redundancy symbols for the redundancy symbol positions of the symbol blocks in the sequence, row redundancy symbols [X P r ] 706 for the symbol block Bi can be generated such that information symbols at information symbol positions along a row of the preceding symbol block BM concatenated with both the information symbols and the row redundancy symbols [X P r ] 706 along a respective row of the symbol block Bi form a codeword of a row component code. Column redundancy symbols [Y P c ] 710 for the subsequent symbol block B, + i can be generated such that the information symbols at the information symbol positions along a column of the symbol block Bi concatenated with information symbols and the column redundancy symbols [Y P ] 710 along a respective column of the subsequent symbol block B, + i form a codeword of a column FEC component code. Thereby, the row and column redundancy symbols [X P r ] 706 and [Y Pc] 710 are generated to both carry the same redundancy information. Similar to the example of Fig. 6, redundancy symbol blocks are not re-encoded between subsequent blocks to avoid parity ringing. Examples of self-protecting feed-forward staircase codes of Fig. 7 have two important properties. First, there is no propagation of parity symbols beyond the last non-zero information block. This allows the code to be used in applications where different blocks are encoded by different users (no parity ringing), for example. Second, some examples constrain pairs of row and column redundancy or parity blocks to have identical values under some fixed permutation. Thus, in some examples, the row redundancy symbols [X P r ] 706 can be a permuted version of the column redundancy symbols [Y P c ] 710. In other words, row redundancy symbol sub-matrix 706 and the column redundancy symbol sub-matrix 710 contain identical redundancy symbols, however at permuted redundancy symbol positions or indices. This property allows the parity blocks to be protected by both row and column component codes, leading to better error floor performance than the feed- forward staircase codes explained above. This scheme suffers from no rate-loss since column parity blocks need not be transmitted.

As will become apparent below, the row and column redundancy symbols X, P r and Y, Pc may not only contain respective parity symbols of the first and the second component code. In fact, each of the row and column redundancy symbols X, P r and Y, P c can comprise respective adjustable self-protection symbols X, Y and respective parity symbols P r ; Pc. The block 710 at the bottom of even- indexed symbol blocks can be referred to as column redundancy block. Each column redundancy block consists of a parity block P c and an adjustable self-protection block Y. The block 706 to the right of odd-indexed information blocks can be referred to as row redundancy block, each consisting of a parity block P r and an adjustable self-protection block X, which can be both punctured, for example.

The adjustable row self-protection symbols X can be adjusted to cause the information symbols MM at information symbol positions along a row of the preceding symbol block B concatenated with the information symbols M;, the adjustable row self-protection symbols X, and the row parity symbols P r along a corresponding row of the symbol block B, to form a valid codeword of the row component code. Likewise, the adjustable column self-protection symbols Y can be adjusted such that the information symbols M; at the information symbol positions along a column of the symbol block concatenated with the information symbols M,+i, the adjustable column self-protection symbols Y, and the column parity symbols P c along a corresponding column of the subsequent symbol block Bi+i form a valid codeword of the column component code. Said differently, the adjustable row self-protection symbols X and row parity symbols P r can be chosen such that the information symbols M along a row of the preceding symbol block B; i concatenated with the information symbols M;, the adjustable row self-protection symbols X, and the row parity symbols P r are a valid codeword of the row component code. At the same time the adjustable column self-protection symbols Y and column parity symbols P c can be chosen to be a permuted version of X and P r , respectively, and such that the information symbols M; along a column of the symbol block concatenated with the information symbols Mi+\, the adjustable column self-protection symbols Y, and the column parity symbols P c along a corresponding column of the subsequent symbol block B, + i are a valid codeword of the column component code. The skilled person having benefit from the present disclosure will appreciate that the roles of rows and columns are interchangeable.

Some examples of the self-protecting feed- forward staircase code of Fig. 7 do not re-en- code redundancy symbols of previous symbol blocks. Instead, row and column redundancy symbols carrying the same redundancy information are merely associated with a single pair of subsequent symbol blocks. Said differently, row and column redundancy symbols carrying the same or identical redundancy information and associated with a subsequent pair of symbol blocks (e.g., B,+i, B;+ 2 ) are independent from row and column redundancy symbols carrying other redundancy information associated with the previous pair of symbol blocks (e.g., B , B ). There are multiple ways of how this self-protection can be achieved. An illustrative example will be described below.

As in a conventional staircase code, an example self-protecting FF-SC parity block con- tains parity symbols or bits calculated during component code encoding. A difference in an example self-protecting FF-SC is that the symbols or bits in a self-protection block X or Y, which can be regarded as a sub-set of the information symbols of component codes, are additionally constrained. For an m x n matrix Q, we denote a vectorization of Q by vec(Q), where the resulting vector is assumed to be a column vector and the mapping between matrix and vector indices is given by a bijection v. [0, m— 1] x [0, n— 1]→

[0, mn— 1]. The inverse of vec() is denoted by vec _1 () with the underlying mapping v "1 , the inverse of v. For example, the mappings of the column-wise vectorization and its inverse are given by v(i,j) = jm + i and t> _1 (0 = (i mod m, ). Let πι and π 2 be permutations defined by

7T ¾ (A) vec _ 1 (n 6 vec(A)) where b E {1, 2}, A is an M x r matrix, and lib is an Mr x Mr permutation matrix. By definition, b are bijective maps, with the property 7ib(A + B) = πι,(Α) + πι,(Β). We define example self-protection constraints

Since %b are bijective, as long as the self-protection constraints are satisfied, we can puncture either the column or row redundancy blocks 706, 710. Thus, the information symbols of the symbol block B, and of the subsequent symbol block B;+i can be transmitted along with either the row redundancy symbols X, P r 706 or the column redundancy symbols Y, Pc 710. Since both redundancy symbol blocks 706, 710 carry the same redundancy information, the transmission of only one of the blocks 706 or 710 is sufficient.

For consistency with Fig 7, we puncture the row redundancy blocks 706 in the following example. The skilled person having benefit from the present disclosure will appreciate that puncturing the column redundancy blocks 710 would likewise be possible. Due to the constraints imposed on self-protection blocks X, Y, M should satisfy 2M + r = k, hence M = (k - r)/2 (assuming k and r have the same parity, which can be achieved with shortening). For computing the rate, we can first assume that always an even number of blocks B, are transmitted as smallest granularity. The rate of a self-protecting FF-SC is then ?FF = 2R C - 1 = R, which is identical to the rate of a conventional staircase code. If we want to achieve the finer granularity of conventional staircase codes with single blocks, we can define that the parity and self-protection blocks Y and P c are attached to each block with odd index. In that case, with a total of Λ blocks transmitted we have

2k - n

2k - n + ^\ {n - k) which takes into account the potential transmission of an odd number of blocks. lim sup A→00 [^ J \ = lim inf A→∞ χ = | ? we get

2k - n

lim R' F ——— FF

n + 2(n— k)

We can slightly generalize the component code definition to allow different binary linear block codes to be used as row and column component codes. Thus, the row component code can but need not be different from the column component code. Given block-length n and number of information bits k, let C r (n, k) be a row component code with k x n systematic generator matrix G. Let C c (n, k) be a column component code with k * n systematic generator matrix F. Let and ΐ ρ denote the sub-matrices or portions containing the r columns of G and F corresponding to parity symbols or bits. Due to the self-protection block X or Y, the last r symbols out of k information symbols in a component codeword are constrained. We highlight this fact by partitioning G p and ΐ ρ according to

F

F

G r F

where d and F, are (k— r) x r sub-matrices related to information symbols and G r and F r are r x r sub-matrices related to the self-protecting symbols X or Y.

Consider the encoding operation over symbol blocks Bo, Bi, and B 2 in Fig. 7. Subsequent blocks are encoded in the same manner. By horizontally concatenating information symbols Bo and Bi, we obtain intermediate row parity symbols

By vertically concatenating information symbols Bi and B 2 , we obtain intermediate column parity symbols

P = F #1

Note that intermediate parity symbols P R and P C are not the same as the (final) parity symbols P r and Pc. Consider the entries of the M x r self-protecting symbol sub-matrix X and the r x M self-protecting symbol sub-matrix Y to be adjustable variables. According to the structure shown in Fig. 7, we can write the (final) parity symbol matrices P r and P c as

P r — P r + XG r , P c — P c + F r Y _ Imposing the self-protection conditions of Eq. (2), we obtain

Pc + ( Pr) = FjY + (π 2 (π^ (Υ τ )0 Γ )) τ _

Each of the above terms is an r^M matrix. Let vec(-) be the column-wise vectorization and let y = vec(Y ), p c = vec(P C ), and p r = vec((n 2 (P R )) T ). Let ΠΓ be the permutation matrix satisfying Y r = vec _1 (IIr vec(Y)). Using the fact that for some matrix Q vec(QY) = (I M ® Q)vec(Y) ? the above expression can be written as

Pc + Pr = [IM ® + Π Τ Π 2 Π Τ (/ Μ ® Ay

If A is invertible, then the self-protecting symbol sub-matrix Y is given by y = A ~ 1 (p c ^ p r )

= A-'c. (3) With Eq. (2) also the self-protecting symbol sub-matrix X can be determined. Then P r and P c can be determined according to P r = P r + XG r an( j P c = P c + F^Y Note that the above equations can be regarded as only one of many possible ways for determining the row and column redundancy symbols X, P r and Y, P c . More generally speaking, the row parity symbols P r can be generated such that the information symbols along a row of the preceding symbol block B; i concatenated with the information symbols, the first adjustable self-protection symbols X, and the first parity symbols P r along the respective row of the symbol block B, form a codeword of row component code C r (n, k). Likewise, the column parity symbols P c can be generated such that the information symbols along a column of the symbol block concatenated with the information symbols, the second self-protection adjustable symbols Y, and the second parity symbols P c along a respective column of the subsequent symbol block B,+i form a codeword of the column component code C c (n, k). Thereby the second adjustable self-protection symbols Y can be a permuted version of the first adjustable symbols X in accordance with a first permutation rule πι or Hi . The second parity symbols P c can be a permuted version of the first parity symbols P r in accordance with a second permutation rule π 2 or Π 2 . In some examples, the first permutation rule can be different from the second permutation rule. Furthermore, the second adjustable self-protection symbols Y can be a permuted version of the first parity symbols P r in accordance with a first permutation rule π\ or Πι . The second parity symbols P c can be a permuted version of the first adjustable self-protection symbols X in accordance with a second permutation rule π 2 or Π 2 .

More particularly, in the example described herein, generating the row parity symbols P r includes determining intermediate row parity symbols P R based on (linearly) combining a concatenation of the information symbols along the rows of the preceding symbol block B and the information symbols along the respective rows of the symbol block B, according to a first portion Gi of the row component code C r (n, k) (e.g., Pr = i B ° Bl l Gi ). Generating the column parity symbols P c includes determining intermediate column parity symbols P C based on (linearly) combining a concatenation of the information symbols along the columns of the symbol block B, and the information symbols along respective columns of the subsequent symbol block B, + i according to a first portion F; of the column component code C c (n, k) (e.g., ° % 2 .).

More particularly, according to the illustrated example, generating the row parity symbols P r can further include determining or generating one of the row or the column adjustable symbols X, Y, i.e., either X or Y, based on a combination of first and second generator matrices G r , F r corresponding to a respective second portion of the row and column component codes C r (n, k) and C c (n, k), first and second permutation matrices Πι and Π2 corresponding to the first and second permutation rule, and the intermediate row and column parity symbols P r , P c .and The respective other adjustable symbols Y, X can be determined based on the generated row or the column adjustable symbols X, Y and the first permutation rule πι .

The invertibility of the above matrix A (see Eq. (3)) depends on the choices of C r (n, k), C c (n, k), F, G, Πι, and Π2. Using the same row and column component codes C r (n, k), Cc(n, k), we have found that searching over the space of all Πι and Π2 can quickly produce an invertible A. For example, the search and calculation of A -1 can be performed offline at design time, since information bits are only involved in the calculation of c. The main complexity of self-protecting FF-SC encoding is the multiplication in Eq. (3) between an Mr x Mr matrix and an Mr x 1 vector. The complexity of this operation depends on the choice of permutation matrices Πι and Π2. For instance, the permutation matrices may be chosen such that the hardware implementation is simplified or such that A -1 has a special structure easing the multiplication. In other examples, the row and column generator polynomials g r (x), g c ( x ) of row and column component codes C r (n, k), C c (n, k) can be reciprocals to ensure the invertibility of A. For example, if g r (x) has roots at { , a 2t } then g c (x) is required to have roots at { -1 , ... , a ~2t }. Reciprocal generator polynomials have the property that the "mirror image", i.e., the reflection around its center, of a codeword for the row code is a codeword for the column code. Hence, the same decoder can be used to decode both row and column codes, with some additional logic to reverse the bit indexing. In general, we may allow also for distinct codes in row and column directions, however, using the reciprocal generator polynomials has the advantage that a single decoder engine has to be implemented and can be used, i.e., in general we want to allow distinct row and column generator polynomials, but in a preferred embodiment, we want to use the above mentioned description with reciprocal generator polynomials.

The matrix A -1 can be dense and is not block diagonal in general, which can increase the encoding complexity. However, exploiting the cyclic structure within A '1 , we can calculate y using M multiplications between an r x r matrix and a 1 x r vector.

We illustrate the self-protection feed-forward staircase codes using an example with the following row code with n = 10 and k = 8 that generates one additional parity bit and the parity of odd bit positions and has the following systematic generator matrix

And additionally, we consider the column code with the systematic generator matrix

Using different row and column codes ensures that we easily find an invertible matrix A below necessary for computing the self-protection values.

With this code, we have r = n— k = 2 and we have M = = 3. The rate of the code is

R c =— - 1 = 0.6. We have G l kxk with

G r

The blocks B t are of size 3 x 3 and we start with the following exemplary information blocks:

We start with computing the row and column parities

and

The next task is to compute X, Y, P r and P c . Let and We impose the following permutation:

We can now impose our equality constraints and have

As well as

fPi.i P 2 ,i

p 3 ,2 Pi,2

Writing out these equations leads to the following system of equations:

Which we can rewrite as

Where the inverse of the 12 x 12 matrix A is uniquely given as this matrix is non- singular. Putting this together in the code notation yields the arrangement shown in Fig. 8, where the different hatching in X and P r and their respective counterparts indicate the permuta- tion function. Using the generator matrices for row and column codes, we can verify that indeed the rows and columns are code words of the respective row and column codes.

We can also write the above expression in vectorized notation. Let

P c = (Pl,l P2,l P3,l P3,2 Pl,2 P2,2) T and

P r = (Pl,l P2,l P3,l Pl,2 P2,2 P3,2) 5 be the vectorized versions of the temporary parity bits. We define for an r x r matrix Q, S(Q) to be the block diagonal matrix of size Mr x Mr where the diagonal entries are copies of Q and zeros elsewhere. We have the permutation matrix Π 2 that describes the permutation of the parity bits, i.e., p c = Π 2 ρ Γ .

Π, Similarly, let x = ( i,i x 2,i x 3,i x i,2 x 2,2 X 3,2) T and its permuted vectorized version y = ( 3,i x i,i x 2,i x 2,2 x 3,2 x i,2) T = I^x with the permutation matrix

The inverse of the permutation matrix is given by

We first compute the matrix Π 2 which also takes into account the transposition of the blocks under vectorization and which is given by

Similary, we can compute the matrix W 1 1 which takes into account the transposition under the vectorization and which is given by

We can now compute the matrix A which is given by A = ®((F r ) T ) + Π 2 ® ((G r f) Π 1

which leads to the inverse

We can finally use this matrix to compute the vector y = A ~1 (p c + Π 2 Γ ) and find the values of y and consequently x and from these the final parity bits.

Decoding of the proposed self-protecting FF-SC is very similar to conventional staircase codes. A sliding window decoder is used starting from block Bo. When corrections are made in a column redundancy block the corresponding row redundancy block is also modified, and vice versa. Additional logic may be required to implement the permutations 7ii , π 2 , and their inverses. In the following we describe an example choice of permutations πι and π 2 suitable for applications requiring very low error-floors. The permutations πι, π 2 can be defined by the permutation matrices

*3 ( pM-r- l j pM-r-2 j M-2r

Il 2 - Ο Ά Μ , Ά Μ , . . . , _& Μ J ? together with column-wise vectorization vec(-) and its inverse vec _1 (-) where E M denotes the M x M elementary permutation matrix, obtained by cyclically shifting each row of the identity matrix of size M x M to the right by 1. These permutations cyclically shift each column of X and P r . by a number of bits related to their column index, an example of which is shown in Fig. 7. Thus, the row redundancy symbols X and P r are cyclically shifted versions of the column redundancy symbols Y and P c . These permutation rules can be implemented efficiently in hardware, for example by using barrel shifters. Discussions of the estimated and simulated error-floor performance under these permutations are given below.

Simulated block (BLER) and bit error (BER) probability curves for both feed- forward (Fig. 6) and self-protecting feed- forward staircase codes (Fig. 7) are shown in Fig. 9. The code parameters used in the simulations are M = 72, r = 24, n = 192, t = 3, and R = 3/4. The solid curves near the top of the figure are from feed-forward staircase codes, along with their error floor estimates. In the case of feed- forward codes, we estimate the bit- error-rate error floor based on minimal stall patterns of weight 7 (1 error in information block, 6 errors in adjoining parity blocks, which will not be resolved as they are not protected) assuming all errors are from the channel

B E Rfeed- forward— g) V > where p denotes the channel error probability (pre-FEC error rate).

The circle-marked curves correspond to the self-protecting feed-forward staircase codes, along with their error floor estimates. We estimate the bit-error-rate error floor based on minimal stall patterns of weight 8 (4 errors in the information block, 4 errors in parity block) assuming all errors are from the channel t> self -protecting

As shown, the error floors for both block and bit error rates were reduced by 5 orders of magnitude with no performance loss in the waterfall region. Finally note that the codes used in this simulation example are just toy codes with small sizes to demonstrate the performance advantage. Real coding implementations will most likely use codes with larger n, e.g., n = 1020. Although self-protection allows to considerably reduce the error floor of feed- forward staircase codes (shown in Fig. 6), the error floor may still be unacceptably high for some applications requiring very low residual BERs, e.g., optical core networks.

Thus, a further idea presented herein is to relax the parity ringing constraint slightly and allow ringing parities for A additional sub-frames of the staircase code. This means that following an information chunk, in the worst case A additional redundancy or parity parts will be non-zero. The following parity-parts will then be non-zero. This relaxed parity ringing constraint leads to the situation that a part of the redundancy or parity symbols are re-encoded while parts of the redundancy or parity symbols are not re-encoded. Said dif- ferently, we can slightly relax the parity-propagation constraint by allowing the parity bits to propagate over some blocks and propose so-called Partial Feed-Forward Staircase Codes (PFF-SCs). Let L E {1, 2, . . . } be the propagation length of a PFF-SC, defined as the maximum number of consecutive blocks over which parity-propagation can occur. The PFF-SC can then use a hybrid structure, with L-\ blocks being standard staircase code blocks followed by one block with parity bits that are not re-encoded but where self-protection can be used to mitigate the detrimental effect of harmful error patterns. Thus, examples of PFF-SCs can be combined with the self-protected FF-SCs of Fig. 7.

Fig. 10 shows an example illustrating a basic partial feed- forward staircase code 1000 with propagation length L=\ . We can see that r horizontal parity symbols 1006, 1014 denoted Pi, with i odd, are re-encoded by the row code C r , whereas r vertical parities 1010, 1018 of the column code C c , denoted P, with j even, are not re-encoded by the row code C r . In some examples, we can use the same component codes in the horizontal and vertical directions, i.e., with identical (possibly shortened) length n.

Thus, according to further examples of the present disclosure, it is provided a further FEC encoding concept, including respective methods and apparatuses. Again, information symbols are mapped to information symbol positions in a sequence of two-dimensional symbol blocks. A symbol block B; (i > 1) has a preceding symbol block B; i and a subsequent symbol block B,+i in the sequence. The symbol block B, comprises information symbol positions and has associated redundancy symbol positions for redundancy symbols. Ac- cording to a column or vertical component code, column redundancy symbols P¾ for the symbol block B, can be generated based on symbols at symbol positions including redundancy symbol positions along a column of the preceding symbol block B; i concatenated with information symbols along a respective column of the symbol block B 2 . According to a row or horizontal component code, row redundancy symbols P y for the subsequent sym- bol block B,+i can be generated only based on symbols at symbol positions excluding redundancy symbol positions along a row of the symbol block B, concatenated with information symbols along a respective row of the subsequent symbol block B;+i . Thus, while the column redundancy symbols Pi for the symbol block B; are generated by re-encoding row redundancy symbols of at least one preceding symbol block B , the row redundancy symbols P y for the subsequent symbol block B,+i are generated not taking into account the column redundancy symbols Pi of symbol block B;. Note again that the roles of rows and columns can be interchanged. In other words, the z ' -th redundancy symbols Pi for the symbol block B; can be dependent on redundancy symbols of at least one previous symbol block, while the (z ' +l)-th redundancy symbols P y for the subsequent symbol block B;+i are independent of any previous redundancy symbols of symbol blocks prior to Bm . This situation is e.g. shown for symbol block B 3 having the preceding symbol block B 2 and a subsequent symbol block B 4 in the sequence of Fig. 10. While the redundancy symbols P 2 of symbol block B 2 are not re-encoded to generate redundancy symbols P 3 of symbol block B 3 , the redundancy symbols P 3 of symbol block B 3 are re-encoded to generate redundancy symbols P 4 of symbol block B 4 .

In some examples, the row and column redundancy symbols Pi, P y can consist of parity symbols only, or, in other examples, of adjustable self-protection symbols as well as parity symbols. Thus, the skilled person having benefit from the present disclosure will appreciate that the partial feed- forward concept of Fig. 10 can be combined with the self-protection concept of Fig. 7, as will become apparent further below. For example, we can set , , , _ , 77. 27" k 7"

M 1 = - and M 2 = M 1 - r =— =— , where k■= n— r denotes the number of information symbols or bits per codeword. Note that with this example construction, the sizes of different information symbol sub-blocks are not equal. For example, the size of the all-zero block B 0 is M x M 1 ? while the size of the first data-containing block B equals M x M 2 . The size of the second data-containing block B 2 equals M 2 x M and the size of the third data containing block B 3 equals M 2 x M 2 . The fourth data containing block B 4 can have the same size as B 0 , i.e., M x M and the sequence of sizes repeats thereon, i.e., dim B i = dim B i→ as we can see from the example of Fig. 10.

According to another example, we can slightly modify the example code of Fig. 10 to yield a more uniform sequence of block sizes. This is shown in Fig. 11, where we can use the same code for row and column coding and where we define M ■= = ^ and similarly M 2 := -. Then, the size of the blocks equals

The rate of this example code will be R■= = (^j (as in a conventional, uncoupled product code). Note that the rate of the above presented self-protection code was given by R■= 2R C — 1. We can immediately see that the rate of the scheme proposed in Figs. 1 1 or 12 is larger than that, as

(R C - 1) 2 = R C 2 - 2R C + 1≥ 0 <=> R C 2 ≥ 2R C The effect of the suppressed parity ringing is shown in Fig. 13, where we assume that only the block B 1304 contains useful data. We can see that besides the directly associated parities P 1306, also the parities P 2 1310 are non-zero. Of course, the roles of horizontal and vertical codes may be exchanged, i.e., the horizontal parities are not re-encoded while the vertical parities are re-encoded. Such an example is shown in Fig. 12.

Example implementations are not restricted to codes with propagation length L = 1. We may also set L = 2 and design a code 1400 as shown in Fig. 14. Here, always two consec- utive parity blocks 1406, 1410 are re-encoded followed by a single parity-block 1414 which is not re-encoded. Likewise two consecutive parity blocks 1418, 1422 are re-encoded followed by a single parity-block 1426 which is not re-encoded. In this case, whenever the last non-zero information bit is contained in block B 2 , the last non-zero parity will be at most in block Pi +2 - In general for any L, whenever the last non-zero information bit is contained in block B the last non-zero parity will be at most in block Pi +A .

We illustrate the performance of the partial feed- forward code using an example with the same code as above: We select codes with r = 24, n = 192, k = 168, t = 3. The self- protection code construction from above leads to a code of rate R = 3/4 . If we select M 1 ■= 84 and M 2 := 96, we get a code of slightly higher rate R = 0.76563. We show the simulation results in Fig. 15. The upper lines are block error rates (BLER) and the lower lines are bit error rates (BER). The lines marked by squares correspond to the feed- forward code as shown in Fig. 6. The lines marked by circles correspond to the proposed partial feed-forward code.

We can see that the error floor is mainly dominated by error patterns of weight 16. The error- floor estimates shown in Fig. 16 are given by

These expressions do not take into account the possibility of stall patterns being created due to mis-corrections during decoding, hence may be inaccurate when mis-corrections (or the lack of mis-corrections) become significant in comparison to errors from the channel.

The slope of the partial feed- forward error-floor is steeper than the feed- forward code due to the increase of the minimum stall-pattern weight from 7 to 16. The multiplicity (i.e. the total possible number) of error patterns of weight 16 is higher for the partial feed- forward code than the example self-protection code, resulting in a smaller error-floor reduction. However, the partial feed- forward code does not require complex calculations of extra bit- values and uses a very simple product interleaver. It provides a useful trade-off between error-floor and implementation complexity.

Using Fig. 15 as an example, we observe that the column component codes are more sus- ceptible to mis-corrections caused by errors in the parity bits as the parity bits are not corrected by a second component code. At the decoder, we therefore always terminate iterative decoding after the decoding of the more reliable row component codes. Depending on the dimensions of the left-most block in the decoding window, the order of row/column decoding must be swapped at each iteration in order to satisfy this condition.

We show the simulated error rates of partial feed- forward staircase codes based on t = 3 BCH component codes with rates R in the set {3/4,4/5,5/6,8/9,15/16} in Fig. 16. Estimated error floors are also shown. For code rates 5/6 and 8/9, the number of parity bits in the component code is odd (the required BCH component code has field extension-degree m = 9). Since we need both n and k to be even to have integer- valued Jl^and M 2 , we extend the code by multiplying the generator polynomial G (z) by 1 + z (which ensures an even parity of the codewords) and then shorten the component code by 1 bit to obtain the even- weight subcode of length n. This modification has the added benefit of allowing us to better detect mis-corrections during decoding by checking that the decoded word is of even weight. The resulting reduction in mis-correction probability is likely the reason for the discrepancy between the estimated and simulated error floors for R=5/6 in Fig. 16. The self-protecting code concept of Fig. 7 works by using some part of the data positions of the code to generate parity bits of the horizontal code that are identical to those of the vertical code. Therefore, we can puncture one of the parity positions and not transmit them. This is shown in Fig. 7, where the punctured (i.e., not transmitted) parity positions are shown with dashed lines. We have shown that we can reduce the error floor with this code construction by 5 orders of magnitude with this construction compared with the feed- forward approach from Fig. 6. The approach itself needs to realize an interleaving scheme for the parities, which increases the complexity of the encoder. Furthermore, the generators of the horizontal and vertical codes can be different.

The partial feed- forward concept of Figs. 10-14 is alternative solution to the parity-ringing problem which only re-encodes half of the parity blocks. Since only component code encodings are required to encode these codes (same as for the original staircase codes), they can have lower implementation complexity as compared to self-protecting staircase codes. However, the error- floor of partial feed- forward staircase codes is 2-3 orders of magnitude higher than the error- floor of self-protecting staircase codes. We therefore seek a solution which can provide a trade-off between implementation complexity and error- floor. A good solution should have no parity-ringing, a very low error-floor, and a slight increase in encoding and decoding complexity as compared to the original staircase codes.

Fig. 17 illustrates an example code 1700 combining the partial feed- forward concept of Fig. 10 with the self-protection concept of Fig. 7.

In this combined partial feed- forward self-protection code example, row or horizontal self- protected redundancy symbols [X P r ] 1710 for the symbol block B 2 1708 can be generated such that symbols at symbol positions (including preceding information symbol positions 1704 and redundancy symbol positions [Y P r ] 1706) along a row of the preceding symbol block Bi 1704 concatenated with the information symbols 1708 and the row self-protected redundancy symbols [X P r ] 1710 along the respective row of the symbol block B 2 form a codeword of a row or horizontal component code. Column or vertical self-protected redundancy symbols [Y P c ] 1714 for the subsequent symbol block B 3 can be generated such that only information symbols at information symbol positions 1708 (excluding redundancy symbol positions 1710) along a column of the symbol block B 2 concatenated with information symbols 1712 and the column self-protected redundancy symbols [Y P c ] 1714 along the respective column of the subsequent symbol block B 3 form a codeword of a column or vertical component code.

In this example, each of the row and column self-protected redundancy symbols [X P r ] , [Y Pr\ comprise respective adjustable self-protection symbols X, Y and respective parity symbols P r , P c . Similar to what has been described above with respect to the self-protection FF-SC, the row parity symbols P r can be determined such that the symbols at the symbol positions along the row of the preceding symbol block Bi concatenated with the information symbols, the adjustable row self-protection symbols X, and the row parity symbols P r along the respective row of the symbol block B 2 form a valid codeword of the row component code. The column parity symbols P c can be determined such that the information symbols at the information symbol positions along the column(s) of the symbol block B 2 concatenated with the information symbols, the adjustable column self-protection symbols Y, and the column parity symbols P c along the respective column(s) of the subsequent symbol block B 3 form a codeword of the column component code. Again, the row self-protected redundancy symbols [X P r ] carry the same redundancy information as the column self-protected redundancy symbols [Y P r ]. In some examples, the column self- protection symbols Y can be a transposed version of the row self-protection symbols X. Similarly, the column parity symbols P c can be a transposed version of the row parity symbols P r . Thus, the self-protection scheme with a simple transpose interleaver can be applied to the re-encoded parity-bits of partial feed-forward staircase codes. As already mentioned above, the roles of rows and columns are interchangeable. Note that other per- mutations can be applicable as well.

During the encoding process, the initial gray block B 0 can be filled with all-zeros. In subsequent blocks, the sub-blocks 1804, 1808, 1812, 1816 correspond to information symbols. The sub-blocks 1806, 1814, 1822 correspond to parity or extra redundancy bits, added for self-protection. Bits in both the information sub-blocks 1804, 1808, 1812, 1816 and redundancy sub-blocks 1806, 1814, 1822 can be transmitted. The sub-blocks 1810, 1818 can be punctured parity and redundancy bits, which are not transmitted. The small squares 1807, 181 1 illustrate the transpose interleaving between the horizontal parity and redundancy blocks (Y, P c ) and vertical parity and redundancy blocks (X, P r ). Note that this interleaver is simpler than the cyclic shift interleaver used in the self-protection scheme described above.

Let LE {1, 2, 3, ... } be the propagation length parameter of a partial feed-forward self-protecting staircase code, defined as the maximum number of consecutive blocks for which parity-ringing can occur. In the example shown in Fig. 17, the propagation length is 1. Each time blocks Y and P c are calculated, the input to the next encoding consist entirely of information symbols, which terminates parity-ringing.

Fig. 18 shows another example of a partial feed- forward self-protecting staircase code with propagation length L =3. In a sequence of four blocks: B t B i+1 B i+2 B i+ where i is a multiple of four, block B t contains only information bits; blocks B i+1 , B i+2 contain parity- bits without the extra redundancy for self-protection; and block B i+3 contains parity-bits and extra redundancy for self-protection. Parity-ringing ends after three blocks, since B i+ . only contains information bits. The blocks B i+1 , B i+2 are encoded in the same way as the original staircase code. In particular, row self-protected redundancy symbols [X P r ] for the symbol block B 4 of Fig. 18 can be generated such that symbols at symbol positions (including preceding column self-protected redundancy symbol positions [Y P r ]) along rows of the preceding symbol block B 3 concatenated with the information symbols and the row self-protected redundancy symbols [X P r ] along respective rows of the symbol block B 4 form a codeword of a row component code. Note that the row self-protected redundancy symbols [X P r ] and the preceding column self-protected redundancy symbols [Y P r ] include adjustable self-protection symbols X, Y and respective parity symbols P r , P c . Column parity symbols P 5 for the subsequent symbol block B 5 can be generated such that only information symbols at information symbol positions (excluding self-protected redundancy symbol positions) along columns of the symbol block B 4 concatenated with information symbols and the column parity symbols P 5 along respective columns of the subsequent symbol block B 5 form a codeword of a column component code. Parity symbols P 6 of the next symbol block B 5 can be based on conventionally re-encoding the redundancy symbols P5.

Fig. 18 illustrates the structure of a PFF-SC with L = 3. In this example, two out of every four blocks are standard staircase code blocks. Self-protection can be used to stop parity- propagation after L = 3 blocks. Another difference in PFF-SCs is the position of the self- protection redundancy blocks, which are part of the conventional staircase structure. This modification allows the permutations πι, π 2 to be more trivial and drastically reduces the error-floor as compared to FF-SC. Another difference is that the number of information bits per block B, is not constant. As in FF-SC, we set M = (k - r)l2 to account for the self- protection and all blocks contain M 2 code bits. The component codes are shortened respectively. In order to accommodate the position of self-protection redundancy blocks Y, the component codes involved in self-protection (e.g., codes over blocks B 2 and B3 as well as B 6 and B7 in Fig. 18) are shortened by an extra 2r bits relative to the other component codes.

In order to compute the rate of the example PFF-SC of Fig. 18, we count the number of information bits per block. The first L - 1 blocks Βι+(ΐ+ι -, . . . i £ {0, 1, . . .} out of L + 1 blocks (e.g, Bi and B 2 in Fig. 18) are standard staircase code blocks of size M x M with M(M - r) = ¾{k 2 + 3Γ 2 - 4kr) information bits. The block Βι +( ι + ι -, i £ {0, 1 , . . .} contains exactly M(M - 2r) = l A k 2 + 5Γ 2 - 6kr) information bits and finally, the block B(i+i)( +i), i £ {0, 1 , . . .} contains exactly M 2 = l/4(k ~ rf information bits. For computing the rate, we fix again the granularity of transmission. If we assume that always L + 1 blocks Bi, . . . , B(i+i)i, i £ N are transmitted, then the rate can be computed as

(L - 1)M(M - r) + M (M - 2r) + M 2

(L + 1) 2

r 2R c - 2

1 = l -i

M 2R r — 1 '

which is independent of L. As PFF i-2¾ , we can conclude that ?pFF < R if Rc >

1/2, which we assumed as prerequisite. This implies a rate loss with these codes. However, at high rates the differences are small. For example, ?pFF is within 5% of R for R c ≥ 10/11 and within 25% for R c ≥ 5/6. Note that a PFF-SC of non-trivial rate requires R c > 3/4.

This result may seem counter-intuitive at first glance, since it appears that we should re- cover the original staircase code rate R for L→∞. However, note that a key difference in the proposed construction is that the component codes of the staircase- like blocks are shortened by 2r, which leads to the observed rate difference. We could relax the granularity constraint of L + 1 blocks and find an expression ¾FF( a . l ). AS this expression is cumbersome and does not lead to any new insights, we omit it here. For practical purposes, it is customary to restrict ourselves to the granularity of L + 1 blocks, allowing easy termination and possibly higher error rates at the code boundaries.

In the following, we describe an example encoder of PFF-SC. We focus only on the self- protection blocks, since L-l out of L+l consecutive blocks are encoded in the same way as the original staircase code. Our explanations will focus on Fig. 19, which highlights blocks B 2 , B 3 , B 4 , Y , P c , X , and P r of Fig. 18 for L = 3. Fig. 19 further sub-divides each block into sub-blocks. The encoding process comprises two stages. Stage 1 calculates Yi. Stage 2 calculates Y 2 based on Yi . In terms of implementation complexity, stage 1 is equivalent to component code encoding, while stage 2 is a general matrix multiplication. Fortu- nately, for high code rates where M » r, the encoding complexity is dominated by stage 1.

1) Calculating Yi : We inherit the definitions of matrices G p , ΐ ρ , d, F;, and G r , F r from above. By horizontally concatenating My, Mi, 2 , and M 2 ,i, we obtain By vertically concatenating blocks 0 2r x -2r , Μο,ι and Μι,ι, where 0 2 rx -2r accounts for the extra shortening of the column component codes, we obtain 2r

Thus, determining the column parity symbols P c of symbol block comprises determining intermediate column parity symbols P c ,i based on combining a concatenation of the information symbols Μο,ι at the information symbol positions along columns of the previous symbol block BM and the information symbols Μι,ι at the information symbol positions along columns of the symbol block B, according to a first portion F; of the column component code. Determining the row parity symbols P r of subsequent symbol block B, + i comprises determining intermediate row parity symbols P r ,i based on combining a concat- enation of the information symbols Μι,ι, Mi, 2 at the information symbol positions along rows of the preceding symbol block B, and the information symbols M 2 ,i at the information symbol positions along respective rows of the subsequent symbol block B,+i according to a first portion Gi of the row component code. We write P c ,i and P r ,i as

Imposing self-protection constraints under trivial permutations and solving for Yi gives

(P c4 + P A )

(4)

Thus, determining the row parity symbols P r ,\ can further comprise determining one of the adjustable row or column self-protection symbols Xi, Yi based on a combination of first and second generator matrices G r , F r corresponding to a respective second portion of the row and column component code, based on the permutation rule (e.g., matrix transpose), and based on the intermediate row and column parity symbols P r ,i, P c ,i. The respective other adjustable self-protection symbols Yi, Xi can be computed based on the determined first or the second adjustable symbols Xi, Yi and the permutation rule (e.g. matrix trans- pose).

Since, A = ( if G r = F r , a necessary condition for A to be invertible is G r ≠ F r . Here we satisfy this condition by using different binary cyclic codes as row and column component codes. Let g(x) and f(x) be generator polynomials for C r (n, k) and C c (n, k). We require g(x) andf(x) to satisfy the condition f{x) = x d ^ x)) g{ X - 1 ) where deg(/?(x)) is the degree of polynomial p{x). The component codes then have the property that the "mirror-image" of a codeword (co, ci, . . . , c n -\) e C r (n, k), i.e. (c n -\, c n -i, . . . , co), is a codeword of C c (n, k), and vice versa. Hence, the same decoder can be used to decode both component codes, with some simple bit-reversal logic. Using different binary cyclic component codes with generator polynomials satisfying (10) gives an invertible A. By calculating A -1 offline at design time, the complexity of finding Yi and P c ,i is equiva- lent to a multiplication between an r x r matrix and an r x M - 2r matrix. lfg(x) andf(x) do not share any common factors then A is invertible. One way of satisfying this condition is to use reciprocal polynomials. For example, if g(x) has roots at {a, ... , a 2t } then f(x) is selected to have roots at {a -1 , ... , a _2t }. A property of the codewords generated by reciprocal polynomials is that the "mirror image", i.e. reflection about the center, of a codeword for the row code is a codeword for the column code. Hence, the same decoder can be used to decode both row and column component codes, with some additional logic to reverse the bit indexing.. This additional operation is especially fast in the high-rate regime. Hence, a large portion of the parity and redundancy bits can be calculated with complexity similar to staircase code encoding.

2) Calculating Y 2 : In stage 2, the blocks Yi and P c , i are considered known. By vertically concatenating blocks 0 2 rx2r , Mo,2 and Mi ? we obtain

02r x 2r

hence

We partition the matrix G¾ into three sub-matrices with

where dim GA = (M - 2r) x r, dim (¾ = 2r X r, and dim Gc = M * r. We can now write

Using (5) and the self-protection constraint Y 2 r = X 2 , we have

Imposing the self-protection constraint P r , = (Pc,2) T and simplification yields

where A was defined in Eq. (4) and C Fi

Note that all terms in Eq. (6) are 2r x r matrices. Let vec(-) now denote the row- wise vectorization given by the mapping v(i, j) = in + j. Let y = vec(Y 2 ) and c = vec(C ). Let ^(^) be the r x Ir 1 matrix where for i E [0, r - 1] and j = 2ri, the y ' th column of ^(-^) is the z ' th column of A, with zeros elsewhere. We can write Eq. (6) as

By = c where B is a Ir 1 x Ir 1 matrix given

3) Finding an invertible B:

Since G R and F R were fixed in stage 1 in order to obtain an invertible A, if B is singular, a way to obtain an invertible B is to manipulate GB using elementary row operations. Here we focus on row permutations of GB only, since they do not affect the error floor.

Let Π be a Ir^lr permutation matrix. Denote the permuted G B by G B = UG B , . A computer search can be used to find an appropriate Π that results in an invertible B. Given Π, the expressions for P r 2 and B are modified by replacing G B with G B . Note that Π also affects stage 1 calculations, where (8) has to be modified to

For an invertible B, the matrix Y 2 is given by y = B x c. where y denotes the vectorization of Y 2 under row- wise vectorization. The complexity of calculating Y 2 is dominated by the multiplication with a Ir 1 x Ir 1 matrix. Since only 1 out of every L + 1 blocks requires self-protection calculations, the average complexity of PFF- SC approaches conventional staircase codes with increasing L.

We illustrate the self-protection feed-forward staircase codes using an example with the following row code with n = 14 and k = 12 that generates r = 2 additional parity bits and has the following generator matrix

And additionally, we consider the column code with the systematic generator matrix

Using different row and column codes ensures that we easily find an invertible matrix A below necessary for computing the self-protection values.

With this code, we have r = n— k = 1 and we have M =— = 5. The rate of the code is

2k

R PFF 14-— 2k 0.6.

For illustrating the example, we refer to Fig.18 and use blocks B 2 , B 3 and B . The blocks in the example are of different sizes and are given by:

/l 0 0 0 0\ 0 0 1 0 0\

0 0 0 1 0 1 1 0 1 1

B 7 = 0 1 1 0 0 B 3 = (l 1 0 0 1) B 4 = 1 0 0 0 1

0 1 0 1 1 1 1 1 1 1

Vo 0 o o o/ Vo 0 1 l o/ Step 1) Computing Y 1

From the matrices above, we extract 1 A = (1) M li2 = (1 0 0 1) M 2il = (0 0 1 0 0)

We then first compute P r l = (Μι,ι M li2 M 21 )G i =(1 0).

By vertically concatenating blocks 0 2rxM _ 2r , M 01 and M l , where 0 2rxM _ 2r , accounts for the extra shortening of the column component codes, and with

0

0 Μ = (1)

we have

We can write

P c — Pe l (^*c)^^ l CLTid P r — f f i "I" X-^G^

And i and P Cil = P T r leads to

and hence which leads to the situation shown in Fig. 21.

Step 2) Computing Y 2

We first calculate

0 0

0 0

We then compute the matrix C with

With the row-wwe vectorization c

We next compute the matrix B which makes use of A = (G r ) + ( r ) ) = (Q -JJ-

Then the r x 2r 2 matrix S(A) is obtained as where for i E {0, ... , r— 1], the j = 2rith column of S(A) is the ith column of A.

SM) = (J 0 0 0 1 0 0 0

0 0 0 0 1 0 0 0 )

Then,

Where G B is obtained by partitioning G t as

With dim G A = ( - 2r) x r , dim G B = 2r x r, and dim G c = M x r. And hence

We can hence write B as

which is of full rank and can hence be inverted giving

Which is the vectorization of Y 7 and hence

(1 1 1 1\

2 VL 0 1 1/

T„ 0 0 0 0

leading further to P c,2 = P Ci2 + (F r ) T Y 2 = (

C 0 0 0 / VI IV I 0 1 1/

( 0 0 0 0

0 1 0 0 )

Finally, we get the situation shown in Fig. 22. We illustrate the performance of the partial feed-forward self-protecting code using an example code very similar to those presented above. We designed a code with r = 24, n = 240, k = 192, t = 3. The above example code had a rate of R = 3/4 . Using propagation length L=\, our construction has M = 96 and the same rate. We show the simulated bit- error-rates in Fig. 20. As the reference numerals indicate, the bit-error-rates of self-protecting (reference numeral 2102) and partial feed- forward staircase codes (reference numeral 2104) are also shown in Fig. 20. Error floor estimates are shown with respective open circles.

Observe that the error floor of partial feed- forward self-protecting staircase code is below both of the other codes. In fact, the error floor of partial feed- forward self-protecting staircase codes is expected to be very close to the error floor of the original staircase code. An estimate of the error floor based on stall patterns of weight 16 is given by

BER partial feed— forward self—protecting — v 4

This estimate is shown by the open circles in Fig. 20. It is much lower than the estimated error floors of the other codes and is already below 10 "15 in the waterfall region of the BER curve.

According to another aspect of the present disclosure, the encoding of self-protecting, partial feed-forward, or partial feed-forward self-protecting staircase codes can be modified to allow on-the-fly adjustments of the redundancy added to each block in the staircase code chain as they are encoded, for example, by intermediate network nodes prior to arriving at a destination node of a communications network. Doing so can provide near-optimal redundancy for successful decoding of every block in the staircase chain, even though different blocks may experience different channel noise conditions. An advantage of this solution is that the amount of net data rate wasted is very little and close to the optimum. Fig. 23 shows an example of a rate-compatible staircase code based on self-protecting staircase codes. The skilled person having benefit from the present disclosure will appreciate that the modified rate-compatible encoding can also be combined with any of the schemes presented above, in particular it can be implemented using partial feed-forward or partial feed- forward self-protecting staircase codes. The choice of which parity-ringing- free staircase code to use depends on the rate, implementation complexity, and error-floor requirements of a particular application.

Fig. 23 shows an example of a rate-compatible staircase code 2300 for an example 2-hop system 2400 illustrated in Fig. 24. We assume that channels 2402, 2404 between the intermediate nodes 2406 (and source 2408 and destination 2410) are Binary Symmetric Channels (BSCs) with error probability δι . The data that is transmitted from the source 2408 to the destination 2410 undergoes both channels 2402, 2404, hence two hops, and has a com- bined error probability of δ 2 = - (1— (1— 25- L ) 2 ) > δ 1 .

In the example code of Fig. 23 there are L = 7 blocks Bi to B 7 containing information symbols and two blocks Bo and Bs fixed to zeros which need not be transmitted. Block B 4 is a transition block which can be encoded slightly differently from the other surrounding blocks. The first five blocks Bo to B 4 from the left are sub-divided into respective four small sub-blocks, labeled B . The corresponding redundancy blocks, which can include parity-check and extra redundant bits for self-protection, are also sub-divided into respective four sub-blocks labeled P £ (e.g., transmitted) and Q t (e.g., not transmitted).

The dimension of each block Bi can be M x M, and thus quadratic. For a component code with block-length n, k information bits, and r = n— k parity-check bits, M is given by

M =— ] ^- The dimension of each normal redundancy block (such as P 2 ) can be 2r x M. The dimension of each sub-block can be M/2 x M/2. The dimension of each sub-divided redundancy block (such as P 0, o) can be 2r x M/2. The way we obtain the sub-divided parity blocks can be described as follows: we only use two sub-blocks to generate a parity block, i.e., instead of using 2M = k— r information bits to generate the parities, we now use ^ = ^- - data bits to generate a block of parities. The remaining ^- - data bits can be shortened in the encoder (i.e., assumed to be zero and thus not transmitted).

From the furthest to the nearest intermediate node 2406 (relative to the destination node 2410), channel bit-error probabilities decrease with each hop. In Fig. 24, since there is only one intermediate node, we refer to the destination node 2410 as "node 2" and the intermediate node 2406 as "node 1". As shown, node 2 encodes 4M 2 information bits in four blocks Bi to B 4 and node 1 encodes 3M 2 information bits in three blocks B 5 to B 7 . The skilled person having benefit from the present disclosure will appreciate that this ratio is just given exemplarily here and depends on the amount of data that either the source or intermediate node wants to transmit.

The channels experienced by each block are delineated by the thick, dashed lines 2350. All bits to the left or above the line (except those not transmitted) 2350 are received with bit- error probability δ 2 . All bits to the right or below the line are received with bit-error probability δ-L < δ 2 . In our system model, given per-hop bit-error probability δ ΐ 5 the bit-error probability for bits transmitted by an intermediate node h hops from the destination 2410 is given by 8 h = [1 - (1 - 2δ ) ]. Redundancy can be adjusted in relation to the channel bit-error probability experienced by each block. In other words, redundancy can be adjusted in relation to a number of hops from source to the destination of the respective symbol blocks. For the bits transmitted over the channel with bit-error probability δ 2 , we can assign 2r/M redundant bits per information bit, for example. For the bits transmitted over the channel with error-probability δ ΐ 5 we can assign r/M redundant bits per information bit, for example.

In general, we can use hr/M redundant bits per information bit encoded by an intermediate node h hops away from the destination node, for example. This linear redundancy adjustment scheme is best suited to cases where δ χ is small (e.g., 10 -3 ). The first order Taylor expansion of 8 h around 0 is 8 h = h8 + 0(β ), thus for small 8 the bit-error probability grows approximately linearly with h. In Fig. 27, we plot the optimal redundancy per information bit (1— C(6) where C(6) is the capacity of a binary symmetric channel with error probability δ) for successful transmission. The example shows a 10-hop system with 8 = 10 -3 . Linearizing around δ 5 = 5 x 10 -3 shows that a linear redundancy adjustment approximates the optimal redundancy scaling well.

To accommodate the increase in redundancy with increasing h, the sub-division of each staircase block can also be increased. Given h, each symbol block B, can be sub-divided into h x h sub-blocks, each of dimension M/h x M /h. The h x h sub-blocks may be non- overlapping. Small deviations from M/h are allowed if it is not an integer. Fig. 25 shows an overview of a rate-compatible staircase code for a 4-hop system (with a diagram of a 4- hop system shown in Fig. 26). The transition blocks B 4 , Bs, B12 can be sub-divided differently depending on whether row or column component codes are encoded. For example, the first transition block B 4 from the left can be sub-divided into 16 sub-blocks during row encoding. However, it can be sub-divided into 9 sub-blocks during column encoding.

A property of rate-compatible staircase codes is that the code rate is not fixed and can be influenced by also encoding predetermined dummy symbols or bits. Here, we defined the code rate as a ratio between a number of (useful or non-predetermined) information sym- bols included in a codeword and a total number of symbols in the codeword. Let i E {1, ... , h} be an index of hops in the system. For a staircase chain containing L blocks (excluding zero blocks), let L i denote the number of blocks encoded by an intermediate node

1 hops away from the destination node. Let the total number of codeword bits encoded by the intermediate node i hops away be N t = L £ M 2 + y Mir and the total number of bits in the codeword be N =∑ £ N £ .

The rate of the encoded codeword is =

2 -— Rc} .— where R r = - and let q,- =— , then R =∑; qi (l— R r

n a l N ' c. A i j . The code rate is

(2£-l)-2(£-l)R c c

a convex combination of the rates encoded at different intermediate nodes. The capacity of time-sharing N channel uses between h different BSCs with probability of error h5, with N t channel uses of each BSC, is given by C =∑ £ g^l— C( i5)). The time-sharing capacity is a convex combination of capacities of difference BSCs. Hence, the gap to capacity of each individual staircase code (of different redundancies) is maintained in a rate-compatible staircase code. In other words, there is no loss in perfor- mance due to the combination of different staircase codes of different rates into a single code.

Thus, the rate-compatible staircase encoding concept of Fig. 23 generally includes mapping information symbols to information symbol positions in a sequence of two-dimen- sional symbol blocks. Individual symbol blocks have information symbol positions as well as row and column redundancy symbol positions. Generating row and/or column redundancy symbols for the redundancy symbol positions of different symbol blocks in the sequence includes, between the different symbol blocks, using different code rates of the row and/or column component codes. The different code rates may be achieved despite using only one row and/or column component code with constant rate between the different symbol blocks. Technically, the component codes can stay the same. The rate can be adjusted via shortening. This may be understood as if we change the rate by switching between different codes, which is not true, we just change the rate by adapting the shortening. In some examples, the redundancy symbols of at least one preceding symbol block can be re- encoded for generating redundancy symbols of one or more subsequent symbol blocks. Additionally or alternatively, the redundancy symbols of a preceding symbol block are not re-encoded for generating the redundancy symbols of a subsequent symbol block in order to avoid parity ringing. In the following we describe an example encoding process for the example 2-hop system in Fig. 24. The extension to an i-hop system is straightforward. The same component code with n coded bits, k information bits, and unique decoding radius t can be used throughout the encoding. Other examples can also employ different component codes, as described above. Starting from the first block Bo 2302 on the left, sub-blocks B 0 0 2302-1, B 1 0 2304- I, and 5 2, o 2308-1, can be encoded by self-protecting staircase encoding, with component codes shortened by M, to calculate first column redundancy sub-block P 0 0 2306-1 and the equivalent first row redundancy sub-block Q 0 0 2310-1. Similarly, sub-blocks B 0 3 2302- 4, B 1 3 2304-4, and B 2 3 2308-4, are encoded to calculate redundancy fourth column redundancy sub-block P 0 3 and the equivalent forth row redundancy sub-block Q 0 3 .

Continuing the pattern, sub-blocks B 0 1 2302-2, B l L 2304-2, and B 2 1 2308-2, are encoded to calculate second column redundancy sub-block P 0 1 2306-2 and the equivalent second row redundancy sub-block Q 0 1 . Finally, sub-blocks B 0 2 2302-3, B 1 2 2304-3, and B 2 2 2308-3, are encoded to calculate third column redundancy block P 0 2 and the equivalent third row redundancy sub-block Q 0 2 . At the transition block B 4 , during row encoding the block can be sub-divided into four sub-blocks and encoded as above. During column en- coding, the entire block can be used, along with B 5 to calculate P 2 and Q 2 . The remaining blocks can be encoded by standard self-protecting staircase code encoding.

Said differently, generating redundancy symbols for the redundancy symbol positions of the symbol blocks in the sequence can include generating a first subset P 0 0 2306-1 of column redundancy symbols for a symbol block such that a concatenation of

- a first subset of information symbols B 0 0 2302- 1 at first subset of information symbol positions along a column of the preceding symbol block BM ,

- predetermined (dummy) symbols at a second subset of information symbol positions (corresponding to B 0 1 2302-2) along the column of the preceding symbol block BM,

- a first subset of information symbols B 1 0 2304-1 at a first subset of information symbol positions along a respective column of the symbol block B;,

- predetermined (dummy) symbols at a second subset of information symbol positions (corresponding to B 1 2304-2) along the respective column of the symbol block Bi, and

- the first subset of first redundancy symbols P 0, o 2306- 1 along the respective column of the symbol block B,

form a valid codeword of a column component code. Generating the redundancy can further include generating a second subset P 0 1 2306-2 of column redundancy symbols for the symbol block B, such that a concatenation of - predetermined (dummy) symbols at the first subset of information symbol positions (corresponding to B 0 0 2302-1) along the column of the preceding symbol block B i

- a second subset of information symbols B 0 1 2302-2 at the second subset of information symbol positions along the column of the preceding symbol block BM ,

- predetermined (dummy) symbols at the first subset of information symbol positions (corresponding to B 1 0 2304-1) along the respective column of the symbol block B;

- a second subset of information symbols B 2304-2 at the second subset of information symbol positions along the respective column of the symbol block B 2 , and

- the second subset P 0 1 2306-2 of column redundancy symbols along the respective column of the symbol block B,

form a valid codeword of the column component code.

Further, generating redundancy symbols can include generating a third subset P 0 2 2306-3 of column redundancy symbols for a symbol block B, such that a concatenation of

- a third subset of information symbols B 0 2 2302-3 at third subset of information symbol positions along a column of the preceding symbol block BM ,

- predetermined (dummy) symbols at a fourth subset of information symbol positions (corresponding to B 0 3 2302-4) along the column of the preceding symbol block B ,

- a third subset of information symbols B 1 2 2304-3 at a third subset of information symbol positions along a respective column of the symbol block B,,

- predetermined (dummy) symbols at a fourth subset of information symbol positions (corresponding to B 1 3 2304-4) along the respective column of the symbol block Bi, and

- the third subset of first redundancy symbols P Q 2 2306-3 along the respective column of the symbol block B,

form a valid codeword of a column component code. Yet further, generating the redundancy can include generating a fourth subset P 0 2306-4 of column redundancy symbols for the symbol block such that a concatenation of

- predetermined (dummy) symbols at the third subset of information symbol positions (corresponding to B 0 2 2302-3) along the column of the preceding symbol block Bi-i,

- a fourth subset of information symbols B 0 3 2302-2 at the fourth subset of information symbol positions along the column of the preceding symbol block BM ,

- predetermined (dummy) symbols at the third subset of information symbol positions (corresponding to B 1 2 2304-3) along the respective column of the symbol block i,

- a fourth subset of information symbols B 1 3 2304-4 at the fourth subset of information symbol positions along the respective column of the symbol block Bi, and

- the fourth subset P 0 2306-4 of column redundancy symbols along the respective column of the symbol block B,

form a valid codeword of the column component code.

Likewise, generating redundancy symbols can include generating a first subset Q 0 0 2310- 1 of row redundancy symbols for the subsequent symbol block B, + i such that a concatenation of

- the first subset of information symbols B 1 0 2304-1 at first subset of information symbol positions along a row of the symbol block Bi,

- predetermined (dummy) symbols at the third subset of information symbol positions (corresponding to B 1 2 2304-3) along the row of the symbol block Bi,

- a first subset of information symbols S 2, o 2308-1 at a first subset of information symbol positions along a respective row of the subsequent symbol block B,+i,

- predetermined (dummy) symbols at a third subset of information symbol positions (corresponding to B 2i2 2308-3) along the respective row of the subsequent symbol block B;+i, and

- the first subset Q 0 0 2310- 1 of row redundancy symbols 2310- 1 along the respective row of the subsequent symbol block B, + i

form a valid codeword of a row component code. Generating the redundancy symbols can further include generating a second subset Q 0 2 2310-2 of row redundancy symbols for the subsequent symbol block B,+i such that a concatenation of

- predetermined (dummy) symbols at the first subset of information symbol positions (corresponding to B 1 0 2304-1) along the row of the symbol block B,,

- the third subset of information symbols B 1 2 2304-3 at the third subset of information symbol positions along the row of the symbol block B 2 ,

- predetermined (dummy) symbols at the first subset of information symbol positions (corresponding to £? 2 0 2308-1) along the respective row of the subsequent symbol block B/+i

- a third subset of information symbols £? 2 2 2308-3 at the third subset of information symbol positions along the respective row of the subsequent symbol block B,+i , and

- the second subset Q 0 2 2310-2 of row redundancy symbols along the respective row of the subsequent symbol block Β, + ι,

form a valid codeword of the row component code.

Further, generating redundancy symbols can include generating a third subset Q 0 1 2310-3 of row redundancy symbols for the subsequent symbol block B,+i such that a concatenation of

- the second subset of information symbols B 1 2302-3 at the second subset of information symbol positions along a row of the symbol block B;,

- predetermined (dummy) symbols at the fourth subset of information symbol posi- tions (corresponding to B 1 3 2304-4) along the row of the symbol block B;,

- a second subset of information symbols 5 2 ,i 2308-2 at a second subset of information symbol positions along a respective row of the subsequent symbol block B +i ,

- predetermined (dummy) symbols at a fourth subset of information symbol posi- tions (corresponding to 5 2 ,3 2308-4) along the respective row of the subsequent symbol block B,+i and - the third subset Q 0 1 2310-3 of row redundancy symbols along the respective row of the subsequent symbol block B,+i ,

form a valid codeword of the row component code. Yet further, generating the redundancy can include generating a fourth subset Q 0 2310-4 of row redundancy symbols for the subsequent symbol block B,+i such that a concatenation of

- predetermined (dummy) symbols at the second subset of information symbol positions (corresponding to B 2304-2) along the row of the symbol block B;, - the fourth subset of information symbols B 1 3 2304-4 at the fourth subset of information symbol positions along the row of the symbol block B 2 ,

- predetermined (dummy) symbols at the second subset of information symbol positions (corresponding to £? 2, i 2308-2) along the respective row of the subsequent symbol block B,+i ,

- the fourth subset of information symbols £? 2 3 2308-4 at the fourth subset of information symbol positions along the respective row of the subsequent symbol block m, and

- the fourth subset Q 0 2310-4 of row redundancy symbols along the respective row of the subsequent symbol block B,+i

form a valid codeword of the row component code.

The skilled person having benefit from the present disclosure will appreciate that the redundancy symbols can comprise adjustable self-protection symbols and/or parity symbols that may be re-encoded or not re-encoded as described in the various examples above. Further, the roles of columns and rows may be exchanged. In a transition block between different code rates, such as block B 5 in the example of Fig. 23, the number of sub-blocks in row dimension can differ from the number of sub-blocks in column dimension. While four sub-blocks are used to compute the row redundancy symbols of B 5 in the above described manner, the whole block B 5 is used to compute the column parties P 2 as has been described with regard to the self-protecting feed- forward staircase codes (see Fig. 10). A rate-compatible staircase code can be decoded by using the iterative, windowed staircase decoder. At each block, the decoder should know the intermediate node that originally encoded the block. This additional information is assumed to be available, for example within a header transmitted separately from the container.

Fig.28 shows the block error-rate of a 2-hop system with different loading factors transmitted using a rate-compatible staircase code. Code parameters are M = 480, r = 30, and L = 13 (excluding zero blocks). It is a slightly longer version of the code in Fig. 23, with encoding starting from the left side. The label on each plot is the number of blocks (out of 13) encoded by node 2, i.e. the loading factor of node 2. Observe that successful decoding is achieved for all loading factors. Note that although the horizontal axis is labeled δ ΐ 5 the actual channel bit-error probability varies with the loading factor. Only the case where all blocks are encoded by node 1 (the plot labeled 0) has channel bit-error probability 8 . When all blocks are encoded by node 2 (the plot labeled 13), the channel bit-error proba- bility is close to 28 . We find the gap to capacity (in net coding-gain) for the all node 1 case to be 0.573 dB and for the all node 2 case to be 0.638 dB.

We note that the cases where an odd number of blocks are encoded by node 2 appears to perform much better. This suggests that performance improves when the transition block is encoded by node 1. Based on this observation, we may require in some examples that all transition blocks in a rate-compatible staircase code be encoded by the intermediate node with the better channel.

Further examples of the present disclosure propose to fix the size of the redundancy blocks to the maximum number of redundancy symbols required in the network. Any "unused" parts of the redundancy blocks can be filled with information symbols. The skilled person having benefit from the present disclosure will appreciate that this can be combined with other examples described above. Since the redundancy blocks do not change size depending on the location of the encoding intermediate node, this example has the constant block- length property. An example is shown in Fig. 29 for the 2-hop (h = 2) system in Fig. 24. The parameters are determined based on a component code with block-length n symbols, of which k are information symbols, and r = n— k are parity symbols. The value of M can be given by max{M| 2M + 2hr < n], where h denotes the number of hops. Observe that all staircase blocks have dimension M x M and all redundancy blocks have dimension 2hr x M (here 4r x M). Here, we already implicitly assume that self-protection is used as the size of parity-blocks is fixed to 2rh, where the factor 2 describes the additional redundancy for self-protection. In the case of no self-protection, this size can be adjusted accordingly. No modification to the code structure is necessary for blocks encoded by intermediate nodes 2 hops away from the destination and which experience a channel bit-error probability of δ 2 . Redundancy blocks 2920 encoded by intermediate nodes 1 hop away can be split into sub-blocks M t 2924 and P t 2922. Correspondingly, the un-transmitted permuted redundancy blocks 2930 can also be split into sub-blocks N t 2934 and Q t 2932. The sub- blocks M t 2934 can be filled with information symbols, while the blocks P t 2922 contain redundancy symbols, for example, including adjustable self-protection symbols Y and parity symbols P c . At this point it would be inaccurate to continue to refer to these blocks 2920, 2930 as "redundancy blocks" since they may contain information bits. In the following, we refer to the blocks 2920, 2930 not within the main staircase (those labeled by B t or Bi ) as protruding blocks.

We now describe an encoding example focused on protruding blocks M 2 , P 2 , N 2 , and Q 2 based on information bits contained in B 4 (the combination of blocks B 4 for j = 1, ... ,4),

B 5 , and B 6 . Note the sub-division of P 2 into sub-blocks Y, P c and Q 2 into sub-blocks X, P r .

Consider binary cyclic codes (such as BCH codes) as component codes. Let C row (n, k) be the row component code with generator polynomial g row (x) and systematic generator matrix of size k x n. Let matrix G of size k x r be the last r columns of the row component code generator matrix, i.e. the columns which generate the parity symbols of the component codeword. Let C o[ (n, k), g col (x), and F be their column counterparts. In general, the generator polynomials and matrices of row and column component codes need not be the same.

Partition the matrices G and F accordin where G p , F p are sub-matrices of size (/c— r) x r related to information symbols and G r , F r are sub-matrices of size r x r related to the self-protecting symbols X or Y. By vertically concatenating B , B 5 , and M 2 we can calculate intermediate column parity symbols Given some permutation ·¾ over the elements of the information symbol subset M 2 , i.e. π ι (Μ 2 ) = vec _1 (n 1 vec(M 2 )) where is a 2rM x 2rM permutation matrix and vec(), vec _1 () is some vectorization and its inverse of M 2 , assign the further information symbol subset

N 2 = (π 1 2 )) τ . Thus, a subset of information symbols N t can be a permuted version of a subset of information symbols Mj or vice versa. The information carried by both subsets N Mj is the same and thus one of them need not be transmitted. The subsets of information symbols N j , M j can be adjusted together with adjustable self-protection symbols and parity symbols such that information symbols, adjustable self-protection symbols and parity symbols form valid codewords. This will be come apparent below.

By horizontally concatenating information symbols of B 5 , B 6 and N 2 , we obtain intermediate row parity symbols

P r = [B 5 B 6 N 2 ] G p .

Note that the intermediate row parity symbols P c , P r are not the same as the parity symbols P c P r . This has already been described above. Using variable self-protection matrices Y and X, we can write the parity symbols P C and P R as P C = P C + (F r ) T Y, P R = P R + XG r .

Given permutations π 2 and π 3 , defined in a similar manner as π 1 but which are in general not the same permutations, we can impose the self-protection constraints

Χ = (π 2 (Υ)) τ , P R = ( 3 (P C )) T .

Re-arranging gives

* 3 ((F r ) T Y) T + 2 (Y) T G r = P r + π 3 ε ) τ = C.

The solution of Y in the above expression was described above for example realizations of interleavers. A similar technique can be used here. An additional complexity of this exam- pie is the permutation of M 2 using n^. The complexity of this permutation can be varied depending on the error-floor requirements.

Note that when encoding the blocks P 0 0 using B 0 0 and B 1 0 (and P 0 2 using B 0 2 and B 1 2 ; (and P 0, i using B 0 1 and B ; (and P 0 3 using B 0 and B 1 and other similar blocks) we employ shortening, i.e., fill the missing portions of the block with zeros to account for the missing extra information symbols in the protruding blocks).

Fig. 30 shows an embodiment of the constant block-length solution for the 4-hop network shown in Fig. 26. A relation between the respective channel bit-error probabilities is 5 4 > δ 3 > δ 2 > δι_. Note the decrease in the number of information bits in the protruding blocks as the channel bit-error probability increases. The overall block-length is constant since every staircase block contains M 2 bits and each protruding block contains 8rM bits. For a general i-hop system, a protruding block contains 2hrM bits. For i = 1, ... , h, 2(i— l)rM of them are information bits. Thus, a size of the respective subset of information symbols Nj, Mj can depend on an expected error probability of a (remaining) communication channel. Said differently, it can be dependent on the number of remaining intermediate network nodes or hops up to a destination network node. Thereby the dependency can be inversely proportional, i.e., the more hops to go, the fewer information symbols and the more redundancy symbols in a protruding block.

A minor difference between a multi-hop embodiment and the 2-hop example above is the information bits in a protruding block are further divided into sub-blocks. For example, consider the blocks corresponding to channel bit-error probability δ 2 in Fig. 7. In left-half of each protruding block has dimension 8r x M/2, of which the top 4r x M/2 are information bits. During encoding, this r M/2 information block is further sub-divided into two sub-blocks of dimension 2r x M/2.

The top sub-block is used in the encoding of the top-left sub-blocks of the corresponding staircase blocks (all labeled A). The bottom sub-block is used in the encoding of the bottom-left sub-blocks of the corresponding staircase blocks (all labeled B). Similarly, blocks are sub-divided and grouped according to labels C and D as shown. The permuted infor- mation blocks (shown in light green) are divided correspondingly.

In comparison to the code of Fig. 23, by filling parts of a protruding block with information bits, a slight rate gain is obtained. For i = 1, ... , h, the rate of the blocks encoded by intermediate node i in the modified solution is given by ir 2i(l - K c )

M + hr (2/i Compared to the Ri expression above

(2i - l) - 2 (i - l)K c the difference in rate is 2 ( i— — R c )≥ 0. Recall that the overall rate is a linear combination R =∑i ^iHi (or R = Σί ^ί^ί in the modified solution) hence the overall rate is increased. As an example of the effect on performance due to the filling of protruding blocks with information bits, we simulated self-protecting staircase codes with different amounts of information bits in protruding blocks. The example code parameters are n = 1022, k = 992, r = 30, and M = 421. The largest possible protruding block has dimensions 2(3)(30) x 421.

We simulated three cases. In the first case, protruding blocks with dimensions 2(30) x 421 were simulated, which only contained redundant bits. In the second case, protruding blocks with dimensions 2 (2) (30) x 421 were simulated, which contained 2(30) x 421 information bits in addition to redundant bits. In the third case, protruding blocks with dimensions 2 (3) (30) x 421 were simulated, which contained 2 (2) (30) x 421 information bits in addition to redundant bits.

We emphasize that these simulations do not correspond to the filling of protruding blocks for a 3-hop network with i = 1,2,3, i.e., the overall block-length is not constant across the three cases. They correspond to the performance of the proposed solution over a 1-hop, 2- hop, or 3-hop network with i = 1. We focused on i = 1 because it has the largest fraction of information bits in each protruding block. Fig. 31 shows the block and bit error-rates for the three simulated cases. We extrapolate the bit-error-rate down to IE- 15 to obtain the estimated channel bit-error probability threshold p s ; m . In the following table we compare the thresholds of different protruding block sizes. Due to the rate increase, even though the threshold appears to decrease in Fig. 31 with increasing protruding block sizes, the net-coding-gain (NCG, a measure of the gap to BSC capacity) largely remains constant.

Error-floor analysis of some staircase codes and its variants proposed in this disclosure depends on enumerating the number of stall patterns, i.e., patterns of errors that the decoder cannot remove. To obtain a simple estimate of the error-floor, we only enumerate the smallest stall patterns resulting from channel errors, referred to as minimal stall patterns. We consider an erroneously decoded bit to be a bit error only if it is an information bit. A decoded block is considered to be a block error if it contains at least one bit error. The block (BKER) and bit (BER) error-rates are defined according to these definitions. We estimate the block and bit error- floors of FF-SC based on the above examples of low-error- floor permutations. An example of a minimal stall pattern for component codes with t = 3 is shown in Fig. 32, consisting of 4 information-bit errors and 4 redundancy-bit errors from the channel. Markers 3202 are bit errors in row component codes. Markers 3204 are bit errors in column component codes. Dashed and dash-dotted lines are referred to in the derivation of error-floor estimates. Note that only 4 out of the 8 bit errors in redundancy blocks are received from the channel, the other ones are interleaved versions thereof.

To construct such a stall pattern, first choose any 2 out of M rows in the information block, such as the rows marked by the horizontal dashed and dash-dotted lines in Fig. 32. Denote the chosen rows by n and r 2 . Under the transposes in Eq. (2), the chosen rows are mapped to columns marked by the thin vertical dashed and dash-dotted lines, reflected about the diagonal of the information block. Under the low-error- floor permutations, bit errors in the row redundancy block are cyclically shifted by no more than 2r-l columns, modulo M, in the column redundancy block. In Fig. 32, the range of cyclic shifts are bounded by the thin and thick vertical lines. For example, bit errors in the row redundancy block of n may be shifted to the columns within the thin and thick dashed vertical lines. For r 2 , bit errors in the row redundancy block may be shifted to the columns within the thin and thick dash- dotted vertical lines, wrapping around the right boundary of the column redundancy block. Given n, we can define its valid column set by

S(n) = {r« + j mod M for all j€ [0, 2r - 1]}.

It is simple to verify the following spreading property of the low-error-floor permutations: if 2r < M, i.e. R > 1/2 or equivalently the overhead OH < 100%, then row redundancy block bit-errors belonging to the same row cannot belong to the same column in the column redundancy block. Consequently, columns in the stall pattern can only be chosen from the intersection of valid column sets. The number of choices of such columns is

S(ri ) n S(r 2 ) \ < 2r In Fig. 32, the intersection consists of columns bounded between the thin dashed and thick dash-dotted vertical lines and columns bounded between the thin dash-dotted and thick dashed vertical lines. The resulting error-floor estimates based on the simple upper-bound are given by

For arbitrary t, let - l(t + l)/ 2 j and t r = t + 1 - . For odd t, U = t r and the above argument for t = 3 applies directly. Observe that t% (resp. t r ) is then the number of information (resp. redundancy) block bit-errors in each row of a minimal stall pattern. The error-floor estimates for odd t are given by

tit;

BERFF = BKERFF

M 2 ' (V) For even t, we first choose rows out of M in the information block. Each erroneous row is assumed to contain t% bit errors in the information block and t r bit errors in the row redundancy block. Under the spreading property, bit errors in the row redundancy block are spread to at least t r distinct columns in the column redundancy block. In the minimal stall pattern, there are exactly t r erroneous columns in the column redundancy block, each containing ti bit-errors (since the total number of bit errors in the row redundancy block is t r ). Consequently, there must be t r erroneous columns in the information block, each containing at least t + 1 - = t r bit-errors. We add one additional erroneous row, with bit errors in the information block and t r bit errors in the row redundancy block, to complete the minimal stall pattern. The resulting minimal stall pattern contains t r bit errors in the information block and t r 2 bit-errors in the row (or column) redundancy block for a total of triti +tr) = t r (t+l) bit errors. Applying the intersection of valid column sets argument for the number of choices of columns in the stall pattern, we conclude that the error-floor estimates for even t are also given by the above Eq. (7) for BKERFF and BERFF.

We estimate the block and bit error-floors of PFF-SC based on the minimal stall pattern of weight 16, with all 16 bits being information bits. This is the same minimal stall pattern as in the original staircase codes, obtained by choosing t + 1 rows out of M followed by k columns out of M in one block and t + 1 - k columns out of M in the adjacent block, for all k £ [0, 3]. The error-floor estimates for general t are given by

Software simulated block and bit error-probabilities of transmission over a BSC using the codes in the following tables TABLE I

FEED-FORWARD STAIRCASE C ODE PARAMETERS

TABLE II

PARTIAL FE ED-FORWARD S TAIRCA SE CODE PARAMETERS

R OH («) TO t s M P

3/4 33.3 § 3 15 % 1.82 x 10 " 2 1.64 i .38

4/5 25,0 9 3 187 135 1 ,56 x 1CP J 1.25 1.06

5/6 20.0 9 3 1 3 Mi 2 1.30 x J Cr 2 1.07 0.92

13/14 7,69 10 3 123 420 4,80 x 10- 0.73 0.48 shown in Fig. 33, along with their error-floor estimates. All FF-SC were implemented using the above low-error-floor permutations. All PFF-SC were implemented with L = 1.

Both proposed classes of codes show similar performance in the waterfall region. PFF-SC have a slight performance loss at lower rates due to its rate loss, which requires a larger M compared to a FF-SC of the same rate. In the error-floor region, even with low-error-floor permutations, FF-SC have observable error-floors. On the other hand, PFF-SC, due to their similarity to the structure of the original staircase codes, do not exhibit any bit error-floor above a BER of 1(Γ 10 . Estimates of the bit error-floor are orders of magnitude below 1(Γ 15 .

Let h(x) be the binary entropy function and erfc _1 (je) be the inverse complementary error function. Given a code of rate R which achieves an output BER of 10 15 at an input BER οΐρ, we define the NCG gap to capacity (in dB) by

Δ 201og 10 erfc - 1 (2/i- 1 (l - R)) - 20 1og 10 erfc _ 1 (2p) where hT l {x) is the unique 0 < p < 1/2 such that hip) = x. We extrapolate the BER curves of PFF-SC down to 1(Γ 15 in order to estimate p. The corresponding A values are given in Table II. For comparison, we also included the A re f of some reference staircase codes of the same rates, which were found by exhaustively searching over a wide range of parameters m and t and are considered to be the best staircase codes based on the conventional construction. The referenced codes were based on BCH component codes with t E {4, 5} . Nevertheless, the difference in NCG between PFF-SC with t = 3 and the referenced codes are less than 0.26 dB. Error-floors of PFF-SC and the referenced codes are identical and well below 1(Γ 15 .

In this disclosure, we proposed some modifications to staircase codes which allow for convenient termination. In feed- forward staircase codes (FF-SC), a self-protection technique is used to completely eliminate parity-propagation. In partial feed- forward staircase codes (PFF-SC), a propagation-length parameter is used to control the extent of parity-propaga- tion. Analysis and simulation results show that these codes have similar performance as the original staircase codes. FF-SC have slightly better waterfall performance than PFF- SC, while PFF-SC have much lower error-floors. Hence, FF-SC and PFF-SC are good staircase code solutions for applications where parity-propagation is undesirable or termination is necessary.

The description and drawings merely illustrate the principles of the invention. It will thus be appreciated that those skilled in the art will be able to devise various arrangements that, although not explicitly described or shown herein, embody the principles of the invention and are included within its spirit and scope. Furthermore, all examples recited herein are principally intended expressly to be only for pedagogical purposes to aid the reader in understanding the principles of the invention and the concepts contributed by the inventors) to furthering the art, and are to be construed as being without limitation to such specifically recited examples and conditions. Moreover, all statements herein reciting principles, aspects, and examples of the invention, as well as specific examples thereof, are intended to encompass equivalents thereof.

Functional blocks shall be understood as functional blocks comprising circuitry that is adapted for performing a certain function, respectively. Hence, a "means for s.th." may as well be understood as a "means being adapted or suited for s.th.". A means being adapted for performing a certain function does, hence, not imply that such means necessarily is performing said function (at a given time instant). Functions of various elements shown in the figures, including any functional blocks may be provided through the use of dedicated hardware, such as "a processor", "a controller", etc. as well as hardware capable of executing software in association with appropriate software. Moreover, any entity described herein as functional block, may correspond to or be implemented as "one or more modules", "one or more devices", "one or more units", etc. When provided by a processor, the functions may be provided by a single dedicated processor, by a single shared processor, or by a plurality of individual processors, some of which may be shared. Moreover, explicit use of the term "processor" or "controller" should not be construed to refer exclusively to hardware capable of executing software, and may implicitly include, without limitation, Digital Signal Processor (DSP) hardware, network processor, application specific integrated circuit (ASIC), field programmable gate array (FPGA), read only memory (ROM) for storing software, random access memory (RAM), and non- volatile storage. Other hardware, conventional and/or custom, may also be included.

It should be appreciated by those skilled in the art that any block diagrams herein represent conceptual views of illustrative circuitry embodying the principles of the invention. Similarly, it will be appreciated that any flow charts, flow diagrams, state transition diagrams, pseudo code, and the like represent various processes which may be substantially repre- sented in computer readable medium and so executed by a computer or processor, whether or not such computer or processor is explicitly shown.

Furthermore, the following claims are hereby incorporated into the Detailed Description, where each claim may stand on its own as a separate embodiment. While each claim may stand on its own as a separate embodiment, it is to be noted that - although a dependent claim may refer in the claims to a specific combination with one or more other claims - other examples may also include a combination of the dependent claim with the subject matter of each other dependent claim. Such combinations are proposed herein unless it is stated that a specific combination is not intended. Furthermore, it is intended to include also features of a claim to any other independent claim even if this claim is not directly made dependent to the independent claim. It is further to be noted that methods disclosed in the specification or in the claims may be implemented by a device having means for performing each of the respective steps of these methods. Further, it is to be understood that the disclosure of multiple steps or functions disclosed in the specification or claims may not be construed as to be within the specific order. Therefore, the disclosure of multiple steps or functions will not limit these to a particular order unless such steps or functions are not interchangeable for technical reasons. Furthermore, in some examples a single step may include or may be broken into multiple sub steps. Such sub steps may be included and part of the disclosure of this single step unless explicitly excluded.