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

5G-OAI关于物理层中PDCCH源码解析_第1张图片

        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

5G-OAI关于物理层中PDCCH源码解析_第2张图片

4G下目录:

5G-OAI关于物理层中PDCCH源码解析_第3张图片

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

你可能感兴趣的:(OAI框架,c++,网络,iot,信息与通信)