5G NR:RACH流程-- Msg1之生成PRACH Preamble
随机接入流程中的Msg1,即在PRACH信道上发送random access preamble。涉及到两个问题:
- 一个是如何产生preamble?
- 一个是如何选择正确的PRACH时频资源发送所选的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个子载波。
二、PRACH Preamble的分类
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。

从下图可以看出不同format的preamble长度不同,包括不同长度的CP,不同preamble seq的重复次数,不同长度的GP。这些preamble可以应用于不同的覆盖场景。

下面两张表格来自于协议38211,分别描述了long preamble和short preamble各种format的子载波间隔,preamble sequence的长度以及CP的长度,还有是否可以用于限制集restricted sets。限制集会对preamble的循环移位有影响。一些特殊的覆盖场景可能会定义限制级,这时会对循环移位有特殊的要求,防止发生preamble检测错误。


对于long preamble,以format 2为例:
- 子载波间隔为1.25kHz
- preamble sequence重复4次,长度为:

- CP长度为

注意:上述计算公式中的

其中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 6.3.3.2-1总结了NR支持的PRACH和PUSCH的子载波间隔SCS的不同组合,以及每种组合下的频域占多少个RB。

三、PRACH Preamble是如何产生的
在第一部分“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。
- sequence number u 是根据logical root sequence index i 查下表(节选)得到的, logical root sequence index i 是根据参数prach-RootSequenceIndex l839 :439得到的。

- cyclic shift Cv 根据下面公式得到。对于我们给的参数配置,可以看到restrictedSetConfig = unrestrictedSet,对于unrestricted sets公式会用到Ncs。

- Ncs由参数zeroCorrelationZoneConfig = 6查表所得。根据参数prach-ConfigurationIndex = 2可以查表得到preamble format是format 0。 format 0的子载波间隔是1.25kHz。因此通过下表可以得到Ncs=32。根据上面的公式知道v的取值如下

进而可以求出Cv


