(1) Initialization: Set $$P(s_k\vert s_{k-1}) = 1/M_{\mathrm{cpm}}$$ for every possible state transition, to evaluate the transition probabilities $$\gamma _k(s_{k-1},s_k)$$ in (19)
(2) Soft detection and demapping: Perform the BCJR algorithm described in Sect. 4.2, compute the a posteriori probabilities in (23) based on the adopted bit mapping and evaluate the extrinsic LLR sequence corresponding to $$\lambda _{{\mathrm{ext}}}(d_q)$$ for all $$q \in \{1,\ldots ,m\}$$
(3) Deinterleaving: Permute the LLR sequence $$[\lambda _{{\mathrm{ext}}}(d_1),\ldots ,\lambda _{{\mathrm{ext}}}(d_m)]$$ into $$[\lambda _{a}(c_1),\ldots ,\lambda _{a}(c_m)]$$
(4) Soft decoding: Use the SISO decoder to compute the soft information $$\lambda (b_r)$$ and feedback the extrinsic soft information $$\lambda _{{\mathrm{ext}}}(c_q)$$ for all $$q \in \{1,\ldots ,m\}$$
(5) Termination: verify the stop condition, i.e., whether the number of iterations has been achieved. If so, the bit estimations $$\hat{b}_r$$ are computed for all $$r \in \{1,\ldots ,m \cdot R \}$$, vide (32)
(6) Interleaving: Permute the extrinsic soft information sequence $$[\lambda _{{\mathrm{ext}}}(c_1),\ldots ,\lambda _{{\mathrm{ext}}}(c_m)]$$ into $$[\lambda _{a}(d_1),\ldots ,\lambda _{a}(d_m)]$$
(7) Soft mapping: compute new values of $$P(s_k\vert s_{k-1})$$ based on the soft mapping in (30) and update values for $$\gamma _k(s_{k-1},s_k)$$ 