编译和仿真命令

基于版本: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解析相关推荐

  1. OAI 5G NR搭建gNB和UE(更新中)

    OAI 5G NR搭建gNB和nrUE 有做这个的可以加QQ群:1097302005一起交流学习 ubuntu 18.04 USRP N310 安装UHD驱动[1] 我们将在GitHub上git cl ...

  2. OAI NR nr-softmodem初步解析

    编译和仿真命令 基于版本:OAI_develop_210827.对nr-softmodem,也就是 gnb进行解析. 下载后编译 先用git init命令,然后chmod 777 -R把文件夹内权限设 ...

  3. 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是 ...

  4. 5G NR 频率计算解析

    网上关于NR 频率介绍的文章不少,但多为直接的规范翻译,而且对于一些关键概念理解都有偏差:下面我会结合实际配置例子来解释下关键概念: 5G在sub6Ghz下有很多band可用,具体到每个band,又可 ...

  5. Shell脚本-NF、FS(OFS)、RS(ORS)、NR(FNR)

    1.NF:number of fileds(字段/域的个数)整数 $NF:取最后一列的字符串,等同于$1.$2,- $(NF-1), $NF等等 来看个例子吧 kdvmt@kdvmt:temp$ ls ...

  6. awk NR详解!awk 的内置变量 NF、NR、FNR、FS、OFS、RS、ORS

    NF 字段个数,(读取的列数) NR 记录数(行号),从1开始,新的文件延续上面的计数,新文件不从1开始 FNR 读取文件的记录数(行号),从1开始,新的文件重新从1开始计数 FS 输入字段分隔符,默 ...

  7. awk 的内置变量 NF、NR、FNR、FS、OFS、RS、ORS

    NF 字段个数,(读取的列数) NR 记录数(行号),从1开始,新的文件延续上面的计数,新文件不从1开始 FNR 读取文件的记录数(行号),从1开始,新的文件重新从1开始计数 FS 输入字段分隔符,默 ...

  8. awk内建变量示例详解之NR、FNR、NF

    NR表示从awk开始执行后,按照记录分隔符读取的数据次数,默认的记录分隔符为换行符,因此默认的就是读取的数据行数,NR可以理解为Number of Record的缩写. 在awk处理多个输入文件的时候 ...

  9. 5G NR 缩略语整理

    缩略语 英文全称 中文解释 BCH Broadcast channel 广播信道 BWP Bandwidth part 带宽部分 CB Code block 码块 CBG Code block gro ...

  10. 使用Diamond将宏基因组测序数据比对到Nr数据库

    Diamond简明安装与使用教程 对全基因组的基因进行Nr注释是必不可少的一步.由于Nr数据库非常大,导致使用BLAST会消耗巨大的计算资源和时间.使用DIAMOND则能快500-20000倍,而获得 ...

最新文章

  1. 老梁观世界“20120713期 癌症女博士的生命箴言”
  2. Struts2的Action和Servlet有什么联系,区别?
  3. mysql分库分表备份脚本[转帖]
  4. JDK 10的摘要Javadoc标签
  5. 用new和delete运算符进行动态分配和撤销存储空间
  6. Gojs学习史(一):基本定义
  7. SQL FILESTREAM数据库中的事务日志备份
  8. 【搞事情】英文文档单词对比自动翻译
  9. UFLDL 教程学习笔记(二)反向传导算法
  10. poj3616(Milking Time)
  11. Citrix 桌面云 XenApp_XenDesktop_7.18 部署
  12. Centos 下安装 文泉驿 字体 Odoo
  13. Qt For Android 获取手机屏幕大小
  14. PTA练习4-11 统计素数并求和
  15. 零信任安全架构03-适用场景及实施建议
  16. ERROR: Cannot uninstall ‘certifi‘. It is a distutils installed project and thus we cannot accurately
  17. 第1关:MapReduce综合应用案例 — 电信数据清洗
  18. 郑州财经学院第54次全国计算机,听爷爷讲故事
  19. Linux学习笔记---阿里云
  20. 沐神点赞!同济子豪兄精读AI经典论文,包括图像分类、目标检测、生成对抗网络、轻量化卷积神经网络等领域...

热门文章

  1. MATLAB索引超出矩阵维度,求大神指点错误!
  2. python自学行吗-python自学行吗
  3. 考察北京3家培训地点后的感受和疑问(转)
  4. 基于部标JT808的车载视频监控需求与EasyCVR视频融合平台解决方案设计
  5. python pandas 教程_python pandas教程入门与实战练习
  6. 【如何让图片自适应盒子大小】
  7. 【go】配置goproxy
  8. 同宿舍的程序员毕业五年的现状:有人年薪百万,有人月薪一万(转)
  9. 小白福利篇,直播APP开发的6条基本步骤
  10. Axure中继器的总结