1)TB添加CRC校验
输入参数:
\[{a_0},{a_1},{a_2},{a_3},...,{a_{A - 1}}\]
输出参数:
\[_0{D^{A + 23}} + {a_1}{D^{A + 22}} + ... + {a_{A - 1}}{D^{24}} + {p_0}{D^{23}} + {p_1}{D^{22}} + ... + {p_{22}}{D^1} + {p_{23}}\]
2)码块分段及CRC添加
2.1)确定码块数量C:
\[\begin{array}{l}
if\;B \le Z\\
\;\;\;L = 0;\\
\;\;\;number\;of\;code\;blocks:\;C = 1;\\
\;\;\;B' = B;\\
else\\
\;\;\;L = 24;\\
\;\;\;number\;of\;code\;blocks:C = \left\lceil {B/\left( {Z - L} \right)} \right\rceil ;\\
\;\;\;B' = B + C \cdot L;\\
end\;if;
\end{array}\]
代码为:
<span style="font-size:18px;">if B<=Z
L = 0;
C = 1;
B_p = B;
else
L = 24;
C = ceil(B/(Z-L));
B_p = B + C*L;
end</span>
2.2)确定每个码块的长度(前C-码块长K- ,后C+码块长K+)
码块长度需要满足如下两个条件:
K+=minimum K in table below such CK>B'
K- =maximum K in table below such K<K+
因此有,
\[{\Delta _K} = {K_ + } - {K_ - }\]
\[{C_ - } = \left\lfloor {\frac{
{C \cdot {K_ + } - B'}}{
{
{\Delta _K}}}} \right\rfloor \]
\[{C_ + } = C - {C_ - }\]
此时,需要填充的比特数为:
\[F = {C_ + } \cdot {K_ + } + {C_ - } \cdot {K_ - } - B'\]
代码片段为:
a)计算K+在表内的index
<span style="font-size:18px;">avg_code_block_size = (B_p/C);
index_number = avg_code_block_size/8 - 4;
if index_number > 60 && index_number <= 124
real_index = avg_code_block_size/16 + 28;
elseif index_number > 124 && index_number <= 252
real_index = avg_code_block_size/32 + 60;
elseif index_number > 252
real_index = avg_code_block_size/64 + 92;
else
real_index = index_number;
end</span>
b)计算K+和K-
<span style="font-size:18px;">K_plus = LTE_params.turbo_interleaver_table(ceil(real_index),1);
if C==1
K_minus = 0;
else
K_minus = LTE_params.turbo_interleaver_table(ceil(real_index)-1,1);
end</span>
c)计算两中块长对应的数量
<span style="font-size:18px;">if C==1
C_plus = 1;
K_minus = 0;
C_minus = 0;
else
diff_K = K_plus - K_minus;
C_minus = floor((C*K_plus-B_p)/diff_K);
C_plus = C - C_minus;
end</span>
d)计算需要填充的比特数
<span style="font-size:18px;">F = C_plus*K_plus + C_minus*K_minus - B_p;
</span>
输入参数:
\[{b_0},{b_1},{b_2},{b_3},...,{b_{B - 1}}\]
输出参数: