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

相关推荐
xiao5kou4chang6kai43 天前
MATLAB机器学习、深度学习--从数据预处理到模型训练
深度学习·机器学习·matlab·数据预处理
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
半条-咸鱼3 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
bubiyoushang8883 天前
电力线信道“五类噪声”仿真MATLAB
开发语言·matlab
cici158743 天前
彩色图像模糊增强(Fuzzy Enhancement)MATLAB 实现
开发语言·算法·matlab
kaikaile19953 天前
图像稀疏化分解 + 压缩感知(CS)重建 MATLAB
开发语言·计算机视觉·matlab
yugi9878383 天前
PNCC(Power-Normalized Cepstral Coefficients)— MATLAB 实现
开发语言·人工智能·matlab
@insist1233 天前
系统架构设计师-5G 技术、冗余设计与分层架构
5g·架构·系统架构·软考·系统架构设计师·软件水平考试
cooldog123pp3 天前
cplex完全安装手册,适配matlab和python!
人工智能·python·matlab·cplex
OpenIM3 天前
增量版本同步能力介绍 | OpenIM
开源·github·信息与通信