PRACH 前导序列生成详解与Matlab实现

以非限制集format0 为例

一、参数配置

根据高层信令配置:

  • **prach_ConfigIndex** = 17

该索引通常对应特定的 PRACH 时频资源配置,但对于前导序列生成,核心参数是 `zeroCorrelationZoneConfig`。

  • **zeroCorrelationZoneConfig** = 6

对应非限制集(unrestricted set)下的 N_{CS} 值。

  • **rootSequenceIndex** = 2(示例起始根序列)

当 `zeroCorrelationZoneConfig = 6` 时,N_{CS}=32

1.2 前导序列基本参数

对于长序列(Preamble Format 0~3),前导序列长度 L_{RA}=839


二、每个根序列可生成的 preamble 数量

在非限制集中,一个根序列通过循环移位可生成的前导序列个数为:

N_{pre}\^{(u)} = \\left\\lfloor \\frac{L_{RA}}{N_{CS}} \\right\\rfloor

代入 L_{RA}=839N_{CS}=32

N_{pre}\^{(u)} = \\left\\lfloor \\frac{839}{32} \\right\\rfloor = 26

即每个根序列可以生成 **26** 个不同的前导序列。


三、循环移位 C_v 的确定

循环移位的索引 v 取值范围为:

v = 0, 1, \\dots, \\left\\lfloor \\frac{L_{RA}}{N_{CS}} \\right\\rfloor - 1

即:

v = 0, 1, \\dots, 25

循环移位值 C_v 为:

C_v = v \\cdot N_{CS}

因此:

C_0 = 0,\\ C_1 = 32,\\ C_2 = 64,\\ \\dots,\\ C_{25} = 25 \\times 32 = 800


四、ZC 序列生成与循环移位

4.1 ZC 基序列

对于物理根序列索引 u,ZC 序列定义为:

x_u(i) = e\^{-j\\frac{\\pi u i (i+1)}{L_{RA}}}, \\quad i = 0, 1, \\dots, L_{RA}-1

其中 L_{RA}=839

4.2 循环移位生成前导序列

每个根序列 u 与每个 v 组合生成一个前导序列:

x_{u,v}(n) = x_u\\left( (n + C_v) \\bmod L_{RA} \\right), \\quad n = 0, 1, \\dots, L_{RA}-1


五、生成 64 个 preamble 的根序列使用策略

系统需要生成 64 个前导序列。每个根序列可提供 26 个,因此所需的根序列个数为:

N_{\\text{root}} = \\left\\lceil \\frac{64}{26} \\right\\rceil = 3

即需要 **3** 个根序列。第一个根序列提供 26 个,第二个根序列再提供 26 个(累计 52 个),第三个根序列提供剩余的 12 个(64-52=12)。第三个根序列只需使用前 12 个循环移位(v=0 \\sim 11)。

5.1 根序列的选择顺序

协议规定了根序列的逻辑索引到物理索引的映射(Table 6.3.3.1-4)。示例中起始根序列取 u=2,则下一个根序列为 u=837(映射规则通常为对称使用),再下一个为 u=3 等,直到满足 64 个。


六、完整计算示例(以 u=2 为例)

6.1 生成 x_2(i)

x_2(i) = e\^{-j\\frac{\\pi \\cdot 2 \\cdot i (i+1)}{839}}, \\quad i=0,\\dots,838

6.2 应用循环移位得到 preamble

  • v=0C_0=0

x_{2,0}(n) = x_2(n)

  • v=1C_1=32

x_{2,1}(n) = x_2((n+32) \\bmod 839)

其前几个样点:

x_{2,1}(0) = x_2(32) = e\^{-j\\frac{\\pi \\cdot 2 \\cdot 32 \\cdot 33}{839}}

x_{2,1}(1) = x_2(33) = e\^{-j\\frac{\\pi \\cdot 2 \\cdot 33 \\cdot 34}{839}}

x_{2,1}(2) = x_2(34) = e\^{-j\\frac{\\pi \\cdot 2 \\cdot 34 \\cdot 35}{839}}

  • 类似地,v=2 对应 C_2=64,直至 v=25 对应 C_{25}=800

这样,根序列 u=2 产生了 26 个 preamble 序列。

6.3 后续根序列

按照协议规定的顺序,下一个根序列(例如 u=837)同样生成 26 个 preamble,再下一个根序列(例如 u=3)只需生成前 12 个(v=0 \\sim 11),总共达到 64 个。

