srsLTE - PCFICH 源码解析 02

  接下来我们继续看 pcfich.c 中的 encode 函数。之前我们已经得到了 scrambling 之后的结果,是长度为 32bits 的一个序列,下一步就是对这个序列进行 modulation。根据 TS36.211 6.7.2 的描述,PCFICH 的调制方式只有 QPSK 一种。因此调制的这一步在 srsLTE 中是这样实现的:

srsLTE - PCFICH 源码解析 02_第1张图片

  可以看到 q->mod、q->symbol_table 都是在 encode 函数前的 pcfich_init 函数中进行了初始化:

srsLTE - PCFICH 源码解析 02_第2张图片

  因此在 modulation 之后,32bits 的输入(q -> data)就变成了 16 个符号(q -> d)。接下来就是对这些符号的层映射(layer mapping)和预编码(precoding)了。关于层映射和预编码的原理、意义等等可以在 shareTechNote 或其他资料上查到,这里就不做赘述了。对于 layer mapping 和 precoding 各有三种分类(TS36.212 6.3.3 和 6.3.4):第一类是针对单天线传输的场景、第二类是针对空分复用的场景、第三类是针对传输分集的场景。在几个控制信道(PCFICH, PHICH, PBCH, PDCCH)上都只有对应第一、三类场景。

  我们先从单天线传输的场景看起,这个比较简单,因为协议规定对于单天线传输场景层映射和预编码都是把输入直接映射到输出就可以了:

srsLTE - PCFICH 源码解析 02_第3张图片

  接下来是传输分集的场景,对于这个场景我们先来看层映射:传输分集的层映射很简单,就是有多少层就把 symbols 一一分到这些层上就可以,比如有两层,那么第一层就是 index 为 0,2,4... symbols,第二层就是 index 为 1,3,5... 的symbols;不过注意当 layer = 4 的时候需要考虑 symbols 的个数是否能被 4 整除,否则需要添加两个 null 元素。

srsLTE - PCFICH 源码解析 02_第4张图片

  其实一开始看到这里时我一直是有疑问的:即传输分集本身是不会增加吞吐率的,也就是说 2根天线也好,4根天线也好,不会增加单位时间内传输的 symbols 数目。但是从层映射的结果看(以 2个天线端口为例),一层传输的是偶数 index 的symbols,另一层传输的是奇数 index 的symbols,那么两层同时传输的话不就相当于单位时间内可以直接传输两个 symbols 了么?那为什么还叫传输分集呢?有兴趣的朋友可以想想看,或许这也只是我自己的一个无聊的疑问吧...

你可能感兴趣的:(srsLTE)