NR物理层流程总结——PDSCH

说明:

最近终于把NR物理层的数据传输流程整理好了,分享给大家!我还是先铺垫一些基础的知识,方便大家理解!但同时这篇文章对于刚刚接触NR 物理层的朋友读起来可能比较困难,因为中间涉及的小的环节可能还没有概念,大家可以采用搜索学习法,同时我也会加快更新NR物理层分模块的讲解!

一 TB大小计算总结

TB从MAC层传输过来的传输块。参考链接:


相关理论

香农定理:
Rmax=W*log2(1+S/N),给定带宽和SNR,传输速率是固定的。在NR中,固定的SNR,对应了某个调制的参数和某个码率,用MCS指示。

每个re能承载的速率=30KHz*调制系数*码率/一个symbol的时间。

频谱效率就是单位带宽下,能够传输的bit数。

TB的计算方法(理论)

MCS和码率由下面的表格来确定。

具体的计算方法:

下面举例来说明上图的计算过程:

下面有应用的PRB的计算方法,可以参考下图:

以上称为中间信息的比特个数。

下面做的工作主要是:最终的TBS根据Ninfo量化获得,需要满足字节对齐且为码块个数的整数倍

此外,NR的TBS设计保证了TB进行分段后不需要进行补零。

NR对较小较大的中间信息比特个数采用了不同的量化方式,因为基于公式计算的量化方式应用于较小的中间信息比特个数时会导致调度灵活性变差

若Ninfo≤3824,则对Ninfo进一步量化后查表确定最终的TBS;若Ninfo>3824,则对Ninfo进一步量化后计算确定最终的TBS。


(1) 对于Ninfo≤3824的情况:

再根据查表,选择表格中不小于的最接近的值作为最终的TBS[9],具体表格可参见TS 38.214协议中的表5.1.3.2-1:

(2) 对于Ninfo>3824的情况:


round()为四舍五入操作。进一步地,对按照码块个数、最大码块大小量化确定最终的TBS。当TBS超过最大码块长度时:

该量化公式保证了量化后的TBS为字节对齐且为码块个数的整数倍

1)当码率R≤1/4或者码率R≤1/4且Ninfo'>8424时,码块个数大于1。

对于码率R≤1/4的情况,LDPC信道编码采用base graph 2,码块的最大长度为3840,考虑到信道编码过程中每个码块会添加24bit的码块CRC,因此,码块个数:


2)对于码率R>1/4Ninfo'>8424的情况,LDPC信道编码采用base graph 1,码块的最大长度为8448,因此,码块个数为:


3) 当码块的当码块个数等于1,即R>1/4且Ninfo'≤8424时,


上面的描述总结起来,就是下面的内容:

计算TB的理论公式

TB的计算工具:

参考链接:


TB的计算方法(matlab代码)

下面的代码完全按照上图的公式编写,其中返回参数tbs为实际tb的大小,coded_tbs为速率匹配后tb的大小。
% Determines transport block size (TBS) based on precedure given by 
% 3GPP 38.214 sec. 5.1.3.2.
%
% Arguments:
%  N_sh_symb  - number of symbols allocated within the slot
%  N_PRB_DMRS - number of REs reserved for DM-RS per PRB 
%  n_PRB      - number of scheduled PRB
%  I_mcs      - MCS index
%  N_layers   - number of layers
%  mcs_tbl    - index of MCS table (1 - 64-QAM, 2 - 256-QAM)
%
% Returns:
%  tbs        - determined transport block size in bits
%  coded_tbs  - number of bits after encoding