经过上面这些准备工作,可以通过下面伪代码的形式给出这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全部产生!!!
相关文章:
5G NR:RACH流程-- Msg1之生成PRACH Preamble
随机接入流程中的Msg1,即在PRACH信道上发送random access preamble。涉及到两个问题: 一个是如何产生preamble?一个是如何选择正确的PRACH时频资源发送所选的preamble? 一、PRACH Preamble是什么 PRACH Preamble从数学上来讲是一个长度为…...
高基数类别特征预处理:平均数编码 | 京东云技术团队
一 前言 对于一个类别特征,如果这个特征的取值非常多,则称它为高基数(high-cardinality)类别特征。在深度学习场景中,对于类别特征我们一般采用Embedding的方式,通过预训练或直接训练的方式将类别特征值编…...
高效利用隧道代理实现无阻塞数据采集
在当今信息时代,大量的有价值数据分散于各个网站和平台。然而,许多网站对爬虫程序进行限制或封禁,使得传统方式下的数据采集变得困难重重。本文将向您介绍如何通过使用隧道代理来解决这一问题,并帮助您成为一名高效、顺畅的数据采…...
图论岛屿问题DFS+BFS
leetcode 200 岛屿问题 class Solution {//定义对应的方向boolean [][] visited;int dir[][]{{0,1},{1,0},{-1,0},{0,-1}};public int numIslands(char[][] grid) {//对应的二维数组int count0;visitednew boolean[grid.length][grid[0].length];for (int i 0; i < grid.l…...
Cypress web自动化windows环境npm安装Cypress
前言 web技术已经进化了,web的测试技术最终还是跟上了脚步,新一代的web自动化技术出现了? Cypress可以对在浏览器中运行的任何东西进行快速、简单和可靠的测试。 官方地址https://www.cypress.io/,详细的文档介绍https://docs.cypress.io/g…...
CentOS7.9设置ntp时间同步
文章目录 应用场景基础知识操作步骤 应用场景 我们公司是做智慧交通的,主要卖交通相关的硬件和软件。硬件包括信号机、雷达、雷视、边缘盒子等,软件包括信控平台、管控平台等信号机设备、雷达设备、边缘计算单元等,还有一些第三方的卡口设备…...
36、springboot --- 对 tomcat服务器 和 undertow服务器 配置访客日志
springboot 配置访客日志 ★ 配置访客日志: 访客日志: Web服务器可以将所有访问用户的记录都以日志的形式记录下来,主要就是记录来自哪个IP的用户、在哪个时间点、访问了哪个资源。 Web服务器可将所有访问记录以日志形式记录下来ÿ…...
MySQL表的增删改查
文章目录 MySQL表的增删改查1. Create1.1 单行数据插入1.2 多行数据插入1.3 插入否则更新1.4 替换 2. Retrieve2.1 SELECT 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式2.1.4 为查询结果指定别名2.1.5 结果去重 2.2 WHERE 条件2.2.1 英语不及格的同学及英语成绩(&l…...
yolov3
yolov1 传统的算法 最主要的是先猜很多候选框,然后使用特征工程来提取特征(特征向量),最后使用传统的机器学习工具进行训练。然而复杂的过程可能会导致引入大量的噪声,丢失很多信息。 从传统的可以总结出目标检测可以分为两个阶…...
基于低代码/无代码工具构建 BI 应用程序
一、前言 随着数字化推进,越来越多的企业开始重视数据分析,希望通过BI(商业智能)技术提高业务决策的效率和准确性。 传统的BI解决方案往往需要大量的定制开发和数据准备,不仅周期长、成本高,还需要专业的数…...
Servlet与过滤器
目录 Servlet 过滤器 Servlet Servlet做了什么 本身不做任何业务处理,只是接收请求并决定调用哪个JavaBean去处理请求,确定用哪个页面来显示处理返回的数据 Servlet是什么 ServerApplet,是一种服务器端的Java应用程序 只有当一个服务器端的程序使用了Servlet…...
微信小程序开发实战记录
近期公司需要开发一个小程序项目,时间非常紧急,在开发过程中遇到几个困扰的问题及解决方案,记录如下:小程序框架选择 基础框架:小程序原生框架 sassui: 采用 vant weapp图表:采用 ec-echarts …...
防破解暗桩思路:检查菜单是否被非法修改过源码
本篇文章属于《518抽奖软件开发日志》系列文章的一部分。 我在开发《518抽奖软件》(www.518cj.net)的时候,为了防止被破解,需用添加一些暗桩,在合适的时机检查软件是否被非法修改过,如果被非法修改就做出提…...
IDEA使用Docker插件
修改Docker配置 1.执行命令vim /usr/lib/systemd/system/docker.service,在ExecStart配置的后面追加 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock -H tcp://0.0.0.0:…...
[前端] vue使用Mousetrap.js实现快捷键
Mousetrap.js介绍 Mousetrap.js 是一个处理键盘快捷键的 JavaScript 库,它允许您定义复杂的键盘快捷键并在浏览器中使用。 官方地址 代码仓库 安装库 在命令行中运行以下命令安装 mousetrap 模块: npm install mousetrap再次运行命令行,安…...
如何查询Oracle的字符集
如何查询Oracle的字符集 很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确…...
C语言每日一练------------Day(7)
本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字:两个数组的交集 双指针 💓博主csdn个人主页…...
Meta语言模型LLaMA解读:模型的下载部署与运行代码
文章目录 llama2体验地址模型下载下载步骤准备工作什么是Git LFS下载huggingface模型 模型运行代码 llama2 Meta最新语言模型LLaMA解读,LLaMA是Facebook AI Research团队于2023年发布的一种语言模型,这是一个基础语言模型的集合。 体验地址 体验地址 …...
人生中的孤独
孤独是一种深刻而痛苦的情感状态,在这个喧嚣而充满人群的世界中,许多人都曾经或正在经历孤独的阶段。 孤独并不仅仅是身边缺乏他人的陪伴,更是一种内心的空虚和失落。 孤独的人生可能来源于各种原因。 有些人可能因为缺乏亲密的人际关系&…...
掌握Spring框架核心组件:深入探讨IOC、AOP、MVC及注解方式面试指南【经验分享】
目录 引言 一、Spring IOC篇 1.什么是Spring 2.核心概念 3.核心架构 4.什么是控制反转(IOC) 5.依赖注入(DI) 二、Spring AOP篇 1.什么是AOP 2.Spring AOP代理机制 3.核心概念 4.通知分类 三、Spring MVC篇 1.什么…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
