## 3 Improved Random Puncturing Algorithm Polar Codes  
To break the limitation of the block length of the polar codes, which is restricted to a power of two in practical communication systems, an effective way is puncturing. Let \(\mathbf{p}=(p_{1},p_{2},...,p_{N})\in\{0,1\}^{N}\) denote the _puncturing pattern_, and \(p_{i}=0\) indicate that the \(i\)-th coded bit will be punctured. Ref. [31] has investigated the impact of puncturing on a given information set, and proved that the overall system performance depends on the performance of both the punctured and the unpunctured (mother) code, which are further constrained by a joint optimization of both \(\mathbf{p}\) and \(\{C(N,R_{i},\mathcal{A}_{i})\}|_{i\in\{1,2,...,J\}}\).  
Let \(N_{M}\) and \(R_{M}\) denote the block length and code-rate of the mother polar code, \([N_{M}]_{p}\) and \([R_{M}]_{p}\) denote the block length and code-rate of the punctured polar code, respectively. A punctured polar code with block length \([N_{M}]_{p}\) can be obtained by puncturing \(N_{M}-[N_{M}]_{p}\) bits from a mother code with block length \(N_{M}\), which is equivalent to moving \(N_{M}-[N_{M}]_{p}\) columns and \(N_{M}-[N_{M}]_{p}\) rows from generation matrix \(G_{N}\). In order to ensure that the puncturing matrix is reversible [26], the indices of the moved columns vectors \(i\) are the same as the puncturing positions, and the indices of the puncturing rows vector are \(j=\prod(i)\), where \(\prod(\cdot)\) is the bit-reversal function. Figure 1 shows how to construct a polarizing matrix when \(N_{M}=8,[N_{M}]_{p}=6\). If the puncturing codewords are \(x_{1}\) and \(x_{2}\), then the 1 st, the 2 nd column and the 1 st and the 5 th row should be moved from generation matrix \(G_{8}\).  
Recall the encoding process in Equation (1), it can be rewritten as  
\[x_{1}^{N} = u^{\mathcal{A}}G_{N}(\mathcal{A})+u^{\mathcal{A}^{\mathcal{C}}}G_ {N}(\mathcal{A}^{\mathcal{C}}) \tag{6}\] \[= \sum_{i\in\mathcal{A}}u_{i}\times\mathbf{R}_{i}+\sum_{i\in\mathcal{A} ^{\mathcal{C}}}0\times\mathbf{R}_{i},\]  
where \(u^{\mathcal{A}^{\mathcal{C}}}\) denotes the frozen part of source block \(\mathbf{u}\), \(G_{N}(\mathcal{A})\) is the sub-matrix of \(G_{N}\) formed by the row with indices in \(\mathcal{A}\), and \(G_{N}(\mathcal{A}^{c})\) is defined in the same fashion.  
We can identify from Equation (6) that the random puncturing algorithms allow the chance to puncture some important information bits, which will lead to a block error [38], and the simulation result will be shown in Section 6. On the other hand, the same information set should be used for all punctured codes in a family of RC codes.  
Consider the equivalent puncturing positions \(j=\prod(i)\), if \(i\) is the position of puncturing information bits, then the rows to be moved are \(j\in\mathcal{A}^{c}\), which is equivalent to the columns to be moved are \(j\in\prod(\mathcal{A}^{c})\). Therefore, we can limit the puncturing positions in the set \(\prod(\mathcal{A}^{c})\)[38], and propose an improved random puncturing (IRP) algorithm.  
Let a mother polar code with block length \(N_{M}\) and the code-rate be \(R_{M}\), and the punctured code is with block length \([N_{M}]_{p}\). The IRP algorithm is briefly described as follows:  
**Stage 1**: Initialize the values in a puncturing pattern \(\mathbf{p}\) and set as all ones;  
**Stage 2**: The encoder randomly selects \(N_{M}-[N_{M}]_{p}\) bits in the frozen bits set \(\prod(\mathcal{A}^{c})\) for puncturing, and the corresponding indices in \(\mathbf{p}\) are flipped to zeros.