5G NR:RACH随机接入过程

1. 简述

        无论是3G,4G还是现在的5G都需要随机接入过程,随机接入过程主要是为了让基站和UE之间做好上行同步以及初始接入。此文章仅仅帮助大家了解此过程,更加具体的用途及其场景需要参考具体的3GPP协议(38.211,38.212,38.213).主要帮助理解如下几个问题:

  1. PRACH序列, 时域,频率上怎么产生的?由哪些因素决定?
  2. 基站怎么检测PRACH,MSG2包含哪些信息?
  3. MSG3的发送
  4. MSG4解决冲突
  5. MSG5完成接入过程 

1.1 RACH的目的

a) 达到基站和UE之间的上行同步

b)冲突检测

c)UE能够获取无线空口资源与基站进行初始的RRC交互(i.g RRC connection request)

1.2 触发RACH的场景

        触发RACH场景很多,具体的场景可以参考38.300.  此文章主要适用于初学者,在此只是列举最典型的场景:UE处于IDLE下的初始接入。

1.3 RACH的类型:基于冲突检测和非冲突检测

        想象一下,一个基站覆盖范围内有很多手机用户,这些用户相互不知道对方是谁,手机和基站此刻上行还没有同步或者说UE还不能和基站通信,但是UE可以收到基站的广播信息(或者说下行已经同步),没有一个机制约束哪个手机应该用哪个空口资源发第一条上行消息(PRACH),手机从广播信息得到的发送PRACH的资源都是一样的资源池,冲突不可避免,两个手机用了同样一个资源同时发送给基站请求,基站下发一个资源,这种情况下就需要解决冲突,哪一个手机是最终获得资源且被基站认可的手机呢,这个过程即基于冲突检测的类型

        但是凡事无绝对,有些场景和配置,基站和UE本身相互知道对方的唯一身份ID(即C-RNTI,初学这可以认为这个就是基站测L2的一个和UE交互通信的唯一标识),比如NSA的架构,UE有双连接,在UE初始接入到5G基站之前,UE已经和LTE基站有连接,而LTE基站把UE的这个C-RNTI实现已经传递给了5G基站,UE在发起初始接入前和基站已经认识,所以他们不需要冲突检测,即基于非冲突检测类型

2. RACH流程 

预备知识: gNB和UE之间的信令消息传递分为三层. 在RACH的流程中,重要介绍相关的physical layer , MAC 调度层和RRC层。 RLC/PDCP和RACH本身关系不大。

1. Physical layer. 参考38.211

2. L2 (PDCP, RLC, MAC). 参考38.321,38.322,38.323

3. L3(RRC). 参考38.331


2.1  Standalone Arch下的RACH 流程

        整个RACH 接入流程分为6个步骤A~F, 下图的括号表示消息发送的协议栈

 2.1.1 Step A:广播RACH配置

         gNB 基站发送广播信息SIB1给UE,此SIB1信息包括RACH如何接入的参数。RRC层参数包括:

- Prach-ConfigurationIndex:决定时域及prach format的参数

- msg1-FDM:决定频率 FDM方式

- msg1-FrequencyStart:决定频率起始位置

- prach-RootSequencyIndex:决定premable根序列

- zeroCorrelationZoneConfig:决定premable的Cyclic shift及set类型

- preambleRecieivedTargetWindow:决定功率门限

- totalNumberOfRA-premables:决定小区总的PREAMBLE个数

- ssb-perRACH-OccasionAndCB-PreamblePerSSB:决定PRAMBLE和SSB的对应关系

- numberOfRA-PreamablesGroupA:决定做contention based preambles的GROUP的范围

- msg1-SubcarrierSpacing: SCS的大小

2.1.2 step B:MSG1

        UE 解析RRC的消息,发送 preamble给BTS 通过PRACH物理信道。物理信道最重要的是premable 的正交序列的产生以及承载序列的时频资源(参考38.211),对于初学者来说,这几个步骤比较难懂,公式很复杂。基本原理就是利用数学上的Zadoff Chu序列产生正交序列,利用傅里叶变化产生symbol