function [tbs, coded_tbs] = nr_transport_block_size(N_sh_symb, N_PRB_DMRS, n_PRB, I_mcs, N_layers, mcs_tbl)
  if nargin < 6
    mcs_tbl = 1;
  end

  % overhead configured by higher layer parameter Xoh-PDSCH - assume to be disabled
  N_PRB_oh = 0;

  % determine the number of REs (NRE) within the slot. 
  Np_RE = 12 * N_sh_symb - N_PRB_DMRS - N_PRB_oh;

  % determine the quantized number of REs allocated for PDSCH within a PRB
  if Np_RE <= 9
    Ndp_RE = 6;
  elseif Np_RE <= 15
    Ndp_RE = 12;
  elseif Np_RE <= 30
    Ndp_RE = 18;
  elseif Np_RE <= 57
    Ndp_RE = 42;
  elseif Np_RE <= 90
    Ndp_RE = 72;
  elseif Np_RE <= 126
    Ndp_RE = 108;
  elseif Np_RE <= 150
    Ndp_RE = 144;
  else
    Ndp_RE = 156;
  end

  % determine the total number of REs allocated for PDSCH 
  N_RE = Ndp_RE * n_PRB;

  % Intermediate number of information bits
  [Q_m, R] = nr_resolve_mcs(I_mcs, mcs_tbl);
  N_info = N_RE * R * Q_m * N_layers;

  coded_tbs = N_sh_symb * n_PRB * Q_m * N_layers * (12 - N_PRB_DMRS - N_PRB_oh);

  if (N_info <= 3824)
    % quantized intermediate number of information bits
    n = max(3, floor(log2(N_info)) - 6);
    Np_info = max(24, 2^n * floor(N_info / 2^n));

    % use Table 5.1.3.2-2 find the closest TBS that is not less than Np_info
    tbl_5_1_3_2_2 = [24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152, 160, 168, 176, 184, 192, 208, 224, 240, 256, 272, 288, 304, 320, 336, 352, 368, 384, 408, 432, 456, 480, 504, 528, 552, 576, 608, 640, 672, 704, 736, 768, 808, 848, 888, 928, 984, 1032, 1064, 1128, 1160, 1192, 1224, 1256, 1288, 1320, 1352, 1416, 1480, 1544, 1608, 1672, 1736, 1800, 1864, 1928, 2024, 2088, 2152, 2216, 2280, 2408, 2472, 2536, 2600, 2664, 2728, 2792, 2856, 2976, 3104, 3240, 3368, 3496, 3624, 3752, 3824];
    for t = tbl_5_1_3_2_2
      if t >= Np_info
        tbs = t;
        break;
      end
    end
  else
    % quantized intermediate number of information bits 
    n = floor(log2(N_info - 24)) - 5;
    Np_info = 2^n * round((N_info - 24) / 2^n);

    if R <= 0.25
      C = ceil((Np_info + 24) / 3816);
    elseif Np_info > 8424
      C = ceil((Np_info + 24) / 8424);
    else
      C = 1;
    end

    tbs = 8 * C * ceil((Np_info + 24) / (8 * C)) - 24;
  end
end


二 NR物理层流程总结

参考网址:


1. TB加CRC

从MAC层传输到物理层的TB大小用A表示,CRC的长度用L来表示(L的长度分别为16和24)。

加CRC后的TB大小为B=A+L

2. 基图选择

由两个参数决定:

TB的长度B、码率R


3. 码块分割和CRC附着

下面的TB+CRC的长度为B

从上图可以看出,先进行码块分割,每个码块再加CRC。

(1) 确定BG1和BG2可以承载的最大码块(Kcb来表示)

这里的Kcb是码块分割后加CRC的最大码块长度
For LDPC base graph type 1 : Kcb = 8448

For LDPC base graph type 2 : Kcb = 3840

(2) 确定码块的数量(C来表示)

if B(Transport block size) < Kcb(Max Codeblock size)
L = 0
C (number of codeblocks) = 1
B' = B // this mean 'No Segmentation'.
else
L = 24
C = Ceiling(B/(Kcb - L))
B' = B + C * L
B'代TB块分割后,每个码块加CRC后,数据的总长度。

note:这里有个很有趣的问题,如果TB的大小是9000,我们取BG1,Kcb=8448,剩下的全都补零操作,这样是不是不太合适?其实并不是这个样子。

