prach学习心得(一)

一、Why RACH ? (What is the functionality of RACH ?)

当你第一次听到“RACH”或“RACH进程”这个词时,脑海中冒出的第一个问题是“为什么是RACH?”RACH进程的功能/目的是什么?为什么我们需要这种复杂(看起来过于复杂)的操作?
当然,这并不会让你感到困惑,RACH具有非常重要的功能,特别是在LTE(以及 WCDMA)中。RACH的主要用途可以描述如下。
① 实现UE和eNB之间的上行同步
② 获得Message3的上行资源(例如 RRC 连线要求)

举个例子,我们去乘坐火车等交通工具时需要车票来确定候车室、班次、车厢和座位号,prach就是手机的火车票,只存在一段时间内有效,当数据解码后,手机接入了(相当于上火车了),prach的作用就结束了,至于如何解码就要看代码如何设计了。
在大多数通信(尤其是数字通信,无论是有线还是无线)中,最重要的前提是在接收器和发射器之间建立定时同步。因此,无论你研究什么通信技术,你都会看到一些专门为特定通信设计的同步机制。
在 LTE (WCDMA)中,下行链路(发射器 = eNB,接收器 = UE)的同步是通过特殊的同步信道(特殊的物理信号模式)实现的。有关详细信息,请参阅时间同步进程页。这个下行链路同步信号被广播给每个人,并且在一定的时间间隔内一直在传输。
然而,在上行链路(Transmitter = UE,Reciever = eNB)中,UE 使用这种广播/始终在线的同步机制是不高效的(实际上是浪费能量并对其他 UE 造成大量干扰)。你可能很容易理解这类问题。对于上行链路,此同步过程应满足以下条件
1)只有在有迫切需要时,才应进行同步处理
2)同步应该只专用于一个特定的 UE
本页面中所有复杂/混乱的故事主要是关于为满足这些标准而特别设计的过程机制。
RACH进程的另一个目的是获取 Msg3(消息3)的资源。RRC连接请求是 Msg3的一个例子,根据情况有几种不同类型的 Msg3。你可以通过阅读这一页来理解这一部分,而且理解起来也不是很复杂。

二、Trigger condition of RACH

触发RACH过程的条件有很多,在协议TS38.300-9.2.6中概况如下:
1) Initial access from RRC_IDLE;
2) RRC Connection Re-establishment procedure;
3) DL or UL data arrival during RRC_CONNECTED when UL synchronisation status is “non-synchronised”;
4) UL data arrival during RRC_CONNECTED when there are no PUCCH resources for SR available;
5) SR(Scheduling Request) failure;
6) Request by RRC upon synchronous reconfiguration (e.g. handover);
7) Transition from RRC_INACTIVE;
8) To establish time alignment for a secondary TAG;
9) Request for Other SI (see clause 7.3);
10) Beam failure recovery;
上述10种情况都比较好理解,主要就是初始接入,RRC连接重建立,RRC连接状态下的上行失步,RRC连接状态下上行调度资源不足,上行调度失败,上行同步重新配置(小区切换)等等。

三、Two types of RACH process : Contention-based and Contention-free

