5G-OAI关于物理层中PDCCH源码解析

news2024/11/27 12:37:03

        5G物理层是指5G网络的传输技术,包括无线帧、子帧、时隙、符号等方面的定义和规范。具体来说,5G物理层定义了无线帧的长度、帧结构、子帧结构、传输速率、带宽、时间同步等方面的参数,以及物理层信道的编码、调制和解调方式等方面的规范。5G物理层的传输单元是无线帧,每个无线帧由10个长度为1ms的子帧构成。在5G物理层中,时间同步是通过上下行信道的同步实现的,保证了无线通信中各个节点的同步。在5G物理层的带宽方面,5G物理层中的带宽是15/30/60/120/240kHz,这是为了支持高速移动数据和高清晰度多媒体应用。在5G物理层的层映射方面,5G物理层中的层映射将复数调制符号映射到一个或多个发射层中,以实现信道编码和调制。

5G通信物理层的概念包括以下几个方面:

  1. 物理层的传输单元:5G通信物理层中的传输单元是无线帧,每个无线帧由10个长度为1ms的子帧构成。
  2. 物理层的时间同步:5G通信物理层中的时间同步是通过上下行信道的同步实现的,保证了无线通信中各个节点的同步。
  3. 物理层的带宽:5G通信物理层中的带宽是15/30/60/120/240kHz,这是为了支持高速移动数据和高清晰度多媒体应用。
  4. 物理层的层映射:5G通信物理层中的层映射将复数调制符号映射到一个或多个发射层中,以实现信道编码和调制。

        总之,5G通信物理层的概念是为了提供高速、可靠和安全的无线通信,支持多种带宽和调制方式,满足不同应用场景的需求。

OAI 对物理信道的仿真包含 PDSCH,PDCCH,PBCH,PRACH,PUSCH,PUCCH 等信道。

实现目录:openairinterface5g/openair1/SIMULATION/LTE_PHY
模拟目录:cmake_targets/lte-simulators/build
测试用例目录:$OPENAIR1_DIR/PHY/CODING/TESTBENCH

物理信道的仿真:

  • pbchsim:PBCH(物理广播信道),包含 PBCH 信道的收发流程。
  • pdcchsim:DCI/PDCCH(下行控制信道),包含 PDCCH 信道的收发流程。
  • prachsim:PRACH(随机接入信道),包含 PRACH 信道的收发流程。
  • pucchsim:PUCCH(上行控制信道),包含 PUCCH 信道的收发流程。
  • ulsim:ULSCH/PUSCH(上行共享信道),包含 PUSCH 信道的收发流程。
  • dlsim:DLSCH/PDSCH(下行共享信道),实际上,dlsim 也包含了 PDCCH 等信道的内容,所以 dlsim 更像是一个轻量级的 LTE 物理层系统系仿真平台。
  • mbmssim:MCH/PMCH(物理多播信道)

OAI 的 SDR LTE 主要可以分为三种运行模式:

  • eNB + UE:两者都只用到了物理层(PHY),MAC 及以上的层都没有用到。适合用来验证和实现物理层的算法。
  • eNB + UE without S1:两者起到了 PHY,MAC,RLC 和 PDCP 层的功能。该模式下 OAI 会在 eNB 侧和 UE 侧各启动一个虚拟网卡 oai0,可以直接进行业务传输。这种模式非常适合用来做全协议栈的数据传输测试,算法验证等。因为没有 EPC 的影响,开发起来比较灵活。
  • EPC + eNB + UE:该模式下,OAI 把 LTE 的整个协议栈都运行起来了。当然,也可以直接用商用终端(e.g. 手机,LTE 数据卡)接入 eNB,甚至可以通过 EPC 的 SPGW 连接互联网。简而言之,这就是一个完整的伪基站。

NOTE:上述三个运行模式都可以与其他的 SDR 平台互相兼容。比如使用 srsUE 替换 OAI UE,或者把 OAI 的 EPC 换成 Amarisoft MME。

接下来分析LTE下PHY的目录格式:

每一个目录包含猪少一个defs.h(结构体和函数的声明),vars.h(变量的声明)和extern.h(外部变量)
1 . CODING Turbo和卷积码,编码和解码操作,速率匹配,crc生成部分代码
1.1 TESTBENCH 独立的测试单元(信道编解码的)
2. INIT 在vars.h中定义的变量,在这里面初始化(分配内存)
3. LTE_ESTIMATION 定时、频偏、信道估计
4. LTE_REFSIG LTE参考信号生成(36211)
5. LTE_TRANSPORT 上层循环(每个信道的)
6. MODULATION 调制解调操作(FFT/SC-FDMA)
7. TOOLS FFT/IFFT,向量运算,矩阵乘法等等
7.1 FFTTEST 专门测试FFT的
8. defs.h
9. extern.h
10. impl_defs.h
11. impl_defs_lte.h
12. impl_defs_top.h
13. spec_defs.h
14. spec_defs_top.h
15. types.h
16. vars.h

