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