当UE发送PRACH前导时,它使用特定的模式进行发送,并且该特定模式被称为“签名”。在每个LTE小区中,总共有64个前导码签名可用,并且UE随机选择这些签名中的一个。
UE是否“随机”选择其中一个签名?这是否意味着存在多个UE发送具有相同签名的PRACH的可能性?
有这种可能性。这意味着相同的PRACH序列从多个UE同时到达NW。这种PRACH冲突称为“竞争”,允许这种“竞争”的RACH进程称为“基于竞争的”RACH进程。在这种基于争用的 RACH 过程中,网络在后面的步骤中会经历一个额外的过程来解决这些争用,这个过程称为“争用解决”步骤。
但是,在某些情况下,由于某些原因(例如时间限制),这类争用是不可接受的,而且这些争用是可以防止的。通常在这种情况下,网络会准确地通知每个UE它必须使用的前导签名的时间和地点。当然,在这种情况下,网络将分配这些前导签名,以便它不会发生碰撞。这种RACH过程称为“无竞争”RACH过程。要启动“无竞争”RACH进程,UE应该在RACH进程之前处于连接模式,就像切换情况一样。
典型的基于竞争的RACH过程如下:
在这里插入图片描述
1)UE->NW:RACH前导语(RA-RNTI,表示L2/L3消息大小)
2)UE<——NW:随机访问响应(定时提前,T_C-RNTI,L2/L3消息的UL授权)
3)UE->NW:L2/L3讯息
4)提早解决争议的信息
现在假设在步骤1中发生了争用。例如,两个UE发送了PRACH。在这种情况下,两个UE将在步骤2中接收到相同的T_C-RNTI和资源分配)。因此,在步骤3中,两个UE将通过相同的资源分配(即具有相同的时间/频率位置)向NW发送L2/L3消息。当两个UE在完全相同的时间/频率位置传输完全相同的信息时会发生什么?一种可能性是这两个信号相互干扰,NW解码两者都不存在。在这种情况下,UE都不会有任何来自NW的响应(HARQACK),而且它们都认为RACH进程已经失败,并回到步骤1。另一种可能是NW只能成功地从一个UE解码消息,而不能从另一个UE解码消息。在这种情况下,在NW端L2/L3译码成功的UE将从网络中获得HARQACK。步骤3的这个HARQACK过程称为“争用解决”过程。
典型的“无竞争”RACH程序如下:
在这里插入图片描述
1)UE<——NW:RACH序言(PRACH)分配
2)UE->NW:RACH前言(RA-RNTI,表示L2/L3消息大小)
3)UE<—— NW:随机访问响应(定时提前,C-RNTI,L2/L3消息的UL授权)

四、How the information is encoded into PRACH (RACH Preamble) ?

在LTE中,PRACH序列之后的所有信息(数据)都有自己的二进制结构,这意味着它们被转换成特定的数据结构。然而,PRACH序言中的信息是由纯物理属性表示的。在PRACH中形成信息的物理属性如下。
1)前导码传输定时(t_id)
2)PRACH频域传输位置(f_id)
3)PRACH信号的整个I/Q数据的序列(如下例所示)
以下是时间域中的PRACH发送讯号。(你可能认为这看起来与你预期的不同。你可能期望看到Zadoff-Chu序列,但这看起来不像Zadoff-Chu序列。PRACH的Zadoff-Chu序列在频域,但这是时域序列。PRACH Zadoff-Chu通过如何生成RACH信号部分中所示的转换被转换为如下所示的时域序列)

%%%%%%    仿真环境
%软件版本:MATLAB R2021a
clear all;
close all;
clc
%*************** 参数设置 ***************%
% PRACH配置设置以及retriving PRACH info
ue.DuplexMode = 'FDD'; % UE使用FDD的双工方式
ue.NULRB = 6; % 上行链路,PRACH占6个RB的带宽,改变了采样率SamplingRate
prach_config.Format = 0; % 格式0,Nzc的长度为839
prach_config.CyclicShifIdx = 0; % 循环移位长度
prach_config.FreqOffset = 0;  % 决定UE传输PRACH前导的频域位置,以PRB为单位
prach_config.SeqIdx = 0;
prach_PreambleIdx = [22]; % rootSequenceIndex,为逻辑值

[prach_sym, prachInfo] = ltePRACH(ue, prach_config);
prach_arrayIndex = 0 : length(prach_sym) - 1;
prach_clip = 1:100; % 切片(?)

subplot(2,3,1);
plot(real(prach_sym),imag(prach_sym),'ro','MarkerFaceColor',[1 0 0]);axis([-0.2 0.2 -0.2 0.2]);
title('PRACH符号的星座图');

subplot(2,3,[2 3]);
plot(prach_arrayIndex,real(prach_sym),'ro-',prach_arrayIndex,imag(prach_sym),'bo-');ylim([-0.2 0.2]);
xlim([0 6000]);
legend('real','Imag');
title('PRACH index vs PRACH value(Time Domain)');
subplot(2,3,4);
plot(real(prach_sym(prach_clip)),imag(prach_sym(prach_clip)),'ro','MarkerFaceColor',[1 0 0]);
axis([-0.2 0.2 -0.2 0.2]);
title('Constellation');
subplot(2,3,[5 6]);
plot(prach_arrayIndex(prach_clip),real(prach_sym(prach_clip)),'ro-',prach_arrayIndex(prach_clip),imag(prach_sym(prach_clip)),'bo-');
xlim([0 max(prach_arrayIndex(prach_clip))]);ylim([-0.2 0.2]);
legend('real','Imag');
title('PRACH index vs PRACH value.(Time Domain)');