SCHED大目录(调度不同的物理层函数)

SIMULATION大目录(PHY仿真函数)

5G下目录:

openair1/SIMULATION/NR_PHY · develop · oai / openairinterface5G · GitLab

4G下目录:

This directory contains unitary testbenches/Monte Carlo Simulators for physical/transport channel processing:

pbchsim.c           // PBCH simulation testbench

pdcchsim.c          // PDCCH (DCI) simulation testbench, PCFICH + PHICH too (incomplete)

dlsim.c             // PDSCH simulation testbench

ulsim.c            // PUSCH simulation testbench

pucchsim.c         // PUCCH simulation testbench

framegen.c         // eNB Frame generator

5G NR在物理层下行传输信道PDCCH过程和4G LTE有一定的相似之处,可以先通过阅读4G LTE代码内容下pdcchsim.c文件内容进行分析,由此相似推出5G NR下内容的相关性分析。

以下为5G NR dlsim.c文件的解读:

242行
主函数为int main(int argc, char **argv)

  setbuf(stdout, NULL);
  char c;
  int i,aa;//,l;
  double sigma2, sigma2_dB=10, SNR, snr0=-2.0, snr1=2.0;  //信噪比
  uint8_t snr1set=0;
  float effRate;
  //float psnr;
  float eff_tp_check = 0.7;
  channel_desc_t *gNB2UE;
  //uint32_t nsymb,tx_lev,tx_lev1 = 0,tx_lev2 = 0;
  //uint8_t extended_prefix_flag=0;    //是普通CP还是拓展CP
  //int8_t interf1=-21,interf2=-21;

  FILE *input_fd=NULL,*pbch_file_fd=NULL;
  //char input_val_str[50],input_val_str2[50];

  //uint8_t frame_mod4,num_pdcch_symbols = 0;

  SCM_t channel_model = AWGN; // AWGN Rayleigh1 Rayleigh1_anticorr; //信道模型

  //double pbch_sinr;
  //int pbch_tx_ant;
  int N_RB_DL=106,mu=1;   //下行RB数量,代表带宽,可选1.4,3,5,10,15,20

  //unsigned char frame_type = 0;    //帧结构

以下为4G LTE dlsim.c文件的解读:

double blerr[4];
  short *uncoded_ber_bit=NULL;
  int osf=1;
  frame_t frame_type = FDD;  //帧结构,是FDD还是TDD
  int numCCE=0;
  //int dci_length_bytes=0,dci_length=0;
  //double channel_bandwidth = 5.0, sampling_rate=7.68;
  int common_flag=0,TPC=0;
  double cpu_freq_GHz;
  //  time_stats_t ts;//,sts,usts;
  int avg_iter,iter_trials;
  int rballocset=0;
  int test_passed=0;
  double effective_rate=0.0;
  char channel_model_input[10]="I";
  int TB0_active = 1;
  //  LTE_DL_UE_HARQ_t *dlsch0_ue_harq;
  //  LTE_DL_eNB_HARQ_t *dlsch0_eNB_harq;

907行:

if (common_flag == 0) {
    switch (N_RB_DL) {
      case 6:
        if (rballocset==0) DLSCH_RB_ALLOC = 0x3f;  //63 0x3f是6个比特

        num_pdcch_symbols = 3;
        break;

      case 25:
        if (rballocset==0) DLSCH_RB_ALLOC = 0x1fff;  //8191 5MHz是13个比特,0x1fff是13个比特

        break;

      case 50:
        if (rballocset==0) DLSCH_RB_ALLOC = 0x1ffff;  //131071 0x1ffff是17个比特

        break;

      case 100:
        if (rballocset==0) DLSCH_RB_ALLOC = 0x1ffffff;  //33554431 0x1ffffff是25个比特

        break;
    }

    NB_RB = conv_nprb(0,DLSCH_RB_ALLOC,N_RB_DL);      //NB_RB = NB_RB_DL
  } else {
    if (rballocset==0) NB_RB = 2+TPC;
    else               NB_RB = DLSCH_RB_ALLOC;

    printf("Common PDSCH: NB_RB = %d\n",NB_RB);
    AssertFatal(NB_RB <= N_RB_DL,"illegal NB_RB %d\n",NB_RB);
  }

