本篇首先讲述速率匹配的具体过程, 然后讲述速率匹配的具体参数含义. (这里针对的是Turbo编码的速率匹配, 卷积码速率匹配过程较简单, 这里就不说了.)
如协议中速率匹配的原理图, dk是Turbo码的三路输出,分别经过子交织器后,得到三路vk, wk把三路vk串行收集在一起, 经过打孔或重复过程得到物理信道要传输的比特ek.
该过程是基于码块处理的, 多个码块需要多次处理后, 将输出串行级联.
码块大小为3*D, D是一路dk的大小. 子交织器有固定的32列, 行大小:
.
比特收集后的长度:
单个进程单个流的soft buffer大小为:
其中Nsoft代表UE能够处理的数据最大缓存,KMIMO是由流个数决定的参数可为1或2, 剩下的那个最小值是指有多少个HARQ进程, 因为每个HARQ进程都要分相同大小的soft buffer.
其中每一个码块的soft buffer大小为:
这里C为码块个数.
G是根据分配的可用RB资源所能传输的总比特数. E是每个码块进行速率匹配后的输出长度.中间做的一些变换,是为了当G不能被C整除时, 保证每个码块的E都是整数.
比较复杂的是每次从循环buffer Ncb中取数的起点位置K0的确定.
这里rvidx=0,1,2,3.决定了每次取数的起始位置. 假设Ncb=W=96*R, 那么每次的起始位置为2R, 26R, 50R, 74R, 也就是每次偏移1/4的buffer大小. 而第一次为什么2R的系统信息不发送呢, 这是为了提高高码率情况下的解码性能, 具体大家可以搜搜3gpp相关的提案.
最后就是每个码块打孔和重复的过程了:
while (k < E)
// 下面的if条件是判断是否是交织时插入的Null比特, 如果是则跳过, 然后j++; 如果不是Null则输出, 然后k++, 再j++. 其中mod实现了循环buffer.
if
;
k++
end if
j++
end while
好了, 大功告成, 大家看完这篇文章如果还没理解速率匹配过程, 那就是你是否仔细的原因了. 避免浮躁, 慢慢体会协议的用意.