**NOTE: 按照上述的描述,总共有64个循环移位,循环移位的索引即为实际发送的preambel_id(**公众号:手搓物理层 )


七、matlab源码

复制代码
L_RA = 839;
zeroCorrelationZoneConfig = 7;           %%  matalb的索引是从1开始的
Ncs_r = [0,13,15,18,22,26,32,38,46,59,76,93,119,167,279,419];
Ncs = Ncs_r(zeroCorrelationZoneConfig);      %Ncs选择了32

u = [129, 710, 140, 699, 120, 719, 210, 629, 168, 671, 84, 755, 105, 734, 93, 746, 70, 769, 60, 779,
    2, 837, 1, 838, 56, 783, 112, 727, 148, 691, 80, 759, 42, 797, 40, 799, 35, 804, 73, 766];
u_idx = 21;                              % 根序列索引是21,即选择的root value 是从上面数组的2开始

i_u = 0:(L_RA-1);
x_root = exp(-j*pi*u(u_idx)*i_u.*(i_u + 1)/L_RA);       % 根据对应根序列的值,生成基序列

v = 0:floor(L_RA/Ncs)-1;                                % 一个根序列通过循环移位可以生成所有的preamble序列
Cv = v*Ncs;

x_u_shift_num = length(Cv);

% 假设循环移位是5,也就是发送的preamble_id是4
m = 5;
n = 0:L_RA-1;
preamble_zc = x_root(mod(n+Cv(m),L_RA)+1); 

% 协议规定对生成的zc序列先做一次DFT,类似于做了一次预编码;借助与matlab fft函数
preamble_zcdft = fft(preamble_zc);

最后一步参考协议(某种意义相当于做了一次传输预编码,为了削峰,防止ofdm引入的峰均比较高问题 公众号:手搓物理层)

八、总结

本文以 `zeroCorrelationZoneConfig = 6`(N_{CS}=32)为例,详细介绍了非限制集下 PRACH 前导序列的生成过程:

  1. 根据配置查表得到 N_{CS}

  2. 计算每个根序列可生成的 preamble 数 \\lfloor L_{RA}/N_{CS}\\rfloor

  3. 确定循环移位范围 v=0,\\dots,\\lfloor L_{RA}/N_{CS}\\rfloor-1,并计算 C_v = v\\cdot N_{CS}

  4. 生成 ZC 基序列 x_u(i)

  5. 对每个根序列应用循环移位 C_v 得到 x_{u,v}(n)

  6. 按照协议顺序选择根序列,直至累计生成 64 个 preamble。

该流程同时适用于 LTE 和 NR 的长序列 PRACH 场景,是理解随机接入物理层的关键。


**参考资料**:

  • 3GPP TS 38.211 "NR; Physical channels and modulation"

下次分享PRACH的preamble检测部分

相关推荐
yong99901 天前
IHAOAVOA:天鹰优化算法与非洲秃鹫优化算法的混合算法(Matlab实现)
开发语言·算法·matlab
沅_Yuan1 天前
基于改进型PNGV的锂电池等效电路模型【MATLAB】
matlab·建模·锂电池·等效电路模型·pngv
沅_Yuan1 天前
CALCE锂电池老化数据集处理与健康因子提取【MATLAB】
matlab·数据集·健康因子·calce·锂电池soh
fpcc1 天前
信号处理与AI中的卷积的关系
c++·人工智能·信号处理
神仙别闹1 天前
基于 MATLAB 实现的流载体的LSB隐藏项目
开发语言·matlab
北京耐用通信1 天前
工业自动化中的协议桥梁:耐达讯自动化EtherCAT转RS232技术深度解析
人工智能·科技·物联网·自动化·信息与通信
互联科技报1 天前
好用稳定的5G网络仿真软件如何选?— 深度对比与选型指南
网络·arm开发·5g
zbtlink1 天前
5G CPE和光纤宽带,谁才是未来?
网络·5g·智能路由器
Matlab程序猿小助手1 天前
【MATLAB源码-第315期】基于matlab的䲟鱼优化算法(ROA)无人机三维路径规划,输出做短路径图和适应度曲线.
开发语言·算法·matlab
以太浮标1 天前
华为eNSP综合实验之- 交换机组播VLAN(Multicast-VLAN)详细解析
运维·网络·网络协议·网络安全·华为·自动化·信息与通信