OAI NR nr-uesoftmodem解析
编译和仿真命令
基于版本:OAI_develop_210827。对nr-uesoftmodem,也就是 gUE进行解析。
下载后编译 先用git init命令,然后chmod 777 -R把文件夹内权限设置一下。
develop的编译:
sudo ./build_oai -w USRP --eNB --nrUE --gNB -g -G -V -x -P --ue-trace --ue-timing --build-lib telnetsrv --build-lib all
NR_UE_SA的编译:
sudo ./build_oai -w USRP --eNB --nrUE --gNB -g -G -P --build-lib all
分别用-P和取消-P分别编译一次。
gdb 仿真:
ue端:
sudo RFSIMULATOR=127.0.0.1 ./nr-uesoftmodem --rfsim --phy-test --rrc_config_path ./ -d
gNB端: (在ubuntu终端中输入export RFSIMULATOR=server,并用env命令查看)
sudo cgdb --args ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf --rfsim --phy-test -d --command set enviroment RFSIMULATOR=server --rfsimulator.options saviq
usrp X310调试和仿真:
gNB端:
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf --phy-test -d
UE端调试:
sudo ./nr-uesoftmodem --numerology 1 -r 106 --ue-rxgain 40 --usrp-args addr=192.168.40.2 --phy-test --rrc_config_path ./ -d --clock-source 1
UE的参数配置说明见nr-uesoftmodem.h里面的结构体:CMDLINE_NRUE_PHYPARAMS_DESC。重要的是两个参数:-r 106(NRB)和收发均采用外部时钟或者gps。
读取配置
调试命令:
对NR_SSB的一些配置(读取init_symbol_rotation()运行后的UE[CC_id]->frame_parms结构体):
{freq_range = nr_FR1, N_RB_DL = 106, N_RB_UL = 106, N_RBG = 0 '\000', N_RBGS = 0 '\000',
nr_band = 78, dl_CarrierFreq = 3619080000, ul_CarrierFreq = 3619080000, att_tx = 0,
att_rx = 0, frame_type = TDD, tdd_config = 3 '\003', Nid_cell = 0, subcarrier_spacing =
30000, threequarter_fs = 0 '\000', ofdm_symbol_size = 2048, nb_prefix_samples = 144,
nb_prefix_samples0 = 176, first_carrier_offset = 1412, symbols_per_slot = 14,
slots_per_subframe = 2, slots_per_frame = 20, samples_per_subframe = 61440,
get_samples_per_slot = 0x548de7 <get_samples_per_slot>, get_slot_from_timestamp = 0x0,
get_samples_slot_timestamp = 0x548ea6 <get_samples_slot_timestamp>, samples_per_slot0 =
30720,samples_per_slotN0 = 30688, samples_per_frame = 614400, samples_per_subframe_wCP =
57344, samples_per_slot_wCP = 28672, samples_per_frame_wCP = 573440, numerology_index = 1
'\001', nb_antennas_tx = 1 '\001', nb_antennas_rx = 1 '\001', nb_antenna_ports_gNB = 1
'\001', Ncp = NORMAL, symbol_rotation = {{18204, -27245, -23170, -23170, -27245, 18204,
12539, 30272, 32137, -6393, -1, -32767, -32138, -6393, -12540, 30272, 27244, 18204,
23169, -23170, -18205, -27245, -30273, 12539, 6392, 32137, 32767, 0, 18204,
-27245,-23170, -23170, -27245, 18204, 12539, 30272, 32137, -6393, 0, -32767, -32138,
-6393, -12540, 30272, 27244, 18204, 23169, -23170, -18205, -27245, -30273, 12539, 6392,32137, 32766, 0 <repeats 393 times>}, {18204, -27245, -23170, -23170, -27245, 18204,
12539, 30272, 32137, -6393, -1, -32767, -32138, -6393, -12540, 30272, 27244, 18204,
23169, -23170, -18205, -27245, -30273, 12539, 6392, 32137, 32767, 0, 18204, -27245,
-23170, -23170, -27245, 18204, 12539, 30272, 32137, -6393, 0, -32767, -32138, -6393,
-12540, 30272, 27244, 18204, 23169, -23170, -18205, -27245, -30273, 12539, 6392, 32137,
32766, 0 <repeats 393 times>}}, nushift = 0 '\000', srs_nr = {active_srs_Resource_Set = 0
'\000', number_srs_Resource_Set = 0 '\000', p_SRS_ResourceSetList = {0x0}},
ss_PBCH_BlockPower = 0, p_tdd_UL_DL_Configuration = 0x0, p_tdd_UL_DL_ConfigurationCommon2= 0x0, p_TDD_UL_DL_ConfigDedicated = 0x0, tdd_uplink_nr = {0 <repeats 320 times>},
half_frame_bit = 0 '\000', ssb_start_subcarrier = 396, ssb_type = nr_ssb_type_C, Lmax = 8
'\b', L_ssb = 9223372036854775808, N_ssb = 1 '\001', ssb_index = 0 '\000',
pbch_polar_params = {idx = 0, nextPtr = 0x0, n_max = 0 '\000', i_il = 0 '\000', i_seg = 0
'\000', n_pc = 0 '\000', n_pc_wm = 0 '\000', i_bil = 0 '\000', payloadBits = 0,
encoderLength = 0, crcParityBits = 0 '\000', crcCorrectionBits = 0 '\000', K = 0, N = 0,n = 0 '\000', crcBit= 0, interleaving_pattern = 0x0, deinterleaving_pattern = 0x0,
rate_matching_pattern = 0x0, Q_0_Nminus1 = 0x0, Q_I_N = 0x0, Q_F_N = 0x0, Q_PC_N = 0x0,
information_bit_pattern = 0x0, channel_interleaver_pattern = 0x0, crc_generator_matrix =
0x0, G_N = 0x0, G_N_tab = 0x0, groupsize = 0, rm_tab = 0x0, cprime_tab0 = {{0 <repeats
256 times>} <repeats 32 times>}, cprime_tab1 = {{0 <repeats 256 times>} <repeats 32
times>}, B_tab0 = {{0 <repeats 256 times>} <repeats 32 times>}, B_tab1 = {{0 <repeats 256times>} <repeats 32 times>}, extended_crc_generator_matrix = 0x0, nr_polar_crc = 0x0,nr_polar_aPrime = 0x0, nr_polar_APrime = 0x0, nr_polar_D = 0x0, nr_polar_E = 0x0,
nr_polar_A = 0x0, nr_polar_CPrime = 0x0, nr_polar_B = 0x0, nr_polar_U = 0x0, tree = {root= 0x0, num_nodes = 0}}}
# UE端数据接收:
由于每次发是按slot发送,接收也是按slot接收。要求收发时钟对齐(两个usrp同时接入gps),或者一个usrp参考另外一个usrp的时钟。
代码先进行同步,由nr_initial_sync()函数完成:
1. 第1步,该函数调用sync_pos= pss_synchro_nr()找到同步头。 这个函数再调用pss_search_time_nr()找到帧头位置(Peak found at pos XXX);
2. 第2步,再调用nr_gold_pbch(),随后rx_sss_nr()进行同步;
3. 第3步,检查帧是否同步上(PSS同步头是否检测成功)。
nr_initial_sync(),到 ret = nr_pbch_detection(proc, ue, 1);语句,如果检测成功返回ret=0,否则为-1;
采用usrp的话, 在(ret==0)后打断点,一直不能进入该条件。而仿真下则可以。
调用函数nr_rx_pbch()来返回ret。在该函数中,包含nr_pbch_extract(),nr_pbch_channel_compensation(),nr_pbch_quantize()、和nr_pbch_unscrambling,最终由decoderState = polar_decoder_int16()。
4.
- 仿真
UE端口, 在phy_procedures_nrUE_RX()的起始位置处(这个还是只有仿真时会运行到?),打断点,并导出数据。
导出一个slot共2048*15000=30720000
dump binary memory ssb.bin &ue->common_vars->rxdata[0][0] &ue->common_vars->rxdata[0][0]+614400*4
或者在检测到ssb后,pss_synchro_nr()的起始位置,打断点,并导出数据。
dump memory ssb.bin &PHY_vars_UE->common_vars->rxdata[0][0] &PHY_vars_UE->common_vars->rxdata[0][0]+614400*4
# 读取接收保存的文件
读取为gdb通过 命令 dump binary memory导出的文件。
matlab读取的对应代码为:
clear;clc;close all;fid = fopen('Z:\work\data\ssb.bin','r');
txdata_IQ = fread(fid,inf,'int16');
fclose(fid);txdata_I = txdata_IQ(1:2:end-1);
txdata_Q = txdata_IQ(2:2:end);
txdata_comp = txdata_I + 1j * txdata_Q;
plot(txdata_I);
图形如下:
# matlab仿真
采用5G toolbox里面的NRSynchronizationProceduresExample()进行仿真SSB,配置如下:```
burst.BlockPattern = 'Case C'; %by getSSBSubcarrierSpacing(), getting the
burst.SSBPeriodicity = 20;
burst.NFrame = 4;
burst.SSBTransmitted = [1 0 0 0];
burst.NCellID = 102;% Burst configuration related to carrier (10 MHz, see TS 38.104 Table
% 5.3.2-1):
gnb.SubcarrierSpacing = 30; %%subcarrier_spacing = 30000
gnb.NRB = 106; %%N_RB_DL=106 gnb.NRB = 52
gnb.CyclicPrefix = 'Normal';
carrierInfo = hOFDMInfo(gnb);
burst.SampleRate = carrierInfo.SamplingRate;
K = carrierInfo.NSubcarriers;
burst.FrequencyPointA = -K/2 * gnb.SubcarrierSpacing * 1e3;% Burst configuration related to MIB content:
burst.DMRSTypeAPosition = 2;
burst.PDCCHConfigSIB1 = 17;
burst.CellBarred = 0;
burst.IntraFreqReselection = 0;
burst.SubcarrierSpacingCommon = carrierInfo.SubcarrierSpacing;
burst.DisplayBurst = true;
OAI NR nr-uesoftmodem解析相关推荐
- OAI 5G NR搭建gNB和UE(更新中)
OAI 5G NR搭建gNB和nrUE 有做这个的可以加QQ群:1097302005一起交流学习 ubuntu 18.04 USRP N310 安装UHD驱动[1] 我们将在GitHub上git cl ...
- OAI NR nr-softmodem初步解析
编译和仿真命令 基于版本:OAI_develop_210827.对nr-softmodem,也就是 gnb进行解析. 下载后编译 先用git init命令,然后chmod 777 -R把文件夹内权限设 ...
- OAI 5G NR+USRP B210安装搭建
目录 前言 1. 设备环境 1.1 硬件环境 1.2 USRP 1.3 系统安装 2. 编译运行 2.1 OAI编译 2.2 OAI运行 2.3 接入测试 2.4 注意事项 3. 拓展 前言 OAI是 ...
- 5G NR 频率计算解析
网上关于NR 频率介绍的文章不少,但多为直接的规范翻译,而且对于一些关键概念理解都有偏差:下面我会结合实际配置例子来解释下关键概念: 5G在sub6Ghz下有很多band可用,具体到每个band,又可 ...
- Shell脚本-NF、FS(OFS)、RS(ORS)、NR(FNR)
1.NF:number of fileds(字段/域的个数)整数 $NF:取最后一列的字符串,等同于$1.$2,- $(NF-1), $NF等等 来看个例子吧 kdvmt@kdvmt:temp$ ls ...
- awk NR详解!awk 的内置变量 NF、NR、FNR、FS、OFS、RS、ORS
NF 字段个数,(读取的列数) NR 记录数(行号),从1开始,新的文件延续上面的计数,新文件不从1开始 FNR 读取文件的记录数(行号),从1开始,新的文件重新从1开始计数 FS 输入字段分隔符,默 ...
- awk 的内置变量 NF、NR、FNR、FS、OFS、RS、ORS
NF 字段个数,(读取的列数) NR 记录数(行号),从1开始,新的文件延续上面的计数,新文件不从1开始 FNR 读取文件的记录数(行号),从1开始,新的文件重新从1开始计数 FS 输入字段分隔符,默 ...
- awk内建变量示例详解之NR、FNR、NF
NR表示从awk开始执行后,按照记录分隔符读取的数据次数,默认的记录分隔符为换行符,因此默认的就是读取的数据行数,NR可以理解为Number of Record的缩写. 在awk处理多个输入文件的时候 ...
- 5G NR 缩略语整理
缩略语 英文全称 中文解释 BCH Broadcast channel 广播信道 BWP Bandwidth part 带宽部分 CB Code block 码块 CBG Code block gro ...
- 使用Diamond将宏基因组测序数据比对到Nr数据库
Diamond简明安装与使用教程 对全基因组的基因进行Nr注释是必不可少的一步.由于Nr数据库非常大,导致使用BLAST会消耗巨大的计算资源和时间.使用DIAMOND则能快500-20000倍,而获得 ...
最新文章
- 老梁观世界“20120713期 癌症女博士的生命箴言”
- Struts2的Action和Servlet有什么联系,区别?
- mysql分库分表备份脚本[转帖]
- JDK 10的摘要Javadoc标签
- 用new和delete运算符进行动态分配和撤销存储空间
- Gojs学习史(一):基本定义
- SQL FILESTREAM数据库中的事务日志备份
- 【搞事情】英文文档单词对比自动翻译
- UFLDL 教程学习笔记(二)反向传导算法
- poj3616(Milking Time)
- Citrix 桌面云 XenApp_XenDesktop_7.18 部署
- Centos 下安装 文泉驿 字体 Odoo
- Qt For Android 获取手机屏幕大小
- PTA练习4-11 统计素数并求和
- 零信任安全架构03-适用场景及实施建议
- ERROR: Cannot uninstall ‘certifi‘. It is a distutils installed project and thus we cannot accurately
- 第1关:MapReduce综合应用案例 — 电信数据清洗
- 郑州财经学院第54次全国计算机,听爷爷讲故事
- Linux学习笔记---阿里云
- 沐神点赞!同济子豪兄精读AI经典论文,包括图像分类、目标检测、生成对抗网络、轻量化卷积神经网络等领域...