A decoder apparatus for use in a communication system for decoding a received code block y to generate a decoded source data block d̂ as an estimate of a source data block d, wherein the received code block y comprises a noisy version of a transmitted code block x, the decoder apparatus comprising: an inner decoder; and an outer decoder, wherein the decoder apparatus is configured to receive the received code block y from an encoder apparatus via a channel in the communication system, the decoder apparatus configured according to a set of parameters N, K, G out, G in,, a, wherein N is a length of the transmitted code block x, K is a length of the source data block d, wherein G out is an outer transform matrix and G in is an inner transform matrix, wherein is a data index set, wherein α is a frozen data block, wherein N and K are integers that satisfy 1 ≤ K < N, wherein the data index set is a subset of {1,2, ···, N} with a size wherein the frozen data block α has a length N - K, wherein the outer transform matrix G out is an N × N upper-triangular Toeplitz matrix defined by a causal impulse response c = ( c 0, c 1, ···, c m), wherein c 0 ≠ 0 and c m ≠ 0, wherein m is an integer satisfying 1 ≤ m ≤ N — 1, wherein the inner transform matrix G in is an N × N lower-triangular polar transform matrix given by a Kronecker power G in = 1 0 1 1 ⊗ n, wherein n = log 2 N, wherein the transmitted code block x is related to the source data block d by a relation x = vG out G in, wherein v is a data container block such that and wherein denotes the part of v corresponding to the coordinates of v whose indices are in, and wherein denotes the part of v corresponding to the coordinates of v whose indices are not in, wherein the inner decoder is configured to receive the received code block y, receive node metric requests from the outer decoder, calculate node metrics in accordance with the inner transform matrix G in, and send calculated node metrics to the outer decoder, wherein the outer decoder is configured to send node metric requests to the inner decoder, receive calculated node metrics from the inner decoder, and calculate a decoded data container block v̂ in accordance with the outer transform matrix G out, the data index set, and the frozen data block a, and wherein the decoder apparatus is further configured to extract the decoded source data block d̂ from the decoded data container block v̂ by setting wherein denotes the part of v̂ corresponding to the coordinates of v̂ whose indices are in, and send the decoded source data block d̂ to a destination in the communication system. an inner decoder; and an outer decoder, wherein the decoder apparatus is configured to receive the received code block y from an encoder apparatus via a channel in the communication system, the decoder apparatus configured according to a set of parameters N, K, G out, G in,, a, wherein N is a length of the transmitted code block x, K is a length of the source data block d, wherein G out is an outer transform matrix and G in is an inner transform matrix, wherein is a data index set, wherein α is a frozen data block, wherein N and K are integers that satisfy 1 ≤ K < N, wherein the data index set is a subset of {1,2, ···, N} with a size wherein the frozen data block α has a length N - K, wherein the outer transform matrix G out is an N × N upper-triangular Toeplitz matrix defined by a causal impulse response c = ( c 0, c 1, ···, c m), wherein c 0 ≠ 0 and c m ≠ 0, wherein m is an integer satisfying 1 ≤ m ≤ N — 1, wherein the inner transform matrix G in is an N × N lower-triangular polar transform matrix given by a Kronecker power G in = 1 0 1 1 ⊗ n, wherein n = log 2 N, wherein the transmitted code block x is related to the source data block d by a relation x = vG out G in, wherein v is a data container block such that and wherein denotes the part of v corresponding to the coordinates of v whose indices are in, and wherein denotes the part of v corresponding to the coordinates of v whose indices are not in, wherein the inner decoder is configured to receive the received code block y, receive node metric requests from the outer decoder, calculate node metrics in accordance with the inner transform matrix G in, and send calculated node metrics to the outer decoder, wherein the outer decoder is configured to send node metric requests to the inner decoder, receive calculated node metrics from the inner decoder, and calculate a decoded data container block v̂ in accordance with the outer transform matrix G out, the data index set, and the frozen data block a, and wherein the decoder apparatus is further configured to extract the decoded source data block d̂ from the decoded data container block v̂ by setting wherein denotes the part of v̂ corresponding to the coordinates of v̂ whose indices are in, and send the decoded source data block d̂ to a destination in the communication system.