在码块分割这里还有一个码块组的概念,码块组的设定的目的是减少TB的重传,当码块组出问题直接重传码块组,不需要重传CB。重组方法为:先分割CB,再进行CBG的组合,CBG的大小由高层指示。


(3)确定码块中的比特数(K'来表示)

K'(the number of bits in each code block) = B'/C


(4) 确定BG的Kb大小(Kb来表示)

For LDPC base graph type 1
Kb = 22
For LDPC base graph type 2
if B (Transport blocksize) > 640
Kb = 10
else if B (Transport blocksize) > 560
Kb = 9
else if B (Transport blocksize) > 192
Kb = 8
else
Kb = 6


(5) 确定BG的Kb大小(Kb来表示)

找出提升因子(扩展因子的最小值)


(6) 找出Zc(Zc来表示)

(Kb * Zc) >= K'
Zc>=K'/Kb(取整)


(7)计算出待编码的比特数(K来表示)

set K = 22 Zc for LDPC base graph 1
K = 10 Zc for LDPC base graph 2


(8) 执行分割,加CRC


4. 信道编码

按照目前来看,输入编码器的信息包括:
Zc/iLS & BG

  1. 找出Zc、确定iLS
  2. 确定BG
  3. 根据BG和iLS,找出基图(见下图)
  4. 根据Zc和找出的基图确定校验矩阵H

Kb(这个其实无所谓,输不输入编码器都可以)
CB:K=Kb*Zc


5. 速率匹配

速率匹配的含义:

速率匹配(Rate Matching)是包括NR在内的很多数字通信系统,用于将编码后比特数实际可供传输资源数量对齐,而广泛采用的数字域处理过程。
NR的速率匹配中主要包括比特选择比特交织两个步骤。比特交织为了对抗信道的衰落进行编码后数据的调换,并不涉及数据量的改变。

为什么会不匹配?

(1) 根据TS 38.212,发端信道编码后会生成超量的校验比特用于可能的HARQ重传。

(2) 以下行接收为例,终端需要根据DCI调度信息,得知即将接收的物理层传输块TB的码率、调制阶数、传输层数以及物理资源分配情况等信息,并以此来确定此次传输的实际负载(TB Size,亦称payload)。


根据TS 38.214,上述计算,首先需要确定被调度的slot中,每个PRB可用的RE数量,其计算公式粘贴如下:



在实际传输中,可能存在更多的RE,也是不能被传输PDSCH数据的,根据TS 38.211,这些RE包括 PT-RS、NZP/ZP CSI-RS、以及其他高层配置的不用于PDSCH传输的资源。

上述两种情况,都会导致每次传输,由实际资源数所决定的可用的比特数小于编码比特数量。需要在传输之前将无法传输的bit扣除,以“匹配”实际资源。

怎么进行匹配?

发端通过将TB进行加CRC校验、码块分割以及各码块的信道编码之后,产生了C个编码后包含超量校验比特位的码块。当确定上述几个过程后,此时发端根据实际可传的比特数G(后面的码块级联也需要用到的参数),决定每个码块可用的bit数,其原则如下公式所示,就是平均分配(在38.212中公式如下):


其中NL是传输层数 Qm是调制阶数、C‘是可用的码块数、Er是最后确定的每个码块的bit数。
速率匹配采用缓冲器的形式(Redundancy Version,RV),NR采用的模型是:


以Zc作为最小的调度单位,BG1和BG2位置分别是:



编码块中除了内置打孔比特外,其他比特顺序填入循环缓冲器,根据指示的RV确定起始传输位置,顺序发送编码比特,并跳过其中的填充比特。当发送到缓冲器末尾时,自动跳到信息比特起始位置继续发送,即循环重复。性能仿真结果表明,如果基站不进行显式指示,RV顺序采用{0,2,3,1}时BLER性能最好。

速率匹配后的影响是什么?

进行速率匹配不影响信息比特的传输,只有校验位会收到影响。因此,速率匹配之后,实际的码率,会与MCS的目标码率不同。
所以当一个时隙中还有其它参考信号,存在其它高层配置时,实际的码率会提升,使传输的可靠性降低,为了避免上述可靠性的降低,有效的方法是当确知码率会被抬升之前,高层配置适当地降低payload,以平衡实际码率。
具体速率匹配还有其它功能:参见


6. 码块级联

上面的6个过程,可以概括为是从TB到CB的过程。


7. 加扰

加扰的公式


其中,b为CB序列,c为扰码序列,是由c_init为初始值产生的伪随机序列。不同信道的初始值如下:


加扰的过程


参考链接:


8. 调制


9. 层映射

下面参考了网上一些文章,逐步了解层映射的过程:

MIMO技术:

使用多根天线,在发送端和接收端的物理空间中,使用相同频率的高频载波,构建多个相互不干扰的、空间正交的、物理无线信道,同时在收发双方的物理层之间,构建多个并行的逻辑无线信道,通过这些逻辑无线信道和物理无线信道来发送经过OFDM调制的多个数据流。目的是:增加系统的用户容量、或增加单用户的最大速率、或提升单用户的抗干扰的能力。

从而达到:在不增加频谱带宽的情况下,利用较大间距的天线阵列的阵元之间或波束之间的不相关性,为单用户提供多个不同的数据流,提高链路的容量和单用户的峰值速率。

或者说,MIMO要解决的是:在单个子载波上,能够复用和承载“多层”的数据,或者说在单个子载波上,通过幅度来“调制”多层的数据,可以认为是一种“幅度“复用或调制”的技术,它介于QAM调制与OFDM之间。


每一个传输通道,就像空间中的一层,多个同频的传输通道,就构建了多层传输通道。一层的传输通道,至少借助1个物理天线进行进行传输。比如4*4MIMO, 就有4层,至少需要4个天线,每1个天线构建1个空间中的“层”。
也可以通过8根天线,构建4个层,每2个天线构建1个空间中的“层”。层与层之间正交的,因此可以通过积分的方式进行分离。

空分复用技术,利用天线和传输矩阵构建少量的“层”。

与MIMO相似的几种类型:

1. 接收分集MISO(多输入单输出):冗余接收

2. 发送分集SIMO(单输入多输出):冗余发送

3. 波束赋型SIMO(单输入多输出):汇聚发送

4. 空间复用与空分多址MIMO


空分复用:在不增加频谱带宽的情况下,利用较大间距的天线阵列的阵元之间或波束之间的不相关性,为单用户提供多个不同的数据流,从而提高链路的容量和单用户的峰值速率。

空分多址:在不增加频谱带宽的情况下,利用较大间距的天线阵列的阵元之间或波束之间的不相关性,为多个用户提供多个不同的数据流或基站并行从多个终端接收数据流,从而提升用户容量。

类似马路的空分复用,多天线空分复用利用多个天线传输携带不同信息基带信号,不同信息的基带信号通过相同频谱资源进行传输,每个传输天线称为“层”。


空分复用使得在相同的带宽下,传输的数据成倍的增加,频谱利用率也成倍的增加。

MIMO的关键问题是:

多个OFDM调制的基带信号流steam1-4,虽然在基站内部的硬件上是不同的数据流,并通过各自不同的天线发送,但他们使用的是相同频率的高频载波信号,这4个流在空间传播中是叠加在一起的。
接收端收到的信号也是4个steam叠加后的信号SteamA-D, 如何从叠加后的SteamA-D恢复出来steam1-4是MIMO的关键与核心!!!这就是预编码矩阵的功效!!!预编码矩阵就是因为此而存在的。

预编码矩阵的本质是预先在每一路天线的信号上,进行一次信号的反向叠加,以抵消发送出去的信号在空间中的叠加,使得每一路接收天线接收到信号正好是两次叠加的效果。

MIMO的关键技术

通过信号的幅度来,获取每一路发送天线中信号的能量。
发送基带信号的能量/幅度为S1和S2.
H11*S1 + H12*S2 = R1
H21*S1 + H22*S2 = R2
矩阵表达式为:
H * S = R
对于接收方,不同的接收天线上,接收到的信号的总(混合)能量/幅度R1和R2肯定是可以知道的。
但如果H11, H12, H21, H22是已知的,那么就可以计算上述的二元一次方程组,得到发送端信号的能量S1和S2这两个未知量。
所以,现在的关键点,接收方,如何知道能量权重矩阵H的各个值?!
获取预编码矩阵的参数:
传输矩阵是有终端与基站之间的空口传输特性决定的。因此需要预先计算出空口的传输特性,可以通过已知的子载波,如参考信号,来获取传输特性H.
通过如下4组一致的参考信号的数值,求出H矩阵。然后用求得的H矩阵,解码未知的业务数据S1、S2
H11*S1.1 + H12*S2.1 = R1.1
H21*S1.2 + H22*S2.2 = R2.1
H11*S1.3 + H12*S2.3 = R1.2

H21*S1.4 + H22*S2.4 = R2.2

层映射的实现:

在调制后,我们会把IQ两路的数值存储到一张表中,直接进行查表处理。


上图中的数字,代表的不是二进制比特,而是代表的承载二进制比特0和1的子载波的幅度值。

按照支持的xMIMO中支持的MIMO“流”的数量x,把代表二进制比特序列的子载波的幅度值的序列,分成x组。
以4T4R MIMO为例:

(1) 得到了4个经过PSK/QAM调制后的15K子载波(LTE)幅度值的序列。只不过,15K子载波的幅度是复数,且二进制数表示的幅度。
(2) 每一个流独立的进行OFDM变换。
(3) 每一个流有独立的IQ天线数据。
(4)每一个流有独立的天线发送与接收

“层”映射后,体现在RRU与BBU之间的CPRI链路上,就是一个小区有N组的天线数据。比如1T1R的小区,就只有1组IQ天线数据流,而4T4R的小区,就有4组IQ数据流。

层映射局限性在于每个流采用了相同的物理编码和调制策略,为了解决这个问题,提出了code word的概念。
码字Code Word是MAC层的引入的概念,是能够独立地、并行地进行编解码和调制解调的码流。

引入Code Word的结果

MAC与物理层之间,不再是一个串行的传输块TB比特流,而是有多个并行的传输块TB比特流。“层”映射的输入,不在是单一的、调制后的子载波流,而是多个并行的调制后的子载波流。

引入Code Word的好处

每个码子的传输块TB比特流可以进行独立的、并行的编解码与调制解调,迎合了不同MIMO“层” 有可能出现无线信道特性不一致,导致对编解码与调制方式需求不一致的情形。每个码子的传输块TB比特流可以进行独立的、并行的编解码与调制解调,提升了编码也解码的效率。

引入Code Word的缺点

每个独立的Code Word,需要独立的硬件编解码与调制解调的硬件资源,无形中增加了硬件的成本与复杂度。
最大的Code word只有两个:




这里的一个关键技术是预编码矩阵


10. 天线端口映射


11. 映射到VRB


12. 从虚拟资源块映射到物理资源块


后面的几个过程暂时还没整理,整理后我会及时更新,以上PDSCH的传输流程,欢迎大家交流讨论!

以上阐述的内容有问题可以评论或私信我,欢迎交流~本文原发于NR物理层流程总结——PDSCH - 知乎 (zhihu.com)

全部评论
看到这些我就头大
点赞 回复 分享
发布于 2022-06-26 11:37

相关推荐

哥_留个offer先:跟他说,你这个最好用c#,微软就用c#Java不适合这个项目
点赞 评论 收藏
分享
xwqlikepsl:感觉很厉害啊,慢慢找
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务