1、Preamble 正交序列的产生:

prach-RootSequencyIndex: 决定了这个公式里面的u

zeroCorrelationZoneConfig: 决定了这个公式里面的Cv

Prach-ConfigurationIndex: 根据38.211协议里面的Table 6.3.3.2-2,可以推导出preamble的format, 这个就决定了公式里面的LRA

原理是每个时域上的RACH occasion都可以参数64个premables,而每个premable都最终产生一个长为LRA的码序列。那么区分不同premable的其实就是两个变量:Cv 和 u.  实际在做网络规划的时候,要考高速移动的场景下多普勒频移,基站侧接收的最大相关峰会移动,为了避免这种情况,我们尽量的把选择的Cv能够错开,使得这64个premables尽量的分散,把LRA分成多个组 Ncs,使用“restricted”类型,否则慢速选择“unrestricted”类型。具体算法:根序列u先不变,Cv 依次递增,如果不够生产64个preamble的根,则依次增加u. 参考38.211 6.3.3.1章节。

        举个例子:

rootSequenceindex = 22  --> physical rootSequenceIndex=1

type = unrestricted

zeroCorrelationZoneConfig = 5 -> Ncs = 26

LRA = 839

PRACH Sequence[0] = base sequence   I.g[1*(0*1)/839, 1*(1*2)/839.........]

PRACH Sequence[1] = do cyclic shift to base sequence by 1 * 26 samples I.g

[1*(26*27)/839,1*(27*28)/839,]

PRACH Sequence[2] = do cyclic shift to base sequence by 2 * 26 samples

....

PRACH Sequence[31] = do cyclic shift to base sequence by 31 * 26 samples

PRACH Sequence[32] = do cyclic shift to base sequence +1  <generate the new root sequence, see 38.211 6.3.3.1>

PRACH Sequence[33] = do cyclic shift to base sequence +1 by 1 * 26 samples

PRACH Sequence[34] = do cyclic shift to base sequence +1 by 2 * 26 samples

….

PRACH Sequence[63] = do cyclic shift to base sequence+1 by 31 * 26 samples

 

2、Preamble 频率序列的产生:

        根据上面产生的频率上的序列,通过IFFT产生时域上的序列。公式十分复杂,很难一次看懂,建议懂原理就可以,如果是这方面的工程师,建议理解它,毕竟这个是4G,5G甚至可能是6G的物理层的基石,除非有一天无线通信的本质发生了变化。

zeroCorrelationZoneConfig:决定这个公式里面的NCS

举个例子:

3、Preamble时域上序列的产生:

        Premable时域位置受影响的有两部分:

  • 根据 PRACH configuration index来决定可选的PRACH occasions.  
  • 根据SSB  beams选择用其中哪个PRACH occasion.

        在NR里面,SSB beams和PRACH occasion是有对应关系的,保证UE所在的每一个beam方向都有对应的PRACH occasion可以接入

        为了更加清楚,举个例子:TDD FR1 RachConfig = 78, SCS = 30 Khz

"PRACH configuration index"就是RRC配置下来变量,这个参数决定了下面这个表格的所有其他变量的值

此例中包含有3个prach occasions 可以用。UE选择PRACH OCCASION的流程

a. 选择最好的beam

 b. 根据beam选择PRACH occasion

    RRC 配置参数:Ssb-perRACH-OccasionAndCB-PreamblesPerSSB                   (NbrOfSsbPerRachOccasion, CbraPreamblesPerSsb)

例如:

SSB0-> Prach occasion0, SSB1-> Prach occasion1, SSB2-> Prach occasion2...

如果UE探测beam1信号质量最好, 就会选择SSB1,也就会选择prach occasion1.

上面三步后,就产生了频率和时域上的数据。
 

2.1.3 step C:MSG2

        BTS发送RAR给UE, RAR承载在下行的物理信道PDCCH/PDSCH上. 可以参考 38.213-8.2 Random Access Response)这个章节。内容包括:

        UE发送PRAMBLE的配置参数,在BTS测同样存在,所以BTS是可以容易的解析出来PRAMBLE. 方法就是一个一个位置上的搜索。因为上行,UE和BTS不同步,所以BTS会在理论的时域起始点两端来搜索,如果搜索到了,就可以知道实际的头的位置和理论配置的头的位置的时间差,这个时间差TA(Time advance)就当作上行同步的参考。