948行:

  lte_param_init(&eNB,&UE,&ru,  //终端基站设置
                 n_tx_port,  //发送端口
                 n_tx_phy,  //发送天线
                 1,
                 n_rx,    //接收数目
                 transmission_mode,    //传输模式TM
                 extended_prefix_flag,  //CP指示
                 frame_type,  //FDD模式
                 Nid_cell,    //0
                 tdd_config,  //3,如果是FDD不考虑这个
                 N_RB_DL,    //25
                 pa,
                 threequarter_fs,  //0
                 osf,        //过采样倍数
                 perfect_ce);  //0

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

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

相关文章

k8s 滚动部署学习总结

k8s 滚动部署学习总结 滚动发布 滚动发布配置总结 定义&#xff1a; 滚动升级&#xff08;Rolling update&#xff09; 就是指每次更新部分Pod&#xff0c;而不是在同一时刻将该Service下面的所有Pod shutdown&#xff0c;然后去更新逐个更新可以避免将业务中断 使用Deploy…

GEE初学者笔记之快速上手篇

1.基础概念 (1)谷歌云平台 整个GEE是基于Google Cloud云平台的一整套API开发环境。因此整个数据的处理全部都是在Google Cloud平台上实现的&#xff0c;无需本地机器参与运算。一般开发流程是在线/离线编辑代码&#xff0c;然后提交服务器端运行&#xff0c;完成之后会输出给我…

【Jenkins 2.x 实践指南】1.4 软件工程生产力--章节小结

目录 一、生产力三要素 1. 生产力 2. IT 中的生产力 二、Devops 和 Jenkins 1. DevOps 模式定义(AWS官方定义) 2. DevOps 实践经验 2.1 持续集成 2.2 持续交付 2.3 微服务 2.4 基础设施即代码 2.5 监控和日志记录 2.6 沟通与合作 一、生产力三要素 1. 生产力 劳动…

GPT系列简介与gpt训练(nanoGPT)

generateivelt pre-trained transformer ,GPT使用transformer做特征提取行&#xff0c;单项语言模型作为训练任务 gpt 1.0 通过自左向右生成式的构建预训练任务&#xff0c;然后得到一个通用的预训练模型&#xff0c;这个模型和BERT一样都可用来做下游任务的微调。GPT-1当时在…

Firefly-rk3288 开发板Linux系统编译

前言 手上的一块Firefly-RK3288开发板&#xff0c;看了下Firefly提供的SDK&#xff0c;压缩包就有15个多G&#xff0c;直接吓退。还好最近看到了韦东山老师提供的教学资料。记下学习步骤及遇到的问题解决办法。 1、开发环境 资料提供的有百问网制作的 ubuntu18.04 虚拟机镜像…

卷积计算转换为矩阵乘计算的几种场景和方法

本文默认卷积的输入输出数据格式为NHWC。 1x1卷积 输入shape为[N, H, W, C] , filter为[Hf, Wf, Ci, Co] FH, FW都为1&#xff0c;直接把输入shape reshape为[N, H * W, C], filter reshape为[[Hf * Wf * Ci, Co],然后进行矩阵乘得到[N, H * W, Co]&#xff0c;再reshape为卷…

ChatGPT 本地部署及搭建

这篇简要说下清华开源项目 ChatGLM 本地部署的详细教程。清华开源项目 ChatGLM-6B 已发布开源版本&#xff0c;这一项目可以直接部署在本地计算机上做测试&#xff0c;无需联网即可体验与 AI 聊天的乐趣。 项目地址&#xff1a;GitHub - THUDM/ChatGLM-6B: ChatGLM-6B&#xf…

一次小破站JS代码审计出XSS漏洞思路学习

今天看了小破站一个大佬的分析&#xff0c;感觉思路很有意思&#xff0c;感兴趣的xdm可以到大佬视频下提供的链接进行测试&#xff08;传送门&#xff09;这类社交平台的XSS漏洞利用起来其实危害是特别大的&#xff0c;利用XSS能在社交平台上呈现蠕虫式的扩散&#xff0c;大部分…

redis内存回收——过期、淘汰

