【零基础学会LTE】【6】LTE 36.212 HARQ/RI/CQI信道编码模块
Posted on 2012-09-03 17:03 xlw1219 阅读(3035) 评论(1) 编辑 收藏 举报//本文均属原创,转载请注明出处。
//本课程以36.212 v10.4.0为教材,请自行到3GPP网站下载。下载地址为http://www.3gpp.org/ftp/Specs/archive/36_series/
//由于保密的原因,暂不提供代码查看。
模块作用:控制比特信道编码。
相关模块:RI,HARQ,CQI
模块优缺点:
适用范围:PUSCH/
对应章节:5.2.2.6
HARQ反馈的ACK/NACK信息和RI信息的信道编码,在进行编码之前,首先要确定每个层上调制后的符号数Q',原文如下:
When the UE transmits HARQ-ACK bits or rank indicator bits, it shall determine the number of coded modulation symbols per layer Q' for HARQ-ACK or rank indicator as follows.
当只有一个TB的时候,Q'是这样求的:
其中,
O - is the number of HARQ-ACK bits or rank indicator bits,HARQ-ACK/RI信道编码前的比特数,即输入比特数。
M_pusch_sc - is the scheduled bandwidth for PUSCH transmission in the current sub-frame for the transport block, expressed as a number of subcarriers in 36.211,表示这个TB这个子帧的子载波数目,这个值由MCS确定的。 4*M_pusch_sc表示ACK/RI控制信息占用一个子帧带宽上的四个symb。详细可以参见参考文献【1】305页那个图。
N_PUSCH-initial_symb - is the number of SC-FDMA symbols per subframe for initial PUSCH transmission for the same transport block,表示这个传输块初次传输PUSCH的时候每个子帧的symb数。标准中有个公式是求这个参数的,公式的意思就是减去DMRS后的symb数再减去srs占用的symb数就是我们需要的symb数。初次传输什么意思?我也不理解。
M_PUSCH-initial_sc - 表示这个传输块初次传输PUSCH的时候每个symb上的子载波数。与上个参数相乘,得到初次传输PUSCH所包含的调制符号的总数,即RE数。
分母 - 这个很好理解,C是分块数,kr是块长度,整个分母表示TB加上了CRC和填充比特F后的长度
N_PUSCH-initial_symb*M_PUSCH-initial_sc/分母 - 调制后的符号总数/所有的比特数,这个数值其实就是编码率。有些时候我们把编码率=信息比特数/(信息比特数+校验比特数),这里显然不是,分母没问题,分子一个是比特数一个是调之后的符号总数。
β_PUSCH_offset - 指的是ACK/RI控制信息相对于编码率的偏移量,显然,控制信息可以拥有不同的码率。可以在213中找到这个表。
当有两个个TB的时候,Q'是这样求的:
Q'_min - 见标准24页。
Q‘_temp - 除去O*β,剩下的分子/分母应该也是表示两个码字的码率,但是为什么这么求,我还没有理解。
调制后的符号数Q'求出以后,根据Q = Q'*Qm就可以得出信道编码后的比特数。
ACK信息的信道编码:
1)确定O的大小,一个码字1bit,两个码字2bits。
2)确定映射关系,ack = 1,NACK = 0;
3)信道编码:
当O≤2时:
采用先块编码再调制星座点限制的方式,其中一个比特的o块编码为[o],两个比特的o块编码为[o0,o1,o2].
然后进行星座点限制,加入占位符x,y。
对于一个比特的o,由于块编码后还是一个比特,所以调制后只占一个调制符号;以qpsk为例,占符号[o,y]
对于两个比特的o,由于块编码后是三个比特,所以调制后占三个调制符号。以16QAM为例,占符号[o0,o1,x,x],[o2,o0,x,x],[o1,o2,x,x]
信道编码表见标准25页。
关于占位符x和y,在36.211中的scramble模块给予了解释,x=1,y=前一个值。关于加扰模块会在加扰模块中详细解释。
加扰确实能保证调制后的符号在欧式距离最大的点上。
欧式距离是什么:参见http://baike.baidu.com/view/1615257.htm
星座点的排列原则:参见
块编码以后的序列级联为长度Q的输出,最后一个块有可能要打掉几个比特。标准上说是所有的块编码后的序列级联?哪有这么多块编码?
当3≤O≤11时(由于一个用户只能有两个码字,ACK/NACK信息只有两个bit,超过两个bit,标准的解释是“as a result of the aggregation of HARQ-ACK bits corresponding to one or more DL cells with which the UE is configured by higher layers”):
采用RM码为基础的(32,O)块编码方案,得到的32长度序列循环重复得到长度为Q的输出序列。RM码在后面叙述。
当11<O≤20时:
编码方案和上面的类似,但是把序列对半分为了两部分,编码后分别得到长度为32的两个序列,最后重复的时候也是把Q对半分为两部分循环重复填充,即前半部分Q对应前半部分O得到的32长度序列循环填充,后半部分Q对应后半部分O得到的32长度序列循环填充。
4)最后,编码后长度为Q的序列要写成数组形式:
即 { q0 q1 ... qQm-1
qQm qQm ... q2*Qm-1
... ... .... }
数组的行数为NL,列数为Qm。总共有 k = Q/(NL*Qm)个这样的数组。
这样做的目的很明显,每一行Qm个数据正好调至为一个调之后的符号,然后每一行可以分配到一个层上。这样每层就有k个调之后的ACK数据。
RI信息的信道编码:
1)确定O的大小,通过标准的表Tables 5.2.2.6.1-2, 5.2.2.6.2-3, 5.2.2.6.3-3, 5.2.3.3.1-3, 5.2.3.3.1-3A, 5.2.3.3.2-4, and 5.2.3.3.2-4A
2)确定映射关系,可以通过表Table 5.2.2.6-5、Table 5.2.2.6-6、Table 5.2.2.6-7确定映射关系,当通过Table 5.2.2.6-7确定映射关系时,O2已经确定了。不需要通过O1和O2求了。
3)信道编码:与ACK完全相同。
4)长度为Q的序列要写成数组形式:与ACK完全相同。
CQI/PMI信道编码:
1)确定Q的大小:
首先确定Q'大小:
L - is the number of CRC bits,当O≤11,L=0;其他,L=8;
MPUSCHsc*NPUSCHsymb - 指的是用户所占有的除了DMRS和SRS(体现在NPUSCHsymb这个参数,计算公式见标准32页)后的所有RE,因为CQI在RE上是由上到下横向排列的。还要减去QRI所占的RE,为什么不要减去ACK所占用的RE呢?因为ACK在映射RE的时候是直接覆盖数据占用的RE的,所以不单独占用RE。依旧可以参见参考文献【1】305页那个图。
其余参数的意思和求ACK/RI一样的,就不再解释了。由此确定Q=NL*Q'*Qm。为什么要乘以NL?还要好好理解。
2)确定O的大小:根据不同的工作模式,有不同的O的长度:
When PUCCH-based reporting format is used, the number of CQI/PMI bits is defined in section 5.2.3.3.1 for wideband reports and in section 5.2.3.3.2 for UE selected subbands reports. When PUSCH-based reporting format is used, the number of CQI/PMI bits is defined in section 5.2.2.6.1 for wideband reports, in section 5.2.2.6.2 for higher layer configured subbands reports and in section 5.2.2.6.3 for UE selected subbands reports.
3)信道编码:
当O≤11时:
将采用RM码为基础的(32,O)编码,编码公式见标准37页,O为输入长度,32为输出长度,完成编码后简单重复就是长度为NL*Q的输出序列。
当O>11时:采用
输入比特O,进行CRC添加(8bits);
CRC输出比特作为输入比特进入咬尾卷积信道编码;
咬尾卷积信道编码输出作为输入进入速率匹配器,输出长度为NL*Q的输出序列。
以上编码算法
以下解码算法