发送流程如下:

a. 基站通过PDCCH发送DCI,因为PDCCH是用的TYPE1  common search space, 所以UE是可以事先知道如何去解析PDCCH, PDCCH用RA-RNTI来加扰。

物理层都需要用特别的因子对数据进行加扰,目的在接收端可以很容易识别数据。PRACH数据用RA-RNTI来加扰。特别指出:在这个阶段,BTS还没有和UE通信,加扰的RA-RNTI是一个UE和基站都认识的ID,这个ID和时间,频率的位置有关系

RA-RNTI = RA-RNTI= 1 + s_id + 14 × t_id + 14 × 80 × f_id + 14 × 80 × 8 × ul_carrier_id

s_id : the index of the first OFDM symbol of the specified PRACH (0 <= s_id < 14)

t_id : the index of the first slot symbol of the specified PRACH  in a system frame (0 <= t_id < 80)

f_id : the index of the the specified PRACH in the frequency domain(0 <= s_id < 8)

ul_carrier_id : UL carrier used for Msg1 transmission (0 = normal carrier, 1 = SUL carrier

 b. 基站分配下行PDSCH时域和频率资源

c. 基站物理层发送 PDCCH/PDSCH

注意:UE不需要发送HARQ ACK/NACK 给基站

2.1.4 step D: MSG3

        UE接收到了UL GRANT信息和TA的信息,UE 就可以调整上行的发送时间,而且根据UL GRANT的信息,构造MSG3. 在这个例子里面,MSG3也包含了RRC connection request消息(注意,这个RRC消息里面有个UE Identity 字段非常重要,用来作为RACH 冲突解除的主要输入)

MSG3发送时间:

MSG3 内容:

L3: RRC connection request msg (UE identitiy,......)

L1:PUSCH, PUSCH 用TC-RNTI来加扰, 时域和频率资源由基站在MSG2的UL GRANT中指示

2.1.5 step E: MSG4

        冲突检测及发送 MSG4 RRC connection setup 给UE.

        基站可能收到两个UE过来的MSG3,它们用相同的TC-RNTI,但是基站会选择其中一个下发MSG4,且在MAC层会用对应UE的UE Identity构造MAC-CE包。只有对应的那个UE才会在MAC层识别那个数据,这样冲突就解除了。并且设置C-RNTI =  TC-RNTI.

        UE在物理层,如果数据包没有问题,回HARQ ACK给基站

 

2.1.6 step F: MSG5

UE发送MSG5 RRC Connection complete msg 给BTS。

3. 相关的消息接口

Followings are based on 38.331 v15.3.0

RACH-ConfigCommon ::=   SEQUENCE {

    rach-ConfigGeneric              RACH-ConfigGeneric,

    totalNumberOfRA-Preambles       INTEGER (1..63)      OPTIONAL,   -- Need S

    ssb-perRACH-OccasionAndCB-PreamblesPerSSB   CHOICE {

        oneEighth    ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},

        oneFourth    ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},

        oneHalf      ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},

        one          ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64},

        two          ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32},

        four         INTEGER (1..16),

        eight        INTEGER (1..8),

        sixteen      INTEGER (1..4)

    }                  OPTIONAL, - Need M 

   groupBconfigured                    SEQUENCE {

        ra-Msg3SizeGroupA                   ENUMERATED {b56, b144, b208, b256, b282, b480,

                                                        b640, b800, b1000, spare7, spare6, spare5,

                                                        spare4, spare3, spare2, spare1},

        messagePowerOffsetGroupB            ENUMERATED { minusinfinity, dB0, dB5, dB8, dB10,

                                                        dB12, dB15, dB18},

        numberOfRA-PreamblesGroupA          INTEGER (1..64)

    }                                     OPTIONAL,   -- Need R

 

    ra-ContentionResolutionTimer            ENUMERATED { sf8, sf16, sf24, sf32, sf40, sf48,

                                                         sf56, sf64},

    rsrp-ThresholdSSB                       RSRP-Range         OPTIONAL,   -- Need R

    rsrp-ThresholdSSB-SUL                   RSRP-Range         OPTIONAL,   -- Need R

    prach-RootSequenceIndex                 CHOICE {

        l839                                    INTEGER (0..837),

        l139                                    INTEGER (0..137)

    },

    msg1-SubcarrierSpacing                  SubcarrierSpacing,

    msg3-transformPrecoding                 ENUMERATED {enabled}    OPTIONAL,   -- Need R

    ...

}

 

