OAI 5G-NR源码架构

news2024/9/23 3:13:18

OAI 5G-NR源码架构

1 特性范围

目前gNB5G-NRUE支持如下的配置:

  • 工作模式:TDD
  • CP长度:Normal CP
  • 子载波间隔: 30kHz
  • 信道带宽:40MHz(106PRB)、80MHz(217PRB)、100MHz(237PRB)
  • 天线端口:单波束
  • 时隙格式:14 OFDM符号
  • 编码方式:LDPC、polar

2 gNB源码解析

2.1 代码框架时序图

gNB源码主框架图如下图所示:

在这里插入图片描述

**Main:**主进程,主要功能包括:

1) 命令行参数解析

2) 系统配置文件解析

3) 各子层初始化工作,包括重要数据结构、接口初始化工作

4) 线程初始化,gNB管理线程、包括RRC层处理线程、rx/tx处理线程、传输网接口线程、x2口交互线程

5) 射频phy层及RU单元初始化及配置工作

6) 物理层算法模块数据初始化

7) 用户面数据业务缓存开辟

gNB_app_task:gNB管理线程,主要功能包括:

1) gNB主要数据结构初始化 RCconfig

2) MAC层与PHY层的P5&P7接口初始化,回调函数注册

3) 调用P5接口向RRC发送承载配置命令

4) 处理核心网下发的一些消息

5) 处理各种超时处理消息等

rrc_gnb_taskRRC处理线程,主要功能包括:

1) RRC配置消息处理,如果支持NSA方式,还需要处理MN设备发送的RRC重配置消息。

2) 双连接副站添加相关处理

3) 随机接入消息处理(Msg3,Msg4)

4) 测量相关处理

5) 系统消息处理

sctp_eNB_task:传输网接口线程,主要功能包括:

1) NG口连接建立相关的消息处理

2) 与F1AP 控制面的消息处理(包括CU和DU两部分)

ru_threadrx/tx处理线程,主要功能包括:

1) RU设备库加载

2) 上行流程处理,包括PHY、MAC、RLC、PDCP

3) 下行流程处理, 包括PHY、MAC、RLC、PDCP

2.2 重要函数及过程

2.2.1 主进程

Main() [nr-softmodem.c]

  1. get_options()

通过解析命令行参数来对系统做配置。

重要的数据结构:RAN_CONTEXT_t, 存储gNb实例、macrlc实例、L1实例,RU实例信息。

  1. netlink_init()

  2. init_pdcp()

  3. create_gNB_tasks(1)

起来几个主要线程

a. itti_create_task(TASK_GNB_APP, gNB_app_task,NULL):

1) L1配置信息初始化

2) 完成对phy层、rlc子层、PDCP子层的初始配置工作,若支持noS1模式,还要读取rrc子层的配置信息。

3) 初始化MAC与PHY之间的接口,回调函数注册:

Nr_ul_indication:层2上行接收接口函数,当物理层从空口接收到上行数据,经过物理层过程后将会触发该函数将解码后的数据pdu上送至MAC层

**nr_phy_config_request:**系统参数配置入口处理函数。在SA模式下,系统读取初始化配置文件,然后将其传送给RRC层,RRC层根据配置文件信息形成RRC message(如:SI系统消息),在5G NR NSA模式下,其接收的配置消息基本上就是MIB以及服务小区从X2接口传来的重配置消息。

nr_schedul_response:MAC与PHY的下行接口处理函数。该函数可对MAC层下行pdu进行调度,包括MIB、PRACH消息、rrc消息业务数据pdu以及一些半动态配置消息,并根据调度结果生成DCI。

4) configure_nr_rrc:初始化RRC实体,生成rrc配置消息,包括物理层及射频单元配置。通知RRC处理线程。

b. itti_create_task(TASK_SCTP, sctp_eNB_task,NULL):

​ gNB NG-C的接口线程,也可作为F1-C的接口。

c. itti_create_task(TASK_X2AP, x2ap_task,NULL):

X2接口线程

d. itti_create_task(TASK_RRC_GNB, rrc_gnb_task,NULL)

