笔者在微信公众号GiveMe5G定期发布学习文章(更多更及时),欢迎订阅和分享,文章下方有二维码。
谈论到随机接入流程中的Msg1,即在PRACH信道上发送random access preamble。这就涉及到两个问题,一个是如何产生preamble?另一个是如何选择正确的PRACH时频资源发送所选的preamble? 由于涉及内容较多,本文最主要针对第一个问题进行讨论。下一篇文章讨论第二个问题
PRACH Preamble从数学上来讲是一个长度为L_RA(839或者139)的ZaddOff Chu (ZC)序列 {x(0),x(1),….x(LRA-1)}, 其中x(i)的定义如下。在下面的公式里注意x(i)是用x_u(i)表示的,多了一个下标u,这个u是用来表示这个ZC序列是根据root sequence number u 生成的。
我们知道终端要根据配置参数生成64个preamble,也就是64个序列。产生不同的序列有两种方法,一种是根据不同的root sequence number生成,即在上面的公式中采用不同的u,另外一种是基于同一个root sequence number做cyclic shift循环移位生成,即对下面的公式采用不同的Cv。
对于生成64个preamble的方式协议38211有明确的规定,先在一个root sequence上进行循环移位,如果不足以生成64个,在换root sequence,直到64个premable全部产生为止。
There are 64 preambles defined in each time-frequency PRACH occasion, enumerated in increasing order of first increasing cyclic shift Cv 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. 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. --摘自38.211
上面介绍了preamble的时域信号,再看看频域信号,即对时域信号x_{u,v}(n)做离散傅里叶变换DFT,公式如下:
经过DFT后也是长度为L_RA点的序列,即频域上占有L_RA个子载波
Preamble总体上分为两大类,long preamble和short preamble。其中long preamble分为四种format,分别为format0/1/2/3,short preamble分为九种A1/A2/A3/B1/B2/B3/B4/C0/C2。
Preamble结构一般由三部分组成:Cyclic Prefix(CP) + Preamble Sequence (重复) + Guard Period(GP),其中核心部分preamble sequence可能重复多次,取决于不同的format。
Note:上述计算公式中的
其中Ts是LTE的基本时间单位,Tc是NR的基本时间单位。38211协议中所有时间长度单位在没有特殊明确指定时,单位为
Throughout this specification, unless otherwise noted, the size of various fields in the time domain is expressed in time units Tc -- 摘自38211
上面介绍了时域长度,下面看看频域占多少RB。下面这个摘自38211的table总结了NR支持的PRACH和PUSCH的子载波间隔SCS的不同组合,以及每种组合下的频域占多少个RB。
在第一部分“PRACH Preamble是什么?”中其实已经讨论了preamble是如何生成的。下面以一组PRACH参数配置来看看这64个preamble生成过程中用到了哪些参数并且如何使用的。
rach-ConfigCommon setup :
{
rach-ConfigGeneric
{
prach-ConfigurationIndex 2,
msg1-FDM one,
msg1-FrequencyStart 2,
zeroCorrelationZoneConfig 6,
preambleReceivedTargetPower -100,
preambleTransMax n10,
powerRampingStep dB4,
ra-ResponseWindow sl20
},
ssb-perRACH-OccasionAndCB-PreamblesPerSSB four : 13,
ra-ContentionResolutionTimer sf64,
rsrp-ThresholdSSB 0,
prach-RootSequenceIndex l839 : 439,
restrictedSetConfig unrestrictedSet
},
我们已经知道生成preamble离不开两个基本元素,root sequence number和cyclic shift。
经过上面这些准备工作,我们可以通过下面伪代码的形式给出这64个preamble的产生过程:
当logical root sequence index = 439 => sequence number = 662,通过循环移位产生26个preamble
preamble_index[0]: sequence number = 662, Cv=0
preamble_index[1]: sequence number = 662, Cv=32
preamble_index[2]: sequence number = 662, Cv=64
preamble_index[3]: sequence number = 662, Cv=96
............
preamble_index[24]: sequence number = 662, Cv=768
preamble_index[25]: sequence number = 662, Cv=800
通过当前的root sequence number并且循环移位只能产生26个,不够64个,需要使用下一个logical root seq index
当logical root sequence index = 440 => sequence number = 196,通过循环移位产生26个preamble
preamble_index[26]: sequence number = 196, Cv=0
preamble_index[27]: sequence number = 196, Cv=32
............
preamble_index[50]: sequence number = 196, Cv=768
preamble_index[51]: sequence number = 196, Cv=800
通过两个root sequence number仍然未能产生够64个,继续使用下一个logical root seq index
当logical root sequence index = 441 => sequence number = 643,通过循环移位产生12个即可
preamble_index[52]: sequence number = 643, Cv=0
preamble_index[53]: sequence number = 643, Cv=32
............
preamble_index[62]: sequence number = 643, Cv=320
preamble_index[63]: sequence number = 643, Cv=352
至此,64个preamble全部产生!!!
笔者在微信公众号GiveMe5G定期发布学习文章,发布周期原则为一周,欢迎订阅和分享
文章主要用于记叙和讨论对3GPP协议的学习和理解,欢迎留言讨论,谢谢!