5G NR:RACH随机接入过程

news2024/11/17 16:30:51

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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/700336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis设计与实现笔记之链表

以下为Redis链表中一个节点的结构 typedef struct listNode {// 前置节点struct listNode *prev;// 后置节点struct listNode *next;// 节点的值void *value;} listNode; 可以看见此结构与我们常见的双向链表结构类似。由前去后继节点的地址以及当前节点的值组成。 redis中链…

使用percona xtraBackup8.x进行MySql8.0备份与还原(完全备份,增量备份,差异备份)

MySQL备份与还原 备份目标&#xff1a;数据的一致性&#xff0c;服务的可用性备份技术&#xff1a;物理备份(冷备份)【直接复制数据库文件&#xff0c;适用大型数据库&#xff0c;缺点是操作时服务需要停止】和 逻辑备份(热备份)【备份的是建表建库插入的SQL语句】备份方式&am…

CSDN周赛60期简要题解

一转眼&#xff0c;周赛都举办了60期了&#xff1f;还以为可以“寿终正寝”了&#xff0c;结果61期又安排上了。打开一看&#xff0c;还是《计算之魂》主题的周赛&#xff0c;还是这种 4 &#xff08;非编程&#xff09; 2 &#xff08;编程&#xff09; 的题型。可能目前就指…

HttpRunner 使用小结

目录 https 请求证书验证 2.0.3 (2019-02-24) 代理调试 $ 符引用 json 响应中数组的提取和断言 text/html 响应的提取和断言 testcase 之间传递参数 2.2.2 (2019-06-26) 复用 cookies 和 token 1. 每个 testcase 登录一次 2. 将 cookies 或 token 写入文件&#xff…

如何设计一个高并发系统?

其实所谓的高并发&#xff0c;如果你要理解这个问题呢&#xff0c;其实就得从高并发的根源出发&#xff0c;为啥会有高并 发&#xff1f;为啥高并发就很牛逼&#xff1f; 浅显一点&#xff0c;很简单&#xff0c;就是因为刚开始系统都是连接数据库的&#xff0c;但是要知道数据…

关于英语翻译中的归化与异化,你可以了解一下

据了解&#xff0c;归化和异化是翻译中使用的两种不同手段&#xff0c;它们都能在目的语文化中完成各自的使命&#xff0c;都有其存在的价值。那么&#xff0c;究竟什么是归化&#xff0c;什么是异化&#xff1f;英语翻译中的归化与异化有什么特征&#xff1f; 归化是让作者靠近…

Rust 基础入门 —— 字符、布尔、单元 类型

字符、布尔、单元 类型 字符类型&#xff08;char&#xff09; 对于字符类型我们有更大的自由性&#xff0c;概括一下&#xff1a; 更大的编码范围&#xff0c;让rust 可以展示更多的内容。统一的字节空间&#xff0c;字符也是四个字节的内存大小。严格区分的 "" …

reduceByKey 和 groupByKey 的分析与区别

reduceByKey 源码 def reduceByKey(partitioner: Partitioner, func: (V, V) > V): RDD[(K, V)] self.withScope {combineByKeyWithClassTag[V]((v: V) > v, func, func, partitioner)}/*** Merge the values for each key using an associative and commutative reduce…

保姆级教程:带你体验华为云测试计划CodeArts TestPlan

华为云测试计划&#xff08;CodeArts TestPlan&#xff09;是面向软件开发者提供的一站式云端测试平台&#xff0c;覆盖测试管理、接口测试&#xff0c;融入DevOps敏捷测试理念&#xff0c;帮助您高效管理测试活动&#xff0c;保障产品高质量交付。 登录华为云账号&#xff1a…

使用JMeter安装RabbitMQ测试插件的步骤

整体流程如下&#xff1a;先下载AMQP插件源码&#xff0c;可以通过antivy在本地编译成jar包&#xff0c;再将jar包导入JMeter目录下&#xff0c;重启JMeter生效。 Apache Ant 是一个基于 Java 的构建工具。Ant 可用于自动化构建和部署 Java 应用程序&#xff0c;使开发人员更轻…

【2023年江西省研究生数学建模竞赛】题目一 蒸汽发生器倒U型管内液体流动 建模方案及参考文献

代码与结果如下&#xff1a;完整文档见文末 完整思路”请点击这里“到原文章获取 题目&#xff1a; PACTEL压水堆整体测试设备在2009年建造&#xff0c;用于带有垂直倒U型管蒸汽发生器的压水堆热液压相关的安全性研究,参见图1。 PACTEL压水堆设施包括一个反应堆压力容器模型…

Redis如何统计一个亿的keys?

前言 不知你大规模的用过Redis吗&#xff1f;还是仅仅作为缓存的工具了&#xff1f;在Redis中使用最多的就是集合了&#xff0c;举个例子&#xff0c;如下场景&#xff1a; 签到系统中&#xff0c;一天对应一系列的用户签到记录。 电商系统中&#xff0c;一个商品对应一系列的…

ARM-SWI 和未定义指令异常中断处理程序的返回(七)

文章目录 处理流程示例代码实现SWI未定义指令 附录源码 处理流程 SWI 和未定义指令异常中断是由当前执行的指令自身产生的&#xff0c;当 SWI 和未定义指令异常中断产生时&#xff0c;程序计数器的 PC 的值还未更新&#xff0c;它指向当前指令后面第 2 条指令&#xff08;对于…

Git的常见操作

Git版本控制 开发难题 在实际开发中我们会遇到一些问题&#xff0c;电脑蓝屏&#xff0c;代码丢了&#xff0c;懊悔不&#xff1f; 时间长了&#xff0c;文件找不到了。懊悔不&#xff1f;手欠&#xff0c;之前代码运行好好的&#xff0c;非要去优化下。结果还 不如以前&am…

京东天猫数据查询与分析:2023年厨电细分市场数据分析

随着消费者对生活品质的追求持续提高&#xff0c;我国厨房电器产品的需求也日趋多样化&#xff0c;市场中厨房电器的品类越来越多&#xff0c;我国厨房电器的市场规模也不断扩大。 根据鲸参谋电商数据显示&#xff0c;2023年1月至4月&#xff0c;天猫平台上厨房电器的销量为670…

搭建个人hMailServer 邮件服务实现远程发送邮件

文章目录 1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 转载自cpolar极点云文章&#xff1a;搭建个人hMailServer 邮件服务实现远程发送邮件 hM…

ChatGPT微调系列一:总述 微调 的基本流程

文章目录 前言一、啥叫微调二、为啥要微调三、不是所有模型都可以微调的四、总述微调的基本流程&#xff0c;以及涉及的主要函数&#xff0c;参数1. 安装2. 准备训练数据3. openai.api_key os.getenv() 进行一个说明4. 通过API 调用模型 常用函数5. 微调模型 常用函数6. OpenA…

Maven 使用详细教程

目录 Maven 介绍 Maven 安装 1、安装JDK 2、下载Maven安装文件 3、配置环境变量 4、检测安装成功 Maven 标准工程结构 Maven 版本要素 Maven仓库 1、本地仓库&#xff1a; 2、中央仓库 3、其他远程仓库 创建Maven工程 使用命令方式创建Maven工程 Eclipse中创建…

智能大棚自动控制系统 实现传统农业精细化管理

新型农业经营主体管理系统是指为了适应农村经济发展需求&#xff0c;提高农业生产组织化、规模化、现代化程度&#xff0c;促进农业产业结构调整和农村产业转型升级&#xff0c;推动农村经济社会持续健康发展而建立的一套管理体系。 该系统主要包括农产品生产、种植、养…

JavaWeb学习路线(8)——登录

一、基本登录功能 &#xff08;一&#xff09;需求&#xff1a; 根据账号与密码判别用户是否可以登录 &#xff08;二&#xff09;实现步骤 Controller接收传递的JSON格式数据&#xff0c;使用RequestBody实体类进行接收&#xff0c;调用Service具体处理。Service创建登录接…