​ RRC子层的处理线程,主要应包括系统消息、随机接入的Msg3、Msg4相关处理、一些测量相关消息处理

  1. init_gNB()

注册MAC层与PHY层接口回调函数:Nr_ul_indication、nr_phy_config_request、nr_schedul_response(详细描述见4)。

  1. wait_gNBs()

此处采用了停等的模式。至此,系统参数配置以及生效,phy及mac层以上子层均完成初始配置工作。

  1. init_NR_RU()

1) 射频单元参数初始化。主要参数包括:uhd driver地址、类型、同步时钟源,接收增益,参考信号能量等。

2) 回调函数注册,主要回调有:

ru->fh_south_in:RU与phy的上行接口处理函数

ru->fh_south_out:RU与phy的下行接口处理函数

ru->feptx_ofdm:射频前端处理函数

ru->feprx :射频前端处理函数

3) init_RU_proc():空口线程管理,此处起了gNB上下行处理的主线程ru_thread

  1. wait_RUs()

此处采用线程同步方式(pthread_cond_signal(&RC.ru_cond),RC.ru_mask)。至此,包括射频单元在内的所有模块初始配置工作完成。

  1. init_eNB_afterRU()

1) 初始化物理层算法模块使用的数据表格、配置物理层处理过程的一些关键参数

2) 回调函数注册:gNB_top, gNB上/下行数据处理入口函数。

3) 为ULSCH/DLSCH开辟存储buffer

  1. 至此,所有RU单元及gNB实体ok,发送同步信号(pthread_cond_broadcast(&sync_cond))通知所有处理线程可以开始上/下行数据处理。

2.2.2 ru_thread线程

  1. nr_init_frame_parms()

这里计算了空口帧的许多重要参数信息,包括每帧的时隙数、每子帧的时隙数、每个时隙的符号数、每帧的采样点数、每个时隙的点数、接收/发送天线数、频率范围、帧类型、子载波间隔等信息。

  1. fill_rf_config()

根据numerology及PRB配置信息得到系统的信道带宽及采用率等信息上下行频点,天线tx_gain,rx_gain等信息

  1. nr_phy_init_RU()

初始化与phy层的接口buffer

  1. openair0_device_load()

加载RF设备库

  1. 线程同步,启动RF设备,开始正常的接收发送

  2. 上行处理流程

  3. 下行处理流程

2.2.3 rrc_gnb_task线程

RRC子层处理线程

  1. RRC配置/重配置

接收gNB管理线程的rrc配置消息NRRRC_CONFIGURATION_REQ,调用init_NR_SI,该函数最终会调用P5接口对底层设备进行配置。如下图所示:
在这里插入图片描述

  1. 副站添加

接收X2接口发送的副站添加消息X2AP_ENDC_SGNB_ADDITION_REQ

2.2.4 随机接入过程

  1. preamble接收

调用函数L1_nr_prach_procedures()在上行PRACH信道上接收preamble,最多能检测到64个preamble。获取preamble序列,找到当前root序列下的preamble循环偏移位置,计算输出检测到的pramble的TA(时间调整值)和能量。

选取能量最大的preamble

gNB->UL_INFO.rach_ind.number_of_pdus = 1, 发起随机接入流程

  1. 初始化发起随机接入

handle_nr_rach()

调用nr_initiate_ra_proc()

将状态改为 ra->state = Msg2

初始化随机接入过程

  1. 发送RAR

nr_schedule_RA()

nr_generate_Msg2()生成Msg2,分别处理DCI,PDCCH,PDSCH设置,

赋值tx_req

在发送时隙,调用phy_procedures_gNB_TX()

生成DCI

执行PDCCH、PDSCH过程

将状态改为 ra->state = WAIT_Msg3

  1. Msg3接收

调用nr_schedule_reception_msg3()存储msg3主要信息(ul_req):包大小,包地址,当前帧号和时隙。

ifi->NR_Schedule_response[回调函数:nr_schedule_response]

调用函数handle_nfapi_nr_ul_dci_pdu 解出ul dci

调用函数nr_fill_ulsch()根据dci找到ulsch位置

在物理层接收主函数phy_procedures_gNB_uespec_RX 中调用函数nr_ulsch_procedures()

