-
HARQ的基本概念、几种类型(Chase Combining,Incremental Redundancy,Partial IR)以及HARQ进程的时序,反馈机制等内容相信大家都很熟悉,但如果仅停留在36.321的层面恐怕还谈不上深入理解HARQ吧。HARQ的发送端buffer内的数据是如何组织的?Redundancy Version如何理解?数据在接收端又是如何合并的?为什么接收端的数据叫Soft Bits,合并叫Soft Combining?这些问题还是要搞个清爽才好。
从Transport Block到Circular Buffer
所谓的Circular Buffer就是一个首尾相连环成一圈的一个数据结构,如同一个贪食蛇(如图1所示)。当数据进入这个缓冲区的时候,如果数据尺寸大于缓冲区尺寸,则新数据会覆盖最先进入缓冲区的那些数据;当从这个缓冲区读取数据的时候,如果读取的尺寸大于缓冲区尺寸,则缓冲区头部的那些数据会被重复读取。发送端HARQ进程使用的buffer就是这样的Circular Buffer。
图1 Circular Buffer
如果从由逻辑信道经过复用映射后得到的传输信道(Transport Channel)上待发送的数据块(Transport Block)开始,我们来看看数据是如何经过各种变化最终进入HARQ进程的发送buffer吧。 TB先要加一个24bits的CRC,然后TB被分为为合适大小的Code Block,Code Block的尺寸要看接收端soft buffer的大小吧。分段后的Code Block同样加上24bits CRC进入信道编码。
LTE中大部分信道使用的都是编码速率为1/3的turbo编码,turbo编码的原理暂时不需要理会,我们只用知道经过turbo编码后会得到3个数据流,每个数据流的长度跟code block长度差不多。其中第一个数据流是信息比特流(Information bits,也叫系统比特Systematic Bits);第二个和第三个数据流都是校验比特流(parity bits,也叫冗余比特redundancy bits)。如下图所示。一般信息比特会在HARQ首传中传送,然后在重传中发送冗余比特,仅有冗余比特是不能自解码的,所以接收端必须把重传的冗余比特与首传的信息比特合并解码,这也就是type II的Incremental Redundancy方式。
图2 Turbo Coder
上面三路数据流再各自用一个Nrow×32的矩阵交织一下,简单地说就是按矩阵的行填入数据,按一定pattern打乱后再按矩阵的列顺序依次把数据读出来。那么现在各路数据长度从交织前的K变成了Nrow×32,如果K比Nrow×32小怎么办,没关系,在矩阵的最前面填入相应个数的NULL bit。交织矩阵的列数固定为32,行数是可变的。不同的矩阵大小得到的输出数据流长度不同,这也是个速率匹配的过程。
按我的理解在交织前应该还有一个数据打孔(puncturing)过程,当信道质量好能够适应高编码速率传输的话,我们可以把一些冗余比特puncture掉,从而提高编码速率。或者相反如果信道质量特别差需要降低编码速率的话,可以重复一些冗余比特(repetition)。但这个打孔过程在36.212里并未提及,可能是系统实现相关吧。
交织完的三路比特流按[X0,X1,…,Xk-1,P10,P11,…,P1k-1,P20,P21,…,P2k-1]的顺序放入HARQ发送端的circular buffer,得到如图3的一个待发送缓冲区。
图3 HARQ Circular Buffer