在这里插入图片描述

五、Exactly when and Where a UE transmit RACH ?

要回答这个问题,需要参考3GPP规范 TS36.211-表5.7.1-2。这个表将给出UE允许传输PRACH前导字符的帧和子帧。正如您在这个表中看到的,PRACH前导定时和PRACH前导类型是由PRACH配置索引决定的。如何确定PRACH配置索引?它由SIB2参数prach-ConfigIndex确定。
< TS36.211 - Table 5.7.1-2 : PRACH Configuration Index>

在这里插入图片描述

例如,如果UE使用“ PRACH ConfigurationIdex 0”,它应该只以偶数SFN(系统帧号)传输RACH。这是否意味着这个UE可以在指定的SFN内的任何时间传输RACH?这个问题的答案在表的“Subframe number”列中。上面写着“1”表示“PRACH配置IDEX 0”。这意味着UE只允许在每个偶数SFN的子帧1上传输RACH。
在下图中,您应该知道下图中的所有维度(红色矩形是 PRACH 信号)。
在这里插入图片描述
R_Slot由PRACH配置索引确定,R_length由Premable格式确定。当前导格式为0~3时,F_offset由以下公式求得。该方程中的n/RA/PRBoffset由SIB2中的prach-FreqOffset指定。(详情请参阅36.2115.7物理随机接入通道)
FDD:
在这里插入图片描述
TDD:Preamble format 0-3
在这里插入图片描述

TDD:Preamble format 4
在这里插入图片描述

六、What is preamble format ?

