5G NR:RACH随机接入过程MSG1

前言

  • 在文章5G/NR 随机接入过程精讲中已经阐述了RA的总体流程和基本常识,本文主要着重分析接入过程中的MSG1消息:UE发送的MSG1到底发送的是什么,是怎么发送的,以及关于preamble的一些介绍。
  • 建议阅读本文前先对随机接入有个系统的了解,否则基本概念可能不是很清晰,链接:5G/NR 随机接入过程精讲

1、MSG1 Overview

  随机接入过程中发送的第一条消息就是MSG1,MSG1实质上最主要功能就是发送preamble码给基站,处理流程大概如下:

  • 触发随机接入过程条件

  • 判断竞争类型

  • 若是竞争接入: 选择前导码和PRACH资源

    • 前导码选择:根据prach-ConfigurationIndex确定可用的前导码集合(0~63)。
    • PRACH资源选择:
      • 时域:根据msg1-FDM和prach-ConfigurationIndex确定时隙和符号位置。
      • 频域:根据msg1-FrequencyStart确定起始RB位置。
  • 若是非竞争接入: 使用分配的专用前导码和资源

    • UE直接使用基站分配的以下参数:
      • 专用前导码索引(如ra-PreambleIndex)
      • PRACH时频资源(如ra-PRACH-ResourceIndex)
  • 计算发射功率并发送MSG1

  • 前导码发送:在选定的PRACH资源上发送前导码(MSG1)

  • 启动定时器等待MSG2

    • 定时器时长由ra-ResponseWindow定义(通常2~10 ms)。
    • MSG2内容:包含TA(Timing Advance)、UL Grant、临时C-RNTI等。
  • 超时未收到MSG2

    • 重传机制:
      • 重传次数由preambleTransMax限制(最大重传次数)。
      • 每次重传增加发射功率(步长由powerRampingStep定义)。
竞争接入
非竞争接入
超时未收到MSG2
收到MSG2
触发随机接入过程
竞争 or 非竞争?
选择前导码和PRACH资源
使用分配的专用前导码和资源
计算发射功率并发送MSG1
启动定时器等待MSG2
重传MSG1并增加功率
继续后续流程

关键参数来源

参数 来源 作用
prach-ConfigurationIndex SIB1 确定PRACH时频资源和前导码格式
msg1-FDM SIB1 频分复用次数(1~8)
ra-PreambleIndex PDCCH Order/RRC信令 非竞争接入专用前导码索引
powerRampingStep SIB1 功率爬坡步长(如2 dB)

2、Preamble overview

2.1 Preamble是什么

  • 本质
    • 协议38.211中明确的指示了Preamble的本质是基于 Zadoff - Chu(ZC)序列来生成。
    • 但不能简单说 Preamble 的本质就是 ZC 序列,可以把Zadoff-Chu比喻成“砖块”,preamble比喻成是“桥梁,砖块构建桥梁的基础材料。

2.2 为什么需要preamble

  有了MSG1的大概流程后,先了解下preamble相关的基础知识。
在 5G NR 通信系统中,前导码(Preamble)是不可或缺的关键要素。主要用于实现终端(UE)与基站(gNB)的初始同步与资源协调。其核心功能包括:1) 时间同步,通过测量前导码时延计算定时提前量(TA),校准上行传输;2) 用户识别与冲突管理,基于唯一序列区分多用户并解决接入冲突;3) 上行资源请求,触发基站分配初始资源用于数据传输;4) 功率控制,通过接收功率估算路径损耗以优化发射功率;5) 波束管理,在毫米波场景中辅助波束对准,提升覆盖能力;6) 高效检测,利用低峰均比、高相关性的序列设计保障低信噪比下的可靠性。前导码作为UE与网络建立连接的关键信号,支撑了5G高密度接入、低时延及广覆盖场景的需求。

2.3 怎么生成preamble

  通过ZC序列可以生成,为什么要选择ZC序列来生成Preamble,可以参考博文5GNR中的常见序列精讲有详细解释和回答。

2.4 5GNR能够支持多少个preamble

  在5G NR中支持最多64个preamble。 但不同场景本质是RRC中的参数totalNumberOfRA-Preambles 配置来获取。下一章节有说明该参数。

2.5 RACH - ConfigCommon参数有哪些

  RACH - ConfigCommon大概参数如下(TS 38.331 ch6.3.2),totalNumberOfRA-Preambles也在这里面。

