This model is used to implement rate match defined in 5.1.4 in Reference 2 for LTE physical uplink shared channel(PUSCH).
Each firing, Ndata Output tokens are generated while ((TransBlockSize + number of padding bits) * 3 + code block number * 12) Input tokens consumed. Ndata is specified by user.
The process of bit separation, sub-block interleaving, circular buffer rate match with specific RV value and bit collection.
The rate matching for PUSCH is defined per coded block and consists of separating and interleaving the three information bit streams, si, p1i, and p2i, followed by the collection of bits and the generation of a circular buffer as depicted in the following figure. The output bits are transmitted sequentially from sequence zi as described in Turbo coder with the starting point defined according to the redundancy version. Rate Matching for PUSCH
Bit Separation
The bits input to the rate matching are denoted by c 0, c 1, c E-1, where E is the number of bits input to the rate matching block. Note that E is a multiple of 3. The bits after separation are denoted by s 0, s 1, s 2, ,..., s K'-1, p1 0, p1 1, p1 2, p1 K'-1, and p2 0, p2 1, p2 2, p2 K'-1, where K' is the number of bits in each separated bit sequence. The relation between the input sequence and the output sequences is given below.
sk=ck , k=0,1,2,...,K'-1 K'=E/3
p1k=ck , k=0,1,2,...,K'-1 K'=E/3
p2k=ck , k=0,1,2,...,K'-1 K'=E/3
Sub-block interleaver
The sub-block interleaving is a block interleaver and consists of bits input to a matrix with padding, the inter-column permutation for the matrix and bits output from the matrix. The bits input to the block interleaver are denoted by u 0, u 1, u 2,...,u K'-1, where K' is the number of bits. The output bit sequence from the block interleaver is derived as follows:
Assign C = 32 to be the number of columns of the matrix. The columns of the matrix are numbered 0, 1, 2, ..., C - 1 from left to right.
Determine the number of rows of the matrix, R, by finding minimum integer R such that:
The rows of rectangular matrix are numbered 0, 1, 2,..., R - 1 from top to bottom.
If , then dummy bits are padded such that yk = <NULL> for k = 0, 1,...,ND - 1. Then, write the input bit sequence, i.e., yND+k =uk, k = 0, 1,..., K'-1, into the
matrix row by row starting with bit y 0 in column 0 of row 0:
For s i and p1 i:
Perform the inter-column permutation for the matrix based on the pattern that is shown in Inter-column permutation pattern for sub-block interleaver, where P(j) is the original column position of the j-th permuted column. After permutation of the columns, the inter-colum permuted matrix is equal to
The output of the block interleaver is the bit sequence read out column by column from the inter-column permuted matrix. The bits after sub-block interleaving are denoted by v 0, v 1, v 2,..., v K'-1, where v0 corresponds to yP(0), v1 to yP(0)+C,... and K'' = .
For p2 i:
The output of the sub-block interleaver is denoted by v 0, v 1, v 2,..., v K''-1, where vi= yP(i) and where
The permutation function P is defined in following table.
Inter-column permutation pattern for sub-block interleaver
Bit collection
The circular buffer of length Kz = 3K'' for the r-th coded block is generated as follows:
z i = s'i for i = 0,..., K''-1
zK''+2i = p1'i for i = 0,..., K'' -1
zK''+2i+1 = p2'i for i = 0,..., K'' -1
Denoting by the rate matching output sequence length for this coded block, and rvidx the redundancy version number for this transmission, the rate matching output bit sequence is z'i , i = 0,1,..., Krm-1.