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 Sssb-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 Rra-ContentionResolutionTimer            ENUMERATED { sf8, sf16, sf24, sf32, sf40, sf48,sf56, sf64},rsrp-ThresholdSSB                       RSRP-Range         OPTIONAL,   -- Need Rrsrp-ThresholdSSB-SUL                   RSRP-Range         OPTIONAL,   -- Need Rprach-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 Sresources 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.hqwc.cn/news/8019.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spark实战】Windows环境下编译Spark2 Linux上部署Spark On Yarn

Windows环境下编译Spark2 环境准备 git-2.14.1maven-3.9.2jdk-1.8scala-2.11.8zinc-0.3.15 主下载地址spark-2.3.4 github官方地址 编译准备 maven远程仓库使用的是阿里云的 解压源码包spark-2.3.4.zip,修改根模块的pom文件。主要目的是为了变更hadoop的版本号&#xff0c;…

【数据可视化】大作业(意向考研高校的数据可视化)

文章目录 前言一、数据介绍1.1 基本信息1.2 考研信息1.3 导师信息 二、预处理及分析2.1 数据预处理2.1.1 考研信息预处理2.1.2 导师信息预处理 2.2 数据分析 三、可视化方法及结果3.1 可视化方法3.2 可视化结果展示3.2.1 基本信息3.2.2 考研信息3.2.3 导师信息 四、总结五、附录…

git 获取两个版本间的变更文件,生成增量包

可用于代码在无git环境情况下的做增量包 注意&#xff1a;版本号1一般是上一次版本的结束。 #下面命令可以获取两个版本直接的变更文件git diff 版本号1 版本号2 --name-only git diff 版本号1 版本号2 --name-only | xargs zip update.zip 牛逼之处就是打出来的压缩包是带…

89C52RC普中单片机-4

20230629 Thusday lcd1602代码 lcd1602.c #include <REGX52.H>//引脚配置&#xff1a; sbit LCD_RSP2^6; sbit LCD_RWP2^5; sbit LCD_ENP2^7; #define LCD_DataPort P0//函数定义&#xff1a; /*** brief LCD1602延时函数&#xff0c;12MHz调用可延时1ms* param 无*…

论文笔记--GPT-4 Technical Report

论文笔记--GPT-4 Technical Report 1. 报告简介2. 报告概括3 报告重点内容3.1 Predictable Scaling3.2 Capabilities3.3 limitations3.3 Risks & mitigations 4. 报告总结5. 报告传送门6. References 1. 报告简介 标题&#xff1a;GPT-4 Technical Report作者&#xff1a;…

uniapp怎么把px转换成对应手机型号的rpx

首先获取系统手机屏幕的宽度系统信息的概念 | uni-app官网&#xff0c;然后根据公式转换 rpx 750*元素 B 在设计稿上的宽度为 多少px/手机屏幕的宽度 详见&#xff1a;CSS 支持 | uni-app官网 如下为把宽度为1px的转成对应手机型号的rpx uni.getSystemInfo({success(res) {co…

LeetCode 打卡day54-55 动态规划之编辑距离问题

一个人的朝圣 — LeetCode打卡第54-55天 知识总结 Leetcode 392. 判断子序列题目说明代码说明 Leetcode 115. 不同的子序列题目说明代码说明 Leetcode 583. 两个字符串的删除操作题目说明代码说明 Leetcode 72. 编辑距离题目说明代码说明 知识总结 今天学习动态规划里面的编辑…

uni-app 微信小程序发布时,主包超过2M限制

小程序发布时&#xff0c;提示超过2M&#xff0c;无法通过&#xff0c;此时可以尝试以下几种方法&#xff1a; 1、对图片做压缩 图片尽量放在服务器端&#xff0c;使用的时候&#xff0c;通过URL路径获取&#xff0c;若不得已放在本地时&#xff0c;可以对图片进行压缩&#…

InsCode Stable Diffusion 美图活动投稿

本地部署可以使用B站大佬秋叶的整合包 CSDN亦提供了Stable Diffusion 模型在线使用地址&#xff1a;https://inscode.csdn.net/inscode/Stable-Diffusion 模型相关版本和参数配置&#xff1a; 模型&#xff1a;cetusversion4.WRgK.safetensors [b42b09ff12] VAE&#xff1a;y…

MySQL - 第14节 - MySQL使用C语言连接

1.引入库 要使用C语言连接MySQL&#xff0c;需要使用MySQL官网提供的库。 1.1.下载库文件 下载库文件&#xff1a; 首先&#xff0c;进入MySQL官网&#xff0c;选择DEVELOPER ZONE&#xff08;开发人员专区&#xff09;&#xff0c;然后点击MySQL Downloads。如下&#xff1a; …

黑马头条-day02

文章目录 前言一、文章列表加载1.1 需求分析1.2 表结构分析1.3 导入文章数据库1.4 实现思路1.5 接口定义1.6 功能实现 二、freemarker2.1 freemarker简介2.2 环境搭建&&快速入门2.2.1 创建测试工程 2.3 freemarker基础2.3.1 基础语法种类2.3.2 集合指令2.3.3 if指令2.3…

3.Hive SQL数据定义语言(DDL)

1. 数据定义语言概述 1.1 常见的开发方式 &#xff08;1&#xff09; Hive CLI、Beeline CLI Hive自带的命令行客户端 优点&#xff1a;不需要额外安装 缺点&#xff1a;编写SQL环境恶劣&#xff0c;无有效提示&#xff0c;无语法高亮&#xff0c;误操作率高 &#xff08;2&…