调用函数nr_ulsch_decoding()得到解码后的mac_pdu

rx_ind.number_of_pdus++ , crc_ind.number_crcs++

mac上行接收主函数中调用nr_rx_sdu()

3 接口

3.1 nFAPI(P5 &P7)

3.1.1 架构

FAPI提供了MAC层与PHY层之间的接口,实现了phy层与mac层的分离,其接口架构如下图所示,其中P5口主要用于传送静态配置信息,P7口主要用来传送数据和半动态配置信息。

在这里插入图片描述

3.1.2 过程

如上图所示,MAC层从命令行或配置文件获取系统配置参数,然后将其传送至RRC层,RRC层会通过P5接口触发nr_phy_config_req()对PHY及RU进行配置。在5G NR NSA方式下,RRC子层接收从X2接口来的主校区rrc重配置消息。

对于半动态配置消息以及用户面数据信息的传送,MAC层与PHY层之间使用P7接口,对于上行数据,触发nr_ul_indication();对于下行数据,触发nr_schedule_response()

NR_UL_INDICATION

NR_SCHEDULE_RESPONNSE

TX_REQ

携带从MAC层到 PHY 层的 PDU.

RX_IND

携带从PHY层到MAC层的 PDU

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1932649.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LG 选择 Flutter 来增强其智能电视操作系统 webOS

可以这个话题会让大多数人困惑,2024 年了为什么还会冒出 webOS 这种老古董?然后 LG 为什么选择 webOS ?现在为什么又选择 Flutter ? 其实早在 Google I/O 发布 Flutter 3.22 版本的时候,就提到了 LG 选择 Flutter 来增…

HTML的简单应用 标记信件

前言: 暑假开始了,我也要正式开始学习web的相关知识了,先从三大件的html开始吧,目前只简单了解了html相关知识的基础,能写一些包含一些文字和图片的简单网页,其实会的东西还是不多,这边看书时发…

关于vue实现导出excel表,以及导出的excel后的图片超过单元格的问题

实现导出带图标片的excel的方法, 首先: import table2excel from js-table2excel // 导出表格 按钮点击后触发事件 const onBatchExport () > {const column [//数据表单{title: "ID", //表头名称titlekey: "id", //数据ty…

webpack和vite

构建工具 Webpack 概念 本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或…

【单片机毕业设计选题24069】-物联网节水灌溉系统设计

系统功能: 完成基于物联网的节水灌溉系统的电路图以及软件代码编写。要求系统可以通过传感器监测土壤的湿度和环境温湿度,如果土壤湿度低于限值和环境温湿度超过限值,则需开启继电器,打开电机水泵进行供水灌溉;当土壤湿度高于限值…

有关电力电子技术的一些相关仿真和分析:⑦三相桥式电压型PWM逆变器与直接/间接法控制单相全桥结构PWM整流器(MATLAB/Siumlink仿真)

1.1 题目一要求 以三相桥式电压型PWM逆变器为对象,研究其在不同调制度下,输出电压的频谱成分变化,依据仿真波形分析其工作时序。 参数要求:三相桥式逆变电路,直流侧电压800V,调制波频率50HZ,开关频率10kHZ,阻感负载R=10Ω,L=5mH。 1.2 题目二要求 以单相全桥结构P…

泛域名ssl生成

ssl生成 参考文档 https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E安装acme curl https://get.acme.sh | sh -s email[此处放githup的邮箱]例:curl https://get.acme.sh | sh -s emailmyexample.com手动 dns 方式 // 1.触发验证&#xf…

llama-index,uncharted and llama2:7b run locally to generate Index

题意:本地运行 llama-index、uncharted 以及 llama2:7b 来生成索引 问题背景: I wanted to use llama-index locally with ollama and llama3:8b to index utf-8 json file. I dont have a gpu. I use uncharted to convert docs into json. Now If it …

MongoDB自学笔记(三)

一、前文回顾 上一篇文章中我们学习了更新操作&#xff0c;以及讲解了部分的更新操作符&#xff0c;今天我们继续学习剩余的更新操作符。 二、更新操作符 1、$rename 语法&#xff1a;{ $rename: { < field1 >: < newName1 >, < field2 >: < newName2…

