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检测部分

相关推荐
Logintern0911 小时前
[Matlab] 遗传算法求解TSP入门
开发语言·matlab
我爱C编程12 小时前
基于BP译码和用户RMA解码的LT码实现及度分布设计matlab实现和误码仿真
matlab·bp译码·rma解码·lt码·度分布
QH139292318801 天前
Keysight N5183B N5183B 微波模拟信号发生器
网络·单片机·嵌入式硬件·集成测试·信息与通信
民乐团扒谱机2 天前
【微实验】物理启发神经网络(PINN):当AI学会遵守物理定律(附matlab代码))
人工智能·神经网络·matlab
随风而飘1862 天前
安立(Anritsu)MT8820C无线综合测试仪(手机综测仪)
网络·功能测试·测试工具·5g·智能手机
NoteStream2 天前
MATLAB绘制带置信区间的折线散点图(科研绘图模板)
开发语言·matlab
简简单单做算法2 天前
基于遗传算法和贝叶斯联合优化的BiLSTM(GA-BO-BiLSTM)一维时间序列预测算法matlab仿真
matlab·一维时间序列预测·ga-bo-bilstm·遗传和贝叶斯联合优化
FreeTinker2 天前
5G组网的技术路径与演进逻辑
5g
机器学习之心2 天前
MATLAB 实战复盘:集合覆盖模型 + 线性加权和法,搞定应急物流中心选址
matlab·集合覆盖模型·线性加权和法·应急物流中心选址
程高兴2 天前
三相两电平光伏MPPT定步长扰动观察法Simulink
matlab