mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-13 04:30:28 +00:00
docs: add a step-by-step guide for OAI ZMQ radio
Added a tutorial describing different ways to use OAI ZMQ radio: - Connect OAI gNB and OAI NR UE - Connect OCUDU split8 gNB and OAI NR UE - Connect OAI gNB and OAI NR UE and inject noise in Downlink using GNU radio companion sample app Signed-off-by: Bartosz Podrygajlo <bartosz.podrygajlo@openairinterface.org>
This commit is contained in:
@@ -58,6 +58,7 @@ There is some general information in the [OpenAirInterface Gitlab Wiki](https://
|
||||
- [How to setup gNB frequency](./gNB_frequency_setup.md)
|
||||
- [How to use the RT data recording app](./data_recording.md)
|
||||
- [How to use packages](./packages.md)
|
||||
- [How to use OAI ZMQ radio](./zmq_tutorial.md)
|
||||
|
||||
Legacy unmaintained files:
|
||||
- [`L2NFAPI_NOS1.md`](./L2NFAPI_NOS1.md), [`L2NFAPI_S1.md`](./L2NFAPI_S1.md):
|
||||
|
||||
520
doc/noise_injector.grc
Normal file
520
doc/noise_injector.grc
Normal file
@@ -0,0 +1,520 @@
|
||||
# SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
||||
options:
|
||||
parameters:
|
||||
author: ''
|
||||
catch_exceptions: 'True'
|
||||
category: '[GRC Hier Blocks]'
|
||||
cmake_opt: ''
|
||||
comment: ''
|
||||
copyright: ''
|
||||
description: ''
|
||||
gen_cmake: 'On'
|
||||
gen_linking: dynamic
|
||||
generate_options: qt_gui
|
||||
hier_block_src_path: '.:'
|
||||
id: untitled
|
||||
max_nouts: '0'
|
||||
output_language: python
|
||||
placement: (0,0)
|
||||
qt_qss_theme: ''
|
||||
realtime_scheduling: ''
|
||||
run: 'True'
|
||||
run_command: '{python} -u {filename}'
|
||||
run_options: prompt
|
||||
sizing_mode: fixed
|
||||
thread_safe_setters: ''
|
||||
title: Simple noise injector
|
||||
window_size: (1000,1000)
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [56, 72.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
|
||||
blocks:
|
||||
- name: noise_amp
|
||||
id: variable_qtgui_range
|
||||
parameters:
|
||||
comment: ''
|
||||
gui_hint: ''
|
||||
label: ''
|
||||
min_len: '200'
|
||||
orient: QtCore.Qt.Horizontal
|
||||
rangeType: float
|
||||
start: '0'
|
||||
step: '0.001'
|
||||
stop: '1'
|
||||
value: '0'
|
||||
widget: counter_slider
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [376, 56.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: samp_rate
|
||||
id: variable
|
||||
parameters:
|
||||
comment: ''
|
||||
value: '32000000'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [240, 72.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: analog_fastnoise_source_x_0
|
||||
id: analog_fastnoise_source_x
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
amp: noise_amp
|
||||
comment: ''
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
noise_type: analog.GR_GAUSSIAN
|
||||
samples: '8192'
|
||||
seed: '0'
|
||||
type: complex
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [304, 224.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: blocks_add_xx_0
|
||||
id: blocks_add_xx
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
num_inputs: '2'
|
||||
type: complex
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [624, 296.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: blocks_throttle2_0_0
|
||||
id: blocks_throttle2
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
comment: ''
|
||||
ignoretag: 'True'
|
||||
limit: auto
|
||||
maximum: '0.1'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
samples_per_second: samp_rate
|
||||
type: complex
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [328, 384.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: qtgui_freq_sink_x_0
|
||||
id: qtgui_freq_sink_x
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
alpha1: '1.0'
|
||||
alpha10: '1.0'
|
||||
alpha2: '1.0'
|
||||
alpha3: '1.0'
|
||||
alpha4: '1.0'
|
||||
alpha5: '1.0'
|
||||
alpha6: '1.0'
|
||||
alpha7: '1.0'
|
||||
alpha8: '1.0'
|
||||
alpha9: '1.0'
|
||||
autoscale: 'False'
|
||||
average: '1.0'
|
||||
axislabels: 'True'
|
||||
bw: samp_rate
|
||||
color1: '"blue"'
|
||||
color10: '"dark blue"'
|
||||
color2: '"red"'
|
||||
color3: '"green"'
|
||||
color4: '"black"'
|
||||
color5: '"cyan"'
|
||||
color6: '"magenta"'
|
||||
color7: '"yellow"'
|
||||
color8: '"dark red"'
|
||||
color9: '"dark green"'
|
||||
comment: ''
|
||||
ctrlpanel: 'False'
|
||||
fc: '0'
|
||||
fftsize: '1024'
|
||||
freqhalf: 'True'
|
||||
grid: 'False'
|
||||
gui_hint: ''
|
||||
label: Relative Gain
|
||||
label1: ''
|
||||
label10: ''''''
|
||||
label2: ''''''
|
||||
label3: ''''''
|
||||
label4: ''''''
|
||||
label5: ''''''
|
||||
label6: ''''''
|
||||
label7: ''''''
|
||||
label8: ''''''
|
||||
label9: ''''''
|
||||
legend: 'True'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
name: '""'
|
||||
nconnections: '1'
|
||||
norm_window: 'False'
|
||||
showports: 'False'
|
||||
tr_chan: '0'
|
||||
tr_level: '0.0'
|
||||
tr_mode: qtgui.TRIG_MODE_FREE
|
||||
tr_tag: '""'
|
||||
type: complex
|
||||
units: dB
|
||||
update_time: '0.10'
|
||||
width1: '1'
|
||||
width10: '1'
|
||||
width2: '1'
|
||||
width3: '1'
|
||||
width4: '1'
|
||||
width5: '1'
|
||||
width6: '1'
|
||||
width7: '1'
|
||||
width8: '1'
|
||||
width9: '1'
|
||||
wintype: window.WIN_BLACKMAN_hARRIS
|
||||
ymax: '10'
|
||||
ymin: '-140'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [928, 328.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: qtgui_time_sink_x_0
|
||||
id: qtgui_time_sink_x
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
alpha1: '1.0'
|
||||
alpha10: '1.0'
|
||||
alpha2: '1.0'
|
||||
alpha3: '1.0'
|
||||
alpha4: '1.0'
|
||||
alpha5: '1.0'
|
||||
alpha6: '1.0'
|
||||
alpha7: '1.0'
|
||||
alpha8: '1.0'
|
||||
alpha9: '1.0'
|
||||
autoscale: 'True'
|
||||
axislabels: 'True'
|
||||
color1: blue
|
||||
color10: dark blue
|
||||
color2: red
|
||||
color3: green
|
||||
color4: black
|
||||
color5: cyan
|
||||
color6: magenta
|
||||
color7: yellow
|
||||
color8: dark red
|
||||
color9: dark green
|
||||
comment: ''
|
||||
ctrlpanel: 'False'
|
||||
entags: 'True'
|
||||
grid: 'False'
|
||||
gui_hint: ''
|
||||
label1: Signal 1
|
||||
label10: Signal 10
|
||||
label2: Signal 2
|
||||
label3: Signal 3
|
||||
label4: Signal 4
|
||||
label5: Signal 5
|
||||
label6: Signal 6
|
||||
label7: Signal 7
|
||||
label8: Signal 8
|
||||
label9: Signal 9
|
||||
legend: 'True'
|
||||
marker1: '-1'
|
||||
marker10: '-1'
|
||||
marker2: '-1'
|
||||
marker3: '-1'
|
||||
marker4: '-1'
|
||||
marker5: '-1'
|
||||
marker6: '-1'
|
||||
marker7: '-1'
|
||||
marker8: '-1'
|
||||
marker9: '-1'
|
||||
name: Output sig
|
||||
nconnections: '1'
|
||||
size: '1024'
|
||||
srate: samp_rate
|
||||
stemplot: 'False'
|
||||
style1: '1'
|
||||
style10: '1'
|
||||
style2: '1'
|
||||
style3: '1'
|
||||
style4: '1'
|
||||
style5: '1'
|
||||
style6: '1'
|
||||
style7: '1'
|
||||
style8: '1'
|
||||
style9: '1'
|
||||
tr_chan: '0'
|
||||
tr_delay: '0'
|
||||
tr_level: '0.0'
|
||||
tr_mode: qtgui.TRIG_MODE_FREE
|
||||
tr_slope: qtgui.TRIG_SLOPE_POS
|
||||
tr_tag: '""'
|
||||
type: complex
|
||||
update_time: '0.10'
|
||||
width1: '1'
|
||||
width10: '1'
|
||||
width2: '1'
|
||||
width3: '1'
|
||||
width4: '1'
|
||||
width5: '1'
|
||||
width6: '1'
|
||||
width7: '1'
|
||||
width8: '1'
|
||||
width9: '1'
|
||||
ylabel: Amplitude
|
||||
ymax: '1'
|
||||
ymin: '-1'
|
||||
yunit: '""'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [928, 192.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: qtgui_time_sink_x_1
|
||||
id: qtgui_time_sink_x
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
alpha1: '1.0'
|
||||
alpha10: '1.0'
|
||||
alpha2: '1.0'
|
||||
alpha3: '1.0'
|
||||
alpha4: '1.0'
|
||||
alpha5: '1.0'
|
||||
alpha6: '1.0'
|
||||
alpha7: '1.0'
|
||||
alpha8: '1.0'
|
||||
alpha9: '1.0'
|
||||
autoscale: 'True'
|
||||
axislabels: 'True'
|
||||
color1: blue
|
||||
color10: dark blue
|
||||
color2: red
|
||||
color3: green
|
||||
color4: black
|
||||
color5: cyan
|
||||
color6: magenta
|
||||
color7: yellow
|
||||
color8: dark red
|
||||
color9: dark green
|
||||
comment: ''
|
||||
ctrlpanel: 'False'
|
||||
entags: 'True'
|
||||
grid: 'False'
|
||||
gui_hint: ''
|
||||
label1: Signal 1
|
||||
label10: Signal 10
|
||||
label2: Signal 2
|
||||
label3: Signal 3
|
||||
label4: Signal 4
|
||||
label5: Signal 5
|
||||
label6: Signal 6
|
||||
label7: Signal 7
|
||||
label8: Signal 8
|
||||
label9: Signal 9
|
||||
legend: 'True'
|
||||
marker1: '-1'
|
||||
marker10: '-1'
|
||||
marker2: '-1'
|
||||
marker3: '-1'
|
||||
marker4: '-1'
|
||||
marker5: '-1'
|
||||
marker6: '-1'
|
||||
marker7: '-1'
|
||||
marker8: '-1'
|
||||
marker9: '-1'
|
||||
name: Noise
|
||||
nconnections: '1'
|
||||
size: '1024'
|
||||
srate: samp_rate
|
||||
stemplot: 'False'
|
||||
style1: '1'
|
||||
style10: '1'
|
||||
style2: '1'
|
||||
style3: '1'
|
||||
style4: '1'
|
||||
style5: '1'
|
||||
style6: '1'
|
||||
style7: '1'
|
||||
style8: '1'
|
||||
style9: '1'
|
||||
tr_chan: '0'
|
||||
tr_delay: '0'
|
||||
tr_level: '0.0'
|
||||
tr_mode: qtgui.TRIG_MODE_FREE
|
||||
tr_slope: qtgui.TRIG_SLOPE_POS
|
||||
tr_tag: '""'
|
||||
type: complex
|
||||
update_time: '0.10'
|
||||
width1: '1'
|
||||
width10: '1'
|
||||
width2: '1'
|
||||
width3: '1'
|
||||
width4: '1'
|
||||
width5: '1'
|
||||
width6: '1'
|
||||
width7: '1'
|
||||
width8: '1'
|
||||
width9: '1'
|
||||
ylabel: Amplitude
|
||||
ymax: '1'
|
||||
ymin: '-1'
|
||||
yunit: '""'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [744, 104.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: qtgui_waterfall_sink_x_0
|
||||
id: qtgui_waterfall_sink_x
|
||||
parameters:
|
||||
affinity: ''
|
||||
alias: ''
|
||||
alpha1: '1.0'
|
||||
alpha10: '1.0'
|
||||
alpha2: '1.0'
|
||||
alpha3: '1.0'
|
||||
alpha4: '1.0'
|
||||
alpha5: '1.0'
|
||||
alpha6: '1.0'
|
||||
alpha7: '1.0'
|
||||
alpha8: '1.0'
|
||||
alpha9: '1.0'
|
||||
axislabels: 'True'
|
||||
bw: samp_rate
|
||||
color1: '0'
|
||||
color10: '0'
|
||||
color2: '0'
|
||||
color3: '0'
|
||||
color4: '0'
|
||||
color5: '0'
|
||||
color6: '0'
|
||||
color7: '0'
|
||||
color8: '0'
|
||||
color9: '0'
|
||||
comment: ''
|
||||
fc: '0'
|
||||
fftsize: '1024'
|
||||
freqhalf: 'True'
|
||||
grid: 'False'
|
||||
gui_hint: ''
|
||||
int_max: '10'
|
||||
int_min: '-140'
|
||||
label1: ''
|
||||
label10: ''
|
||||
label2: ''
|
||||
label3: ''
|
||||
label4: ''
|
||||
label5: ''
|
||||
label6: ''
|
||||
label7: ''
|
||||
label8: ''
|
||||
label9: ''
|
||||
legend: 'True'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
name: '""'
|
||||
nconnections: '1'
|
||||
showports: 'False'
|
||||
type: complex
|
||||
update_time: '0.10'
|
||||
wintype: window.WIN_BLACKMAN_hARRIS
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [1104, 256.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: zeromq_rep_sink_0
|
||||
id: zeromq_rep_sink
|
||||
parameters:
|
||||
address: tcp://127.0.0.1:4446
|
||||
affinity: ''
|
||||
alias: ''
|
||||
bind: 'True'
|
||||
comment: ''
|
||||
hwm: '-1'
|
||||
pass_tags: 'False'
|
||||
timeout: '100'
|
||||
type: complex
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [752, 432.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
- name: zeromq_req_source_0
|
||||
id: zeromq_req_source
|
||||
parameters:
|
||||
address: tcp://127.0.0.1:4445
|
||||
affinity: ''
|
||||
alias: ''
|
||||
bind: 'False'
|
||||
comment: ''
|
||||
hwm: '-1'
|
||||
maxoutbuf: '0'
|
||||
minoutbuf: '0'
|
||||
pass_tags: 'False'
|
||||
timeout: '100'
|
||||
type: complex
|
||||
vlen: '1'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
bus_structure: null
|
||||
coordinate: [32, 240.0]
|
||||
rotation: 0
|
||||
state: enabled
|
||||
|
||||
connections:
|
||||
- [analog_fastnoise_source_x_0, '0', blocks_add_xx_0, '0']
|
||||
- [analog_fastnoise_source_x_0, '0', qtgui_time_sink_x_1, '0']
|
||||
- [blocks_add_xx_0, '0', qtgui_freq_sink_x_0, '0']
|
||||
- [blocks_add_xx_0, '0', qtgui_time_sink_x_0, '0']
|
||||
- [blocks_add_xx_0, '0', qtgui_waterfall_sink_x_0, '0']
|
||||
- [blocks_add_xx_0, '0', zeromq_rep_sink_0, '0']
|
||||
- [blocks_throttle2_0_0, '0', blocks_add_xx_0, '1']
|
||||
- [zeromq_req_source_0, '0', blocks_throttle2_0_0, '0']
|
||||
|
||||
metadata:
|
||||
file_format: 1
|
||||
grc_version: 3.10.9.2
|
||||
177
doc/zmq_tutorial.md
Normal file
177
doc/zmq_tutorial.md
Normal file
@@ -0,0 +1,177 @@
|
||||
# ZMQ Radio Tutorial
|
||||
|
||||
This tutorial provides instructions on how to use the ZeroMQ (ZMQ) radio implementation in OpenAirInterface. The ZMQ
|
||||
radio allows for simulating the radio link over a network using ZMQ sockets, which is useful for development, testing,
|
||||
and CI/CD without the need for physical SDR hardware.
|
||||
|
||||
It currently supports two main scenarios:
|
||||
1. Connecting an **OAI gNB** with an **OAI NR UE**.
|
||||
2. Connecting an **OCUDU gNB** (Split 8) with an **OAI NR UE**.
|
||||
3. Using GNU Radio companion to inject noise in DL between **OAI gNB** and **OAI NR UE**.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before starting, ensure you have the following dependencies installed on your system:
|
||||
|
||||
- **ZeroMQ development libraries**:
|
||||
```bash
|
||||
sudo apt-get install libzmq3-dev
|
||||
```
|
||||
- **OAI Dependencies**: Ensure you have followed the standard OAI build instructions to install necessary system
|
||||
dependencies.
|
||||
|
||||
|
||||
## Compilation
|
||||
|
||||
To use the ZMQ radio, you need to build the `oai_zmqdevif` library along with the softmodems.
|
||||
|
||||
Configure the build:
|
||||
|
||||
```bash
|
||||
cmake ../ -DOAI_ZMQ=ON
|
||||
```
|
||||
|
||||
Compile:
|
||||
|
||||
```bash
|
||||
cmake --build . --target nr-softmodem nr-uesoftmodem ldpc params_libconfig zmq_radio
|
||||
```
|
||||
|
||||
## Scenario 1: OAI gNB <-> OAI NR UE
|
||||
|
||||
In this scenario, both the gNB and the UE are running OAI code and communicate over ZMQ.
|
||||
|
||||
### 1. Start the gNB
|
||||
|
||||
Run the gNB with the `oai_zmqdevif` device name. Note the mapping of TX/RX ports.
|
||||
|
||||
```bash
|
||||
sudo ./nr-softmodem -O ../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6 --device.name oai_zmqdevif --zmq.[0].tx_channels tcp://127.0.0.1:4556 --zmq.[0].rx_channels tcp://127.0.0.1:4557
|
||||
```
|
||||
|
||||
### 2. Start the UE
|
||||
|
||||
Start the UE and connect it to the ports exposed by the gNB. Note that the UE's TX port should match the gNB's RX port,
|
||||
and vice versa.
|
||||
|
||||
```bash
|
||||
sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --ssb 516 --device.name oai_zmqdevif --zmq.[0].tx_channels tcp://127.0.0.1:4557 --zmq.[0].rx_channels tcp://127.0.0.1:4556
|
||||
```
|
||||
|
||||
## Scenario 2: OCUDU gNB (Split 8) <-> OAI NR UE
|
||||
|
||||
This scenario demonstrates interoperability between the OCUDU project's Split 8 gNB and the OAI NR UE.
|
||||
|
||||
### 1. Start the Core Network
|
||||
|
||||
Deploy the OAI 5G Core Network using Docker Compose.
|
||||
|
||||
```bash
|
||||
cd doc/tutorial_resources/oai-cn5g
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### 2. Configure and Start OCUDU gNB
|
||||
|
||||
Create a `config.yml` in your OCUDU directory with the following content:
|
||||
|
||||
```yaml
|
||||
cu_cp:
|
||||
amf:
|
||||
addrs: 192.168.70.132
|
||||
port: 38412
|
||||
bind_addrs: 0.0.0.0
|
||||
supported_tracking_areas:
|
||||
- tac: 1
|
||||
plmn_list:
|
||||
- plmn: "00101"
|
||||
tai_slice_support_list:
|
||||
- sst: 1
|
||||
|
||||
ru_sdr:
|
||||
device_driver: zmq
|
||||
device_args: tx_port=tcp://127.0.0.1:4558,rx_port=tcp://127.0.0.1:4556
|
||||
srate: 23.04
|
||||
tx_gain: 25
|
||||
rx_gain: 25
|
||||
|
||||
cell_cfg:
|
||||
dl_arfcn: 632628
|
||||
band: 78
|
||||
channel_bandwidth_MHz: 20
|
||||
common_scs: 30
|
||||
plmn: "00101"
|
||||
tac: 1
|
||||
pci: 1
|
||||
tdd_ul_dl_cfg:
|
||||
dl_ul_tx_period: 5
|
||||
nof_dl_slots: 3
|
||||
nof_dl_symbols: 10
|
||||
nof_ul_slots: 1
|
||||
nof_ul_symbols: 2
|
||||
csi:
|
||||
csi_rs_enabled: false
|
||||
pucch:
|
||||
formats: f0_and_f2
|
||||
nof_cell_csi_res: 0
|
||||
|
||||
log:
|
||||
filename: gnb.log
|
||||
all_level: debug
|
||||
|
||||
pcap:
|
||||
mac_enable: false
|
||||
mac_filename: /tmp/gnb_mac.pcap
|
||||
ngap_enable: false
|
||||
ngap_filename: /tmp/gnb_ngap.pcap
|
||||
```
|
||||
|
||||
Run the OCUDU gNB:
|
||||
|
||||
```bash
|
||||
sudo ./apps/gnb_split_8/gnb -c config.yml
|
||||
```
|
||||
|
||||
### 3. Start OAI NR UE
|
||||
|
||||
Connect the OAI NR UE to the OCUDU gNB via ZMQ.
|
||||
|
||||
```
|
||||
sudo ./nr-uesoftmodem -r 51 -E --numerology 1 --band 78 -C 3489420000 --ssb 0 --uecap_file ../targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap_ports1.xml --log_config.global_log_options level,nocolor,time --device.name oai_zmqdevif --zmq.[0].tx_channels tcp://127.0.0.1:4556 --zmq.[0].rx_channels tcp://127.0.0.1:4558 -O ../ci-scripts/conf_files/nrue.uicc.conf --uicc0.imsi 001010000000001
|
||||
```
|
||||
|
||||
> Once connected, you can perform standard network tests like `ping` or `iperf` between the UE and the core network.
|
||||
|
||||
## Scenario 3: Inject noise using GNU radio companion
|
||||
|
||||
In this scenario, you can inject noise between OAI gNB and OAI NR UE. An example GNU radio companion project
|
||||
is added in `noise_injector.grc`. The program expects a ZMQ radio stream at tcp://127.0.0.1:4445 and outputs the
|
||||
same samples with added noise at tcp://127.0.0.1:4446
|
||||
|
||||
Architecture
|
||||
```mermaid
|
||||
graph TD
|
||||
nr_softmodem -- "DL - port 4445" --> noise_injector
|
||||
noise_injector -- "DL+ noise - port 4446" --> nr_uesoftmodem
|
||||
nr_uesoftmodem -- "UL - port 4557"--> nr_softmodem
|
||||
```
|
||||
|
||||
### 1. Start the gNB
|
||||
|
||||
```
|
||||
sudo ./nr-softmodem -O ../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6 --device.name oai_zmqdevif --zmq.[0].tx_channels tcp://127.0.0.1:4445 --zmq.[0].rx_channels tcp://127.0.0.1:4557
|
||||
```
|
||||
|
||||
### 2. Start the UE
|
||||
|
||||
```
|
||||
sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --ssb 516 --device.name oai_zmqdevif --zmq.[0].tx_channels tcp://127.0.0.1:4557 --zmq.[0].rx_channels tcp://127.0.0.1:4446
|
||||
```
|
||||
|
||||
### 3. Start the GNU radio companion program
|
||||
|
||||
You should see a window with an input field labelled noise_amp and a frequency domain waterfall graph of the gNBs
|
||||
downlink signal.
|
||||
|
||||
Now you should be able to change the injected noise and see the UE loose DL connection. Use either the slider
|
||||
or the input field to change noise amplitude.
|
||||
Reference in New Issue
Block a user