【python】多种回归算法对比气温预测

目录 引言 决策树回归&#xff08;Decision Tree Regression&#xff09; 线性回归&#xff08;Linear Regression&#xff09; 随机森林回归&#xff08;Random Forest Regression&#xff09; 气温预测对比实例 数据集 预测值与实际值对比图 模型评价指标 代码实现 …

【Neural signal processing and analysis zero to hero】- 2

Nonstationarities and effects of the FT course from youtube: 传送地址 why we need extinguish stationary and non-stationary signal, because most of neural signal is non-stationary. Welch’s method for smooth spectral decomposition Full FFT method y…

vim网络和安全的操作及shell的使用

目录 vim模式 一般模式下的基本操作&#xff1a; 一般模式切换到编辑模式&#xff1a; 一般模式切换到命令模式&#xff1a; Vim多窗口使用技巧 横向切割打开&#xff1a; 纵向切割打开&#xff1a; 关闭多窗口&#xff1a; 窗口的切换&#xff1a; 网络&#xff1a;…

django学习入门系列之第四点《BootStrap依赖》

文章目录 往期回顾 BootStrap依赖于JavaScript的类库&#xff0c;JQuery下载 下载JQuery&#xff0c;在界面上应用JQuery 在页面上应用BootStrap和avaScript的类库【JQuery是avaScript的类库】 JQuery的官网&#xff1a; jQuery 如果要应用JQuery 则要在body里面导入文件…

信息安全CISSP认证重点学什么?学习后能掌握哪些安全技能?

引言&#xff1a; 想要在信息安全领域取得突破&#xff1f;那么CISSP认证是您必不可少的一步&#xff01;本文将为您介绍CISSP认证的重点学习内容以及学习后可以掌握的安全技能&#xff0c;助您更好地了解并准备这一全球认可的信息安全证书。 随着信息安全领域的不断发展&…

uniapp小程序上传pdf文件

<template><view class"mainInnBox"><view class"formBox"><!-- 注意&#xff0c;如果需要兼容微信小程序&#xff0c;最好通过setRules方法设置rules规则 --><u-form :model"form" ref"uForm" :rules&quo…

抖音seo短视频账号矩阵系统源码-SaaS开源部署流程开发者技术分享

抖音seo账号矩阵系统&#xff0c;短视频矩阵系统源码&#xff0c; 短视频矩阵是一种常见的视频编码标准&#xff0c;通过多账号一键授权管理的方式&#xff0c;为运营人员打造功能强大及全面的“矩阵式“管理平台。使用矩阵系统也能保证账号的稳定性&#xff0c;降低账号的风险…

数据结构之双向链表(赋源码)

数据结构之双向链表(源码) 线性表 双向链表是线性表链式存储结构的一种&#xff0c;若对链式存储结构进行分类可以分为八种。 带头、不带头&#xff1a;指的是该连链表有无头节点&#xff0c;头节点不存放任何内容&#xff0c;它不一定是链表必备的元素&#xff0c;而一个链…

ros2--launch

是什么 ros2的多节点启动工具。 作用 通过launch工具执行launch文件&#xff0c;可以启动launch文件中配置的多个节点&#xff0c;以及这些启动的节点配置数据。 launch文件的实现 ROS2的launch文件有三种格式&#xff0c;python、xml、yaml。 链接 python语言创建launch文…

Elasticsearch 批量更新

Elasticsearch 批量更新 准备条件查询数据批量更新 准备条件 以下查询操作都基于索引crm_flow_info来操作&#xff0c;索引已经建过了&#xff0c;本文主要讲Elasticsearch批量更新指定字段语句&#xff0c;下面开始写更新语句执行更新啦&#xff01; 查询数据 查询指定shif…

微服务实战系列之玩转Docker(三)

前言 镜像&#xff08;Image&#xff09;作为Docker的“水源”&#xff0c;取之于它&#xff0c;用之于它。这对于立志成为运维管理的撒手锏——Docker而言&#xff0c;重要性不言而喻。 我们在虚拟机时代&#xff08;当然现在依然ing…&#xff09;&#xff0c;如何快速完成…