RACH-ConfigGeneric ::=          SEQUENCE {

    prach-ConfigurationIndex         INTEGER (0..255),

    msg1-FDM                         ENUMERATED {one, two, four, eight},

    msg1-FrequencyStart              INTEGER (0..maxNrofPhysicalResourceBlocks-1),

    zeroCorrelationZoneConfig        INTEGER(0..15),

    preambleReceivedTargetPower      INTEGER (-200..-74),

    preambleTransMax                 ENUMERATED {n3,n4,n5,n6,n7,n8,n10,n20,n50,n100,n200},

    powerRampingStep                 ENUMERATED {dB0, dB2, dB4, dB6},

    ra-ResponseWindow                ENUMERATED {sl1, sl2, sl4, sl8, sl10, sl20, sl40, sl80}

}

 

 

RACH-ConfigDedicated ::= SEQUENCE {

    cfra                             CFRA OPTIONAL,

    ra-Prioritization                RA-Prioritization OPTIONAL,

    ...

}

 

CFRA ::= SEQUENCE {

    occasions SEQUENCE {

        rach-ConfigGeneric               RACH-ConfigGeneric,

        ssb-perRACH-Occasion             ENUMERATED {

                                           oneEighth, oneFourth, oneHalf, one, two, four,

                                           eight, sixteen

                                         } OPTIONAL -- Cond SSB-CFRA

    } OPTIONAL, -- Need S

    resources CHOICE {

        ssb SEQUENCE {

            ssb-ResourceList              SEQUENCE (SIZE(1..maxRA-SSB-Resources))

                                                  OF CFRA-SSB-Resource,

            ra-ssb-OccasionMaskIndex      INTEGER (0..15)

        },

        csirs SEQUENCE {

            csirs-ResourceList            SEQUENCE (SIZE(1..maxRA-CSIRS-Resources))

                                                  OF CFRA-CSIRS-Resource,

            rsrp-ThresholdCSI-RS             RSRP-Range

        }

    },

    ...,

    [[

        totalNumberOfRA-Preambles-v1530 INTEGER (1..63)        OPTIONAL -- Cond Occasions

    ]]

}

 

 

CFRA-SSB-Resource ::= SEQUENCE {

    ssb                   SSB-Index,

    ra-PreambleIndex      INTEGER (0..63),

...

}

 

 

CFRA-CSIRS-Resource ::= SEQUENCE {

    csi-RS                CSI-RS-Index,

    ra-OccasionList       SEQUENCE (SIZE(1..maxRA-OccasionsPerCSIRS))

                               OF INTEGER (0..maxRA-Occasions-1),

    ra-PreambleIndex INTEGER (0..63),

    ...

}

 参考

cfra : Resources for contention free random access to a given target cell

ra-ssb-OccasionMaskIndex : Explicitly signalled PRACH Mask Index for RA Resource selection. The mask is valid for all SSB resources signalled in ssb-ResourceList

ssb : The ID of an SSB transmitted by this serving cell.

ra-PreambleIndex : The preamble index that the UE shall use when performing CF-RA upon selecting the candidate beams identified by this SSB.

csi-RS : The ID of a CSI-RS resource defined in the measurement object associated with this serving cell.

ra-OccasionList : RA occasions that the UE shall use when performing CF-RA upon selecting the candidate beam identified by this CSI-RS.

ra-PreambleIndex : The RA preamble index to use in the RA occasions assoicated with this CSI-RS.

  • 6
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术探索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值