# Improving Polar-Coded SCMA System by Information Coupling and Parity Check
## 4 Joint Iterative Detection and SCL Decoding Receiver
### Update Variable Nodes of MPA Decoder  
The variable nodes update their information when they receive the prior information \(P\left(s_{v}^{l}\right)\), and then pass it to the neighboring function nodes. After this processing, the iteration between the MPA detector and coupled polar decoder is complete. The message can be updated by  
\[M_{q_{j}\to g_{j}}\left(s_{v}^{l}\right)=P\left(s_{v}^{l}\right)\cdot \prod_{t\in\left\{\mathbf{Q}_{j}\setminus i\right\}}M_{g_{t}\to q_{j}} \left(s_{t}^{l}\right). \tag{21}\]  
Figure 8: The flowchart of hybrid construction algorithm.  
Although the coupled polar decoding provides better performance than SCAN algorithm, it also increases the complexity of decoding. For base polar code, the complexity of the SCL decoder is \(\mathcal{O}\big{(}L_{0}N_{m}\log_{2}(N_{m})\big{)}\), where \(N_{m}\) is the mother code length. Obviously, the complexity is proportional to the list size \(L_{0}\). Thus, the basic idea of reducing complexity is to keep the list size of each user's decoder as small as possible. We note that, in fact, when the channel conditions are good, the SCL decoder can decode correctly with a smaller list size. Therefore, a smaller list size \(L_{\min}\) is given to each CB at the beginning of the iteration and is maintained in subsequent iterations if it is decoded correctly. In other words, only those CBs that fail to decode increase the list size of the decoder in the next iteration. When all users decode correctly, the iterative processing is terminated. Additionally, a maximum list size \(L_{\max}\) is given to avoid excessive complexity. The list size \(L_{v,k}\) of error CBs can be modified by  
\[L_{v,k}=\min\big{(}L_{\max},2L_{v,k}\big{)}. \tag{22}\]  
Thus, we summarize the JIDS algorithm for PIC polar-coded SCMA system as Algorithm 3.  
```
1:Signal \(\big{\{}y_{1},\dots,y_{l},\dots,y_{L}\big{\}}\) from the channel, maximum number of iterations \(I_{\max}\), windowed size \(L_{\infty}\), list size \(L_{\min}\) and \(L_{\max}\).
2:The decoding decision \(\boldsymbol{\hat{U}}=\{\boldsymbol{\hat{u}}_{1},\boldsymbol{\hat{u}}_{2}, \cdots,\boldsymbol{\hat{u}}_{V}\}\).
3:Initialize: \(M_{q,q\to g_{i}}=1/M\) and \(L_{v,k}=L_{\min}\), \(1\leq v\leq V\), \(1\leq k\leq L_{c}\).
4:for\(iter\_num=1\to l_{\max}\)do
5:for\(l=1\to L\)do //Update the function nods
6:for\(v=1\to V\)do
7:Calculate the extrinsic messages \(L_{v,\text{MPA}}^{v}\) by (4) to (6).
8:endfor
9:endfor
10:for\(v=1\to V\)do //Update the Priori Information
11: De-interleave the \(L_{v,\text{MPA}}^{v}\) to \(z_{v}\), and input to the coupled polar decoder.
12: Run the decoder, calculate the extrinsic messages \(L_{v}^{v}\) by HC algorithm.
13:for\(k=1\to L_{c}\)do
14:if CRC check fails then
15: Modify the list size by (22).
16:endif
17:endfor
18:Interleave the \(L_{c}^{v}\) to \(L_{a}^{v}\).
19:endfor
20:for\(l=1\to L\)do
21:for\(v=1\to V\)do
22:Transform the priori information \(L_{a}^{v}\) into the probability domain by (20).
23: Update the information of variable nodes by (21).
24:endfor
25:endfor
26:If all users decode correctly, exit the iteration.
27:endfor
```  
**Algorithm 3** Joint iterative detection and SCL decoding