DB结构删除策略惰性删除周期删除SLOWFAST淘汰策略redis内存设置过大时会增加同步等操作的复杂度 DB结构 /* Redis database representation. There are multiple databases identified* by integers from 0 (the default database) up to the max configured* database. The …

es 搜索中同时包含 “query“ 和 “filter“ 子句

Elasticsearch支持很多查询方式&#xff0c;其中一种就是DSL&#xff0c;它是把请求写在JSON里面&#xff0c;然后进行相关的查询。 一、Query DSL 与 Filter DSL DSL查询语言中存在两种&#xff1a;查询DSL&#xff08;query DSL&#xff09;和过滤DSL&#xff08;filter DSL…

数据库管理-第六十八期 Oracle 23c的其他(20230417)

数据库管理 2023-04-17第六十八期 Oracle 23c的其他1 DGPDB2 无锁并发总结第六十八期 Oracle 23c的其他 由于Oracle 23c的文档相对较少&#xff0c;一是当前文档主要面向开发人员&#xff0c;二是感觉实际内容还在不断增加&#xff0c;主要还有一点就是各种新特性的在官方文档…

几分种学会React Router v6使用

React路由可以实现页面间的切换。 传送门&#xff1a;英文文档 中文教程&#xff1a; https://www.reactrouter.cn/docs/getting-started/tutorial 1.基础使用 react 需求&#xff1a;实现一个普通的底部导航切换 1.安装react-router npm i react-router-dom62.配置根组件…

C#调试与测试 | DebuggerDisplay使用技巧

DebuggerDisplay使用技巧 文章目录DebuggerDisplay使用技巧前言DebuggerDisplay介绍示例代码前言 当你在开发一个大型的应用程序时&#xff0c;调试是一个不可避免的任务。调试器是你的好朋友&#xff0c;但是有时候它并不能直接给你所需的信息。这时&#xff0c;就需要使用 C…

线上问题排查异闻录

如何解决堆内存溢出问题 OOM有很多种情况啊&#xff0c;这里就先讲解最常见也是最容易观测的java.lang.OutOfMemoryError: Java heap space&#xff0c;也就是堆内存溢出。 发现 启动Java程序的时候&#xff0c;最好参数加上-XX:HeapDumpOnOutOfMemoryError&#xff0c;该参…

【RabbitMQ】RabbitMQ控制台的使用

一、访问控制台页面 如果在本机上装了RabbitMQ则在浏览器访问127.0.0.1:15672,如果在服务器装了RabbitMQ则通过在浏览器输入urlip:15762来访问 登录后进入主页 二、添加RabbitMQ用户 进入主页后选择Admin&#xff0c;对应找到添加用户选择输入信息后即可完成添加 三、添加Rab…

GROUP BY 与 聚合函数、 HAVING 与 ORDER BY-MySQL数据库 - 分组选择数据(头歌实践教学平台)

文章目的初衷是希望学习笔记分享给更多的伙伴&#xff0c;并无盈利目的&#xff0c;尊重版权&#xff0c;如有侵犯&#xff0c;请官方工作人员联系博主谢谢。 目录 第1关&#xff1a;GROUP BY 与 聚合函数 任务描述 相关知识 GROUP BY与聚合函数的使用 编程要求 第2关&…

交通 | 应用Benders分解方法解决多车生产路由问题

论文解读​ 曲晨辉&#xff0c;王飞龙 1 知识补充和文章贡献 2.1 IRP (Inventory routing problems) IRP关注的是在一个给定的规划范围内&#xff0c;从一个设施到一组客户的单一产品分配。客户以给定的速度消费产品&#xff0c;并可将产品的库存维持在一个特定的水平上。一组…

HTB-SolidState

HTB-SolidState信息收集80端口Apache Jamesmindyrbash绕过mindy -> root总结信息收集 80端口 目录扫描 从/README.txt文件里知道他们在捣鼓一个新的秘密项目&#xff0c;这个新的秘密项目就是一个新的网页外观。 80端口先点到为止&#xff0c;免得进兔子洞。 Apache James …

基于SpringBoot技术点餐系统的设计与实现(论文+源码)_kaic

摘 要 饮食行业的发展推动了服务的提升&#xff0c;在线点餐服务模式随之产生。相比于传统点餐&#xff0c;在线点餐更加方便地浏览菜品&#xff0c;挑选菜品&#xff0c;有更好的用餐体验。系统的使用减少了人工成本&#xff0c;方便数据统计&#xff0c;便于提供更优质的服务…

大数据学习路线图(2023完整版)适合收藏

大数据开发是一门涉及处理和分析大规模数据的技术领域&#xff0c;随着大数据技术的不断发展和应用&#xff0c;对大数据开发人员的需求也在逐渐增加。就业前景相对较好&#xff0c;尤其在科技行业和数据驱动型企业中。大数据开发的前景还是有很多优势的&#xff0c;就业范围广…