4.1. System Model
The transmitter model utilized in our system in shown in
Figure 3, with function blocks representing the LDPC encoder, interleaver (
), puncturing (
), CPM modulator, and a module that allows for the insertion of a known symbol sequence referred to as an attached sync marker (ASM) which helps to identify the beginning of each codeword
at the receiver. LDPC encoding is performed by multiplying source information sequence
of length
k with the (systematic, in the case of the ARTM0 codes) code generator matrix
of size
to form codeword
. The resulting codeword
is interleaved to form the sequence
, on which puncturing is performed. The resulting punctured codeword,
, is concatenated with the ASM to form a frame
which is modulated by the CPM and sent over the communication channel as the sequence of
-ary frames
where
q is the modulation order. Puncturing (
) must be performed at the encoder prior to the concatenation of the interleaved codeword and ASM in order to avoid desynchronization during decoding. For random puncturing, if the puncturing pattern and interleaver are sufficiently random, puncturing may be performed before or after interleaving as the distribution of punctured symbols will remain uniformly distributed in either case, while nonrandom puncturing would be constrained to placement after interleaving.
Efficient LDPC encoding algorithms are suitable for many low-power, memory-constrained applications [
7]. This is true for the ARTM LDPC codes we have used, which have a quasi-cyclic (QC) structure in which the code’s parity check matrix is an array of sparse repeating units called
circulants [
4]. The most commonly implemented decoder for LDPC codes is a special case of a more general BP algorithm used for inference on graphical models, known as the sum-product algorithm (SPA) [
25]. In this paper, we have used SPA decoding because it provides good performance with soft-input soft-output (SISO) functionality. Efficient hardware implementations of such decoders are numerous and widely adopted [
6], including reduced complexity variants such as the min-sum algorithm (MSA) [
7].
The receiver model is shown in
Figure 4. In this diagram, the values passed between blocks are all real-valued vectors, i.e., log-likelihood ratios (LLRs) [
16], that corresponding to the discrete-valued sequence indicated at the input/output of the function blocks. The received sequence
is input to the CPM demodulator corresponding to a CPM word
along with with no initial
a priori information (zero-valued LLRs) on
, the binary interleaved and punctured codeword from the LDPC code. After demodulation of a codeword, it is decoded iteratively in a global loop by a pair of CPM and LDPC decoders, which exchange
a priori information on
through an interleaver
and puncturing block
, identical to those used for encoding, with corresponding blocks for the inverse deinterleaver
and the depuncturer
(explained below). For the first global iteration, the results of the CPM demodulator are permuted and used as soft-valued inputs (channel LLRs) for the local LDPC decoder loop by placing the switch in position A. For subsequent global iterations, the signal flow is altered by placing the switch position in B, with the soft output LLRs of the CPM SISO decoder’s update now serving as
a priori inputs to the LDPC decoder.
LDPC SPA decoding is performed using the code’s parity-check matrix
, a sparse matrix which satisfies the condition
. Sparsity keeps the memory and computational requirements tractable for coding schemes with long block lengths that are needed to obtain capacity-approaching performance. The rows of
represent the parity check conditions of the code while each column represents a codeword symbol. If a one is present in the
k-th column of row
j, code symbol
k is found in parity check equation
. The LDPC decoder performs iterative SPA decoding in the local loop, before passing the output LLRs on
as
a priori information on
to the CPM SISO decoder to start the next global iteration, and so on. We note that in our implementation, the LDPC decoder retains soft values on the punctured symbols within the local loop, this is indicated in
Figure 4 by the signal path
. The process continues until some stopping criteria is reached (such a ceiling on the allowed number of iterations) and the resulting estimated codeword
is passed out of the decoder. Upon completion, hard decisions on
are made to complete decoding, where
is directly accessible since the encoder is systematic.
Puncturing is performed in the global loop between the CPM SISO decoder and the LDPC decoder. The module
removes codeword soft information symbols in accordance with the known puncturing pattern set by the transmitter, resulting in a truncated sequence
, as shown in
Figure 5. The module
intercalates zeros into these same puncturing positions to expand the sequence to its original length before interleaving, in a process referred to as
depuncturing. Since the messages passed in the SPA correspond to LLRs, the zero valued LLRs that are placed into the puncturing positions correspond to a bit being equally likely a one or a zero. Finally, we note that at the receiver (
Figure 4) the puncturing, depuncturing, interleaving, and deinterleaving all operate on real-vauled vectors.
4.2. Random Puncturing Overhead
The code rate,
is the ratio of the number of symbols in the source information sequence,
k, to the number of symbols in the transmitted information sequence,
n, including parity information. As described in
Section 2.2, for a block code of length
n, wherein
p symbols are punctured, we express the amount of puncturing
overhead as the fraction
, or as the percentage,
. Rate adjustments are made by altering the degree of puncturing overhead. Because puncturing operates on the factor in the denominator of the rate expression (
5), the resulting reduction of this quantity increases the code rate. Increasing the code rate results in fewer parity symbols transmitted per unit time, thus increasing throughput or reducing spectrum utilization for any desired target throughput.
For the block code we are implementing, the code rate after puncturing,
, is determined solely by the mother (unpunctured) code rate and puncturing overhead, as given in (
5). Therefore, the amount of overhead required for any desired code rate is
. The codes outlined in [
9] are
systematic LDPC codes, wherein the source information sequence appears unaltered in the encoded sequence, but in general this is not a requirement because no distinction is made between information and parity symbols in our scheme and puncturing is performed after interleaving. These codes exhibit sufficient regularity such that information symbols and parity symbols are equally protected and punctured symbols are therefore not limited to parity bits in our study.