rach-ConfigCommon setup :
{
   
   
    rach-ConfigGeneric : {
   
   
        prach-ConfigurationIndex      INTEGER (0..255),            // PRACH配置索引,决定时频资源
        msg1-FDM                      ENUMERATED {
   
   one, two, four, eight},  // Msg1频分复用模式
        msg1-FrequencyStart           INTEGER (0..maxNrofPhysicalResourceBlocks-1),  // Msg1起始频率位置
        prach-FrequencyOffset         INTEGER (0..maxNrofPhysicalResourceBlocks-1),  // PRACH频域资源块起始位置
        preambleFormat                ENUMERATED {
   
   format0, format1, format2, format3, A1, A2, A3, B1, B2, B3},  // 前导码格式
        cyclicPrefix                  ENUMERATED {
   
   normal, long},  // 循环前缀长度
        prach-Periodicity             ENUMERATED {
   
   ms2, ms5, ms10, ms20, ms40, ms80, ms160},  // PRACH时域周期
        prach-TimeOffset              INTEGER (0..prach-Periodicity-1),  // PRACH时域偏移
        zeroCorrelationZoneConfig     INTEGER(0..15),            // 零相关区配置
        preambleReceivedTargetPower   INTEGER (-202..-60),       // 目标接收功率(dBm)
        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},  // 响应窗口时长
        prach-RootSequenceIndex       INTEGER (0..837),          // PRACH根序列索引
        restrictedSetConfig           ENUMERATED {
   
   unrestrictedSet, restrictedSetTypeA, restrictedSetTypeB},  // 前导码集合类型
        totalNumberOfRA-Preambles     INTEGER (1..64),           // 小区支持的总前导码数量
        beamformedRACH                ENUMERATED {
   
   enabled, disabled},  // 是否启用波束赋形RACH
        ssb-perRACH-OccasionAndCB-PreamblesPerSSB : {
   
   
            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)

        },
        ra-ContentionResolutionTimer  ENUMERATED {
   
   sf4, sf8, sf16, sf32, sf64, sf128},  // 竞争解决定时器
        rsrp-ThresholdSSB             INTEGER (-140..-44),       // SSB触发RSRP阈值(dBm)
        sul-RACH                      ENUMERATED {
   
   allowed, notAllowed}  // 是否允许SUL上的RACH
    },
    
    nonContentionBasedConfig : {
   
   
        preambleIndex                 INTEGER (0..63),          // 非竞争前导码索引
        ra-RNTI                       INTEGER (0x0000..0xFFFF)  // 非竞争RA-RNTI
    }
}

3、64个Preamble如何生成

3.1 preamble生成原理

  从协议38.211(ch6.3.3)描述了preamble的生成方式:先在某个root sequence 上进行循环移位,如果不够生成64个preamble, 再继续换挨着的下一个root sequence进行循环移位,直到生成所有的64个preamble。

There are 64 preambles defined in each time-frequency PRACH occasion, enumerated in increasing order of first increasing cyclic shift of a logical root sequence, and then in increasing order of the logical root sequence index, starting with the index obtained from the higher-layer parameter prach-RootSequenceIndex or rootSequenceIndex-BFR. Additional preamble sequences, in case 64 preambles cannot be generated from a single root Zadoff-Chu sequence, are obtained from the root sequences with the consecutive logical indexes until all the 64 sequences are found.

生成总流程:
在这里插入图片描述

3.2 preamble生成流图

参数组/Parameters
是/Yes
否/No
根序列索引/rootSequenceIndex
配置参数/Configuration
零相关区配置/zeroCorrelationZoneConfig
序列长度/N_ZC
循环移位模式/ShiftMode
目标Preamble数/NumReqPreambles
开始/Start
选择下一根序列/NextRootSeq
生成ZC基序列/GenerateZC
计算Ncs/CalculateNcs
计算Cv/CalculateCv
生成候选Preamble/GeneratePreamble
累计Preamble数/Accumulate
总数≥64?/CheckCount?
结束/End

3.3 preamble生成例子

  首先要明白,preamble的生成过程所确定的参数,也是来自L3 RRC配置下来的,主要是放在RACH - ConfigCommon 中,而RACH - ConfigCommon 主要是在 SIB1 (来自MIB)中进行广播,以便 UE 在初始接入小区时能够获取随机接入信道的基本配置信息。
  实际上生成preamble只需要下面几个参数就行,现通过例子形式来逐一说明preamble是如何生成的,假如我们是FR1频段,TDD系统中,从RRC配置下来的 rach-ConfigCommon参数如下:

rach-ConfigCommon setup :
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值