如果你看到上面显示的36.211-表5.7.1-1,则会看到名为“序言格式”的列。序言格式是什么?它被定义为以下图。
在这里插入图片描述
可以看出,PRACH前导字符的长度取决于前导字符的格式。例如,前导格式为0的PRACH的长度为(3186+24567)示例。(如你所知,一个样本(T)是1/30.72(=0.03255)us。它在36.2114帧结构中定义为1/(15000x2048)秒(=0.03255us)。
在LTE里,时间的基本单位都是采样周期Ts,值固定等于:
Ts=1/(15000*2048)=32.55ns
其中,15000表示子载波的间隔是15kHz,2048表示采样点个数。除了15kHz的子载波间隔之外,3GPP还定义了7.5kHz的载波间隔,这种子载波间隔专门针对MBSFN。因此除非特殊说明,都默认子载波间隔是15kHz。

六、Why Multiple Preamble Format ?

你可能会问“我们为什么需要这种多种序言格式?”,尤其是“为什么我们需要不同时间长度的prach格式?”。
首先尝试根据上表(表5.7.1-1)弄清楚序言格式之间有什么区别?为简单起见,让我们考虑格式为0,1,2,3。
让我们看一下T_SEQ(序列的长度)。您会看到格式0和格式1由在时域转换的prach的单个副本组成。格式2和3由两个串联的prach序列副本组成。格式2,3比格式1,2的优势是什么。我认为较长的T_SEQ将在噪声条件下帮助解码PRACH,因为它提供了更长的相关窗口来检测PRACH。
现在我们来看一下T_CP部分。您会注意到,与格式0和2相比,格式1和3具有更长的T_CP。较长的CP将使您在衰落环境中具有更好的容忍度,即使在高度衰落的环境中也能降低ISI。
实际上,每种前导码格式之间还有另一个重要的差异,表5.7.1-1中没有明确显示。
作为单元格大小的一个简短结论,我们可以重写该表如下。
在这里插入图片描述

Note 1 : T_CP (in ms) = T_CP(in Ts) x 0.03255 x 1/1000,
where 0.03225 is one Ts in us, 1/1000 is used to convert the unit from ‘us’ to ‘ms’
Note 2 : T_SEQ (in ms) = T_SEQ(in Ts) x 0.03255 x 1/1000,
where 0.03225 is one Ts in us, 1/1000 is used to convert the unit from ‘us’ to ‘ms’
Note 3 : Guard Time (in ms) = Number of Subframe - Total Length
Note 4 : Cell Radius is roughly the distance that the electromatic wave can travel during the guard time and devided by 2.
In case of free space(in vacumm) it is roughly is 300 (km/ms) x Guard Time (ms) / 2.

七、How to determined which Preamble format to use ?

ue如何知道生成prach和trnasmit时必须使用的序言格式?它由下表确定。如您所见,Prach配置索引确定要使用的序言格式。例如,如果Prach配置索引为10,如下示例所示,则使用序言格式0。
你可能会问“谁确定Prach配置索引?”。答案是“ENB通过SIB2中的Prach-Configindex IE确定它。有关详细信息,请参阅Prach-Configindex部分。
< TS36.211 - Table 5.7.1-2 : Interpretation of PRACH Config >
在这里插入图片描述

八、How does Network knows exactly when UE will transmit the RACH ?

很简单。网络知道ue何时甚至在UE发送之前就会发送RACH,因为网络告诉UE何时应该传输RACH。(如果UE无法正确解码有关RACH的网络信息,即使UE发送RACH,网络也将无法检测到它)。
以下部分将介绍RACH的网络信息。
哪个RRC消息包含RACH配置?
它在SIB2中,您可以在3GPP 36.331中找到详细信息。
< RRC Parameters for RACH Operation >
在这里插入图片描述

九、How many RA-Preambles can be used ?

理论上,总共有64个PRACH前导码可用,但在特定条件下(例如,在特定小区中,无论是用于附着还是用于切换等)可用的前导码的数量由如下所示的一对SIB2参数确定。
在这里插入图片描述
上方有两组RA-Preambles 组A和组B。组始终存在,B组仅存在SIB 2参数中的特定配置。A组和B组的确定在36.321 5.1.1随机访问过程初始化中,如下所示。

如果sizeofra-preamblesgroupa等于numberofra-preambles,则没有随机访问序列组B。随机访问序列preamble组A中的前序是preambles(0 to sizeofrapreamblesgroupa - 1),如果存在,则在随机访问序言中,B组是(从36.211中定义的64个preambles组中的preamblets sizeofra-preamblesgroupa到numberofra-preambles - 1)。

如果存在随机接入前导码组B,则阈值messagePowerOffsetGroupB和messageSizeGroupA、执行随机接入过程的服务小区的配置UE发射功率PCMAX,c[36101]以及前导码和Msg3之间的偏移deltaPreambleMsg3是选择两组随机接入前导中的一组所需的(仅PCell)。//deltaPreambleMsg3为功率控制相关参数(详见36.331和36.213 5.1.1.1 UE行为)

十、How to Generate 64 PRACH Preamble Sequences ?

如上所述,UE可以在单元中使用的最大数量为64。如何生成这64种不同类型的Prach序列?该过程如下。
1)使用rootSequenceInderex生成zaddoff chu序列(849个样本)(我们将此序列称为“基本序列”)
2)通过进行基本序列的循环移动来产生64个不同的序列。循环移位间隔由NCS确定,NCS由ZerocorelationZoneconfig和HighSpeEdflag确定。
例如:
我们假设SIB2如下广播参数。
a)rootsequenceIndexex = 22
b)HighspeedFlag = false
c)zerocorlationzoneconfig = 5
从a)中,您将获得带有u = 1的基本zaddoff-chu序列(如果您想知道如何派生此数字,请参阅RootSequenceIndex部分)。
从b)和c)中获取NCS(CyclicsHift间隔)= 26(请参阅ZerocorRelationZoneConfig和HighspeedFlag。节。如果您想知道该数字是如何派生的)。
现在,你可以按以下方式获得64个不同的prach序列。
PRACH Sequence[0] = base sequence
PRACH Sequence[1] = do cyclic shift to base sequence by 1 * 26 samples
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
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

十一、PRACH Signal Structure

下图显示了与正常上行链路子帧相比,Prach的Propable信号结构。要特别提到的几点是
1)频域中的序列长度为6个UL子帧,为1.08 MHz
2)时间域的序言长度在内,包括后卫时间(= CP长度 +序列长度 + GT长度)可以根据序言格式为1或2或3
3)Prach序言的一个子载体为1.25 kHz,而1个UL子帧的子载体为15 kHz。这意味着12个序言子载体为1个UL子帧子载波。
< PRACH Resource Grid >
在这里插入图片描述

参考文档

https://www.sharetechnote.com/html/RACH_LTE.html#prach_ConfigIndex

猜你喜欢

转载自blog.csdn.net/weixin_45143788/article/details/131705243