Merge remote-tracking branch 'origin/develop-CSI' into develop-CSI-Measurements
# Conflicts: # openair2/GNB_APP/gnb_paramdef.h # openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
This commit is contained in:
@@ -238,6 +238,26 @@ pipeline {
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("5G L2 Simulators") {
|
||||
when { expression {doMandatoryTests} }
|
||||
steps {
|
||||
script {
|
||||
triggerSlaveJob ('RAN-L2-Sim-Test-5G', 'Test-L2-Sim-Container-5G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
always {
|
||||
script {
|
||||
finalizeSlaveJob('RAN-L2-Sim-Test-5G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
script {
|
||||
currentBuild.result = 'FAILURE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("NSA B200 Sanity Check") {
|
||||
when { expression {doMandatoryTests} }
|
||||
steps {
|
||||
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
ue_id="$1" # UE id
|
||||
duration="$2" # Sim duration
|
||||
|
||||
shift
|
||||
shift
|
||||
|
||||
function end
|
||||
{
|
||||
exit 0
|
||||
}
|
||||
trap end INT TERM
|
||||
|
||||
echo "ip netns exec $ue_id $@ > /tmp/test_${ue_id}.log"
|
||||
ip netns exec $ue_id $@ > /tmp/test_$ue_id.log
|
||||
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
/* UE simulator configuration */
|
||||
|
||||
|
||||
/* UE simulator configuration file version 2021-06-17
|
||||
* LTE / 5G Non StandAlone
|
||||
* Copyright (C) 2019-2021 Amarisoft
|
||||
*/
|
||||
{
|
||||
#define N_ANTENNA_DL 1
|
||||
#define TDD 1
|
||||
#define CELL_BANDWIDTH 40
|
||||
#define UE_COUNT 3 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129
|
||||
|
||||
|
||||
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||
log_filename: "/tmp/ue0.log",
|
||||
|
||||
/* Enable remote API and Web interface */
|
||||
com_addr: "0.0.0.0:9002",
|
||||
|
||||
include "rf_driver/1chan.cfg",
|
||||
|
||||
/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */
|
||||
|
||||
cell_groups: [{
|
||||
group_type: "nr",
|
||||
multi_ue: true,
|
||||
cells: [{
|
||||
rf_port: 0,
|
||||
bandwidth: CELL_BANDWIDTH,
|
||||
#if TDD == 1
|
||||
band: 78,
|
||||
dl_nr_arfcn:621312,
|
||||
ssb_nr_arfcn:621312,
|
||||
|
||||
//band: 41,
|
||||
//dl_nr_arfcn:517020,
|
||||
//ssb_nr_arfcn:516990,
|
||||
#else
|
||||
band: 7,
|
||||
dl_nr_arfcn: 536020,
|
||||
ssb_nr_arfcn: 535930,
|
||||
ssb_subcarrier_spacing: 15,
|
||||
#endif
|
||||
subcarrier_spacing: 30,
|
||||
n_antenna_dl: N_ANTENNA_DL,
|
||||
n_antenna_ul: 1,
|
||||
rx_to_tx_latency:2,
|
||||
}],
|
||||
}],
|
||||
|
||||
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_bind_addr: "127.0.10.11",
|
||||
|
||||
|
||||
|
||||
ue_list: [
|
||||
{
|
||||
/* UE capabilities */
|
||||
/* USIM data */
|
||||
"ue_id" : 0,
|
||||
"imsi": "208970100001127",
|
||||
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||
"sim_algo":"milenage",
|
||||
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||
as_release: 15,
|
||||
ue_category: "nr",
|
||||
apn:"oai",
|
||||
attach_pdn_type:"ipv4",
|
||||
default_nssai: [
|
||||
{
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
],
|
||||
default_pdu_session_snssai: {
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_addr: "127.1.0.0",
|
||||
/* Enable it to create a TUN interface for each UE PDN */
|
||||
tun_setup_script: "ue-ifup",
|
||||
sim_events: [
|
||||
{
|
||||
event: "power_on",
|
||||
start_time: 5,
|
||||
},
|
||||
{
|
||||
event: "power_off",
|
||||
start_time: 30,
|
||||
}
|
||||
] /*end sim events */
|
||||
}, /*end UE object 0*/
|
||||
{
|
||||
/* UE capabilities */
|
||||
/* USIM data */
|
||||
"ue_id" : 1,
|
||||
"imsi": "208970100001128",
|
||||
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||
"sim_algo":"milenage",
|
||||
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||
as_release: 15,
|
||||
ue_category: "nr",
|
||||
apn:"oai",
|
||||
attach_pdn_type:"ipv4",
|
||||
default_nssai: [
|
||||
{
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
],
|
||||
default_pdu_session_snssai: {
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_addr: "127.1.0.0",
|
||||
/* Enable it to create a TUN interface for each UE PDN */
|
||||
tun_setup_script: "ue-ifup",
|
||||
sim_events: [
|
||||
{
|
||||
event: "power_on",
|
||||
start_time: 5,
|
||||
},
|
||||
{
|
||||
event: "power_off",
|
||||
start_time: 30,
|
||||
}
|
||||
] /*end sim events */
|
||||
}, /*end UE object 1*/
|
||||
{
|
||||
/* UE capabilities */
|
||||
/* USIM data */
|
||||
"ue_id" : 2,
|
||||
"imsi": "208970100001129",
|
||||
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||
"sim_algo":"milenage",
|
||||
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||
as_release: 15,
|
||||
ue_category: "nr",
|
||||
apn:"oai",
|
||||
attach_pdn_type:"ipv4",
|
||||
default_nssai: [
|
||||
{
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
],
|
||||
default_pdu_session_snssai: {
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_addr: "127.1.0.0",
|
||||
/* Enable it to create a TUN interface for each UE PDN */
|
||||
tun_setup_script: "ue-ifup",
|
||||
sim_events: [
|
||||
{
|
||||
event: "power_on",
|
||||
start_time: 5,
|
||||
},
|
||||
{
|
||||
event: "power_off",
|
||||
start_time: 30,
|
||||
}
|
||||
] /*end sim events */
|
||||
} /*end UE object 2*/
|
||||
],/*end UE list*/
|
||||
}/*end json*/
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
/* UE simulator configuration */
|
||||
|
||||
|
||||
/* UE simulator configuration file version 2021-06-17
|
||||
* LTE / 5G Non StandAlone
|
||||
* Copyright (C) 2019-2021 Amarisoft
|
||||
*/
|
||||
{
|
||||
#define N_ANTENNA_DL 1
|
||||
#define TDD 1
|
||||
#define CELL_BANDWIDTH 40
|
||||
#define UE_COUNT 2 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129
|
||||
|
||||
|
||||
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||
log_filename: "/tmp/ue0.log",
|
||||
|
||||
/* Enable remote API and Web interface */
|
||||
com_addr: "0.0.0.0:9002",
|
||||
|
||||
include "rf_driver/1chan.cfg",
|
||||
|
||||
/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */
|
||||
|
||||
cell_groups: [{
|
||||
group_type: "nr",
|
||||
multi_ue: true,
|
||||
cells: [{
|
||||
rf_port: 0,
|
||||
bandwidth: CELL_BANDWIDTH,
|
||||
#if TDD == 1
|
||||
band: 78,
|
||||
dl_nr_arfcn:621312,
|
||||
ssb_nr_arfcn:621312,
|
||||
|
||||
//band: 41,
|
||||
//dl_nr_arfcn:517020,
|
||||
//ssb_nr_arfcn:516990,
|
||||
#else
|
||||
band: 7,
|
||||
dl_nr_arfcn: 536020,
|
||||
ssb_nr_arfcn: 535930,
|
||||
ssb_subcarrier_spacing: 15,
|
||||
#endif
|
||||
subcarrier_spacing: 30,
|
||||
n_antenna_dl: N_ANTENNA_DL,
|
||||
n_antenna_ul: 1,
|
||||
rx_to_tx_latency:2,
|
||||
}],
|
||||
}],
|
||||
|
||||
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_bind_addr: "127.0.10.11",
|
||||
|
||||
|
||||
|
||||
ue_list: [
|
||||
{
|
||||
/* UE capabilities */
|
||||
/* USIM data */
|
||||
"ue_id" : 1,
|
||||
"imsi": "208970100001127",
|
||||
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||
"sim_algo":"milenage",
|
||||
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||
as_release: 15,
|
||||
ue_category: "nr",
|
||||
apn:"oai",
|
||||
attach_pdn_type:"ipv4",
|
||||
default_nssai: [
|
||||
{
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
],
|
||||
default_pdu_session_snssai: {
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_addr: "127.1.0.0",
|
||||
/* Enable it to create a TUN interface for each UE PDN */
|
||||
tun_setup_script: "ue-ifup",
|
||||
sim_events: [
|
||||
{
|
||||
event: "power_on",
|
||||
start_time: 5,
|
||||
},
|
||||
{
|
||||
event: "power_off",
|
||||
start_time: 30,
|
||||
}
|
||||
] /*end sim events */
|
||||
}, /*end UE object 0*/
|
||||
{
|
||||
/* UE capabilities */
|
||||
/* USIM data */
|
||||
"ue_id" : 2,
|
||||
"imsi": "208970100001128",
|
||||
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||
"sim_algo":"milenage",
|
||||
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||
as_release: 15,
|
||||
ue_category: "nr",
|
||||
apn:"oai",
|
||||
attach_pdn_type:"ipv4",
|
||||
default_nssai: [
|
||||
{
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
],
|
||||
default_pdu_session_snssai: {
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_addr: "127.1.0.0",
|
||||
/* Enable it to create a TUN interface for each UE PDN */
|
||||
tun_setup_script: "ue-ifup",
|
||||
sim_events: [
|
||||
{
|
||||
event: "power_on",
|
||||
start_time: 5,
|
||||
},
|
||||
{
|
||||
"tag": "ping",
|
||||
"prog":"oai_ext_app.sh",
|
||||
start_time: 15,
|
||||
end_time: 25,
|
||||
"args":["ping 192.168.70.136"],
|
||||
"event":"ext_app"
|
||||
},
|
||||
{
|
||||
event: "power_off",
|
||||
start_time: 30,
|
||||
}
|
||||
] /*end sim events */
|
||||
} /*end UE object 1*/
|
||||
],/*end UE list*/
|
||||
}/*end json*/
|
||||
@@ -0,0 +1,150 @@
|
||||
/* UE simulator configuration */
|
||||
|
||||
|
||||
/* UE simulator configuration file version 2021-06-17
|
||||
* LTE / 5G Non StandAlone
|
||||
* Copyright (C) 2019-2021 Amarisoft
|
||||
*/
|
||||
{
|
||||
#define N_ANTENNA_DL 1
|
||||
#define TDD 1
|
||||
#define CELL_BANDWIDTH 40
|
||||
#define UE_COUNT 2 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129
|
||||
|
||||
|
||||
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||
log_filename: "/tmp/ue0.log",
|
||||
|
||||
/* Enable remote API and Web interface */
|
||||
com_addr: "0.0.0.0:9002",
|
||||
|
||||
include "rf_driver/1chan.cfg",
|
||||
|
||||
/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */
|
||||
|
||||
cell_groups: [{
|
||||
group_type: "nr",
|
||||
multi_ue: true,
|
||||
cells: [{
|
||||
rf_port: 0,
|
||||
bandwidth: CELL_BANDWIDTH,
|
||||
#if TDD == 1
|
||||
band: 78,
|
||||
dl_nr_arfcn:621312,
|
||||
ssb_nr_arfcn:621312,
|
||||
|
||||
//band: 41,
|
||||
//dl_nr_arfcn:517020,
|
||||
//ssb_nr_arfcn:516990,
|
||||
#else
|
||||
band: 7,
|
||||
dl_nr_arfcn: 536020,
|
||||
ssb_nr_arfcn: 535930,
|
||||
ssb_subcarrier_spacing: 15,
|
||||
#endif
|
||||
subcarrier_spacing: 30,
|
||||
n_antenna_dl: N_ANTENNA_DL,
|
||||
n_antenna_ul: 1,
|
||||
rx_to_tx_latency:2,
|
||||
}],
|
||||
}],
|
||||
|
||||
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_bind_addr: "127.0.10.11",
|
||||
|
||||
|
||||
|
||||
ue_list: [
|
||||
{
|
||||
/* UE capabilities */
|
||||
/* USIM data */
|
||||
"ue_id" : 1,
|
||||
"imsi": "208970100001127",
|
||||
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||
"sim_algo":"milenage",
|
||||
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||
as_release: 15,
|
||||
ue_category: "nr",
|
||||
apn:"oai",
|
||||
attach_pdn_type:"ipv4",
|
||||
default_nssai: [
|
||||
{
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
],
|
||||
default_pdu_session_snssai: {
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_addr: "127.1.0.0",
|
||||
/* Enable it to create a TUN interface for each UE PDN */
|
||||
tun_setup_script: "ue-ifup",
|
||||
sim_events: [
|
||||
{
|
||||
event: "power_on",
|
||||
start_time: 5,
|
||||
},
|
||||
{
|
||||
"tag": "ping",
|
||||
"prog":"oai_ext_app.sh",
|
||||
start_time: 15,
|
||||
end_time: 25,
|
||||
"args":["ping 192.168.70.136"],
|
||||
"event":"ext_app"
|
||||
},
|
||||
{
|
||||
event: "power_off",
|
||||
start_time: 30,
|
||||
}
|
||||
] /*end sim events */
|
||||
}, /*end UE object 0*/
|
||||
{
|
||||
/* UE capabilities */
|
||||
/* USIM data */
|
||||
"ue_id" : 2,
|
||||
"imsi": "208970100001128",
|
||||
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||
"sim_algo":"milenage",
|
||||
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||
as_release: 15,
|
||||
ue_category: "nr",
|
||||
apn:"oai",
|
||||
attach_pdn_type:"ipv4",
|
||||
default_nssai: [
|
||||
{
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
],
|
||||
default_pdu_session_snssai: {
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_addr: "127.1.0.0",
|
||||
/* Enable it to create a TUN interface for each UE PDN */
|
||||
tun_setup_script: "ue-ifup",
|
||||
sim_events: [
|
||||
{
|
||||
event: "power_on",
|
||||
start_time: 5,
|
||||
},
|
||||
{
|
||||
"tag": "ping",
|
||||
"prog":"oai_ext_app.sh",
|
||||
start_time: 15,
|
||||
end_time: 25,
|
||||
"args":["ping 192.168.70.136"],
|
||||
"event":"ext_app"
|
||||
},
|
||||
{
|
||||
event: "power_off",
|
||||
start_time: 30,
|
||||
}
|
||||
] /*end sim events */
|
||||
} /*end UE object 1*/
|
||||
],/*end UE list*/
|
||||
}/*end json*/
|
||||
@@ -0,0 +1,150 @@
|
||||
/* UE simulator configuration */
|
||||
|
||||
|
||||
/* UE simulator configuration file version 2021-06-17
|
||||
* LTE / 5G Non StandAlone
|
||||
* Copyright (C) 2019-2021 Amarisoft
|
||||
*/
|
||||
{
|
||||
#define N_ANTENNA_DL 1
|
||||
#define TDD 1
|
||||
#define CELL_BANDWIDTH 40
|
||||
#define UE_COUNT 2 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129
|
||||
|
||||
|
||||
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||
log_filename: "/tmp/ue0.log",
|
||||
|
||||
/* Enable remote API and Web interface */
|
||||
com_addr: "0.0.0.0:9002",
|
||||
|
||||
include "rf_driver/1chan.cfg",
|
||||
|
||||
/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */
|
||||
|
||||
cell_groups: [{
|
||||
group_type: "nr",
|
||||
multi_ue: true,
|
||||
cells: [{
|
||||
rf_port: 0,
|
||||
bandwidth: CELL_BANDWIDTH,
|
||||
#if TDD == 1
|
||||
band: 78,
|
||||
dl_nr_arfcn:621312,
|
||||
ssb_nr_arfcn:621312,
|
||||
|
||||
//band: 41,
|
||||
//dl_nr_arfcn:517020,
|
||||
//ssb_nr_arfcn:516990,
|
||||
#else
|
||||
band: 7,
|
||||
dl_nr_arfcn: 536020,
|
||||
ssb_nr_arfcn: 535930,
|
||||
ssb_subcarrier_spacing: 15,
|
||||
#endif
|
||||
subcarrier_spacing: 30,
|
||||
n_antenna_dl: N_ANTENNA_DL,
|
||||
n_antenna_ul: 1,
|
||||
rx_to_tx_latency:2,
|
||||
}],
|
||||
}],
|
||||
|
||||
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_bind_addr: "127.0.10.11",
|
||||
|
||||
|
||||
|
||||
ue_list: [
|
||||
{
|
||||
/* UE capabilities */
|
||||
/* USIM data */
|
||||
"ue_id" : 1,
|
||||
"imsi": "208970100001127",
|
||||
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||
"sim_algo":"milenage",
|
||||
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||
as_release: 15,
|
||||
ue_category: "nr",
|
||||
apn:"oai",
|
||||
attach_pdn_type:"ipv4",
|
||||
default_nssai: [
|
||||
{
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
],
|
||||
default_pdu_session_snssai: {
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_addr: "127.1.0.0",
|
||||
/* Enable it to create a TUN interface for each UE PDN */
|
||||
tun_setup_script: "ue-ifup",
|
||||
sim_events: [
|
||||
{
|
||||
event: "power_on",
|
||||
start_time: 5,
|
||||
},
|
||||
{
|
||||
"tag": "ping",
|
||||
"prog":"oai_ext_app.sh",
|
||||
start_time: 20,
|
||||
end_time: 30,
|
||||
"args":["ping 192.168.70.136"],
|
||||
"event":"ext_app"
|
||||
},
|
||||
{
|
||||
event: "power_off",
|
||||
start_time: 60,
|
||||
}
|
||||
] /*end sim events */
|
||||
}, /*end UE object 0*/
|
||||
{
|
||||
/* UE capabilities */
|
||||
/* USIM data */
|
||||
"ue_id" : 2,
|
||||
"imsi": "208970100001128",
|
||||
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||
"sim_algo":"milenage",
|
||||
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||
as_release: 15,
|
||||
ue_category: "nr",
|
||||
apn:"oai",
|
||||
attach_pdn_type:"ipv4",
|
||||
default_nssai: [
|
||||
{
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
],
|
||||
default_pdu_session_snssai: {
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_addr: "127.1.0.0",
|
||||
/* Enable it to create a TUN interface for each UE PDN */
|
||||
tun_setup_script: "ue-ifup",
|
||||
sim_events: [
|
||||
{
|
||||
event: "power_on",
|
||||
start_time: 5,
|
||||
},
|
||||
{
|
||||
"tag": "ping",
|
||||
"prog":"oai_ext_app.sh",
|
||||
start_time: 40,
|
||||
end_time: 50,
|
||||
"args":["ping 192.168.70.136"],
|
||||
"event":"ext_app"
|
||||
},
|
||||
{
|
||||
event: "power_off",
|
||||
start_time: 60,
|
||||
}
|
||||
] /*end sim events */
|
||||
} /*end UE object 1*/
|
||||
],/*end UE list*/
|
||||
}/*end json*/
|
||||
@@ -0,0 +1,113 @@
|
||||
/* UE simulator configuration */
|
||||
|
||||
|
||||
|
||||
/* UE simulator configuration file version 2021-06-17
|
||||
* LTE / 5G Non StandAlone
|
||||
* Copyright (C) 2019-2021 Amarisoft
|
||||
*/
|
||||
{
|
||||
#define N_ANTENNA_DL 1
|
||||
#define TDD 1
|
||||
#define CELL_BANDWIDTH 40
|
||||
|
||||
|
||||
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||
log_filename: "/tmp/ue1.log",
|
||||
|
||||
/* Enable remote API and Web interface */
|
||||
com_addr: "0.0.0.0:9002",
|
||||
|
||||
include "rf_driver/1chan.cfg",
|
||||
|
||||
/* If true, allow the simulation of several UEs at the same time and
|
||||
allow dynamic UE creation from remote API */
|
||||
|
||||
cell_groups: [{
|
||||
group_type: "nr",
|
||||
multi_ue: false,
|
||||
cells: [{
|
||||
rf_port: 0,
|
||||
bandwidth: CELL_BANDWIDTH,
|
||||
#if TDD == 1
|
||||
band: 78,
|
||||
dl_nr_arfcn:621312,
|
||||
ssb_nr_arfcn:621312,
|
||||
|
||||
//band: 41,
|
||||
//dl_nr_arfcn:517020,
|
||||
//ssb_nr_arfcn:516990,
|
||||
#else
|
||||
band: 7,
|
||||
dl_nr_arfcn: 536020,
|
||||
ssb_nr_arfcn: 535930,
|
||||
ssb_subcarrier_spacing: 15,
|
||||
#endif
|
||||
subcarrier_spacing: 30,
|
||||
n_antenna_dl: N_ANTENNA_DL,
|
||||
n_antenna_ul: 1,
|
||||
rx_to_tx_latency:2,
|
||||
}],
|
||||
}],
|
||||
|
||||
|
||||
|
||||
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_bind_addr: "127.0.10.11",
|
||||
|
||||
ue_list: [
|
||||
{
|
||||
/* UE capabilities */
|
||||
|
||||
/* USIM data */
|
||||
|
||||
|
||||
"imsi": "208970100001127",
|
||||
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||
"sim_algo":"milenage",
|
||||
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||
|
||||
|
||||
as_release: 15,
|
||||
ue_category: "nr",
|
||||
apn:"oai",
|
||||
attach_pdn_type:"ipv4",
|
||||
default_nssai: [
|
||||
{
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
],
|
||||
|
||||
default_pdu_session_snssai: {
|
||||
sst: 1,
|
||||
sd: 66051,
|
||||
},
|
||||
|
||||
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_addr: "127.1.0.0",
|
||||
|
||||
/* Enable it to create a TUN interface for each UE PDN */
|
||||
tun_setup_script: "ue-ifup",
|
||||
|
||||
sim_events: [{
|
||||
event: "power_on",
|
||||
start_time: 5,
|
||||
}, {
|
||||
"tag": "ping",
|
||||
"prog":"oai_ext_app.sh",
|
||||
start_time: 15,
|
||||
end_time: 25,
|
||||
"args":["ping 192.168.70.136"],
|
||||
"event":"ext_app"
|
||||
|
||||
},
|
||||
{
|
||||
event: "power_off",
|
||||
start_time: 30,
|
||||
}]
|
||||
}
|
||||
],
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
/* UE simulator configuration */
|
||||
|
||||
|
||||
|
||||
/* UE simulator configuration file version 2021-06-17
|
||||
* LTE / 5G Non StandAlone
|
||||
* Copyright (C) 2019-2021 Amarisoft
|
||||
*/
|
||||
{
|
||||
#define N_ANTENNA_DL 1
|
||||
#define TDD 1
|
||||
#define CELL_BANDWIDTH 20
|
||||
|
||||
|
||||
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||
log_filename: "/tmp/ue0.log",
|
||||
|
||||
/* Enable remote API and Web interface */
|
||||
com_addr: "0.0.0.0:9002",
|
||||
|
||||
include "rf_driver/1chan.cfg",
|
||||
|
||||
/* If true, allow the simulation of several UEs at the same time and
|
||||
allow dynamic UE creation from remote API */
|
||||
|
||||
cell_groups: [{
|
||||
group_type: "nr",
|
||||
multi_ue: false,
|
||||
cells: [{
|
||||
rf_port: 0,
|
||||
bandwidth: CELL_BANDWIDTH,
|
||||
#if TDD == 1
|
||||
// band: 78,
|
||||
// dl_nr_arfcn:621312,
|
||||
// ssb_nr_arfcn:621312,*/
|
||||
|
||||
band: 41,
|
||||
dl_nr_arfcn:517020,
|
||||
ssb_nr_arfcn:516990,
|
||||
#else
|
||||
band: 7,
|
||||
dl_nr_arfcn: 536020,
|
||||
ssb_nr_arfcn: 535930,
|
||||
ssb_subcarrier_spacing: 15,
|
||||
#endif
|
||||
subcarrier_spacing: 30,
|
||||
n_antenna_dl: N_ANTENNA_DL,
|
||||
n_antenna_ul: 1,
|
||||
rx_to_tx_latency:2,
|
||||
}],
|
||||
}],
|
||||
|
||||
|
||||
|
||||
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_bind_addr: "127.0.10.11",
|
||||
|
||||
ue_list: [
|
||||
{
|
||||
/* UE capabilities */
|
||||
|
||||
/* USIM data */
|
||||
|
||||
"imsi": "208970100001127",
|
||||
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||
"sim_algo":"milenage",
|
||||
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||
|
||||
|
||||
as_release: 15,
|
||||
ue_category: "nr",
|
||||
apn:"oai",
|
||||
attach_pdn_type:"ipv4",
|
||||
default_nssai: [
|
||||
{
|
||||
sst: 1,
|
||||
sd: 1,
|
||||
},
|
||||
],
|
||||
|
||||
default_pdu_session_snssai: {
|
||||
sst: 1,
|
||||
sd: 1,
|
||||
},
|
||||
|
||||
|
||||
/* Enable it to allow sim_events to be handled remotely */
|
||||
//rue_addr: "127.1.0.0",
|
||||
|
||||
/* Enable it to create a TUN interface for each UE PDN */
|
||||
tun_setup_script: "ue-ifup",
|
||||
|
||||
sim_events: [{
|
||||
event: "power_on",
|
||||
start_time: 5,
|
||||
}, {
|
||||
event: "ext_app",
|
||||
start_time: 15,
|
||||
end_time: 25,
|
||||
prog: "ext_app.sh",
|
||||
args: ["iperf", " -c 172.21.10.5", " -u"," -b 1M"," -i 1"," -t 10"]
|
||||
}, {
|
||||
event: "power_off",
|
||||
start_time: 30,
|
||||
}]
|
||||
}
|
||||
],
|
||||
}
|
||||
@@ -39,6 +39,53 @@ nrmodule2_quectel:
|
||||
StartCommands :
|
||||
- sudo -S ip link set dev wwan1 mtu 1500
|
||||
MTU : 1500
|
||||
|
||||
#single UE single ping
|
||||
amarisoft_ue_1:
|
||||
ID: amarisoft_ue_1
|
||||
State : enabled
|
||||
Kind : amarisoft
|
||||
#not required for AS config but needed for py script
|
||||
WakeupScript : none
|
||||
DetachScript : none
|
||||
#end
|
||||
Cmd : /root/NV17-12-21/ue/lteue
|
||||
Config : /root/NV17-12-21/ue/config/oaicicd-ue-Ping-SATest.cfg
|
||||
Duration : 60
|
||||
Ping : /tmp/test_ue1.log
|
||||
UELog : /tmp/ue1.log
|
||||
HostIPAddress : 192.168.18.89
|
||||
HostUsername : root
|
||||
HostPassword : toor
|
||||
HostSourceCodePath : /tmp
|
||||
|
||||
|
||||
#an other scenario example
|
||||
#notice : this will not work as such, only suggestion for multi ue scenario
|
||||
amarisoft_ue_2:
|
||||
ID: amarisoft_ue_2
|
||||
State : enabled
|
||||
Kind : amarisoft
|
||||
#not required for AS config but needed for py script
|
||||
WakeupScript : none
|
||||
DetachScript : none
|
||||
#end
|
||||
Cmd : /root/NV17-12-21/ue/lteue
|
||||
Config : /root/NV17-12-21/ue/config/xxxxxxx.cfg #to be updated for an other scenario
|
||||
Duration : 60
|
||||
Ping :
|
||||
- /tmp/test_ue1.log #to be updated fo an other scenario
|
||||
- /tmp/test_ue2.log #could be a list for a multi ue scenario
|
||||
UELog :
|
||||
- /tmp/ue1.log
|
||||
- /tmp/ue1.log
|
||||
HostIPAddress : 192.168.18.89
|
||||
HostUsername : root
|
||||
HostPassword : toor
|
||||
HostSourceCodePath : /tmp
|
||||
|
||||
|
||||
#do not remove
|
||||
dummy:
|
||||
ID: ''
|
||||
State : ''
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
# * contributor license agreements. See the NOTICE file distributed with
|
||||
# * this work for additional information regarding copyright ownership.
|
||||
# * The OpenAirInterface Software Alliance licenses this file to You under
|
||||
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
# * except in compliance with the License.
|
||||
# * You may obtain a copy of the License at
|
||||
# *
|
||||
# * http://www.openairinterface.org/?page_id=698
|
||||
# *
|
||||
# * Unless required by applicable law or agreed to in writing, software
|
||||
# * distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# * See the License for the specific language governing permissions and
|
||||
# * limitations under the License.
|
||||
# *-------------------------------------------------------------------------------
|
||||
# * For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
# * contact@openairinterface.org
|
||||
# */
|
||||
#---------------------------------------------------------------------
|
||||
#
|
||||
# Required Python Version
|
||||
# Python 3.x
|
||||
#
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
#to use isfile
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
#to create a SSH object locally in the methods
|
||||
import sshconnection
|
||||
#time.sleep
|
||||
import time
|
||||
|
||||
|
||||
import re
|
||||
import subprocess
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class AS_UE:
|
||||
|
||||
def __init__(self,Module):
|
||||
#create attributes as in the UE dictionary
|
||||
for k, v in Module.items():
|
||||
setattr(self, k, v)
|
||||
|
||||
|
||||
|
||||
|
||||
#-----------------$
|
||||
#PUBLIC Methods$
|
||||
#-----------------$
|
||||
|
||||
def WaitEndScenario(self):
|
||||
logging.debug('waiting for scenario duration')
|
||||
time.sleep(int(self.Duration))
|
||||
|
||||
def KillASUE(self):
|
||||
mySSH = sshconnection.SSHConnection()
|
||||
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
|
||||
mySSH.command('killall --signal SIGKILL lteue-avx2', '#', 5)
|
||||
mySSH.close()
|
||||
|
||||
def RunScenario(self):
|
||||
mySSH = sshconnection.SSHConnection()
|
||||
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
|
||||
|
||||
logging.debug("Deleting old artifacts :")
|
||||
cmd='rm -rf ' + self.Ping + ' ' + self.UELog
|
||||
mySSH.command(cmd,'#',5)
|
||||
logging.debug("Running scenario :")
|
||||
cmd='echo $USER; nohup '+self.Cmd + ' ' + self.Config + ' &'
|
||||
mySSH.command(cmd,'#',5)
|
||||
|
||||
mySSH.close()
|
||||
|
||||
|
||||
|
||||
@@ -93,6 +93,7 @@ class Containerize():
|
||||
self.allImagesSize = {}
|
||||
self.collectInfo = {}
|
||||
|
||||
self.deployedContainers = []
|
||||
self.tsharkStarted = False
|
||||
self.pingContName = ''
|
||||
self.pingOptions = ''
|
||||
@@ -682,12 +683,28 @@ class Containerize():
|
||||
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps -a'
|
||||
count = 0
|
||||
healthy = 0
|
||||
newContainers = []
|
||||
while (count < 10):
|
||||
count += 1
|
||||
containerStatus = []
|
||||
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
|
||||
healthy = 0
|
||||
for state in deployStatus.split('\n'):
|
||||
res = re.search('Name|----------', state)
|
||||
if res is not None:
|
||||
continue
|
||||
if len(state) == 0:
|
||||
continue
|
||||
res = re.search('^(?P<container_name>[a-zA-Z0-9\-\_]+) ', state)
|
||||
if res is not None:
|
||||
cName = res.group('container_name')
|
||||
found = False
|
||||
for alreadyDeployed in self.deployedContainers:
|
||||
if cName == alreadyDeployed:
|
||||
found = True
|
||||
if not found:
|
||||
newContainers.append(cName)
|
||||
self.deployedContainers.append(cName)
|
||||
if re.search('Up \(healthy\)', state) is not None:
|
||||
healthy += 1
|
||||
if re.search('rfsim4g-db-init.*Exit 0', state) is not None:
|
||||
@@ -698,16 +715,33 @@ class Containerize():
|
||||
else:
|
||||
time.sleep(10)
|
||||
|
||||
imagesInfo = ''
|
||||
for newCont in newContainers:
|
||||
cmd = 'docker inspect -f "{{.Config.Image}}" ' + newCont
|
||||
imageName = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
|
||||
imageName = str(imageName).strip()
|
||||
cmd = 'docker image inspect --format "{{.RepoTags}}\t{{.Size}}\t{{.Created}}" ' + imageName
|
||||
imagesInfo += subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
|
||||
|
||||
html_queue = SimpleQueue()
|
||||
html_cell = '<pre style="background-color:white">\n'
|
||||
for imageInfo in imagesInfo.split('\n'):
|
||||
html_cell += imageInfo[:-11] + '\n'
|
||||
html_cell += '\n'
|
||||
for cState in containerStatus:
|
||||
html_cell += cState + '\n'
|
||||
html_cell += '</pre>'
|
||||
html_queue.put(html_cell)
|
||||
if count == 100 and healthy == self.nb_healthy[0]:
|
||||
if self.tsharkStarted == False:
|
||||
logging.debug('Starting tshark on public network')
|
||||
self.CaptureOnDockerNetworks()
|
||||
HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK)
|
||||
HTML.CreateHtmlTestRowQueue('n/a', 'OK', 1, html_queue)
|
||||
for cState in containerStatus:
|
||||
logging.debug(cState)
|
||||
logging.info('\u001B[1m Deploying OAI Object(s) PASS\u001B[0m')
|
||||
else:
|
||||
HTML.CreateHtmlTestRow('Could not deploy in time', 'KO', CONST.ALL_PROCESSES_OK)
|
||||
HTML.CreateHtmlTestRowQueue('Could not deploy in time', 'KO', 1, html_queue)
|
||||
for cState in containerStatus:
|
||||
logging.debug(cState)
|
||||
logging.error('\u001B[1m Deploying OAI Object(s) FAILED\u001B[0m')
|
||||
@@ -726,10 +760,12 @@ class Containerize():
|
||||
cmd = 'sudo nohup tshark -f "(host 192.168.61.11 and icmp) or (not host 192.168.61.11 and not host 192.168.61.30 and not arp and not port 53 and not port 2152)"'
|
||||
elif re.search('5g.*rfsimulator', self.yamlPath[0]) is not None:
|
||||
cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not host 192.168.71.150 and not arp and not port 53 and not port 2152 and not port 2153)"'
|
||||
elif re.search('5g_l2sim', self.yamlPath[0]) is not None:
|
||||
cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not arp and not port 53 and not port 2152 and not port 2153)"'
|
||||
else:
|
||||
return
|
||||
for name in networkNames.split('\n'):
|
||||
if re.search('rfsim', name) is not None:
|
||||
if re.search('rfsim', name) is not None or re.search('l2sim', name) is not None:
|
||||
cmd += ' -i ' + name
|
||||
cmd += ' -w /tmp/capture_'
|
||||
ymlPath = self.yamlPath[0].split('/')
|
||||
@@ -781,7 +817,7 @@ class Containerize():
|
||||
# Analyzing log file(s)!
|
||||
listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du']
|
||||
for container in listOfPossibleRanContainers:
|
||||
filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log'
|
||||
filename = self.yamlPath[0] + '/*-oai-' + container + '.log'
|
||||
cmd = 'ls ' + filename
|
||||
containerStatus = True
|
||||
try:
|
||||
@@ -803,7 +839,7 @@ class Containerize():
|
||||
|
||||
listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*']
|
||||
for container in listOfPossibleUeContainers:
|
||||
filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log'
|
||||
filename = self.yamlPath[0] + '/*-oai-' + container + '.log'
|
||||
cmd = 'ls ' + filename
|
||||
containerStatus = True
|
||||
try:
|
||||
@@ -851,6 +887,7 @@ class Containerize():
|
||||
logging.error('\u001B[1m Undeploying OAI Object(s) FAILED\u001B[0m')
|
||||
return
|
||||
|
||||
self.deployedContainers = []
|
||||
# Cleaning any created tmp volume
|
||||
cmd = 'docker volume prune --force || true'
|
||||
logging.debug(cmd)
|
||||
@@ -863,6 +900,40 @@ class Containerize():
|
||||
HTML.CreateHtmlTestRow('n/a', 'KO', CONST.ALL_PROCESSES_OK)
|
||||
logging.info('\u001B[1m Undeploying OAI Object(s) FAIL\u001B[0m')
|
||||
|
||||
def StatsFromGenObject(self, HTML):
|
||||
self.exitStatus = 0
|
||||
ymlPath = self.yamlPath[0].split('/')
|
||||
logPath = '../cmake_targets/log/' + ymlPath[1]
|
||||
|
||||
# if the containers are running, recover the logs!
|
||||
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps --all'
|
||||
logging.debug(cmd)
|
||||
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
|
||||
cmd = 'docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" '
|
||||
anyLogs = False
|
||||
for state in deployStatus.split('\n'):
|
||||
res = re.search('Name|----------', state)
|
||||
if res is not None:
|
||||
continue
|
||||
if len(state) == 0:
|
||||
continue
|
||||
res = re.search('^(?P<container_name>[a-zA-Z0-9\-\_]+) ', state)
|
||||
if res is not None:
|
||||
anyLogs = True
|
||||
cmd += res.group('container_name') + ' '
|
||||
message = ''
|
||||
if anyLogs:
|
||||
logging.debug(cmd)
|
||||
stats = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
|
||||
for statLine in stats.split('\n'):
|
||||
logging.debug(statLine)
|
||||
message += statLine + '\n'
|
||||
|
||||
html_queue = SimpleQueue()
|
||||
html_cell = '<pre style="background-color:white">\n' + message + '</pre>'
|
||||
html_queue.put(html_cell)
|
||||
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', 1, html_queue)
|
||||
|
||||
def PingFromContainer(self, HTML, RAN, UE):
|
||||
self.exitStatus = 0
|
||||
ymlPath = self.yamlPath[0].split('/')
|
||||
|
||||
+158
-81
@@ -55,6 +55,7 @@ import constants as CONST
|
||||
import sshconnection
|
||||
|
||||
import cls_module_ue
|
||||
import cls_amarisoft_ue
|
||||
import cls_ci_ueinfra #class defining the multi Ue infrastrucure
|
||||
|
||||
logging.getLogger("matplotlib").setLevel(logging.WARNING)
|
||||
@@ -419,49 +420,63 @@ class OaiCiTest():
|
||||
for job in multi_jobs:
|
||||
job.join()
|
||||
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
||||
else: #if an ID is specified, it is a module from the yaml infrastructure file
|
||||
#RH
|
||||
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||
Module_UE.ue_trace=ue_trace
|
||||
is_module=Module_UE.CheckCMProcess(EPC.Type)
|
||||
if is_module:
|
||||
Module_UE.EnableTrace()
|
||||
time.sleep(5)
|
||||
else: #if an ID is specified, it is a UE from the yaml infrastructure file
|
||||
ue_kind = InfraUE.ci_ue_infra[self.ue_id]['Kind']
|
||||
logging.debug("Detected UE Kind : " + ue_kind)
|
||||
|
||||
# Looping attach / detach / wait to be successful at least once
|
||||
cnt = 0
|
||||
status = -1
|
||||
while cnt < 4:
|
||||
Module_UE.Command("wup")
|
||||
logging.debug("Waiting for IP address to be assigned")
|
||||
time.sleep(20)
|
||||
logging.debug("Retrieve IP address")
|
||||
status=Module_UE.GetModuleIPAddress()
|
||||
if status==0:
|
||||
cnt = 10
|
||||
else:
|
||||
cnt += 1
|
||||
Module_UE.Command("detach")
|
||||
#case it is a quectel module (only 1 at a time supported at the moment)
|
||||
if ue_kind == 'quectel':
|
||||
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||
Module_UE.ue_trace=ue_trace
|
||||
is_module=Module_UE.CheckCMProcess(EPC.Type)
|
||||
if is_module:
|
||||
Module_UE.EnableTrace()
|
||||
time.sleep(5)
|
||||
|
||||
# Looping attach / detach / wait to be successful at least once
|
||||
cnt = 0
|
||||
status = -1
|
||||
while cnt < 4:
|
||||
Module_UE.Command("wup")
|
||||
logging.debug("Waiting for IP address to be assigned")
|
||||
time.sleep(20)
|
||||
logging.debug("Retrieve IP address")
|
||||
status=Module_UE.GetModuleIPAddress()
|
||||
if status==0:
|
||||
cnt = 10
|
||||
else:
|
||||
cnt += 1
|
||||
Module_UE.Command("detach")
|
||||
time.sleep(20)
|
||||
|
||||
if cnt == 10 and status == 0:
|
||||
HTML.CreateHtmlTestRow(Module_UE.UEIPAddress, 'OK', CONST.ALL_PROCESSES_OK)
|
||||
logging.debug('UE IP addresss : '+ Module_UE.UEIPAddress)
|
||||
#execute additional commands from yaml file after UE attach
|
||||
SSH = sshconnection.SSHConnection()
|
||||
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||
if hasattr(Module_UE,'StartCommands'):
|
||||
for startcommand in Module_UE.StartCommands:
|
||||
cmd = 'echo ' + Module_UE.HostPassword + ' | ' + startcommand
|
||||
SSH.command(cmd,'\$',5)
|
||||
SSH.close()
|
||||
#check that the MTU is as expected / requested
|
||||
Module_UE.CheckModuleMTU()
|
||||
else: #status==-1 failed to retrieve IP address
|
||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.UE_IP_ADDRESS_ISSUE)
|
||||
self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS)
|
||||
return
|
||||
|
||||
if cnt == 10 and status == 0:
|
||||
HTML.CreateHtmlTestRow(Module_UE.UEIPAddress, 'OK', CONST.ALL_PROCESSES_OK)
|
||||
logging.debug('UE IP addresss : '+ Module_UE.UEIPAddress)
|
||||
#execute additional commands from yaml file after UE attach
|
||||
SSH = sshconnection.SSHConnection()
|
||||
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||
if hasattr(Module_UE,'StartCommands'):
|
||||
for startcommand in Module_UE.StartCommands:
|
||||
cmd = 'echo ' + Module_UE.HostPassword + ' | ' + startcommand
|
||||
SSH.command(cmd,'\$',5)
|
||||
SSH.close()
|
||||
#check that the MTU is as expected / requested
|
||||
Module_UE.CheckModuleMTU()
|
||||
else: #status==-1 failed to retrieve IP address
|
||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.UE_IP_ADDRESS_ISSUE)
|
||||
self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS)
|
||||
return
|
||||
|
||||
#case it is a amarisoft ue (only 1 at a time supported at the moment)
|
||||
elif ue_kind == 'amarisoft':
|
||||
AS_UE = cls_amarisoft_ue.AS_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||
HTML.CreateHtmlTestRow(AS_UE.Config, 'OK', CONST.ALL_PROCESSES_OK)
|
||||
AS_UE.RunScenario()
|
||||
AS_UE.WaitEndScenario()
|
||||
AS_UE.KillASUE()
|
||||
|
||||
else:
|
||||
logging.debug("Incorrect UE Kind was detected")
|
||||
|
||||
|
||||
def InitializeOAIUE(self,HTML,RAN,EPC,COTS_UE,InfraUE,CONTAINERS):
|
||||
@@ -1570,16 +1585,23 @@ class OaiCiTest():
|
||||
SSH = sshconnection.SSHConnection()
|
||||
# Launch ping on the EPC side (true for ltebox and old open-air-cn)
|
||||
# But for OAI-Rel14-CUPS, we launch from python executor
|
||||
ping_status = 0
|
||||
launchFromEpc = True
|
||||
launchFromModule = False
|
||||
launchFromASUE = False
|
||||
if re.match('OAI-Rel14-CUPS', EPC.Type, re.IGNORECASE):
|
||||
launchFromEpc = False
|
||||
#if module, ping from module to EPC
|
||||
if self.ue_id!='':
|
||||
launchFromEpc = False
|
||||
launchfromModule = True
|
||||
|
||||
ping_time = re.findall("-c (\d+)",str(self.ping_args))
|
||||
if (re.match('amarisoft', self.ue_id, re.IGNORECASE)):
|
||||
launchFromEpc = False
|
||||
launchFromASUE = True
|
||||
else:
|
||||
launchFromEpc = False
|
||||
launchFromModule = True
|
||||
#no ping args for ASUE
|
||||
if self.ping_args!='':
|
||||
ping_time = re.findall("-c (\d+)",str(self.ping_args))
|
||||
|
||||
if launchFromEpc:
|
||||
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
||||
@@ -1597,14 +1619,14 @@ class OaiCiTest():
|
||||
#copy the ping log file to have it locally for analysis (ping stats)
|
||||
SSH.copyin(EPC.IPAddress, EPC.UserName, EPC.Password, EPC.SourceCodePath + '/scripts/ping_' + self.testCase_id + '_' + device_id + '.log', '.')
|
||||
else:
|
||||
if launchfromModule == False:
|
||||
if (launchFromModule == False) and (launchFromASUE == False):
|
||||
#ping log file is on the python executor
|
||||
cmd = 'ping ' + self.ping_args + ' ' + UE_IPAddress + ' > ping_' + self.testCase_id + '_' + device_id + '.log 2>&1'
|
||||
message = cmd + '\n'
|
||||
logging.debug(cmd)
|
||||
ret = subprocess.run(cmd, shell=True)
|
||||
ping_status = ret.returncode
|
||||
#copy the ping log file to an other folder for log collection (source and destination are EPC)
|
||||
#copy the ping log file to an other folder for log collection (source and desti elif (launchfromModule == True) and (launchfromASUE == False): #launch from Modulenation are EPC)
|
||||
SSH.copyout(EPC.IPAddress, EPC.UserName, EPC.Password, 'ping_' + self.testCase_id + '_' + device_id + '.log', EPC.SourceCodePath + '/scripts')
|
||||
#copy the ping log file to have it locally for analysis (ping stats)
|
||||
logging.debug(EPC.SourceCodePath + 'ping_' + self.testCase_id + '_' + device_id + '.log')
|
||||
@@ -1614,7 +1636,8 @@ class OaiCiTest():
|
||||
#cat is executed on EPC
|
||||
SSH.command('cat ' + EPC.SourceCodePath + '/scripts/ping_' + self.testCase_id + '_' + device_id + '.log', '\$', 5)
|
||||
ping_log_file='/scripts/ping_' + self.testCase_id + '_' + device_id + '.log'
|
||||
else: #launch from Module
|
||||
|
||||
elif (launchFromModule == True) and (launchFromASUE == False): #launch from Module
|
||||
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||
#target address is different depending on EPC type
|
||||
if re.match('OAI-Rel14-Docker', EPC.Type, re.IGNORECASE):
|
||||
@@ -1626,13 +1649,27 @@ class OaiCiTest():
|
||||
#ping from module NIC rather than IP address to make sure round trip is over the air
|
||||
cmd = 'ping -I ' + Module_UE.UENetwork + ' ' + self.ping_args + ' ' + Target + ' > ping_' + self.testCase_id + '_' + self.ue_id + '.log 2>&1'
|
||||
SSH.command(cmd,'\$',int(ping_time[0])*1.5)
|
||||
|
||||
#copy the ping log file to have it locally for analysis (ping stats)
|
||||
SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, 'ping_' + self.testCase_id + '_' + self.ue_id + '.log', '.')
|
||||
|
||||
#cat is executed locally
|
||||
SSH.command('cat ping_' + self.testCase_id + '_' + self.ue_id + '.log', '\$', 5)
|
||||
ping_log_file='ping_' + self.testCase_id + '_' + self.ue_id + '.log'
|
||||
ping_status=0
|
||||
|
||||
elif (launchFromASUE == True):
|
||||
#ping was already executed when running scenario
|
||||
#we only need to retrieve ping log file, whose location is in the ci_ueinfra.yaml
|
||||
logging.debug("Get logs from AS server : " + Module_UE.Ping + ", " + Module_UE.UELog)
|
||||
SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, Module_UE.Ping, '.')
|
||||
SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, Module_UE.UELog, '.')
|
||||
logging.debug("Ping analysis from Amarisoft scenario")
|
||||
path,ping_log_file = os.path.split(Module_UE.Ping)
|
||||
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||
SSH.command('cat ' + Module_UE.Ping, '\#', 5)
|
||||
|
||||
else:
|
||||
ping_status=-1
|
||||
|
||||
# TIMEOUT CASE
|
||||
if ping_status < 0:
|
||||
@@ -1680,28 +1717,30 @@ class OaiCiTest():
|
||||
|
||||
#adding extra ping stats from local file
|
||||
#ping_log_file variable is defined above in this function, depending on device/ue
|
||||
logging.debug('Analyzing Ping log file : ' + os.getcwd() + '/' + ping_log_file)
|
||||
ping_stat=GetPingTimeAnalysis(RAN,ping_log_file,self.ping_rttavg_threshold)
|
||||
ping_stat_msg=''
|
||||
if (ping_stat!=-1) and (len(ping_stat)!=0):
|
||||
ping_stat_msg+='Ping stats before removing largest value : \n'
|
||||
ping_stat_msg+='RTT(Min) : ' + str("{:.2f}".format(ping_stat['min_0'])) + 'ms \n'
|
||||
ping_stat_msg+='RTT(Mean) : ' + str("{:.2f}".format(ping_stat['mean_0'])) + 'ms \n'
|
||||
ping_stat_msg+='RTT(Median) : ' + str("{:.2f}".format(ping_stat['median_0'])) + 'ms \n'
|
||||
ping_stat_msg+='RTT(Max) : ' + str("{:.2f}".format(ping_stat['max_0'])) + 'ms \n'
|
||||
ping_stat_msg+='Max Index : ' + str(ping_stat['max_loc']) + '\n'
|
||||
ping_stat_msg+='Ping stats after removing largest value : \n'
|
||||
ping_stat_msg+='RTT(Min) : ' + str("{:.2f}".format(ping_stat['min_1'])) + 'ms \n'
|
||||
ping_stat_msg+='RTT(Mean) : ' + str("{:.2f}".format(ping_stat['mean_1'])) + 'ms \n'
|
||||
ping_stat_msg+='RTT(Median) : ' + str("{:.2f}".format(ping_stat['median_1'])) + 'ms \n'
|
||||
ping_stat_msg+='RTT(Max) : ' + str("{:.2f}".format(ping_stat['max_1'])) + 'ms \n'
|
||||
if launchFromASUE == False : #skip in case of AS UE (for the moment)
|
||||
logging.debug('Analyzing Ping log file : ' + os.getcwd() + '/' + ping_log_file)
|
||||
ping_stat=GetPingTimeAnalysis(RAN,ping_log_file,self.ping_rttavg_threshold)
|
||||
|
||||
if (ping_stat!=-1) and (len(ping_stat)!=0):
|
||||
ping_stat_msg+='Ping stats before removing largest value : \n'
|
||||
ping_stat_msg+='RTT(Min) : ' + str("{:.2f}".format(ping_stat['min_0'])) + 'ms \n'
|
||||
ping_stat_msg+='RTT(Mean) : ' + str("{:.2f}".format(ping_stat['mean_0'])) + 'ms \n'
|
||||
ping_stat_msg+='RTT(Median) : ' + str("{:.2f}".format(ping_stat['median_0'])) + 'ms \n'
|
||||
ping_stat_msg+='RTT(Max) : ' + str("{:.2f}".format(ping_stat['max_0'])) + 'ms \n'
|
||||
ping_stat_msg+='Max Index : ' + str(ping_stat['max_loc']) + '\n'
|
||||
ping_stat_msg+='Ping stats after removing largest value : \n'
|
||||
ping_stat_msg+='RTT(Min) : ' + str("{:.2f}".format(ping_stat['min_1'])) + 'ms \n'
|
||||
ping_stat_msg+='RTT(Mean) : ' + str("{:.2f}".format(ping_stat['mean_1'])) + 'ms \n'
|
||||
ping_stat_msg+='RTT(Median) : ' + str("{:.2f}".format(ping_stat['median_1'])) + 'ms \n'
|
||||
ping_stat_msg+='RTT(Max) : ' + str("{:.2f}".format(ping_stat['max_1'])) + 'ms \n'
|
||||
|
||||
#building html message
|
||||
qMsg = pal_msg + '\n' + min_msg + '\n' + avg_msg + '\n' + max_msg + '\n' + ping_stat_msg
|
||||
|
||||
#checking packet loss compliance
|
||||
packetLossOK = True
|
||||
if packetloss is not None:
|
||||
if (packetloss is not None) :
|
||||
if float(packetloss) > float(self.ping_packetloss_threshold):
|
||||
qMsg += '\nPacket Loss too high'
|
||||
logging.debug('\u001B[1;37;41m Packet Loss too high; Target: '+ self.ping_packetloss_threshold + '%\u001B[0m')
|
||||
@@ -1729,6 +1768,7 @@ class OaiCiTest():
|
||||
lock.release()
|
||||
SSH.close()
|
||||
except:
|
||||
logging.debug('exit from Ping_Common except')
|
||||
os.kill(os.getppid(),signal.SIGUSR1)
|
||||
|
||||
def PingNoS1_wrong_exit(self, qMsg,HTML):
|
||||
@@ -1856,11 +1896,21 @@ class OaiCiTest():
|
||||
HTML.CreateHtmlTestRow(self.ping_args, 'KO', CONST.UE_IP_ADDRESS_ISSUE)
|
||||
self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS)
|
||||
return
|
||||
else:
|
||||
self.UEIPAddresses=[]
|
||||
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||
Module_UE.GetModuleIPAddress()
|
||||
self.UEIPAddresses.append(Module_UE.UEIPAddress)
|
||||
else: #if an ID is specified, it is a UE from the yaml infrastructure file
|
||||
ue_kind = InfraUE.ci_ue_infra[self.ue_id]['Kind']
|
||||
logging.debug("Detected UE Kind : " + ue_kind)
|
||||
|
||||
if ue_kind == 'quectel':
|
||||
self.UEIPAddresses=[]
|
||||
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||
Module_UE.GetModuleIPAddress()
|
||||
self.UEIPAddresses.append(Module_UE.UEIPAddress)
|
||||
elif ue_kind == 'amarisoft':
|
||||
self.UEIPAddresses=['AS UE IP']
|
||||
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||
else:
|
||||
logging.debug("Incorrect UE Kind was detected")
|
||||
|
||||
logging.debug(self.UEIPAddresses)
|
||||
multi_jobs = []
|
||||
i = 0
|
||||
@@ -1871,6 +1921,7 @@ class OaiCiTest():
|
||||
device_id = self.UEDevices[i]
|
||||
else:
|
||||
device_id = Module_UE.ID + "-" + Module_UE.Kind
|
||||
logging.debug(device_id)
|
||||
p = Process(target = self.Ping_common, args = (lock,UE_IPAddress,device_id,status_queue,EPC,Module_UE,RAN,))
|
||||
p.daemon = True
|
||||
p.start()
|
||||
@@ -3156,10 +3207,12 @@ class OaiCiTest():
|
||||
nrFoundDCI = 0
|
||||
nrCRCOK = 0
|
||||
mbms_messages = 0
|
||||
nbPduSessAccept = 0
|
||||
nbPduDiscard = 0
|
||||
HTML.htmlUEFailureMsg=''
|
||||
global_status = CONST.ALL_PROCESSES_OK
|
||||
for line in ue_log_file.readlines():
|
||||
result = re.search('nr_synchro_time', str(line))
|
||||
result = re.search('nr_synchro_time|Starting NR UE soft modem', str(line))
|
||||
if result is not None:
|
||||
nrUEFlag = True
|
||||
if nrUEFlag:
|
||||
@@ -3172,6 +3225,15 @@ class OaiCiTest():
|
||||
result = re.search('CRC OK', str(line))
|
||||
if result is not None:
|
||||
nrCRCOK += 1
|
||||
result = re.search('Received PDU Session Establishment Accept', str(line))
|
||||
if result is not None:
|
||||
nbPduSessAccept += 1
|
||||
result = re.search('warning: discard PDU, sn out of window', str(line))
|
||||
if result is not None:
|
||||
nbPduDiscard += 1
|
||||
result = re.search('--nfapi 5 --node-number 2 --sa', str(line))
|
||||
if result is not None:
|
||||
frequency_found = True
|
||||
result = re.search('Exiting OAI softmodem', str(line))
|
||||
if result is not None:
|
||||
exitSignalReceived = True
|
||||
@@ -3302,21 +3364,29 @@ class OaiCiTest():
|
||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||
if nrUEFlag:
|
||||
if nrDecodeMib > 0:
|
||||
statMsg = 'UE showed ' + str(nrDecodeMib) + ' MIB decode message(s)'
|
||||
statMsg = 'UE showed ' + str(nrDecodeMib) + ' "MIB decode" message(s)'
|
||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||
if nrFoundDCI > 0:
|
||||
statMsg = 'UE showed ' + str(nrFoundDCI) + ' DCI found message(s)'
|
||||
statMsg = 'UE showed ' + str(nrFoundDCI) + ' "DCI found" message(s)'
|
||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||
if nrCRCOK > 0:
|
||||
statMsg = 'UE showed ' + str(nrCRCOK) + ' PDSCH decoding message(s)'
|
||||
statMsg = 'UE showed ' + str(nrCRCOK) + ' "PDSCH decoding" message(s)'
|
||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||
if not frequency_found:
|
||||
statMsg = 'NR-UE could NOT synch!'
|
||||
logging.error('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||
if nbPduSessAccept > 0:
|
||||
statMsg = 'UE showed ' + str(nbPduSessAccept) + ' "Received PDU Session Establishment Accept" message(s)'
|
||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||
if nbPduDiscard > 0:
|
||||
statMsg = 'UE showed ' + str(nbPduDiscard) + ' "warning: discard PDU, sn out of window" message(s)'
|
||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||
if uciStatMsgCount > 0:
|
||||
statMsg = 'UE showed ' + str(uciStatMsgCount) + ' "uci->stat" message(s)'
|
||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||
@@ -3447,16 +3517,23 @@ class OaiCiTest():
|
||||
job.join()
|
||||
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
||||
else: #if an ID is specified, it is a module from the yaml infrastructure file
|
||||
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||
Module_UE.ue_trace=ue_trace
|
||||
Module_UE.Command("detach")
|
||||
Module_UE.DisableTrace()
|
||||
Module_UE.DisableCM()
|
||||
archive_destination=Module_UE.LogCollect()
|
||||
if Module_UE.ue_trace=='yes':
|
||||
HTML.CreateHtmlTestRow('QLog at : '+archive_destination, 'OK', CONST.ALL_PROCESSES_OK)
|
||||
ue_kind = InfraUE.ci_ue_infra[self.ue_id]['Kind']
|
||||
logging.debug("Detected UE Kind : " + ue_kind)
|
||||
if ue_kind == 'quectel':
|
||||
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||
Module_UE.ue_trace=ue_trace
|
||||
Module_UE.Command("detach")
|
||||
Module_UE.DisableTrace()
|
||||
Module_UE.DisableCM()
|
||||
archive_destination=Module_UE.LogCollect()
|
||||
if Module_UE.ue_trace=='yes':
|
||||
HTML.CreateHtmlTestRow('QLog at : '+archive_destination, 'OK', CONST.ALL_PROCESSES_OK)
|
||||
else:
|
||||
HTML.CreateHtmlTestRow('QLog trace is disabled', 'OK', CONST.ALL_PROCESSES_OK)
|
||||
elif ue_kind == 'amarisoft':
|
||||
HTML.CreateHtmlTestRow('AS UE is already terminated', 'OK', CONST.ALL_PROCESSES_OK)
|
||||
else:
|
||||
HTML.CreateHtmlTestRow('QLog trace is disabled', 'OK', CONST.ALL_PROCESSES_OK)
|
||||
logging.debug("Incorrect UE Kind was detected")
|
||||
|
||||
def TerminateOAIUE(self,HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS):
|
||||
SSH = sshconnection.SSHConnection()
|
||||
|
||||
@@ -231,7 +231,7 @@ RUs = (
|
||||
local_rf = "yes"
|
||||
nb_tx = 2
|
||||
nb_rx = 2
|
||||
att_tx = 0
|
||||
att_tx = 10
|
||||
att_rx = 5;
|
||||
bands = [38];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
|
||||
@@ -33,9 +33,6 @@ gNBs =
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
ul_prbblacklist = "51,52,53,54"
|
||||
min_rxtxtime = 6;
|
||||
pdcch_ConfigSIB1 = (
|
||||
{
|
||||
@@ -73,15 +70,6 @@ gNBs =
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 12;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
#pdsch-ConfigCommon
|
||||
#pdschTimeDomainAllocationList (up to 16 entries)
|
||||
initialDLBWPk0_0 = 0; #for DL slot
|
||||
initialDLBWPmappingType_0 = 0; #0=typeA,1=typeB
|
||||
initialDLBWPstartSymbolAndLength_0 = 40; #this is SS=1,L=13
|
||||
|
||||
initialDLBWPk0_1 = 0; #for mixed slot
|
||||
initialDLBWPmappingType_1 = 0;
|
||||
initialDLBWPstartSymbolAndLength_1 = 57; #this is SS=1,L=5
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
@@ -136,19 +124,6 @@ gNBs =
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
|
||||
# pusch-ConfigCommon (up to 16 elements)
|
||||
initialULBWPk2_0 = 6; # used for UL slot
|
||||
initialULBWPmappingType_0 = 1
|
||||
initialULBWPstartSymbolAndLength_0 = 41; # this is SS=0 L=13
|
||||
|
||||
initialULBWPk2_1 = 6; # used for mixed slot
|
||||
initialULBWPmappingType_1 = 1;
|
||||
initialULBWPstartSymbolAndLength_1 = 52; # this is SS=10 L=4
|
||||
|
||||
initialULBWPk2_2 = 7; # used for Msg.3 during RA
|
||||
initialULBWPmappingType_2 = 1;
|
||||
initialULBWPstartSymbolAndLength_2 = 52; # this is SS=10 L=4
|
||||
|
||||
msg3_DeltaPreamble = 1;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
log_config = {
|
||||
global_log_level ="info";
|
||||
hw_log_level ="info";
|
||||
phy_log_level ="info";
|
||||
mac_log_level ="info";
|
||||
rlc_log_level ="info";
|
||||
pdcp_log_level ="info";
|
||||
rrc_log_level ="info";
|
||||
};
|
||||
|
||||
uicc0 = {
|
||||
imsi = "208950000000031";
|
||||
key = "0c0a34601d4f07677303652c0462535b";
|
||||
opc= "63bfa50ee6523365ff14c1f45f88737d";
|
||||
dnn= "oai";
|
||||
nssai_sst=222;
|
||||
nssai_sd=123;
|
||||
}
|
||||
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "nfapi";
|
||||
local_n_if_name = "ens3";
|
||||
remote_n_address = "127.0.0.1"; //Proxy IP
|
||||
local_n_address = "127.0.0.1";
|
||||
local_n_portc = 50600;
|
||||
remote_n_portc = 50601;
|
||||
local_n_portd = 50610;
|
||||
remote_n_portd = 50611;
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 90
|
||||
att_rx = 0;
|
||||
bands = [7,38,42,43];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 125;
|
||||
}
|
||||
);
|
||||
@@ -1,45 +0,0 @@
|
||||
log_config = {
|
||||
global_log_level ="info";
|
||||
hw_log_level ="info";
|
||||
phy_log_level ="info";
|
||||
mac_log_level ="info";
|
||||
rlc_log_level ="info";
|
||||
pdcp_log_level ="info";
|
||||
rrc_log_level ="info";
|
||||
};
|
||||
|
||||
uicc0 = {
|
||||
imsi = "208950000000032";
|
||||
key = "0c0a34601d4f07677303652c0462535b";
|
||||
opc= "63bfa50ee6523365ff14c1f45f88737d";
|
||||
dnn= "oai";
|
||||
nssai_sst=222;
|
||||
nssai_sd=123;
|
||||
}
|
||||
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "nfapi";
|
||||
local_n_if_name = "ens3";
|
||||
remote_n_address = "127.0.0.1"; //Proxy IP
|
||||
local_n_address = "127.0.0.1";
|
||||
local_n_portc = 50600;
|
||||
remote_n_portc = 50601;
|
||||
local_n_portd = 50610;
|
||||
remote_n_portd = 50611;
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 90
|
||||
att_rx = 0;
|
||||
bands = [7,38,42,43];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 125;
|
||||
}
|
||||
);
|
||||
@@ -1,45 +0,0 @@
|
||||
log_config = {
|
||||
global_log_level ="info";
|
||||
hw_log_level ="info";
|
||||
phy_log_level ="info";
|
||||
mac_log_level ="info";
|
||||
rlc_log_level ="info";
|
||||
pdcp_log_level ="info";
|
||||
rrc_log_level ="info";
|
||||
};
|
||||
|
||||
uicc0 = {
|
||||
imsi = "208950000000033";
|
||||
key = "0c0a34601d4f07677303652c0462535b";
|
||||
opc= "63bfa50ee6523365ff14c1f45f88737d";
|
||||
dnn= "oai";
|
||||
nssai_sst=222;
|
||||
nssai_sd=123;
|
||||
}
|
||||
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "nfapi";
|
||||
local_n_if_name = "ens3";
|
||||
remote_n_address = "127.0.0.1"; //Proxy IP
|
||||
local_n_address = "127.0.0.1";
|
||||
local_n_portc = 50600;
|
||||
remote_n_portc = 50601;
|
||||
local_n_portd = 50610;
|
||||
remote_n_portd = 50611;
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 90
|
||||
att_rx = 0;
|
||||
bands = [7,38,42,43];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 125;
|
||||
}
|
||||
);
|
||||
@@ -1,45 +0,0 @@
|
||||
log_config = {
|
||||
global_log_level ="info";
|
||||
hw_log_level ="info";
|
||||
phy_log_level ="info";
|
||||
mac_log_level ="info";
|
||||
rlc_log_level ="info";
|
||||
pdcp_log_level ="info";
|
||||
rrc_log_level ="info";
|
||||
};
|
||||
|
||||
uicc0 = {
|
||||
imsi = "208950000000034";
|
||||
key = "0c0a34601d4f07677303652c0462535b";
|
||||
opc= "63bfa50ee6523365ff14c1f45f88737d";
|
||||
dnn= "oai";
|
||||
nssai_sst=222;
|
||||
nssai_sd=123;
|
||||
}
|
||||
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "nfapi";
|
||||
local_n_if_name = "ens3";
|
||||
remote_n_address = "127.0.0.1"; //Proxy IP
|
||||
local_n_address = "127.0.0.1";
|
||||
local_n_portc = 50600;
|
||||
remote_n_portc = 50601;
|
||||
local_n_portd = 50610;
|
||||
remote_n_portd = 50611;
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 90
|
||||
att_rx = 0;
|
||||
bands = [7,38,42,43];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 125;
|
||||
}
|
||||
);
|
||||
@@ -22,9 +22,14 @@ gNBs =
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 31; //0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
min_rxtxtime = 6;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
{
|
||||
controlResourceSetZero = 12;
|
||||
searchSpaceZero = 0;
|
||||
}
|
||||
);
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
@@ -54,15 +59,6 @@ gNBs =
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 0;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
#pdsch-ConfigCommon
|
||||
#pdschTimeDomainAllocationList (up to 16 entries)
|
||||
initialDLBWPk0_0 = 0; #for DL slot
|
||||
initialDLBWPmappingType_0 = 0; #0=typeA,1=typeB
|
||||
initialDLBWPstartSymbolAndLength_0 = 40; #this is SS=1,L=13
|
||||
|
||||
initialDLBWPk0_1 = 0; #for mixed slot
|
||||
initialDLBWPmappingType_1 = 0;
|
||||
initialDLBWPstartSymbolAndLength_1 = 57; #this is SS=1,L=5
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
@@ -117,18 +113,6 @@ gNBs =
|
||||
# restrictedSetConfig
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
# pusch-ConfigCommon (up to 16 elements)
|
||||
initialULBWPk2_0 = 6; # used for UL slot
|
||||
initialULBWPmappingType_0 = 1
|
||||
initialULBWPstartSymbolAndLength_0 = 41; # this is SS=0 L=13
|
||||
|
||||
initialULBWPk2_1 = 6; # used for mixed slot
|
||||
initialULBWPmappingType_1 = 1;
|
||||
initialULBWPstartSymbolAndLength_1 = 52; # this is SS=10 L=4
|
||||
|
||||
initialULBWPk2_2 = 7; # used for Msg.3 during RA
|
||||
initialULBWPmappingType_2 = 1;
|
||||
initialULBWPstartSymbolAndLength_2 = 52; # this is SS=10 L=4
|
||||
|
||||
msg3_DeltaPreamble = 1;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
@@ -33,9 +33,6 @@ gNBs =
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
ul_prbblacklist = "51,52,53,54"
|
||||
min_rxtxtime = 6;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
@@ -74,15 +71,6 @@ gNBs =
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 12;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
#pdsch-ConfigCommon
|
||||
#pdschTimeDomainAllocationList (up to 16 entries)
|
||||
initialDLBWPk0_0 = 0; #for DL slot
|
||||
initialDLBWPmappingType_0 = 0; #0=typeA,1=typeB
|
||||
initialDLBWPstartSymbolAndLength_0 = 40; #this is SS=1,L=13
|
||||
|
||||
initialDLBWPk0_1 = 0; #for mixed slot
|
||||
initialDLBWPmappingType_1 = 0;
|
||||
initialDLBWPstartSymbolAndLength_1 = 57; #this is SS=1,L=5
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
@@ -137,19 +125,6 @@ gNBs =
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
|
||||
# pusch-ConfigCommon (up to 16 elements)
|
||||
initialULBWPk2_0 = 6; # used for UL slot
|
||||
initialULBWPmappingType_0 = 1
|
||||
initialULBWPstartSymbolAndLength_0 = 41; # this is SS=0 L=13
|
||||
|
||||
initialULBWPk2_1 = 6; # used for mixed slot
|
||||
initialULBWPmappingType_1 = 1;
|
||||
initialULBWPstartSymbolAndLength_1 = 52; # this is SS=10 L=4
|
||||
|
||||
initialULBWPk2_2 = 7; # used for Msg.3 during RA
|
||||
initialULBWPmappingType_2 = 1;
|
||||
initialULBWPstartSymbolAndLength_2 = 52; # this is SS=10 L=4
|
||||
|
||||
msg3_DeltaPreamble = 1;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ gNBs =
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
min_rxtxtime = 6;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
@@ -53,29 +53,6 @@ gNBs =
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 12;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
#pdsch-ConfigCommon
|
||||
#pdschTimeDomainAllocationList (up to 16 entries)
|
||||
initialDLBWPk0_0 = 0;
|
||||
#initialULBWPmappingType
|
||||
#0=typeA,1=typeB
|
||||
initialDLBWPmappingType_0 = 0;
|
||||
#this is SS=1,L=13
|
||||
initialDLBWPstartSymbolAndLength_0 = 40;
|
||||
|
||||
initialDLBWPk0_1 = 0;
|
||||
initialDLBWPmappingType_1 = 0;
|
||||
#this is SS=2,L=12
|
||||
initialDLBWPstartSymbolAndLength_1 = 53;
|
||||
|
||||
initialDLBWPk0_2 = 0;
|
||||
initialDLBWPmappingType_2 = 0;
|
||||
#this is SS=1,L=12
|
||||
initialDLBWPstartSymbolAndLength_2 = 54;
|
||||
|
||||
initialDLBWPk0_3 = 0;
|
||||
initialDLBWPmappingType_3 = 0;
|
||||
#this is SS=1,L=5
|
||||
initialDLBWPstartSymbolAndLength_3 = 57;
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
@@ -130,22 +107,6 @@ gNBs =
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
|
||||
# pusch-ConfigCommon (up to 16 elements)
|
||||
initialULBWPk2_0 = 6;
|
||||
initialULBWPmappingType_0 = 1
|
||||
# this is SS=0 L=11
|
||||
initialULBWPstartSymbolAndLength_0 = 55;
|
||||
|
||||
initialULBWPk2_1 = 6;
|
||||
initialULBWPmappingType_1 = 1;
|
||||
# this is SS=0 L=12
|
||||
initialULBWPstartSymbolAndLength_1 = 69;
|
||||
|
||||
initialULBWPk2_2 = 7;
|
||||
initialULBWPmappingType_2 = 1;
|
||||
# this is SS=10 L=4
|
||||
initialULBWPstartSymbolAndLength_2 = 52;
|
||||
|
||||
msg3_DeltaPreamble = 1;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
|
||||
@@ -0,0 +1,308 @@
|
||||
Active_gNBs = ( "gNB-OAI");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
gNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_CU_ID = 0xe00;
|
||||
|
||||
# cell_type = "CELL_MACRO_GNB";
|
||||
|
||||
gNB_name = "gNB-OAI";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
|
||||
plmn_list = ({
|
||||
mcc = 208;
|
||||
mnc = 97;
|
||||
mnc_length = 2;
|
||||
snssaiList = (
|
||||
{
|
||||
sst = 1;
|
||||
sd = 0x1; // 0 false, else true
|
||||
},
|
||||
{
|
||||
sst = 1;
|
||||
sd = 0x010203; // 0 false, else true
|
||||
},
|
||||
{
|
||||
sst = 1;
|
||||
sd = 0x112233; // 0 false, else true
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
nr_cellid = 12345678L
|
||||
|
||||
# tr_s_preference = "local_mac"
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 2;
|
||||
ul_prbblacklist = "51,52,53,54"
|
||||
do_SRS = 1;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
{
|
||||
controlResourceSetZero = 11;
|
||||
searchSpaceZero = 0;
|
||||
}
|
||||
);
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
|
||||
physCellId = 0;
|
||||
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
# this is 3301.68 MHz + 22*12*30e-3 MHz = 3309.6
|
||||
#absoluteFrequencySSB = 620640;
|
||||
# this is 3300.60 MHz + 53*12*30e-3 MHz = 3319.68
|
||||
absoluteFrequencySSB = 621312;
|
||||
# this is 3503.28 MHz + 22*12*30e-3 MHz = 3511.2
|
||||
#absoluteFrequencySSB = 634080;
|
||||
# this is 3600.48 MHz
|
||||
#absoluteFrequencySSB = 640032;
|
||||
#dl_frequencyBand = 78;
|
||||
# this is 3301.68 MHz
|
||||
#dl_absoluteFrequencyPointA = 620112;
|
||||
# this is 3300.60 MHz
|
||||
dl_absoluteFrequencyPointA = 620040;
|
||||
# this is 3502.56 MHz
|
||||
#dl_absoluteFrequencyPointA = 633552;
|
||||
# this is 3600.48 MHz
|
||||
#dl_absoluteFrequencyPointA = 640032;
|
||||
#scs-SpecificCarrierList
|
||||
dl_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_subcarrierSpacing = 1;
|
||||
dl_carrierBandwidth = 106;
|
||||
#initialDownlinkBWP
|
||||
#genericParameters
|
||||
# this is RBstart=0,L=106 (275*(L-1))+RBstart
|
||||
initialDLBWPlocationAndBandwidth = 28875;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 1;
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 11;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
ul_frequencyBand = 78;
|
||||
#scs-SpecificCarrierList
|
||||
ul_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_subcarrierSpacing = 1;
|
||||
ul_carrierBandwidth = 106;
|
||||
pMax = 20;
|
||||
#initialUplinkBWP
|
||||
#genericParameters
|
||||
initialULBWPlocationAndBandwidth = 28875;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialULBWPsubcarrierSpacing = 1;
|
||||
#rach-ConfigCommon
|
||||
#rach-ConfigGeneric
|
||||
prach_ConfigurationIndex = 98;
|
||||
#prach_msg1_FDM
|
||||
#0 = one, 1=two, 2=four, 3=eight
|
||||
prach_msg1_FDM = 0;
|
||||
prach_msg1_FrequencyStart = 0;
|
||||
zeroCorrelationZoneConfig = 12;
|
||||
preambleReceivedTargetPower = -104;
|
||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||
preambleTransMax = 6;
|
||||
#powerRampingStep
|
||||
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||
powerRampingStep = 1;
|
||||
#ra_ReponseWindow
|
||||
#1,2,4,8,10,20,40,80
|
||||
ra_ResponseWindow = 4;
|
||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||
#ra_ContentionResolutionTimer
|
||||
#(0..7) 8,16,24,32,40,48,56,64
|
||||
ra_ContentionResolutionTimer = 7;
|
||||
rsrp_ThresholdSSB = 19;
|
||||
#prach-RootSequenceIndex_PR
|
||||
#1 = 839, 2 = 139
|
||||
prach_RootSequenceIndex_PR = 2;
|
||||
prach_RootSequenceIndex = 1;
|
||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||
#
|
||||
msg1_SubcarrierSpacing = 1,
|
||||
# restrictedSetConfig
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
|
||||
msg3_DeltaPreamble = 1;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
# pucch-ConfigCommon setup :
|
||||
# pucchGroupHopping
|
||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||
pucchGroupHopping = 0;
|
||||
hoppingId = 40;
|
||||
p0_nominal = -90;
|
||||
# ssb_PositionsInBurs_BitmapPR
|
||||
# 1=short, 2=medium, 3=long
|
||||
ssb_PositionsInBurst_PR = 2;
|
||||
ssb_PositionsInBurst_Bitmap = 1;
|
||||
|
||||
# ssb_periodicityServingCell
|
||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||
ssb_periodicityServingCell = 2;
|
||||
|
||||
# dmrs_TypeA_position
|
||||
# 0 = pos2, 1 = pos3
|
||||
dmrs_TypeA_Position = 0;
|
||||
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
subcarrierSpacing = 1;
|
||||
|
||||
|
||||
#tdd-UL-DL-ConfigurationCommon
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
referenceSubcarrierSpacing = 1;
|
||||
# pattern1
|
||||
# dl_UL_TransmissionPeriodicity
|
||||
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||
dl_UL_TransmissionPeriodicity = 6;
|
||||
nrofDownlinkSlots = 7;
|
||||
nrofDownlinkSymbols = 6;
|
||||
nrofUplinkSlots = 2;
|
||||
nrofUplinkSymbols = 4;
|
||||
|
||||
ssPBCH_BlockPower = -25;
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
# Number of streams to use in input/output
|
||||
SCTP_INSTREAMS = 2;
|
||||
SCTP_OUTSTREAMS = 2;
|
||||
};
|
||||
|
||||
////////// AMF parameters:
|
||||
amf_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
preference = "ipv4";
|
||||
}
|
||||
);
|
||||
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
|
||||
GNB_INTERFACE_NAME_FOR_NG_AMF = "em1";
|
||||
GNB_IPV4_ADDRESS_FOR_NG_AMF = "CI_GNB_IP_ADDR";
|
||||
GNB_INTERFACE_NAME_FOR_NGU = "em1";
|
||||
GNB_IPV4_ADDRESS_FOR_NGU = "CI_GNB_IP_ADDR";
|
||||
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
};
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
# pusch_TargetSNRx10 = 200;
|
||||
# pucch_TargetSNRx10 = 150;
|
||||
ulsch_max_frame_inactivity = 0;
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
thread_pool_size = 8;
|
||||
prach_dtx_threshold = 120;
|
||||
# pucch0_dtx_threshold = 150;
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 2
|
||||
nb_rx = 2
|
||||
att_tx = 0
|
||||
att_rx = 0;
|
||||
bands = [78];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
eNB_instances = [0];
|
||||
##beamforming 1x2 matrix: 1 layer x 2 antennas
|
||||
bf_weights = [0x00007fff, 0x0000];
|
||||
##beamforming 1x4 matrix: 1 layer x 4 antennas
|
||||
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
|
||||
## beamforming 2x2 matrix:
|
||||
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
|
||||
## beamforming 4x4 matrix:
|
||||
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||
sf_extension = 0
|
||||
sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
#security = {
|
||||
# preferred ciphering algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
# valid values: nea0, nea1, nea2, nea3
|
||||
# ciphering_algorithms = ( "nea2" );
|
||||
|
||||
# preferred integrity algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
# valid values: nia0, nia1, nia2, nia3
|
||||
# integrity_algorithms = ( "nia2", "nia0" );
|
||||
|
||||
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
|
||||
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
|
||||
# drb_ciphering = "yes";
|
||||
# drb_integrity = "no";
|
||||
#};
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level ="info";
|
||||
hw_log_level ="info";
|
||||
phy_log_level ="info";
|
||||
mac_log_level ="info";
|
||||
rlc_log_level ="info";
|
||||
pdcp_log_level ="info";
|
||||
rrc_log_level ="info";
|
||||
f1ap_log_level ="debug";
|
||||
};
|
||||
+6
-4
@@ -66,6 +66,8 @@ class EPCManagement():
|
||||
self.mmeConfFile = 'mme.conf'
|
||||
self.yamlPath = ''
|
||||
self.isMagmaUsed = False
|
||||
self.cfgDeploy = '--type start-mini --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.3.pcap' #from xml, 'mini' is default normal for docker-network.py
|
||||
self.cfgUnDeploy = '--type stop-mini --fqdn yes --scenario 1' #from xml, 'mini' is default normal for docker-network.py
|
||||
|
||||
|
||||
#-----------------------------------------------------------
|
||||
@@ -251,8 +253,8 @@ class EPCManagement():
|
||||
logging.debug('Starting OAI CN5G')
|
||||
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
|
||||
mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts', '\$', 5)
|
||||
mySSH.command('cd /opt/oai-cn5g-fed/docker-compose', '\$', 5)
|
||||
mySSH.command('./core-network.sh start nrf spgwu', '\$', 60)
|
||||
mySSH.command('cd /opt/oai-cn5g-fed-v1.3/docker-compose', '\$', 5)
|
||||
mySSH.command('python3 ./core-network.py '+self.cfgDeploy, '\$', 60)
|
||||
time.sleep(2)
|
||||
mySSH.command('docker-compose -p 5gcn ps -a', '\$', 60)
|
||||
if mySSH.getBefore().count('Up (healthy)') != 6:
|
||||
@@ -530,8 +532,8 @@ class EPCManagement():
|
||||
mySSH.command('docker logs ' + c + ' > ' + self.SourceCodePath + '/logs/' + c + '.log', '\$', 5)
|
||||
|
||||
logging.debug('Terminating OAI CN5G')
|
||||
mySSH.command('cd /opt/oai-cn5g-fed/docker-compose', '\$', 5)
|
||||
mySSH.command('./core-network.sh stop nrf spgwu', '\$', 60)
|
||||
mySSH.command('cd /opt/oai-cn5g-fed-v1.3/docker-compose', '\$', 5)
|
||||
mySSH.command('python3 ./core-network.py '+self.cfgUnDeploy, '\$', 60)
|
||||
mySSH.command('docker volume prune --force || true', '\$', 60)
|
||||
time.sleep(2)
|
||||
mySSH.command('tshark -r /tmp/oai-cn5g.pcap | egrep --colour=never "Tracking area update" ','\$', 30)
|
||||
|
||||
+13
-1
@@ -376,6 +376,16 @@ def GetParametersFromXML(action):
|
||||
if (string_field is not None):
|
||||
EPC.yamlPath = string_field
|
||||
|
||||
elif action == 'Initialize_5GCN':
|
||||
string_field = test.findtext('args')
|
||||
if (string_field is not None):
|
||||
EPC.cfgDeploy = string_field
|
||||
|
||||
elif action == 'Terminate_5GCN':
|
||||
string_field = test.findtext('args')
|
||||
if (string_field is not None):
|
||||
EPC.cfgUnDeploy = string_field
|
||||
|
||||
elif action == 'Deploy_Object' or action == 'Undeploy_Object':
|
||||
eNB_instance=test.findtext('eNB_instance')
|
||||
if (eNB_instance is None):
|
||||
@@ -391,7 +401,7 @@ def GetParametersFromXML(action):
|
||||
if (string_field is not None):
|
||||
CONTAINERS.yamlPath[CONTAINERS.eNB_instance] = string_field
|
||||
|
||||
elif action == 'DeployGenObject' or action == 'UndeployGenObject':
|
||||
elif action == 'DeployGenObject' or action == 'UndeployGenObject' or action == 'StatsFromGenObject':
|
||||
string_field=test.findtext('yaml_path')
|
||||
if (string_field is not None):
|
||||
CONTAINERS.yamlPath[0] = string_field
|
||||
@@ -931,6 +941,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
||||
CONTAINERS.IperfFromContainer(HTML, RAN)
|
||||
if CONTAINERS.exitStatus==1:
|
||||
RAN.prematureExit = True
|
||||
elif action == 'StatsFromGenObject':
|
||||
CONTAINERS.StatsFromGenObject(HTML)
|
||||
else:
|
||||
sys.exit('Invalid class (action) from xml')
|
||||
if RAN.prematureExit:
|
||||
|
||||
+21
-8
@@ -677,13 +677,13 @@ class RANManagement():
|
||||
# if T tracer was run with option 0 (no logs), analyze logs
|
||||
# from textlog, otherwise do normal analysis (e.g., option 2)
|
||||
result = re.search('T_stdout 0', str(self.Initialize_eNB_args))
|
||||
enbLogFile = self.eNBLogFiles[int(self.eNB_instance)]
|
||||
raw_record_file = enbLogFile.replace('.log', '_record.raw')
|
||||
replay_log_file = enbLogFile.replace('.log', '_replay.log')
|
||||
if (result is not None):
|
||||
logging.debug('\u001B[1m Replaying RAW record file\u001B[0m')
|
||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||
mySSH.command('cd ' + lSourcePath + '/common/utils/T/tracer/', '\$', 5)
|
||||
enbLogFile = self.eNBLogFiles[int(self.eNB_instance)]
|
||||
raw_record_file = enbLogFile.replace('.log', '_record.raw')
|
||||
replay_log_file = enbLogFile.replace('.log', '_replay.log')
|
||||
extracted_txt_file = enbLogFile.replace('.log', '_extracted_messages.txt')
|
||||
extracted_log_file = enbLogFile.replace('.log', '_extracted_messages.log')
|
||||
mySSH.command('./extract_config -i ' + lSourcePath + '/cmake_targets/' + raw_record_file + ' > ' + lSourcePath + '/cmake_targets/' + extracted_txt_file, '\$', 5)
|
||||
@@ -706,8 +706,6 @@ class RANManagement():
|
||||
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/*stats.log', '.')
|
||||
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/*.pickle', '.')
|
||||
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/*.png', '.')
|
||||
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/'+raw_record_file, '.')
|
||||
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/'+replay_log_file, '.')
|
||||
#
|
||||
copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + fileToAnalyze, '.')
|
||||
if (copyin_res == -1):
|
||||
@@ -723,9 +721,7 @@ class RANManagement():
|
||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './nrL1_stats.log', self.eNBSourceCodePath + '/cmake_targets/')
|
||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './nrMAC_stats.log', self.eNBSourceCodePath + '/cmake_targets/')
|
||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './gnb_stats_monitor.pickle', self.eNBSourceCodePath + '/cmake_targets/')
|
||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './gnb_stats_monitor.png', self.eNBSourceCodePath + '/cmake_targets/')#RH 21/02/2002 this does not work, there are more than 1 png file
|
||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword,'./'+raw_record_file, self.eNBSourceCodePath + '/cmake_targets/')
|
||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword,'./'+replay_log_file, self.eNBSourceCodePath + '/cmake_targets/')
|
||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './gnb_stats_monitor.png', self.eNBSourceCodePath + '/cmake_targets/')
|
||||
#
|
||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './' + fileToAnalyze, self.eNBSourceCodePath + '/cmake_targets/')
|
||||
logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + fileToAnalyze)
|
||||
@@ -826,6 +822,8 @@ class RANManagement():
|
||||
RealTimeProcessingIssue = False
|
||||
DLRetxIssue = False
|
||||
ULRetxIssue = False
|
||||
nrRrcRcfgComplete = 0
|
||||
harqFeedbackPast = 0
|
||||
|
||||
line_cnt=0 #log file line counter
|
||||
for line in enb_log_file.readlines():
|
||||
@@ -1002,6 +1000,13 @@ class RANManagement():
|
||||
#remove 1- all useless char before relevant info (ulsch or dlsch) 2- trailing char
|
||||
dlsch_ulsch_stats[k]=re.sub(r'^.*\]\s+', r'' , line.rstrip())
|
||||
|
||||
result = re.search('Received NR_RRCReconfigurationComplete from UE', str(line))
|
||||
if result is not None:
|
||||
nrRrcRcfgComplete += 1
|
||||
result = re.search('HARQ feedback is in the past', str(line))
|
||||
if result is not None:
|
||||
harqFeedbackPast += 1
|
||||
|
||||
|
||||
#count "problem receiving samples" msg
|
||||
result = re.search('\[PHY\]\s+problem receiving samples', str(line))
|
||||
@@ -1089,6 +1094,14 @@ class RANManagement():
|
||||
statMsg = nodeB_prefix + 'NB ran with TX Write thread enabled'
|
||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||
htmleNBFailureMsg += statMsg + '\n'
|
||||
if nrRrcRcfgComplete > 0:
|
||||
statMsg = nodeB_prefix + 'NB showed ' + str(nrRrcRcfgComplete) + ' "Received NR_RRCReconfigurationComplete from UE" message(s)'
|
||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||
htmleNBFailureMsg += statMsg + '\n'
|
||||
if harqFeedbackPast > 0:
|
||||
statMsg = nodeB_prefix + 'NB showed ' + str(harqFeedbackPast) + ' "HARQ feedback is in the past" message(s)'
|
||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||
htmleNBFailureMsg += statMsg + '\n'
|
||||
#FR1 NSA test : add new markers to make sure gNB is used
|
||||
if NSA_RAPROC_PUSCH_check:
|
||||
statMsg = '[RAPROC] PUSCH with TC_RNTI message check for ' + nodeB_prefix + 'NB : PASS '
|
||||
|
||||
@@ -1899,7 +1899,7 @@ function run_test_on_vm {
|
||||
CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue_sa_test.log
|
||||
#last argument = 2 is to enable --sa for SA test for 106PRB
|
||||
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 2
|
||||
if [ $NR_UE_SYNC -eq 0 ]
|
||||
if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ]
|
||||
then
|
||||
echo "Problem w/ gNB and NR-UE not syncing"
|
||||
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
||||
@@ -1939,6 +1939,12 @@ function run_test_on_vm {
|
||||
SA_106PRB_STATUS=0
|
||||
fi
|
||||
done
|
||||
#manage SYNC issue after try_cnt
|
||||
if [ $SYNC_STATUS -ne 0 ]
|
||||
then
|
||||
echo "SA 106PRB test NOT OK, NOT SYNC'ED"
|
||||
SA_106PRB_STATUS=-1
|
||||
fi
|
||||
########### end SA test
|
||||
|
||||
sleep 30
|
||||
@@ -1982,7 +1988,7 @@ function run_test_on_vm {
|
||||
CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue_sa_test.log
|
||||
#last argument = 3 is to enable --sa for SA test for 24PRB
|
||||
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 3
|
||||
if [ $NR_UE_SYNC -eq 0 ]
|
||||
if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ]
|
||||
then
|
||||
echo "Problem w/ gNB and NR-UE not syncing"
|
||||
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
||||
@@ -2022,6 +2028,12 @@ function run_test_on_vm {
|
||||
SA_24PRB_STATUS=0
|
||||
fi
|
||||
done
|
||||
#manage SYNC issue after try_cnt
|
||||
if [ $SYNC_STATUS -ne 0 ]
|
||||
then
|
||||
echo "SA 24PRB test NOT OK, NOT SYNC'ED"
|
||||
SA_24PRB_STATUS=-1
|
||||
fi
|
||||
########### end SA test
|
||||
|
||||
sleep 30
|
||||
@@ -2070,7 +2082,7 @@ function run_test_on_vm {
|
||||
CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue_ra_fr2_test.log
|
||||
#last argument = 1 is to enable --do-ra for RA test
|
||||
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 1
|
||||
if [ $NR_UE_SYNC -eq 0 ]
|
||||
if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ]
|
||||
then
|
||||
echo "Problem w/ gNB and NR-UE not syncing"
|
||||
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
||||
@@ -2110,6 +2122,12 @@ function run_test_on_vm {
|
||||
try_cnt=$((try_cnt+10))
|
||||
fi
|
||||
done
|
||||
#manage SYNC issue after try_cnt
|
||||
if [ $SYNC_STATUS -ne 0 ]
|
||||
then
|
||||
echo "RA FR2 test NOT OK, NOT SYNC'ED"
|
||||
RA_FR2_STATUS=-1
|
||||
fi
|
||||
########### end RA FR2 test
|
||||
|
||||
sleep 30
|
||||
@@ -2172,7 +2190,7 @@ function run_test_on_vm {
|
||||
CURRENT_NR_UE_LOG_FILE=${TMODE}_${PRB}prb_${CN_CONFIG}_ue_ra_test.log
|
||||
#last argument = 1 is to enable --do-ra for RA test
|
||||
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 1
|
||||
if [ $NR_UE_SYNC -eq 0 ]
|
||||
if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ]
|
||||
then
|
||||
echo "Problem w/ gNB and NR-UE not syncing"
|
||||
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
||||
@@ -2212,6 +2230,13 @@ function run_test_on_vm {
|
||||
try_cnt=$((try_cnt+10))
|
||||
fi
|
||||
done
|
||||
#manage SYNC issue after try_cnt
|
||||
if [ $SYNC_STATUS -ne 0 ]
|
||||
then
|
||||
echo "RA FR1 test NOT OK, NOT SYNC'ED"
|
||||
RA_FR1_STATUS=-1
|
||||
fi
|
||||
|
||||
done
|
||||
########### end RA test
|
||||
|
||||
@@ -2253,7 +2278,7 @@ function run_test_on_vm {
|
||||
echo "############################################################"
|
||||
CURRENT_NR_UE_LOG_FILE=${TMODE}_${PRB}prb_${CN_CONFIG}_ue.log
|
||||
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 0
|
||||
if [ $NR_UE_SYNC -eq 0 ]
|
||||
if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ]
|
||||
then
|
||||
echo "Problem w/ gNB and NR-UE not syncing"
|
||||
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
||||
@@ -2332,6 +2357,13 @@ function run_test_on_vm {
|
||||
try_cnt=$((try_cnt+10))
|
||||
fi
|
||||
done
|
||||
#manage SYNC issue after try_cnt
|
||||
if [ $SYNC_STATUS -ne 0 ]
|
||||
then
|
||||
echo "PHY test NOT OK, NOT SYNC'ED"
|
||||
IPERF_STATUS=-1
|
||||
fi
|
||||
|
||||
done
|
||||
######### end of loop
|
||||
full_l2_sim_destroy
|
||||
@@ -2345,7 +2377,6 @@ function run_test_on_vm {
|
||||
if [ $SA_24PRB_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||
if [ $RA_FR2_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||
if [ $RA_FR1_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||
if [ $SYNC_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||
if [ $PING_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||
if [ $IPERF_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||
if [ $NR_STATUS -eq 0 ]
|
||||
|
||||
@@ -56,6 +56,7 @@ class SSHConnection():
|
||||
self.picocom_closure = True
|
||||
|
||||
def open(self, ipaddress, username, password):
|
||||
prompt = "#" if username == "root" else "\$"
|
||||
count = 0
|
||||
connect_status = False
|
||||
while count < 4:
|
||||
@@ -68,7 +69,7 @@ class SSHConnection():
|
||||
self.sshresponse = self.ssh.expect(['password:', username + '@'])
|
||||
if self.sshresponse == 0:
|
||||
self.ssh.sendline(password)
|
||||
self.sshresponse = self.ssh.expect(['\$', 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT])
|
||||
self.sshresponse = self.ssh.expect([prompt, 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT])
|
||||
if self.sshresponse == 0:
|
||||
count = 10
|
||||
connect_status = True
|
||||
@@ -76,7 +77,7 @@ class SSHConnection():
|
||||
logging.debug('self.sshresponse = ' + str(self.sshresponse))
|
||||
elif self.sshresponse == 1:
|
||||
self.ssh.sendline(password)
|
||||
self.sshresponse = self.ssh.expect(['\$', 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT])
|
||||
self.sshresponse = self.ssh.expect([prompt, 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT])
|
||||
if self.sshresponse == 0:
|
||||
count = 10
|
||||
connect_status = True
|
||||
@@ -84,7 +85,7 @@ class SSHConnection():
|
||||
logging.debug('self.sshresponse = ' + str(self.sshresponse))
|
||||
elif self.sshresponse == 2:
|
||||
# Checking if we are really on the remote client defined by its IP address
|
||||
self.command('stdbuf -o0 ifconfig | egrep --color=never "inet addr:|inet "', '\$', 5)
|
||||
self.command('stdbuf -o0 ifconfig | egrep --color=never "inet addr:|inet "', prompt, 5)
|
||||
result = re.search(str(ipaddress), str(self.ssh.before))
|
||||
if result is None:
|
||||
self.close()
|
||||
@@ -100,7 +101,7 @@ class SSHConnection():
|
||||
time.sleep(1)
|
||||
count += 1
|
||||
if connect_status:
|
||||
self.command('unset HISTFILE', '\$', 5, silent=True)
|
||||
self.command('unset HISTFILE', prompt, 5, silent=True)
|
||||
else:
|
||||
sys.exit('SSH Connection Failed')
|
||||
self.ipaddress = ipaddress
|
||||
|
||||
@@ -46,3 +46,4 @@
|
||||
- UndeployGenObject
|
||||
- PingFromContainer
|
||||
- IperfFromContainer
|
||||
- StatsFromGenObject
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
<!--
|
||||
|
||||
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The OpenAirInterface Software Alliance licenses this file to You under
|
||||
the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.openairinterface.org/?page_id=698
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
contact@openairinterface.org
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>l2sim-5gnr-tdd</htmlTabRef>
|
||||
<htmlTabName>Testing 5G NR L2 sim - TDD gNB</htmlTabName>
|
||||
<htmlTabIcon>wrench</htmlTabIcon>
|
||||
<repeatCount>2</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
100001
|
||||
000000
|
||||
000001
|
||||
000002
|
||||
000003
|
||||
000011
|
||||
200000
|
||||
020001
|
||||
020002
|
||||
200001
|
||||
100001
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="000000">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy MySql Database</desc>
|
||||
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
|
||||
<services>mysql</services>
|
||||
<nb_healthy>1</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000001">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI 5G CoreNetwork</desc>
|
||||
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
|
||||
<services>oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn</services>
|
||||
<nb_healthy>6</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000002">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI 5G gNB L2 sim SA</desc>
|
||||
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
|
||||
<services>oai-gnb</services>
|
||||
<nb_healthy>7</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000003">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI 5G NR-UE L2 sim SA and Proxy</desc>
|
||||
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
|
||||
<services>proxy oai-nr-ue0</services>
|
||||
<nb_healthy>9</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000011">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase id="020001">
|
||||
<class>PingFromContainer</class>
|
||||
<desc>Ping ext-dn from NR-UE</desc>
|
||||
<container_name>l2sim-oai-nr-ue0</container_name>
|
||||
<options>-I oaitun_ue1 -c 20 192.168.72.135</options>
|
||||
<loss_threshold>5</loss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="020002">
|
||||
<class>PingFromContainer</class>
|
||||
<desc>Ping NR-UE from ext-dn</desc>
|
||||
<container_name>l2sim-oai-ext-dn</container_name>
|
||||
<options>-c 20 12.1.1.2</options>
|
||||
<loss_threshold>5</loss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="100001">
|
||||
<class>UndeployGenObject</class>
|
||||
<desc>Undeploy all OAI 5G stack</desc>
|
||||
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
|
||||
</testCase>
|
||||
|
||||
<testCase id="200000">
|
||||
<class>StatsFromGenObject</class>
|
||||
<desc>Statistics before Traffic Test</desc>
|
||||
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
|
||||
</testCase>
|
||||
|
||||
<testCase id="200001">
|
||||
<class>StatsFromGenObject</class>
|
||||
<desc>Statistics after Traffic Test</desc>
|
||||
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -0,0 +1,38 @@
|
||||
<!--
|
||||
|
||||
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The OpenAirInterface Software Alliance licenses this file to You under
|
||||
the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.openairinterface.org/?page_id=698
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
contact@openairinterface.org
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>l2sim-5gnr-down</htmlTabRef>
|
||||
<htmlTabName>CleanUp 5G L2 sim - TDD gNB</htmlTabName>
|
||||
<htmlTabIcon>trash</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
100002
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="100002">
|
||||
<class>UndeployGenObject</class>
|
||||
<desc>Undeploy all OAI 5G stack</desc>
|
||||
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -0,0 +1,87 @@
|
||||
<!--
|
||||
|
||||
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The OpenAirInterface Software Alliance licenses this file to You under
|
||||
the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.openairinterface.org/?page_id=698
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
contact@openairinterface.org
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>TEST-SA-FR1-Tab1</htmlTabRef>
|
||||
<htmlTabName>SA Ping DL UL with 1 AS UE</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
040000
|
||||
000001
|
||||
010000
|
||||
000002
|
||||
050000
|
||||
080000
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="010000">
|
||||
<class>Initialize_UE</class>
|
||||
<desc>Run AS UE Scenario</desc>
|
||||
<id>amarisoft_ue_1</id>
|
||||
</testCase>
|
||||
|
||||
|
||||
<testCase id="040000">
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize gNB</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf --sa -q --usrp-tx-thread-config 1 --T_stdout 2 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
||||
<eNB_instance>0</eNB_instance>
|
||||
<eNB_serverId>0</eNB_serverId>
|
||||
<air_interface>nr</air_interface>
|
||||
<eNB_Trace>yes</eNB_Trace>
|
||||
<eNB_Stats>yes</eNB_Stats>
|
||||
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||
<USRP_IPAddress>192.168.18.252</USRP_IPAddress>
|
||||
</testCase>
|
||||
|
||||
<testCase id="050000">
|
||||
<class>Ping</class>
|
||||
<desc>Ping Log Analysis</desc>
|
||||
<id>amarisoft_ue_1</id>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000001">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>60</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000002">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
|
||||
<testCase id="080000">
|
||||
<class>Terminate_eNB</class>
|
||||
<desc>Terminate gNB</desc>
|
||||
<eNB_instance>0</eNB_instance>
|
||||
<eNB_serverId>0</eNB_serverId>
|
||||
<air_interface>nr</air_interface>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
<!--
|
||||
|
||||
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The OpenAirInterface Software Alliance licenses this file to You under
|
||||
the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.openairinterface.org/?page_id=698
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
contact@openairinterface.org
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>cn5g-closure</htmlTabRef>
|
||||
<htmlTabName>CN5G-Closure</htmlTabName>
|
||||
<htmlTabIcon>log-out</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
060000
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="060000">
|
||||
<class>Terminate_5GCN</class>
|
||||
<desc>Terminate 5G Core</desc>
|
||||
<args>--type stop-mini-as-ue --fqdn yes --scenario 1</args>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -0,0 +1,39 @@
|
||||
<!--
|
||||
|
||||
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The OpenAirInterface Software Alliance licenses this file to You under
|
||||
the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.openairinterface.org/?page_id=698
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
contact@openairinterface.org
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>cn5g-start-tab</htmlTabRef>
|
||||
<htmlTabName>CN5G-Start</htmlTabName>
|
||||
<htmlTabIcon>log-in</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
000100
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList>
|
||||
</TestCaseExclusionList>
|
||||
|
||||
<testCase id="000100">
|
||||
<class>Initialize_5GCN</class>
|
||||
<desc>Initialize 5G Core</desc>
|
||||
<args>--type start-mini-as-ue --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.3.pcap</args>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -0,0 +1,355 @@
|
||||
<table style="border-collapse: collapse; border: none;">
|
||||
<tr style="border-collapse: collapse; border: none;">
|
||||
<td style="border-collapse: collapse; border: none;">
|
||||
<a href="http://www.openairinterface.org/">
|
||||
<img src="../../../doc/images/oai_final_logo.png" alt="" border=3 height=50 width=150>
|
||||
</img>
|
||||
</a>
|
||||
</td>
|
||||
<td style="border-collapse: collapse; border: none; vertical-align: center;">
|
||||
<b><font size = "5">OAI Full Stack 5G-NR L2 simulation with containers and a proxy</font></b>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
This page is only valid for an `Ubuntu18` host.
|
||||
|
||||
This tutorial is only valid once this file is merged into the `develop` branch.
|
||||
|
||||
# 1. Retrieving the images on Docker-Hub #
|
||||
|
||||
Currently the images are hosted under the user account `rdefosseoai`.
|
||||
|
||||
This may change in the future.
|
||||
|
||||
Once again you may need to log on [docker-hub](https://hub.docker.com/) if your organization has reached pulling limit as `anonymous`.
|
||||
|
||||
```bash
|
||||
$ docker login
|
||||
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
|
||||
Username:
|
||||
Password:
|
||||
```
|
||||
|
||||
Now pull images.
|
||||
|
||||
```bash
|
||||
$ docker pull mysql:5.7
|
||||
$ docker pull rdefosseoai/oai-amf:latest
|
||||
$ docker pull rdefosseoai/oai-nrf:latest
|
||||
$ docker pull rdefosseoai/oai-smf:latest
|
||||
$ docker pull rdefosseoai/oai-spgwu-tiny:latest
|
||||
|
||||
$ docker pull rdefosseoai/oai-gnb:develop
|
||||
$ docker pull rdefosseoai/oai-nr-ue:develop
|
||||
$ docker pull rdefosseoai/proxy:latest
|
||||
```
|
||||
|
||||
And **re-tag** them for tutorials' docker-compose file to work.
|
||||
|
||||
```bash
|
||||
$ docker image tag rdefosseoai/oai-amf:latest oai-amf:latest
|
||||
$ docker image tag rdefosseoai/oai-nrf:latest oai-nrf:latest
|
||||
$ docker image tag rdefosseoai/oai-smf:latest oai-smf:latest
|
||||
$ docker image tag rdefosseoai/oai-spgwu-tiny:latest oai-spgwu-tiny:latest
|
||||
|
||||
$ docker image tag rdefosseoai/oai-gnb:develop oai-gnb:develop
|
||||
$ docker image tag rdefosseoai/oai-nr-ue:develop oai-nr-ue:develop
|
||||
$ docker image tag rdefosseoai/proxy:latest oai-lte-multi-ue-proxy:latest
|
||||
```
|
||||
|
||||
```bash
|
||||
$ docker logout
|
||||
```
|
||||
|
||||
Note that the proxy image is based on the source available at [https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy](https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy).
|
||||
|
||||
At time of writing, the `latest` tag corresponded to `56cfdc046a5f96d5e67d42a2fc2bf6ba2fe58b41` commit.
|
||||
|
||||
# 2. Deploy containers #
|
||||
|
||||
**CAUTION: this SHALL be done in multiple steps.**
|
||||
|
||||
**Just `docker-compose up -d` WILL NOT WORK!**
|
||||
|
||||
All the following commands **SHALL** be run from the `ci-scripts/yaml_files/5g_l2sim_tdd` folder.
|
||||
|
||||
The `gNB`, `proxy` and `NR-UE` containers will be deployed in `host`-mode. It will use the host loopback interface to connect.
|
||||
|
||||
```bash
|
||||
sudo ifconfig lo: 127.0.0.2 netmask 255.0.0.0 up
|
||||
```
|
||||
|
||||
## 2.1. Deploy OAI 5G Core Network ##
|
||||
|
||||
```bash
|
||||
$ cd ci-scripts/yaml_files/5g_l2sim_tdd
|
||||
$ docker-compose up -d mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn
|
||||
Creating network "l2sim-oai-public-net" with driver "bridge"
|
||||
Creating network "l2sim-oai-traffic_net-net" with driver "bridge"
|
||||
Creating l2sim-oai-nrf ... done
|
||||
Creating l2sim-mysql ... done
|
||||
Creating l2sim-oai-spgwu ... done
|
||||
Creating l2sim-oai-amf ... done
|
||||
Creating l2sim-oai-smf ... done
|
||||
Creating l2sim-oai-ext-dn ... done
|
||||
```
|
||||
|
||||
Wait for a bit.
|
||||
|
||||
```bash
|
||||
$ docker-compose ps -a
|
||||
Name Command State Ports
|
||||
-------------------------------------------------------------------------------------------------
|
||||
l2sim-mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp
|
||||
l2sim-oai-amf /bin/bash /openair-amf/bin ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp
|
||||
l2sim-oai-ext-dn /bin/bash -c apt update; ... Up (healthy)
|
||||
l2sim-oai-nrf /bin/bash /openair-nrf/bin ... Up (healthy) 80/tcp, 9090/tcp
|
||||
l2sim-oai-smf /bin/bash /openair-smf/bin ... Up (healthy) 80/tcp, 8805/udp, 9090/tcp
|
||||
l2sim-oai-spgwu /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
|
||||
```
|
||||
|
||||
At this point, you can prepare a capture on the newly-created public docker bridges:
|
||||
|
||||
```bash
|
||||
$ ifconfig
|
||||
...
|
||||
l2sim-public: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
|
||||
inet 192.168.71.129 netmask 255.255.255.192 broadcast 192.168.71.191
|
||||
inet6 fe80::42:c4ff:fe2b:3d38 prefixlen 64 scopeid 0x20<link>
|
||||
ether 02:42:c4:2b:3d:38 txqueuelen 0 (Ethernet)
|
||||
RX packets 4 bytes 112 (112.0 B)
|
||||
RX errors 0 dropped 0 overruns 0 frame 0
|
||||
TX packets 7 bytes 626 (626.0 B)
|
||||
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
||||
|
||||
l2sim-traffic: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
|
||||
inet 192.168.72.129 netmask 255.255.255.192 broadcast 192.168.72.191
|
||||
inet6 fe80::42:b5ff:fed3:e732 prefixlen 64 scopeid 0x20<link>
|
||||
ether 02:42:b5:d3:e7:32 txqueuelen 0 (Ethernet)
|
||||
RX packets 2652 bytes 142335 (142.3 KB)
|
||||
RX errors 0 dropped 0 overruns 0 frame 0
|
||||
TX packets 3999 bytes 23367972 (23.3 MB)
|
||||
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
||||
...
|
||||
|
||||
$ sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not arp and not port 53 and not port 2152 and not port 2153)" -i l2sim-public -i l2sim-traffic -w /tmp/capture_5g_l2sim_tdd.pcap > /tmp/tshark.log 2>&1 &
|
||||
```
|
||||
|
||||
## 2.2. Deploy OAI gNB in Standalone Mode as a VNF ##
|
||||
|
||||
**CAUTION: To execute this 2nd step, the whole `CN5G` SHALL be in `healthy` state (especially the `mysql` container).**
|
||||
|
||||
```bash
|
||||
$ docker-compose up -d oai-gnb
|
||||
l2sim-oai-nrf is up-to-date
|
||||
l2sim-oai-spgwu is up-to-date
|
||||
l2sim-oai-ext-dn is up-to-date
|
||||
Creating l2sim-oai-gnb ... done
|
||||
```
|
||||
|
||||
Wait for a bit.
|
||||
|
||||
```bash
|
||||
$ docker-compose ps -a
|
||||
Name Command State Ports
|
||||
-------------------------------------------------------------------------------------------------
|
||||
l2sim-mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp
|
||||
l2sim-oai-amf /bin/bash /openair-amf/bin ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp
|
||||
l2sim-oai-ext-dn /bin/bash -c apt update; ... Up (healthy)
|
||||
l2sim-oai-gnb /opt/oai-gnb/bin/entrypoin ... Up (healthy)
|
||||
l2sim-oai-nrf /bin/bash /openair-nrf/bin ... Up (healthy) 80/tcp, 9090/tcp
|
||||
l2sim-oai-smf /bin/bash /openair-smf/bin ... Up (healthy) 80/tcp, 8805/udp, 9090/tcp
|
||||
l2sim-oai-spgwu /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
|
||||
```
|
||||
|
||||
You can verify that the `gNB` is connected with the `AMF`:
|
||||
|
||||
```bagh
|
||||
$ docker logs rfsim5g-oai-amf
|
||||
...
|
||||
[AMF] [amf_app] [info ] |----------------------------------------------------gNBs' information-------------------------------------------|
|
||||
[AMF] [amf_app] [info ] | Index | Status | Global ID | gNB Name | PLMN |
|
||||
[AMF] [amf_app] [info ] | 1 | Connected | 0x0 | gnb-l2sim-vnf | 208, 99 |
|
||||
[AMF] [amf_app] [info ] |----------------------------------------------------------------------------------------------------------------|
|
||||
...
|
||||
```
|
||||
|
||||
## 2.3. Deploy OAI NR-UE and proxy
|
||||
|
||||
```bash
|
||||
$ docker-compose up -d proxy oai-nr-ue0
|
||||
l2sim-mysql is up-to-date
|
||||
l2sim-oai-nrf is up-to-date
|
||||
l2sim-oai-amf is up-to-date
|
||||
l2sim-oai-smf is up-to-date
|
||||
l2sim-oai-spgwu is up-to-date
|
||||
l2sim-oai-ext-dn is up-to-date
|
||||
l2sim-oai-gnb is up-to-date
|
||||
Creating l2sim-oai-nr-ue ... done
|
||||
Creating l2sim-proxy ... done
|
||||
```
|
||||
|
||||
Wait for a bit.
|
||||
|
||||
```bash
|
||||
$ docker-compose ps -a
|
||||
Name Command State Ports
|
||||
-------------------------------------------------------------------------------------------------
|
||||
l2sim-mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp
|
||||
l2sim-oai-amf /bin/bash /openair-amf/bin ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp
|
||||
l2sim-oai-ext-dn /bin/bash -c apt update; ... Up (healthy)
|
||||
l2sim-oai-gnb /opt/oai-gnb/bin/entrypoin ... Up (healthy)
|
||||
l2sim-oai-nr-ue0 /opt/oai-nr-ue/bin/entrypo ... Up (healthy)
|
||||
l2sim-oai-nrf /bin/bash /openair-nrf/bin ... Up (healthy) 80/tcp, 9090/tcp
|
||||
l2sim-oai-smf /bin/bash /openair-smf/bin ... Up (healthy) 80/tcp, 8805/udp, 9090/tcp
|
||||
l2sim-oai-spgwu /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
|
||||
l2sim-proxy /oai-lte-multi-ue-proxy/bi ... Up (healthy)
|
||||
|
||||
$ docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}} {{.MemUsage}}\t{{.MemPerc}}" l2sim-mysql l2sim-oai-amf l2sim-oai-ext-dn l2sim-oai-gnb l2sim-oai-nr-ue0 l2sim-oai-nrf l2sim-oai-smf l2sim-oai-spgwu l2sim-proxy
|
||||
CONTAINER CPU % MEM USAGE / LIMIT MEM %
|
||||
l2sim-mysql 0.03% 206.7MiB / 62.54GiB 0.32%
|
||||
l2sim-oai-amf 4.05% 29.49MiB / 62.54GiB 0.05%
|
||||
l2sim-oai-ext-dn 0.00% 31.27MiB / 62.54GiB 0.05%
|
||||
l2sim-oai-gnb 1.29% 1.853GiB / 62.54GiB 2.96%
|
||||
l2sim-oai-nr-ue0 1.43% 350.8MiB / 62.54GiB 0.55%
|
||||
l2sim-oai-nrf 0.21% 9.105MiB / 62.54GiB 0.01%
|
||||
l2sim-oai-smf 3.24% 30.23MiB / 62.54GiB 0.05%
|
||||
l2sim-oai-spgwu 0.00% 11.78MiB / 62.54GiB 0.02%
|
||||
l2sim-proxy 6.97% 290.4MiB / 62.54GiB 0.45%
|
||||
```
|
||||
|
||||
**CAUTION: As you can see the CPU usage is not that important compared to a 5G RF simulator equivalent.**
|
||||
|
||||
But the CPU speed matters; I am running on a fast server:
|
||||
|
||||
```bash
|
||||
$ lscpu
|
||||
Architecture: x86_64
|
||||
CPU(s): 16
|
||||
...
|
||||
Model name: Intel(R) Xeon(R) Silver 4215R CPU @ 3.20GHz
|
||||
```
|
||||
|
||||
I tried on a slower server with more CPUs and it did not work:
|
||||
|
||||
```bash
|
||||
oaici@orion:~$ lscpu
|
||||
Architecture: x86_64
|
||||
CPU(s): 48
|
||||
...
|
||||
Model name: Intel(R) Xeon(R) CPU E5-2658 v3 @ 2.20GHz
|
||||
```
|
||||
|
||||
We will work on this issue.
|
||||
|
||||
|
||||
Making sure the OAI UE is connected:
|
||||
|
||||
```bash
|
||||
$ docker exec -it l2sim-oai-nr-ue /bin/bash
|
||||
root@bb4d400a832d:/opt/oai-nr-ue# ifconfig
|
||||
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
|
||||
inet 192.168.71.137 netmask 255.255.255.192 broadcast 192.168.71.191
|
||||
ether 02:42:c0:a8:47:89 txqueuelen 0 (Ethernet)
|
||||
RX packets 224259 bytes 5821372018 (5.8 GB)
|
||||
RX errors 0 dropped 0 overruns 0 frame 0
|
||||
TX packets 235916 bytes 7848786376 (7.8 GB)
|
||||
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
||||
|
||||
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
|
||||
inet 127.0.0.1 netmask 255.0.0.0
|
||||
loop txqueuelen 1000 (Local Loopback)
|
||||
RX packets 0 bytes 0 (0.0 B)
|
||||
RX errors 0 dropped 0 overruns 0 frame 0
|
||||
TX packets 0 bytes 0 (0.0 B)
|
||||
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
||||
|
||||
oaitun_ue1: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
|
||||
inet 12.1.1.2 netmask 255.255.255.0 destination 12.1.1.2
|
||||
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
|
||||
RX packets 0 bytes 0 (0.0 B)
|
||||
RX errors 0 dropped 0 overruns 0 frame 0
|
||||
TX packets 0 bytes 0 (0.0 B)
|
||||
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
||||
```
|
||||
|
||||
# 3. Check traffic #
|
||||
|
||||
## 3.1. Check your Internet connectivity ##
|
||||
|
||||
You can also check with the `ext-dn` container (IP address is `192.168.72.135` in docker-compose)
|
||||
|
||||
```bash
|
||||
$ docker exec -it l2sim-oai-nr-ue /bin/bash
|
||||
root@bb4d400a832d# ping -I oaitun_ue1 -c 20 192.168.72.135
|
||||
PING 192.168.72.135 (192.168.72.135) from 12.1.1.2 oaitun_ue1: 56(84) bytes of data.
|
||||
64 bytes from 192.168.72.135: icmp_seq=1 ttl=63 time=65.1 ms
|
||||
64 bytes from 192.168.72.135: icmp_seq=2 ttl=63 time=74.2 ms
|
||||
...
|
||||
64 bytes from 192.168.72.135: icmp_seq=19 ttl=63 time=25.0 ms
|
||||
64 bytes from 192.168.72.135: icmp_seq=20 ttl=63 time=34.7 ms
|
||||
|
||||
--- 192.168.72.135 ping statistics ---
|
||||
20 packets transmitted, 20 received, 0% packet loss, time 19025ms
|
||||
rtt min/avg/max/mdev = 16.413/120.639/209.673/57.159 ms
|
||||
```
|
||||
|
||||
# 4. Un-deployment #
|
||||
|
||||
```bash
|
||||
$ docker-compose down
|
||||
Stopping l2sim-oai-nr-ue2 ... done
|
||||
Stopping l2sim-oai-nr-ue ... done
|
||||
Stopping l2sim-oai-gnb ... done
|
||||
Stopping l2sim-oai-ext-dn ... done
|
||||
Stopping l2sim-oai-spgwu ... done
|
||||
Stopping l2sim-oai-smf ... done
|
||||
Stopping l2sim-oai-amf ... done
|
||||
Stopping l2sim-oai-nrf ... done
|
||||
Stopping l2sim-mysql ... done
|
||||
Removing l2sim-oai-nr-ue2 ... done
|
||||
Removing l2sim-oai-nr-ue ... done
|
||||
Removing l2sim-oai-gnb ... done
|
||||
Removing l2sim-oai-ext-dn ... done
|
||||
Removing l2sim-oai-spgwu ... done
|
||||
Removing l2sim-oai-smf ... done
|
||||
Removing l2sim-oai-amf ... done
|
||||
Removing l2sim-oai-nrf ... done
|
||||
Removing l2sim-mysql ... done
|
||||
Removing network l2sim-oai-public-net
|
||||
Removing network l2sim-oai-traffic-net
|
||||
```
|
||||
|
||||
# 5. Adapt the `docker-compose` to your environment #
|
||||
|
||||
In the `SMF` section, provide your own DNS IP address:
|
||||
|
||||
```yaml
|
||||
DEFAULT_DNS_IPV4_ADDRESS=192.168.18.129
|
||||
```
|
||||
|
||||
In the `gNB` section, provide your docker-host primary IP address and interface name: in our case `192.168.18.193` and `eno1`.
|
||||
|
||||
```yaml
|
||||
GNB_NGA_IF_NAME: eno1
|
||||
GNB_NGA_IP_ADDRESS: 192.168.18.193
|
||||
GNB_NGU_IF_NAME: eno1
|
||||
GNB_NGU_IP_ADDRESS: 192.168.18.193
|
||||
```
|
||||
|
||||
Same thing in the `nr-ue` section:
|
||||
|
||||
```yaml
|
||||
NR_UE_NFAPI_IF_NAME: eno1
|
||||
```
|
||||
|
||||
This tutorial is a first draft. This nFAPI feature and the proxy are still under development.
|
||||
|
||||
At time of writing, we were able to run in `host-mode`, 1 `NR-UE` and just ping traffic.
|
||||
|
||||
Later development will include:
|
||||
|
||||
- deploying `gNB-VNF`, `proxy` and `UE` in isolated containers (with their own IP address)
|
||||
- more UEs
|
||||
- more traffic (`UDP` and `TCP`)
|
||||
@@ -0,0 +1,322 @@
|
||||
version: '3.8'
|
||||
services:
|
||||
oai-nrf:
|
||||
container_name: "l2sim-oai-nrf"
|
||||
image: oai-nrf:latest
|
||||
environment:
|
||||
- NRF_INTERFACE_NAME_FOR_SBI=eth0
|
||||
- NRF_INTERFACE_PORT_FOR_SBI=80
|
||||
- NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
|
||||
- NRF_API_VERSION=v1
|
||||
- INSTANCE=0
|
||||
- PID_DIRECTORY=/var/run
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.71.130
|
||||
volumes:
|
||||
- ../5g_rfsimulator/nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh
|
||||
healthcheck:
|
||||
test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
mysql:
|
||||
container_name: "l2sim-mysql"
|
||||
image: mysql:5.7
|
||||
volumes:
|
||||
- ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
|
||||
- ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
|
||||
environment:
|
||||
- TZ=Europe/Paris
|
||||
- MYSQL_DATABASE=oai_db
|
||||
- MYSQL_USER=test
|
||||
- MYSQL_PASSWORD=test
|
||||
- MYSQL_ROOT_PASSWORD=linux
|
||||
healthcheck:
|
||||
test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.71.131
|
||||
oai-amf:
|
||||
container_name: "l2sim-oai-amf"
|
||||
image: oai-amf:latest
|
||||
environment:
|
||||
- TZ=Europe/paris
|
||||
- INSTANCE=0
|
||||
- PID_DIRECTORY=/var/run
|
||||
- MCC=208
|
||||
- MNC=99
|
||||
- REGION_ID=128
|
||||
- AMF_SET_ID=1
|
||||
- SERVED_GUAMI_MCC_0=208
|
||||
- SERVED_GUAMI_MNC_0=99
|
||||
- SERVED_GUAMI_REGION_ID_0=128
|
||||
- SERVED_GUAMI_AMF_SET_ID_0=1
|
||||
- SERVED_GUAMI_MCC_1=460
|
||||
- SERVED_GUAMI_MNC_1=11
|
||||
- SERVED_GUAMI_REGION_ID_1=10
|
||||
- SERVED_GUAMI_AMF_SET_ID_1=1
|
||||
- PLMN_SUPPORT_MCC=208
|
||||
- PLMN_SUPPORT_MNC=99
|
||||
- PLMN_SUPPORT_TAC=0x0001
|
||||
- SST_0=1
|
||||
- SD_0=1
|
||||
- SST_1=1
|
||||
- SD_1=12
|
||||
- AMF_INTERFACE_NAME_FOR_NGAP=eth0
|
||||
- AMF_INTERFACE_NAME_FOR_N11=eth0
|
||||
- SMF_INSTANCE_ID_0=1
|
||||
- SMF_FQDN_0=oai-smf
|
||||
- SMF_IPV4_ADDR_0=0.0.0.0
|
||||
- SMF_HTTP_VERSION_0=v1
|
||||
- SELECTED_0=true
|
||||
- SMF_INSTANCE_ID_1=2
|
||||
- SMF_FQDN_1=oai-smf
|
||||
- SMF_IPV4_ADDR_1=0.0.0.0
|
||||
- SMF_HTTP_VERSION_1=v1
|
||||
- SELECTED_1=false
|
||||
- MYSQL_SERVER=192.168.71.131
|
||||
- MYSQL_USER=root
|
||||
- MYSQL_PASS=linux
|
||||
- MYSQL_DB=oai_db
|
||||
- OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1
|
||||
- NRF_IPV4_ADDRESS=192.168.71.130
|
||||
- NRF_PORT=80
|
||||
- NF_REGISTRATION=yes
|
||||
- SMF_SELECTION=yes
|
||||
- USE_FQDN_DNS=yes
|
||||
- NRF_API_VERSION=v1
|
||||
- NRF_FQDN=oai-nrf
|
||||
- EXTERNAL_AUSF=no
|
||||
- AUSF_IPV4_ADDRESS=0.0.0.0
|
||||
- AUSF_PORT=80
|
||||
- AUSF_API_VERSION=v1
|
||||
- AUSF_FQDN=localhost
|
||||
depends_on:
|
||||
- oai-nrf
|
||||
- mysql
|
||||
volumes:
|
||||
- ../5g_rfsimulator/amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh
|
||||
healthcheck:
|
||||
test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh"
|
||||
interval: 10s
|
||||
timeout: 15s
|
||||
retries: 5
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.71.132
|
||||
oai-smf:
|
||||
container_name: "l2sim-oai-smf"
|
||||
image: oai-smf:latest
|
||||
environment:
|
||||
- TZ=Europe/Paris
|
||||
- INSTANCE=0
|
||||
- PID_DIRECTORY=/var/run
|
||||
- SMF_INTERFACE_NAME_FOR_N4=eth0
|
||||
- SMF_INTERFACE_NAME_FOR_SBI=eth0
|
||||
- SMF_INTERFACE_PORT_FOR_SBI=80
|
||||
- SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
|
||||
- SMF_API_VERSION=v1
|
||||
- DEFAULT_DNS_IPV4_ADDRESS=192.168.18.129
|
||||
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
|
||||
- AMF_IPV4_ADDRESS=0.0.0.0
|
||||
- AMF_PORT=80
|
||||
- AMF_API_VERSION=v1
|
||||
- AMF_FQDN=oai-amf
|
||||
- UDM_IPV4_ADDRESS=127.0.0.1
|
||||
- UDM_PORT=80
|
||||
- UDM_API_VERSION=v1
|
||||
- UDM_FQDN=localhost
|
||||
- UPF_IPV4_ADDRESS=192.168.71.134
|
||||
- UPF_FQDN_0=oai-spgwu
|
||||
- NRF_IPV4_ADDRESS=192.168.71.130
|
||||
- NRF_PORT=80
|
||||
- NRF_API_VERSION=v1
|
||||
- NRF_FQDN=oai-nrf
|
||||
- REGISTER_NRF=yes
|
||||
- DISCOVER_UPF=yes
|
||||
- USE_FQDN_DNS=yes
|
||||
- DNN_NI0=oai
|
||||
- DNN_NI2=oai.ipv4
|
||||
depends_on:
|
||||
- oai-nrf
|
||||
- oai-amf
|
||||
volumes:
|
||||
- ../5g_rfsimulator/smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
|
||||
healthcheck:
|
||||
test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.71.133
|
||||
oai-spgwu:
|
||||
container_name: "l2sim-oai-spgwu"
|
||||
image: oai-spgwu-tiny:latest
|
||||
environment:
|
||||
- TZ=Europe/Paris
|
||||
- PID_DIRECTORY=/var/run
|
||||
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0
|
||||
- SGW_INTERFACE_NAME_FOR_SX=eth0
|
||||
- PGW_INTERFACE_NAME_FOR_SGI=eth0
|
||||
- NETWORK_UE_NAT_OPTION=yes
|
||||
- NETWORK_UE_IP=12.1.1.0/24
|
||||
- SPGWC0_IP_ADDRESS=192.168.71.133
|
||||
- BYPASS_UL_PFCP_RULES=no
|
||||
- MCC=208
|
||||
- MNC=99
|
||||
- MNC03=099
|
||||
- TAC=1
|
||||
- GTP_EXTENSION_HEADER_PRESENT=yes
|
||||
- GW_ID=1
|
||||
- REALM=openairinterface.org
|
||||
- ENABLE_5G_FEATURES=yes
|
||||
- REGISTER_NRF=yes
|
||||
- USE_FQDN_NRF=yes
|
||||
- UPF_FQDN_5G=oai-spgwu
|
||||
- NRF_IPV4_ADDRESS=192.168.71.130
|
||||
- NRF_PORT=80
|
||||
- NRF_API_VERSION=v1
|
||||
- NRF_FQDN=oai-nrf
|
||||
- NSSAI_SST_0=1
|
||||
- NSSAI_SD_0=1
|
||||
- DNN_0=oai
|
||||
depends_on:
|
||||
- oai-nrf
|
||||
- oai-smf
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
- SYS_ADMIN
|
||||
cap_drop:
|
||||
- ALL
|
||||
privileged: true
|
||||
volumes:
|
||||
- ../5g_rfsimulator/spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh
|
||||
healthcheck:
|
||||
test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.71.134
|
||||
traffic_net:
|
||||
ipv4_address: 192.168.72.134
|
||||
oai-ext-dn:
|
||||
image: ubuntu:bionic
|
||||
privileged: true
|
||||
container_name: "l2sim-oai-ext-dn"
|
||||
entrypoint: /bin/bash -c \
|
||||
"apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\
|
||||
"ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
|
||||
depends_on:
|
||||
- oai-spgwu
|
||||
networks:
|
||||
traffic_net:
|
||||
ipv4_address: 192.168.72.135
|
||||
healthcheck:
|
||||
test: /bin/bash -c "ping -c 2 192.168.72.134"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-gnb:
|
||||
image: oai-gnb:develop
|
||||
privileged: true
|
||||
container_name: "l2sim-oai-gnb"
|
||||
network_mode: "host"
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
USE_SA_NFAPI_VNF: 'yes'
|
||||
GNB_NAME: gnb-l2sim-vnf
|
||||
TAC: 1
|
||||
MCC: '208'
|
||||
MNC: '99'
|
||||
MNC_LENGTH: 2
|
||||
NSSAI_SST: 1
|
||||
NSSAI_SD0: 1
|
||||
NSSAI_SD1: 112233
|
||||
AMF_IP_ADDRESS: 192.168.71.132
|
||||
GNB_NGA_IF_NAME: eno1
|
||||
GNB_NGA_IP_ADDRESS: 192.168.18.193
|
||||
GNB_NGU_IF_NAME: eno1
|
||||
GNB_NGU_IP_ADDRESS: 192.168.18.193
|
||||
LOCAL_S_IF_NAME: 'lo:'
|
||||
REMOTE_S_ADDRESS: 127.0.0.1
|
||||
LOCAL_S_ADDRESS: 127.0.0.2
|
||||
USE_ADDITIONAL_OPTIONS: --sa --nfapi 2 --emulate-l1 --log_config.global_log_options level,time,thread_id,nocolor
|
||||
depends_on:
|
||||
- oai-spgwu
|
||||
- oai-amf
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep nr-softmodem"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
proxy:
|
||||
image: oai-lte-multi-ue-proxy:latest
|
||||
privileged: true
|
||||
container_name: "l2sim-proxy"
|
||||
network_mode: "host"
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
command: "/oai-lte-multi-ue-proxy/bin/proxy 1 --nr"
|
||||
depends_on:
|
||||
- oai-gnb
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep proxy"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue0:
|
||||
image: oai-nr-ue:develop
|
||||
privileged: true
|
||||
container_name: "l2sim-oai-nr-ue0"
|
||||
network_mode: "host"
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
USE_NFAPI: 'yes'
|
||||
OPENAIR_DIR: /opt/oai-nr-ue
|
||||
FULL_IMSI: '208990100001100'
|
||||
FULL_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
|
||||
OPC: 'C42449363BBAD02B66D16BC975D77CC1'
|
||||
DNN: oai
|
||||
NSSAI_SST: 1
|
||||
NSSAI_SD: 1
|
||||
NR_UE_NFAPI_IF_NAME: eno1
|
||||
GNB_IP_ADDRESS: 127.0.0.1
|
||||
NR_UE_IP_ADDRESS: 127.0.0.1
|
||||
USE_ADDITIONAL_OPTIONS: --nokrnmod 1 --nfapi 5 --node-number 2 --sa --emulate-l1 --log_config.global_log_options level,time,thread_id,nocolor
|
||||
volumes:
|
||||
- ../../../openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results:/opt/oai-nr-ue/openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results
|
||||
depends_on:
|
||||
- oai-gnb
|
||||
- proxy
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep nr-uesoftmodem"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
public_net:
|
||||
driver: bridge
|
||||
name: l2sim-oai-public-net
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 192.168.71.128/26
|
||||
driver_opts:
|
||||
com.docker.network.bridge.name: "l2sim-public"
|
||||
traffic_net:
|
||||
driver: bridge
|
||||
name: l2sim-oai-traffic-net
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 192.168.72.128/26
|
||||
driver_opts:
|
||||
com.docker.network.bridge.name: "l2sim-traffic"
|
||||
@@ -1782,7 +1782,8 @@ set(NR_PDCP_SRC
|
||||
)
|
||||
|
||||
set(NR_SDAP_SRC
|
||||
${OPENAIR2_DIR}/SDAP/nr_sdap/nr_sdap_gnb.c
|
||||
${OPENAIR2_DIR}/SDAP/nr_sdap/nr_sdap.c
|
||||
${OPENAIR2_DIR}/SDAP/nr_sdap/nr_sdap_entity.c
|
||||
)
|
||||
|
||||
set(L2_SRC
|
||||
|
||||
@@ -478,6 +478,7 @@ int logInit (void)
|
||||
register_log_component("NAS","log",NAS);
|
||||
register_log_component("UDP","",UDP_);
|
||||
register_log_component("GTPU","",GTPU);
|
||||
register_log_component("SDAP","",SDAP);
|
||||
register_log_component("S1AP","",S1AP);
|
||||
register_log_component("F1AP","",F1AP);
|
||||
register_log_component("M2AP","",M2AP);
|
||||
|
||||
@@ -215,6 +215,7 @@ typedef enum {
|
||||
OCM,
|
||||
UDP_,
|
||||
GTPU,
|
||||
SDAP,
|
||||
SPGW,
|
||||
S1AP,
|
||||
F1AP,
|
||||
|
||||
@@ -944,6 +944,27 @@ ID = LEGACY_GTPU_TRACE
|
||||
GROUP = ALL:LEGACY_GTPU:LEGACY_GROUP_TRACE:LEGACY
|
||||
FORMAT = string,log
|
||||
|
||||
ID = LEGACY_SDAP_INFO
|
||||
DESC = SDAP legacy logs - info level
|
||||
GROUP = ALL:LEGACY_SDAP:LEGACY_GROUP_INFO:LEGACY
|
||||
FORMAT = string,log
|
||||
ID = LEGACY_SDAP_ERROR
|
||||
DESC = SDAP legacy logs - error level
|
||||
GROUP = ALL:LEGACY_SDAP:LEGACY_GROUP_ERROR:LEGACY
|
||||
FORMAT = string,log
|
||||
ID = LEGACY_SDAP_WARNING
|
||||
DESC = SDAP legacy logs - warning level
|
||||
GROUP = ALL:LEGACY_SDAP:LEGACY_GROUP_WARNING:LEGACY
|
||||
FORMAT = string,log
|
||||
ID = LEGACY_SDAP_DEBUG
|
||||
DESC = SDAP legacy logs - debug level
|
||||
GROUP = ALL:LEGACY_SDAP:LEGACY_GROUP_DEBUG:LEGACY
|
||||
FORMAT = string,log
|
||||
ID = LEGACY_SDAP_TRACE
|
||||
DESC = SDAP legacy logs - trace level
|
||||
GROUP = ALL:LEGACY_SDAP:LEGACY_GROUP_TRACE:LEGACY
|
||||
FORMAT = string,log
|
||||
|
||||
ID = LEGACY_TMR_INFO
|
||||
DESC = TMR legacy logs - info level
|
||||
GROUP = ALL:LEGACY_TMR:LEGACY_GROUP_INFO:LEGACY
|
||||
|
||||
@@ -351,6 +351,14 @@ The following features are valid for the gNB and the 5G-NR UE.
|
||||
- Interfaces with RRC, RLC
|
||||
- Interfaces with gtp-u (data Tx/Rx over N3 and F1-U interfaces)
|
||||
|
||||
**gNB SDAP**
|
||||
- Send/Receive operations according to 37.324 Rel.15
|
||||
- Establishment/Handling of SDAP entities.
|
||||
- Transfer of User Plane Data
|
||||
- Mapping between a QoS flow and a DRB for both DL and UL
|
||||
- Marking QoS flow ID in both DL and UL packets
|
||||
- Reflective QoS flow to DRB mapping for UL SDAP data PDUs
|
||||
|
||||
**gNB RRC**
|
||||
- NR RRC (38.331) Rel 16 messages using new asn1c
|
||||
- LTE RRC (36.331) also updated to Rel 15
|
||||
@@ -400,6 +408,7 @@ The following features are valid for the gNB and the 5G-NR UE.
|
||||
- New gtp-u implementation supporting both N3 and F1-U interfaces according to 29.281 Rel.15
|
||||
- Interfaces with RRC, F1AP for tunnel creation
|
||||
- Interfaces with PDCP and RLC for data send/receive at the CU and DU respectively (F1-U interface)
|
||||
- Interface with SDAP for data send/receive, capture of GTP-U Optional Header, GTP-U Extension Header and PDU Session Container.
|
||||
|
||||
# OpenAirInterface 5G-NR UE Feature Set #
|
||||
|
||||
@@ -502,6 +511,13 @@ The following features are valid for the gNB and the 5G-NR UE.
|
||||
- Radio bearer establishment/handling and association with PDCP entities
|
||||
- Interfaces with RRC, RLC
|
||||
|
||||
**UE SDAP**
|
||||
* Tx/Rx operations operations according to 37.324 Rel.15
|
||||
- Establishment/Handling of SDAP entities.
|
||||
- Transfer of User Plane Data
|
||||
- Reflective Mapping
|
||||
- RRC Signaling Mapping
|
||||
|
||||
**UE RRC**
|
||||
* Integration of RRC messages and procedures supporting UE 5G SA connection according to 38.331 Rel.16
|
||||
- RRCSetupRequest/RRCSetup/RRCSetupComplete
|
||||
|
||||
@@ -46,6 +46,8 @@ This proxy allows to perform L2 nFAPI simulator for:
|
||||
* 5G-NSA
|
||||
* 5G-SA
|
||||
|
||||
Another tutorial for 5G SA mode with 1 User is available [here](../ci-scripts/yaml_files/5g_l2sim_tdd/README.md).
|
||||
|
||||
----
|
||||
|
||||
[oai wiki home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
|
||||
|
||||
@@ -29,7 +29,8 @@ FROM ran-base:latest AS nr-ue-base
|
||||
|
||||
FROM ran-build:latest AS nr-ue-build
|
||||
|
||||
RUN cp /oai-ran/docker/scripts/nr_ue_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh
|
||||
RUN python3 ./docker/scripts/generateTemplate.py ./docker/scripts/nr_ue_parameters.yaml && \
|
||||
cp /oai-ran/docker/scripts/nr_ue_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh
|
||||
|
||||
#start from scratch for target executable
|
||||
FROM registry.access.redhat.com/ubi8/ubi:latest as oai-nr-ue
|
||||
@@ -62,7 +63,10 @@ COPY --from=nr-ue-build \
|
||||
./
|
||||
|
||||
WORKDIR /opt/oai-nr-ue/etc
|
||||
COPY --from=nr-ue-build /oai-ran/ci-scripts/conf_files/nr-ue-sim.conf .
|
||||
COPY --from=nr-ue-build \
|
||||
/oai-ran/ci-scripts/conf_files/nr-ue-sim.conf \
|
||||
/oai-ran/docker/etc/nr-ue.nfapi.conf \
|
||||
./
|
||||
|
||||
COPY --from=nr-ue-build \
|
||||
/oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \
|
||||
@@ -118,5 +122,5 @@ WORKDIR /opt/oai-nr-ue/etc
|
||||
COPY --from=nr-ue-build /oai-ran/ci-scripts/conf_files/ue.* .
|
||||
|
||||
WORKDIR /opt/oai-nr-ue
|
||||
CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem.Rel15", "-O", "/opt/oai-nr-ue/etc/nr-ue-sim.conf"]
|
||||
CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem.Rel15", "-O", "/opt/oai-nr-ue/etc/nr-ue.conf"]
|
||||
ENTRYPOINT ["/opt/oai-nr-ue/bin/entrypoint.sh"]
|
||||
|
||||
@@ -29,7 +29,8 @@ FROM ran-base:latest AS nr-ue-base
|
||||
|
||||
FROM ran-build:latest AS nr-ue-build
|
||||
|
||||
RUN cp /oai-ran/docker/scripts/nr_ue_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh
|
||||
RUN python3 ./docker/scripts/generateTemplate.py ./docker/scripts/nr_ue_parameters.yaml && \
|
||||
cp /oai-ran/docker/scripts/nr_ue_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh
|
||||
|
||||
#start from scratch for target executable
|
||||
FROM ubuntu:bionic as oai-nr-ue
|
||||
@@ -67,7 +68,10 @@ COPY --from=nr-ue-build \
|
||||
./
|
||||
|
||||
WORKDIR /opt/oai-nr-ue/etc
|
||||
COPY --from=nr-ue-build /oai-ran/ci-scripts/conf_files/nr-ue-sim.conf .
|
||||
COPY --from=nr-ue-build \
|
||||
/oai-ran/ci-scripts/conf_files/nr-ue-sim.conf \
|
||||
/oai-ran/docker/etc/nr-ue.nfapi.conf \
|
||||
./
|
||||
|
||||
COPY --from=nr-ue-build \
|
||||
/oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \
|
||||
@@ -106,5 +110,5 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai
|
||||
ldconfig
|
||||
|
||||
WORKDIR /opt/oai-nr-ue
|
||||
CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem.Rel15", "-O", "/opt/oai-nr-ue/etc/nr-ue-sim.conf"]
|
||||
CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem.Rel15", "-O", "/opt/oai-nr-ue/etc/nr-ue.conf"]
|
||||
ENTRYPOINT ["/opt/oai-nr-ue/bin/entrypoint.sh"]
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#-----------------------------------------------------------
|
||||
# Import
|
||||
#-----------------------------------------------------------
|
||||
import glob
|
||||
import re
|
||||
import yaml
|
||||
import os
|
||||
@@ -33,7 +34,8 @@ def main():
|
||||
#read yaml input parameters
|
||||
f = open(f'{sys.argv[1]}',)
|
||||
data = yaml.full_load(f)
|
||||
dir = os.listdir(f'{data[0]["paths"]["source_dir"]}')
|
||||
initial_path = f'{data[0]["paths"]["source_dir"]}'
|
||||
dir = glob.glob(initial_path + '/**/*.conf', recursive=True)
|
||||
|
||||
#identify configs, read and replace corresponding values
|
||||
for config in data[1]["configurations"]:
|
||||
@@ -42,7 +44,10 @@ def main():
|
||||
print('================================================')
|
||||
print('filePrefix = ' + filePrefix)
|
||||
print('outputfilename = ' + outputfilename)
|
||||
found = False
|
||||
for inputfile in dir:
|
||||
if found:
|
||||
continue
|
||||
if inputfile.find(filePrefix) >=0:
|
||||
prefix_outputfile = {"cu.band7.tm1.25PRB": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||
"du.band7.tm1.25PRB": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||
@@ -58,10 +63,13 @@ def main():
|
||||
"gnb.sa.band66.fr1.106PRB.usrpn300.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||
"gNB_SA_CU.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||
"gNB_SA_DU.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||
"proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||
"proxy_nr-ue.nfapi.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||
"ue.nfapi": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
|
||||
"ue_sim_ci": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}'
|
||||
}
|
||||
print('inputfile = ' + inputfile)
|
||||
found = True
|
||||
if filePrefix in prefix_outputfile:
|
||||
outputfile1 = prefix_outputfile[filePrefix]
|
||||
|
||||
@@ -69,7 +77,7 @@ def main():
|
||||
if not os.path.exists(directory):
|
||||
os.makedirs(directory, exist_ok=True)
|
||||
|
||||
with open(f'{data[0]["paths"]["source_dir"]}{inputfile}', mode='r') as inputfile, \
|
||||
with open(f'{inputfile}', mode='r') as inputfile, \
|
||||
open(outputfile1, mode='w') as outputfile:
|
||||
for line in inputfile:
|
||||
count = 0
|
||||
|
||||
@@ -11,8 +11,9 @@ THREAD_PARALLEL_CONFIG=${THREAD_PARALLEL_CONFIG:-PARALLEL_SINGLE_THREAD}
|
||||
if [[ -v USE_NSA_TDD_MONO ]]; then cp $PREFIX/etc/gnb.nsa.tdd.conf $PREFIX/etc/gnb.conf; fi
|
||||
if [[ -v USE_SA_TDD_MONO ]]; then cp $PREFIX/etc/gnb.sa.tdd.conf $PREFIX/etc/gnb.conf; fi
|
||||
if [[ -v USE_SA_FDD_MONO ]]; then cp $PREFIX/etc/gnb.sa.fdd.conf $PREFIX/etc/gnb.conf; fi
|
||||
if [[ -v USE_SA_CU ]]; then ln -s $PREFIX/etc/gnb.sa.cu.conf $PREFIX/etc/gnb.conf; fi
|
||||
if [[ -v USE_SA_CU ]]; then cp $PREFIX/etc/gnb.sa.cu.conf $PREFIX/etc/gnb.conf; fi
|
||||
if [[ -v USE_SA_TDD_CU ]]; then cp $PREFIX/etc/gnb.sa.du.tdd.conf $PREFIX/etc/gnb.conf; fi
|
||||
if [[ -v USE_SA_NFAPI_VNF ]]; then cp $PREFIX/etc/gnb.sa.nfapi.vnf.conf $PREFIX/etc/gnb.conf; fi
|
||||
# Sometimes, the templates are not enough. We mount a conf file on $PREFIX/etc. It can be a template itself.
|
||||
if [[ -v USE_VOLUMED_CONF ]]; then cp $PREFIX/etc/mounted.conf $PREFIX/etc/gnb.conf; fi
|
||||
|
||||
|
||||
@@ -202,3 +202,39 @@
|
||||
- key: remote_n_portd
|
||||
env: "@F1_CU_D_PORT@"
|
||||
|
||||
- filePrefix: proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf
|
||||
outputfilename: "gnb.sa.nfapi.vnf.conf"
|
||||
config:
|
||||
- key: Active_gNBs
|
||||
env: "@GNB_NAME@"
|
||||
- key: gNB_name
|
||||
env: "@GNB_NAME@"
|
||||
- key: mcc
|
||||
env: "@MCC@"
|
||||
- key: mnc
|
||||
env: "@MNC@"
|
||||
- key: mnc_length
|
||||
env: "@MNC_LENGTH@"
|
||||
- key: tracking_area_code
|
||||
env: "@TAC@"
|
||||
- key: sst
|
||||
env: "@NSSAI_SST@"
|
||||
- key: ipv4
|
||||
env: "@AMF_IP_ADDRESS@"
|
||||
- key: GNB_INTERFACE_NAME_FOR_NG_AMF
|
||||
env: "@GNB_NGA_IF_NAME@"
|
||||
- key: GNB_IPV4_ADDRESS_FOR_NG_AMF
|
||||
env: "@GNB_NGA_IP_ADDRESS@"
|
||||
- key: GNB_INTERFACE_NAME_FOR_NGU
|
||||
env: "@GNB_NGU_IF_NAME@"
|
||||
- key: GNB_IPV4_ADDRESS_FOR_NGU
|
||||
env: "@GNB_NGU_IP_ADDRESS@"
|
||||
- key: parallel_config
|
||||
env: "@THREAD_PARALLEL_CONFIG@"
|
||||
- key: local_s_if_name
|
||||
env: "@LOCAL_S_IF_NAME@"
|
||||
- key: remote_s_address
|
||||
env: "@REMOTE_S_ADDRESS@"
|
||||
- key: local_s_address
|
||||
env: "@LOCAL_S_ADDRESS@"
|
||||
|
||||
|
||||
@@ -5,12 +5,22 @@ set -euo pipefail
|
||||
PREFIX=/opt/oai-nr-ue
|
||||
|
||||
# Based another env var, pick one template to use
|
||||
#if [[ -v USE_NFAPI ]]; then cp $PREFIX/etc/ue.nfapi.conf $PREFIX/etc/ue.conf; fi
|
||||
if [[ -v USE_NFAPI ]]; then cp $PREFIX/etc/nr-ue.nfapi.conf $PREFIX/etc/nr-ue.conf; fi
|
||||
# Sometimes, the templates are not enough. We mount a conf file on $PREFIX/etc. It can be a template itself.
|
||||
if [[ -v USE_VOLUMED_CONF ]]; then cp $PREFIX/etc/mounted.conf $PREFIX/etc/nr-ue.conf; fi
|
||||
# if none, pick the default
|
||||
if [ ! -f $PREFIX/etc/nr-ue.conf ]; then cp $PREFIX/etc/nr-ue-sim.conf $PREFIX/etc/nr-ue.conf; fi
|
||||
|
||||
# Only this template will be manipulated and the USIM one!
|
||||
CONFIG_FILES=`ls $PREFIX/etc/ue.conf $PREFIX/etc/nr-ue-sim.conf || true`
|
||||
# Only this template will be manipulated
|
||||
CONFIG_FILES=`ls $PREFIX/etc/nr-ue.conf || true`
|
||||
|
||||
for c in ${CONFIG_FILES}; do
|
||||
# Sometimes templates have no pattern to be replaced.
|
||||
if ! grep -oP '@[a-zA-Z0-9_]+@' ${c}; then
|
||||
echo "Configuration is already set"
|
||||
break
|
||||
fi
|
||||
|
||||
# grep variable names (format: ${VAR}) from template to be rendered
|
||||
VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${c} | sort | uniq | xargs)
|
||||
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
#/*
|
||||
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
# * contributor license agreements. See the NOTICE file distributed with
|
||||
# * this work for additional information regarding copyright ownership.
|
||||
# * The OpenAirInterface Software Alliance licenses this file to You under
|
||||
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
# * except in compliance with the License.
|
||||
# * You may obtain a copy of the License at
|
||||
# *
|
||||
# * http://www.openairinterface.org/?page_id=698
|
||||
# *
|
||||
# * Unless required by applicable law or agreed to in writing, software
|
||||
# * distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# * See the License for the specific language governing permissions and
|
||||
# * limitations under the License.
|
||||
# *-------------------------------------------------------------------------------
|
||||
# * For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
# * contact@openairinterface.org
|
||||
# */
|
||||
|
||||
---
|
||||
- paths:
|
||||
source_dir: "ci-scripts/conf_files/"
|
||||
dest_dir: docker/etc
|
||||
|
||||
- configurations:
|
||||
- filePrefix: proxy_nr-ue.nfapi.conf
|
||||
outputfilename: "nr-ue.nfapi.conf"
|
||||
config:
|
||||
- key: imsi
|
||||
env: "@FULL_IMSI@"
|
||||
- key: key
|
||||
env: "@FULL_KEY@"
|
||||
- key: opc
|
||||
env: "@OPC@"
|
||||
- key: dnn
|
||||
env: "@DNN@"
|
||||
- key: nssai_sst
|
||||
env: "@NSSAI_SST@"
|
||||
- key: nssai_sd
|
||||
env: "@NSSAI_SD@"
|
||||
- key: remote_n_address
|
||||
env: "@GNB_IP_ADDRESS@"
|
||||
- key: local_n_address
|
||||
env: "@NR_UE_IP_ADDRESS@"
|
||||
- key: local_n_if_name
|
||||
env: "@NR_UE_NFAPI_IF_NAME@"
|
||||
|
||||
+23
-104
@@ -19,7 +19,7 @@
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#define _GNU_SOURCE // For pthread_setname_np
|
||||
#include <pthread.h>
|
||||
#include <openair1/PHY/impl_defs_top.h>
|
||||
#include "executables/nr-uesoftmodem.h"
|
||||
@@ -239,84 +239,21 @@ static void L1_nsa_prach_procedures(frame_t frame, int slot, fapi_nr_ul_config_p
|
||||
LOG_D(NR_MAC, "We have successfully filled the rach_ind queue with the recently filled rach ind\n");
|
||||
}
|
||||
|
||||
static bool sfn_slot_matcher(void *wanted, void *candidate)
|
||||
{
|
||||
nfapi_p7_message_header_t *msg = candidate;
|
||||
int sfn_sf = *(int*)wanted;
|
||||
|
||||
switch (msg->message_id)
|
||||
{
|
||||
case NFAPI_NR_PHY_MSG_TYPE_RACH_INDICATION:
|
||||
{
|
||||
nfapi_nr_rach_indication_t *ind = candidate;
|
||||
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot;
|
||||
}
|
||||
|
||||
case NFAPI_NR_PHY_MSG_TYPE_RX_DATA_INDICATION:
|
||||
{
|
||||
nfapi_nr_rx_data_indication_t *ind = candidate;
|
||||
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot;
|
||||
}
|
||||
|
||||
case NFAPI_NR_PHY_MSG_TYPE_CRC_INDICATION:
|
||||
{
|
||||
nfapi_nr_crc_indication_t *ind = candidate;
|
||||
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot;
|
||||
}
|
||||
|
||||
case NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION:
|
||||
{
|
||||
nfapi_nr_uci_indication_t *ind = candidate;
|
||||
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot;
|
||||
}
|
||||
|
||||
case NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST:
|
||||
{
|
||||
nfapi_nr_dl_tti_request_t *ind = candidate;
|
||||
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot;
|
||||
}
|
||||
|
||||
case NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST:
|
||||
{
|
||||
nfapi_nr_tx_data_request_t *ind = candidate;
|
||||
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot;
|
||||
}
|
||||
|
||||
case NFAPI_NR_PHY_MSG_TYPE_UL_DCI_REQUEST:
|
||||
{
|
||||
nfapi_nr_ul_dci_request_t *ind = candidate;
|
||||
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot;
|
||||
}
|
||||
|
||||
case NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST:
|
||||
{
|
||||
nfapi_nr_ul_tti_request_t *ind = candidate;
|
||||
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot;
|
||||
}
|
||||
|
||||
default:
|
||||
LOG_E(NR_MAC, "sfn_slot_match bad ID: %d\n", msg->message_id);
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot)
|
||||
{
|
||||
nfapi_nr_rach_indication_t *rach_ind = unqueue_matching(&nr_rach_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot);
|
||||
nfapi_nr_rx_data_indication_t *rx_ind = unqueue_matching(&nr_rx_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot);
|
||||
nfapi_nr_crc_indication_t *crc_ind = unqueue_matching(&nr_crc_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot);
|
||||
nfapi_nr_dl_tti_request_t *dl_tti_request = get_queue(&nr_dl_tti_req_queue);
|
||||
nfapi_nr_ul_dci_request_t *ul_dci_request = get_queue(&nr_ul_dci_req_queue);
|
||||
|
||||
LOG_D(NR_MAC, "Try to get a ul_tti_req for sfn/slot %d %d from queue with %lu items\n",
|
||||
NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.active_harq_sfn_slot),NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_harq_sfn_slot), nr_ul_tti_req_queue.num_items);
|
||||
nfapi_nr_ul_tti_request_t *ul_tti_request = unqueue_matching(&nr_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.active_harq_sfn_slot);
|
||||
if (!ul_tti_request)
|
||||
{
|
||||
LOG_D(NR_MAC, "Try to get a ul_tti_req from seprate queue because dl_tti_req was late\n");
|
||||
ul_tti_request = unqueue_matching(&nr_wait_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.active_harq_sfn_slot);
|
||||
for (int i = 0; i < NR_MAX_HARQ_PROCESSES; i++) {
|
||||
LOG_D(NR_MAC, "Try to get a ul_tti_req by matching CRC active SFN %d/SLOT %d from queue with %lu items\n",
|
||||
NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.harq[i].active_ul_harq_sfn_slot),
|
||||
NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.harq[i].active_ul_harq_sfn_slot), nr_ul_tti_req_queue.num_items);
|
||||
nfapi_nr_ul_tti_request_t *ul_tti_request_crc = unqueue_matching(&nr_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.harq[i].active_ul_harq_sfn_slot);
|
||||
if (ul_tti_request_crc && ul_tti_request_crc->n_pdus > 0)
|
||||
{
|
||||
check_and_process_dci(NULL, NULL, NULL, ul_tti_request_crc);
|
||||
}
|
||||
}
|
||||
|
||||
if (rach_ind && rach_ind->number_of_pdus > 0)
|
||||
@@ -333,24 +270,6 @@ static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot)
|
||||
free(rach_ind);
|
||||
nr_Msg1_transmitted(0, 0, NFAPI_SFNSLOT2SFN(sfn_slot), 0);
|
||||
}
|
||||
if (crc_ind && crc_ind->number_crcs > 0)
|
||||
{
|
||||
NR_UL_IND_t UL_INFO = {
|
||||
.crc_ind = *crc_ind,
|
||||
};
|
||||
send_nsa_standalone_msg(&UL_INFO, crc_ind->header.message_id);
|
||||
free(crc_ind->crc_list);
|
||||
free(crc_ind);
|
||||
}
|
||||
if (rx_ind && rx_ind->number_of_pdus > 0)
|
||||
{
|
||||
NR_UL_IND_t UL_INFO = {
|
||||
.rx_ind = *rx_ind,
|
||||
};
|
||||
send_nsa_standalone_msg(&UL_INFO, rx_ind->header.message_id);
|
||||
free(rx_ind->pdu_list);
|
||||
free(rx_ind);
|
||||
}
|
||||
if (dl_tti_request)
|
||||
{
|
||||
int dl_tti_sfn_slot = NFAPI_SFNSLOT2HEX(dl_tti_request->SFN, dl_tti_request->Slot);
|
||||
@@ -380,10 +299,6 @@ static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot)
|
||||
{
|
||||
check_and_process_dci(NULL, NULL, ul_dci_request, NULL);
|
||||
}
|
||||
if (ul_tti_request && ul_tti_request->n_pdus > 0)
|
||||
{
|
||||
check_and_process_dci(NULL, NULL, NULL, ul_tti_request);
|
||||
}
|
||||
}
|
||||
|
||||
static void check_nr_prach(NR_UE_MAC_INST_t *mac, nr_uplink_indication_t *ul_info, NR_PRACH_RESOURCES_t *prach_resources)
|
||||
@@ -434,7 +349,6 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
|
||||
reset_queue(&nr_tx_req_queue);
|
||||
reset_queue(&nr_ul_dci_req_queue);
|
||||
reset_queue(&nr_ul_tti_req_queue);
|
||||
reset_queue(&nr_wait_ul_tti_req_queue);
|
||||
|
||||
NR_PRACH_RESOURCES_t prach_resources;
|
||||
memset(&prach_resources, 0, sizeof(prach_resources));
|
||||
@@ -443,6 +357,13 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
|
||||
int last_sfn_slot = -1;
|
||||
uint16_t sfn_slot = 0;
|
||||
|
||||
module_id_t mod_id = 0;
|
||||
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
|
||||
for (int i = 0; i < NR_MAX_HARQ_PROCESSES; i++) {
|
||||
mac->nr_ue_emul_l1.harq[i].active = false;
|
||||
mac->nr_ue_emul_l1.harq[i].active_ul_harq_sfn_slot = -1;
|
||||
}
|
||||
|
||||
while (!oai_exit)
|
||||
{
|
||||
if (sem_wait(&sfn_slot_semaphore) != 0)
|
||||
@@ -459,9 +380,11 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
|
||||
}
|
||||
if (slot_ind) {
|
||||
sfn_slot = *slot_ind;
|
||||
free_and_zero(slot_ind);
|
||||
}
|
||||
else if (ch_info) {
|
||||
sfn_slot = ch_info->sfn_slot;
|
||||
free_and_zero(ch_info);
|
||||
}
|
||||
|
||||
frame_t frame = NFAPI_SFNSLOT2SFN(sfn_slot);
|
||||
@@ -477,8 +400,6 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
|
||||
LOG_D(NR_MAC, "The received sfn/slot [%d %d] from proxy\n",
|
||||
frame, slot);
|
||||
|
||||
module_id_t mod_id = 0;
|
||||
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
|
||||
if (get_softmodem_params()->sa && mac->mib == NULL)
|
||||
{
|
||||
LOG_D(NR_MAC, "We haven't gotten MIB. Lets see if we received it\n");
|
||||
@@ -533,8 +454,10 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
|
||||
mac->scc_SIB->tdd_UL_DL_ConfigurationCommon,
|
||||
ul_info.slot_tx, mac->frame_type))
|
||||
{
|
||||
LOG_D(NR_MAC, "Slot %d. calling nr_ue_ul_ind() from %s\n", ul_info.slot_tx, __FUNCTION__);
|
||||
nr_ue_ul_indication(&ul_info);
|
||||
LOG_D(NR_MAC, "Slot %d. calling nr_ue_ul_ind() and nr_ue_pucch_scheduler() from %s\n", ul_info.slot_tx, __FUNCTION__);
|
||||
nr_ue_scheduler(NULL, &ul_info);
|
||||
nr_ue_prach_scheduler(mod_id, ul_info.frame_tx, ul_info.slot_tx, ul_info.thread_id);
|
||||
nr_ue_pucch_scheduler(mod_id, ul_info.frame_tx, ul_info.slot_tx, ul_info.thread_id);
|
||||
check_nr_prach(mac, &ul_info, &prach_resources);
|
||||
}
|
||||
if (!IS_SOFTMODEM_NOS1 && get_softmodem_params()->sa) {
|
||||
@@ -544,10 +467,6 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
|
||||
pdcp_run(&ctxt);
|
||||
}
|
||||
process_queued_nr_nfapi_msgs(mac, sfn_slot);
|
||||
free(slot_ind);
|
||||
slot_ind = NULL;
|
||||
free(ch_info);
|
||||
ch_info = NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
#include "LAYER2/MAC/mac_vars.h"
|
||||
#include "RRC/LTE/rrc_vars.h"
|
||||
#include "PHY_INTERFACE/phy_interface_vars.h"
|
||||
#include "NR_IF_Module.h"
|
||||
#include "openair1/SIMULATION/TOOLS/sim.h"
|
||||
|
||||
#ifdef SMBV
|
||||
@@ -156,6 +157,9 @@ uint32_t N_RB_DL = 106;
|
||||
*/
|
||||
uint8_t abstraction_flag=0;
|
||||
|
||||
nr_bler_struct nr_bler_data[NR_NUM_MCS];
|
||||
|
||||
static void init_bler_table(void);
|
||||
|
||||
/*---------------------BMC: timespec helpers -----------------------------*/
|
||||
|
||||
@@ -250,7 +254,6 @@ void init_tpools(uint8_t nun_dlsch_threads) {
|
||||
free(params);
|
||||
init_dlsch_tpool( nun_dlsch_threads);
|
||||
}
|
||||
|
||||
static void get_options(void) {
|
||||
|
||||
nrUE_params.ofdm_offset_divisor = 8;
|
||||
@@ -472,6 +475,7 @@ int main( int argc, char **argv ) {
|
||||
PHY_vars_UE_g[0] = malloc(sizeof(PHY_VARS_NR_UE *)*MAX_NUM_CCs);
|
||||
if (get_softmodem_params()->emulate_l1) {
|
||||
RCconfig_nr_ue_L1();
|
||||
init_bler_table();
|
||||
}
|
||||
|
||||
if (get_softmodem_params()->do_ra)
|
||||
@@ -552,3 +556,56 @@ int main( int argc, char **argv ) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Read in each MCS file and build BLER-SINR-TB table
|
||||
static void init_bler_table(void) {
|
||||
memset(nr_bler_data, 0, sizeof(nr_bler_data));
|
||||
|
||||
const char *awgn_results_dir = getenv("AWGN_RESULTS_DIR");
|
||||
if (!awgn_results_dir) {
|
||||
LOG_W(NR_MAC, "No $AWGN_RESULTS_DIR\n");
|
||||
return;
|
||||
}
|
||||
|
||||
for (unsigned int i = 0; i < NR_NUM_MCS; i++) {
|
||||
char fName[1024];
|
||||
snprintf(fName, sizeof(fName), "%s/mcs%d_awgn_5G.csv", awgn_results_dir, i);
|
||||
FILE *pFile = fopen(fName, "r");
|
||||
if (!pFile) {
|
||||
LOG_E(NR_MAC, "%s: open %s: %s\n", __func__, fName, strerror(errno));
|
||||
continue;
|
||||
}
|
||||
size_t bufSize = 1024;
|
||||
char * line = NULL;
|
||||
char * token;
|
||||
char * temp = NULL;
|
||||
int nlines = 0;
|
||||
while (getline(&line, &bufSize, pFile) > 0) {
|
||||
if (!strncmp(line, "SNR", 3)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (nlines > NUM_SINR) {
|
||||
LOG_E(NR_MAC, "BLER FILE ERROR - num lines greater than expected - file: %s\n", fName);
|
||||
abort();
|
||||
}
|
||||
|
||||
token = strtok_r(line, ";", &temp);
|
||||
int ncols = 0;
|
||||
while (token != NULL) {
|
||||
if (ncols > NUM_BLER_COL) {
|
||||
LOG_E(NR_MAC, "BLER FILE ERROR - num of cols greater than expected\n");
|
||||
abort();
|
||||
}
|
||||
|
||||
nr_bler_data[i].bler_table[nlines][ncols] = strtof(token, NULL);
|
||||
ncols++;
|
||||
|
||||
token = strtok_r(NULL, ";", &temp);
|
||||
}
|
||||
nlines++;
|
||||
}
|
||||
nr_bler_data[i].length = nlines;
|
||||
fclose(pFile);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -243,13 +243,13 @@ void oai_create_gnb(void) {
|
||||
|
||||
if (RC.gNB == NULL) {
|
||||
RC.gNB = (PHY_VARS_gNB **) calloc(1, sizeof(PHY_VARS_gNB *));
|
||||
LOG_I(PHY,"gNB L1 structure RC.gNB allocated @ %p\n",RC.gNB);
|
||||
LOG_D(PHY,"gNB L1 structure RC.gNB allocated @ %p\n",RC.gNB);
|
||||
}
|
||||
|
||||
|
||||
if (RC.gNB[0] == NULL) {
|
||||
RC.gNB[0] = (PHY_VARS_gNB *) calloc(1, sizeof(PHY_VARS_gNB));
|
||||
LOG_I(PHY,"[nr-gnb.c] gNB structure RC.gNB[%d] allocated @ %p\n",0,RC.gNB[0]);
|
||||
LOG_D(PHY,"[nr-gnb.c] gNB structure RC.gNB[%d] allocated @ %p\n",0,RC.gNB[0]);
|
||||
}
|
||||
|
||||
PHY_VARS_gNB *gNB = RC.gNB[0];
|
||||
@@ -491,7 +491,7 @@ int wake_gNB_rxtx(PHY_VARS_gNB *gNB, uint16_t sfn, uint16_t slot) {
|
||||
L1_proc->frame_tx = (L1_proc->slot_rx > (19-gNB->if_inst->sl_ahead)) ? (L1_proc->frame_rx+1)&1023 : L1_proc->frame_rx;
|
||||
L1_proc->slot_tx = (L1_proc->slot_rx + gNB->if_inst->sl_ahead)%20;
|
||||
|
||||
//LOG_I(PHY, "sfn/sf:%d%d proc[rx:%d%d] rx:%d%d] About to wake rxtx thread\n\n", sfn, slot, proc->frame_rx, proc->slot_rx, L1_proc->frame_rx, L1_proc->slot_rx);
|
||||
//LOG_D(PHY, "sfn/sf:%d%d proc[rx:%d%d] rx:%d%d] About to wake rxtx thread\n\n", sfn, slot, proc->frame_rx, proc->slot_rx, L1_proc->frame_rx, L1_proc->slot_rx);
|
||||
//NFAPI_TRACE(NFAPI_TRACE_INFO, "\nEntering wake_gNB_rxtx sfn %d slot %d\n",L1_proc->frame_rx,L1_proc->slot_rx);
|
||||
// the thread can now be woken up
|
||||
if (pthread_cond_signal(&L1_proc->cond) != 0) {
|
||||
@@ -757,7 +757,7 @@ int phy_nr_rach_indication(nfapi_nr_rach_indication_t *ind)
|
||||
int phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind)
|
||||
{
|
||||
|
||||
LOG_I(NR_MAC, "In %s() NFAPI SFN/SF: %d/%d number_of_pdus :%u\n",
|
||||
LOG_D(NR_MAC, "In %s() NFAPI SFN/SF: %d/%d number_of_pdus :%u\n",
|
||||
__FUNCTION__,ind->sfn, ind->slot, ind->num_ucis);
|
||||
if(NFAPI_MODE == NFAPI_MODE_VNF)
|
||||
{
|
||||
@@ -787,12 +787,12 @@ int phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind)
|
||||
if (ind_pdu->harq) {
|
||||
uci_ind_pdu->harq = CALLOC(1, sizeof(*uci_ind_pdu->harq));
|
||||
AssertFatal(uci_ind_pdu->harq != NULL, "Memory not allocated for uci_ind_pdu->harq in phy_nr_uci_indication.");
|
||||
|
||||
*uci_ind_pdu->harq = *ind_pdu->harq;
|
||||
|
||||
uci_ind_pdu->harq->harq_list = CALLOC(uci_ind_pdu->harq->num_harq, sizeof(*uci_ind_pdu->harq->harq_list));
|
||||
AssertFatal(uci_ind_pdu->harq->harq_list != NULL, "Memory not allocated for uci_ind_pdu->harq->harq_list in phy_nr_uci_indication.");
|
||||
for (int j = 0; j < uci_ind_pdu->harq->num_harq; j++)
|
||||
uci_ind_pdu->harq->harq_list[j].harq_value = ind_pdu->harq->harq_list[j].harq_value;
|
||||
uci_ind_pdu->harq->harq_list[j].harq_value = ind_pdu->harq->harq_list[j].harq_value;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -800,21 +800,27 @@ int phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind)
|
||||
case NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE: {
|
||||
nfapi_nr_uci_pucch_pdu_format_2_3_4_t *uci_ind_pdu = &uci_ind->uci_list[i].pucch_pdu_format_2_3_4;
|
||||
nfapi_nr_uci_pucch_pdu_format_2_3_4_t *ind_pdu = &ind->uci_list[i].pucch_pdu_format_2_3_4;
|
||||
|
||||
uci_ind_pdu->harq.harq_payload = CALLOC(1, sizeof(*uci_ind_pdu->harq.harq_payload));
|
||||
AssertFatal(uci_ind_pdu->harq.harq_payload != NULL, "Memory not allocated for uci_ind_pdu->harq.harq_payload in phy_nr_uci_indication.");
|
||||
*uci_ind_pdu->harq.harq_payload = *ind_pdu->harq.harq_payload;
|
||||
|
||||
|
||||
uci_ind_pdu->csi_part1.csi_part1_payload = CALLOC(1, sizeof(*uci_ind_pdu->csi_part1.csi_part1_payload));
|
||||
AssertFatal(uci_ind_pdu->csi_part1.csi_part1_payload != NULL, "Memory not allocated for uci_ind_pdu->csi_part1.csi_part1_payload in phy_nr_uci_indication.");
|
||||
*uci_ind_pdu->csi_part1.csi_part1_payload = *ind_pdu->csi_part1.csi_part1_payload;
|
||||
|
||||
|
||||
uci_ind_pdu->csi_part2.csi_part2_payload = CALLOC(1, sizeof(*uci_ind_pdu->csi_part2.csi_part2_payload));
|
||||
AssertFatal(uci_ind_pdu->csi_part2.csi_part2_payload != NULL, "Memory not allocated for uci_ind_pdu->csi_part2.csi_part2_payload in phy_nr_uci_indication.");
|
||||
*uci_ind_pdu->csi_part2.csi_part2_payload = *ind_pdu->csi_part2.csi_part2_payload;
|
||||
|
||||
*uci_ind_pdu = *ind_pdu;
|
||||
if (ind_pdu->harq.harq_payload) {
|
||||
uci_ind_pdu->harq.harq_payload = CALLOC(1, sizeof(*uci_ind_pdu->harq.harq_payload));
|
||||
AssertFatal(uci_ind_pdu->harq.harq_payload != NULL, "Memory not allocated for uci_ind_pdu->harq.harq_payload in phy_nr_uci_indication.");
|
||||
*uci_ind_pdu->harq.harq_payload = *ind_pdu->harq.harq_payload;
|
||||
}
|
||||
if (ind_pdu->sr.sr_payload) {
|
||||
uci_ind_pdu->sr.sr_payload = CALLOC(1, sizeof(*uci_ind_pdu->sr.sr_payload));
|
||||
AssertFatal(uci_ind_pdu->sr.sr_payload != NULL, "Memory not allocated for uci_ind_pdu->sr.sr_payload in phy_nr_uci_indication.");
|
||||
*uci_ind_pdu->sr.sr_payload = *ind_pdu->sr.sr_payload;
|
||||
}
|
||||
if (ind_pdu->csi_part1.csi_part1_payload) {
|
||||
uci_ind_pdu->csi_part1.csi_part1_payload = CALLOC(1, sizeof(*uci_ind_pdu->csi_part1.csi_part1_payload));
|
||||
AssertFatal(uci_ind_pdu->csi_part1.csi_part1_payload != NULL, "Memory not allocated for uci_ind_pdu->csi_part1.csi_part1_payload in phy_nr_uci_indication.");
|
||||
*uci_ind_pdu->csi_part1.csi_part1_payload = *ind_pdu->csi_part1.csi_part1_payload;
|
||||
}
|
||||
if (ind_pdu->csi_part2.csi_part2_payload) {
|
||||
uci_ind_pdu->csi_part2.csi_part2_payload = CALLOC(1, sizeof(*uci_ind_pdu->csi_part2.csi_part2_payload));
|
||||
AssertFatal(uci_ind_pdu->csi_part2.csi_part2_payload != NULL, "Memory not allocated for uci_ind_pdu->csi_part2.csi_part2_payload in phy_nr_uci_indication.");
|
||||
*uci_ind_pdu->csi_part2.csi_part2_payload = *ind_pdu->csi_part2.csi_part2_payload;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -944,7 +950,7 @@ int phy_crc_indication(struct nfapi_vnf_p7_config *config, nfapi_crc_indication_
|
||||
|
||||
int phy_nr_crc_indication(nfapi_nr_crc_indication_t *ind) {
|
||||
|
||||
LOG_I(NR_MAC, "In %s() NFAPI SFN/SF: %d/%d number_of_pdus :%u\n",
|
||||
LOG_D(NR_MAC, "In %s() NFAPI SFN/SF: %d/%d number_of_pdus :%u\n",
|
||||
__FUNCTION__,ind->sfn, ind->slot, ind->number_crcs);
|
||||
|
||||
if(NFAPI_MODE == NFAPI_MODE_VNF)
|
||||
@@ -967,7 +973,7 @@ int phy_nr_crc_indication(nfapi_nr_crc_indication_t *ind) {
|
||||
crc_ind->crc_list[j].tb_crc_status = ind->crc_list[j].tb_crc_status;
|
||||
crc_ind->crc_list[j].timing_advance = ind->crc_list[j].timing_advance;
|
||||
crc_ind->crc_list[j].ul_cqi = ind->crc_list[j].ul_cqi;
|
||||
LOG_I(NR_MAC, "Received crc_ind.harq_id = %d for %d index SFN SLot %u %u with rnti %x\n",
|
||||
LOG_D(NR_MAC, "Received crc_ind.harq_id = %d for %d index SFN SLot %u %u with rnti %x\n",
|
||||
ind->crc_list[j].harq_id, j, ind->sfn, ind->slot, ind->crc_list[j].rnti);
|
||||
}
|
||||
if (!put_queue(&gnb_crc_ind_queue, crc_ind))
|
||||
@@ -1063,7 +1069,7 @@ int phy_rx_indication(struct nfapi_vnf_p7_config *config, nfapi_rx_indication_t
|
||||
|
||||
int phy_nr_rx_data_indication(nfapi_nr_rx_data_indication_t *ind) {
|
||||
|
||||
LOG_I(NR_MAC, "In %s() NFAPI SFN/SF: %d/%d number_of_pdus :%u, and pdu %p\n",
|
||||
LOG_D(NR_MAC, "In %s() NFAPI SFN/SF: %d/%d number_of_pdus :%u, and pdu %p\n",
|
||||
__FUNCTION__,ind->sfn, ind->slot, ind->number_of_pdus, ind->pdu_list[0].pdu);
|
||||
|
||||
if(NFAPI_MODE == NFAPI_MODE_VNF)
|
||||
@@ -1165,7 +1171,7 @@ static void analyze_cqi_pdus_for_duplicates(nfapi_cqi_indication_t *ind)
|
||||
{
|
||||
nfapi_cqi_indication_pdu_t *src_pdu = &ind->cqi_indication_body.cqi_pdu_list[i];
|
||||
|
||||
LOG_I(MAC, "CQI_IND[PDU:%d][rnti:%x cqi:%d channel:%d]\n", i, src_pdu->rx_ue_information.rnti,
|
||||
LOG_D(MAC, "CQI_IND[PDU:%d][rnti:%x cqi:%d channel:%d]\n", i, src_pdu->rx_ue_information.rnti,
|
||||
src_pdu->ul_cqi_information.ul_cqi, src_pdu->ul_cqi_information.channel);
|
||||
|
||||
for (int j = i + 1; j < num_cqis; j++)
|
||||
@@ -1887,7 +1893,7 @@ int oai_nfapi_dl_config_req(nfapi_dl_config_request_t *dl_config_req) {
|
||||
nfapi_vnf_p7_config_t *p7_config = vnf.p7_vnfs[0].config;
|
||||
dl_config_req->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!!
|
||||
dl_config_req->header.message_id = NFAPI_DL_CONFIG_REQUEST;
|
||||
LOG_I(PHY, "[VNF] %s() DL_CONFIG_REQ sfn_sf:%d_%d number_of_pdus:%d\n", __FUNCTION__,
|
||||
LOG_D(PHY, "[VNF] %s() DL_CONFIG_REQ sfn_sf:%d_%d number_of_pdus:%d\n", __FUNCTION__,
|
||||
NFAPI_SFNSF2SFN(dl_config_req->sfn_sf),NFAPI_SFNSF2SF(dl_config_req->sfn_sf), dl_config_req->dl_config_request_body.number_pdu);
|
||||
if (dl_config_req->dl_config_request_body.number_pdu > 0)
|
||||
{
|
||||
@@ -1898,7 +1904,7 @@ int oai_nfapi_dl_config_req(nfapi_dl_config_request_t *dl_config_req) {
|
||||
{
|
||||
uint16_t dl_rnti = dl_config_req->dl_config_request_body.dl_config_pdu_list[i].dlsch_pdu.dlsch_pdu_rel8.rnti;
|
||||
uint16_t numPDUs = dl_config_req->dl_config_request_body.number_pdu;
|
||||
LOG_I(MAC, "(OAI eNB) Sending dl_config_req at VNF during Frame: %d and Subframe: %d,"
|
||||
LOG_D(MAC, "(OAI eNB) Sending dl_config_req at VNF during Frame: %d and Subframe: %d,"
|
||||
" with a RNTI value of: %x and with number of PDUs: %u\n",
|
||||
NFAPI_SFNSF2SFN(dl_config_req->sfn_sf),NFAPI_SFNSF2SF(dl_config_req->sfn_sf), dl_rnti, numPDUs);
|
||||
}
|
||||
@@ -1919,8 +1925,7 @@ int oai_nfapi_dl_config_req(nfapi_dl_config_request_t *dl_config_req) {
|
||||
|
||||
int oai_nfapi_dl_tti_req(nfapi_nr_dl_tti_request_t *dl_config_req)
|
||||
{
|
||||
//LOG_I(PHY, "sfn:%d,slot:%d\n",dl_config_req->SFN,dl_config_req->Slot);
|
||||
//printf("\nEntering oai_nfapi_nr_dl_config_req sfn:%d,slot:%d\n",dl_config_req->SFN,dl_config_req->Slot);
|
||||
LOG_D(NR_PHY, "Entering oai_nfapi_nr_dl_config_req sfn:%d,slot:%d\n", dl_config_req->SFN, dl_config_req->Slot);
|
||||
nfapi_vnf_p7_config_t *p7_config = vnf.p7_vnfs[0].config;
|
||||
dl_config_req->header.message_id= NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST;
|
||||
dl_config_req->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!!
|
||||
@@ -1939,6 +1944,7 @@ int oai_nfapi_dl_tti_req(nfapi_nr_dl_tti_request_t *dl_config_req)
|
||||
|
||||
int oai_nfapi_tx_data_req(nfapi_nr_tx_data_request_t *tx_data_req)
|
||||
{
|
||||
LOG_D(NR_PHY, "Entering oai_nfapi_nr_tx_data_req sfn:%d,slot:%d\n", tx_data_req->SFN, tx_data_req->Slot);
|
||||
nfapi_vnf_p7_config_t *p7_config = vnf.p7_vnfs[0].config;
|
||||
tx_data_req->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!!
|
||||
tx_data_req->header.message_id = NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST;
|
||||
@@ -2056,7 +2062,7 @@ int oai_nfapi_ul_config_req(nfapi_ul_config_request_t *ul_config_req) {
|
||||
{
|
||||
uint8_t pdu_type = pdu_list[i].pdu_type;
|
||||
|
||||
LOG_I(MAC, "ul_config_req num_pdus: %u pdu_number: %d pdu_type: %u SFN.SF: %d.%d\n",
|
||||
LOG_D(MAC, "ul_config_req num_pdus: %u pdu_number: %d pdu_type: %u SFN.SF: %d.%d\n",
|
||||
num_pdus, i, pdu_type, ul_config_req->sfn_sf >> 4, ul_config_req->sfn_sf & 15);
|
||||
|
||||
if (pdu_type != NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE)
|
||||
|
||||
@@ -44,13 +44,21 @@ uint8_t pulls32(uint8_t **in, int32_t *out, uint8_t *end);
|
||||
uint32_t pullarray8(uint8_t **in, uint8_t out[], uint32_t max_len, uint32_t len, uint8_t *end);
|
||||
uint32_t pullarray16(uint8_t **in, uint16_t out[], uint32_t max_len, uint32_t len, uint8_t *end);
|
||||
uint32_t pullarrays16(uint8_t **in, int16_t out[], uint32_t max_len, uint32_t len, uint8_t *end);
|
||||
uint32_t pullarray32(uint8_t **in, uint32_t out[], uint32_t max_len, uint32_t len, uint8_t *end);
|
||||
uint32_t pullarray32(uint8_t **values_to_pull,
|
||||
uint32_t out[],
|
||||
uint32_t max_num_values_to_pull,
|
||||
uint32_t num_values_to_pull,
|
||||
uint8_t *out_end);
|
||||
uint32_t pullarrays32(uint8_t **in, int32_t out[], uint32_t max_len, uint32_t len, uint8_t *end);
|
||||
|
||||
uint32_t pusharray8(uint8_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end);
|
||||
uint32_t pusharray16(uint16_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end);
|
||||
uint32_t pusharrays16(int16_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end);
|
||||
uint32_t pusharray32(uint32_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end);
|
||||
uint32_t pusharray32(const uint32_t *values_to_push,
|
||||
uint32_t max_num_values_to_push,
|
||||
uint32_t num_values_to_push,
|
||||
uint8_t **out,
|
||||
uint8_t *out_end);
|
||||
uint32_t pusharrays32(int32_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end);
|
||||
|
||||
typedef uint8_t (*pack_array_elem_fn)(void* elem, uint8_t **ppWritePackedMsg, uint8_t *end);
|
||||
|
||||
+855
-783
File diff suppressed because it is too large
Load Diff
@@ -1046,7 +1046,7 @@ static uint8_t pack_ul_tti_request_srs_pdu(nfapi_nr_srs_pdu_t *srs_pdu, uint8_t
|
||||
push8(srs_pdu->comb_offset, ppWritePackedMsg, end) &&
|
||||
push8(srs_pdu->cyclic_shift, ppWritePackedMsg, end) &&
|
||||
push8(srs_pdu->frequency_position, ppWritePackedMsg, end) &&
|
||||
push8(srs_pdu->frequency_shift, ppWritePackedMsg, end) &&
|
||||
push16(srs_pdu->frequency_shift, ppWritePackedMsg, end) &&
|
||||
push8(srs_pdu->frequency_hopping, ppWritePackedMsg, end) &&
|
||||
push8(srs_pdu->group_or_sequence_hopping, ppWritePackedMsg, end) &&
|
||||
push8(srs_pdu->resource_type, ppWritePackedMsg, end) &&
|
||||
@@ -1581,13 +1581,19 @@ static uint8_t pack_ul_config_request_body_value(void *tlv, uint8_t **ppWritePac
|
||||
static uint8_t pack_ul_tti_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t *config) {
|
||||
nfapi_nr_ul_tti_request_t *pNfapiMsg = (nfapi_nr_ul_tti_request_t *)msg;
|
||||
|
||||
if (!(push16(pNfapiMsg->SFN, ppWritePackedMsg, end) &&
|
||||
push16(pNfapiMsg->Slot, ppWritePackedMsg, end) &&
|
||||
push8(pNfapiMsg->n_pdus, ppWritePackedMsg, end) &&
|
||||
push8(pNfapiMsg->rach_present, ppWritePackedMsg, end) &&
|
||||
push8(pNfapiMsg->n_ulsch, ppWritePackedMsg, end) &&
|
||||
push8(pNfapiMsg->n_ulcch, ppWritePackedMsg, end) &&
|
||||
push8(pNfapiMsg->n_group, ppWritePackedMsg, end) ))
|
||||
if (!push16(pNfapiMsg->SFN, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push16(pNfapiMsg->Slot, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push8(pNfapiMsg->n_pdus, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push8(pNfapiMsg->n_group, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push8(pNfapiMsg->rach_present, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push8(pNfapiMsg->n_ulsch, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push8(pNfapiMsg->n_ulcch, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
|
||||
for(int i=0; i<pNfapiMsg->n_pdus; i++) {
|
||||
@@ -1891,15 +1897,23 @@ static uint8_t pack_tx_data_pdu_list_value(void *tlv, uint8_t **ppWritePackedMsg
|
||||
|
||||
switch(value->TLVs[i].tag) {
|
||||
case 0: {
|
||||
if(!pusharray32(value->TLVs[i].value.direct, 16384, value->TLVs[i].length, ppWritePackedMsg, end))
|
||||
if (!pusharray32(value->TLVs[i].value.direct, sizeof(value->TLVs[i].value.direct) / sizeof(uint32_t),
|
||||
value->TLVs[i].length / sizeof(uint32_t), ppWritePackedMsg, end)) {
|
||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s():%d. value->TLVs[i].length %d \n",
|
||||
__FUNCTION__, __LINE__, value->TLVs[i].length);
|
||||
return 0;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 1: {
|
||||
if(!pusharray32(value->TLVs[i].value.ptr, value->TLVs[i].length, value->TLVs[i].length, ppWritePackedMsg, end))
|
||||
if (!pusharray32(value->TLVs[i].value.ptr, value->TLVs[i].length / sizeof(uint32_t),
|
||||
value->TLVs[i].length / sizeof(uint32_t), ppWritePackedMsg, end)) {
|
||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s():%d. value->TLVs[i].length %d \n",
|
||||
__FUNCTION__, __LINE__, value->TLVs[i].length);
|
||||
return 0;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -3006,10 +3020,8 @@ return 1;
|
||||
|
||||
//RX DATA INDICATION
|
||||
|
||||
static uint8_t pack_nr_rx_data_indication_body(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
|
||||
static uint8_t pack_nr_rx_data_indication_body(nfapi_nr_rx_data_pdu_t *value, uint8_t **ppWritePackedMsg, uint8_t *end)
|
||||
{
|
||||
nfapi_nr_rx_data_pdu_t* value = (nfapi_nr_rx_data_pdu_t*)tlv;
|
||||
|
||||
if(!(push32(value->handle, ppWritePackedMsg, end) &&
|
||||
push16(value->rnti, ppWritePackedMsg, end) &&
|
||||
push8(value->harq_id, ppWritePackedMsg, end) &&
|
||||
@@ -3039,7 +3051,7 @@ static uint8_t pack_nr_rx_data_indication(void *msg, uint8_t **ppWritePackedMsg,
|
||||
|
||||
for (int i = 0; i < pNfapiMsg->number_of_pdus; i++)
|
||||
{
|
||||
if(!pack_nr_rx_data_indication_body(&(pNfapiMsg->pdu_list[i]), ppWritePackedMsg, end))
|
||||
if(!pack_nr_rx_data_indication_body(&(pNfapiMsg->pdu_list[i]), ppWritePackedMsg, end))
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -3087,10 +3099,8 @@ return 1;
|
||||
|
||||
//SRS INDICATION
|
||||
|
||||
static uint8_t pack_nr_srs_indication_body(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
|
||||
static uint8_t pack_nr_srs_indication_body(nfapi_nr_srs_indication_pdu_t *value, uint8_t **ppWritePackedMsg, uint8_t *end)
|
||||
{
|
||||
nfapi_nr_srs_indication_pdu_t* value = (nfapi_nr_srs_indication_pdu_t*)tlv;
|
||||
|
||||
if(!(push32(value->handle, ppWritePackedMsg, end) &&
|
||||
push16(value->rnti, ppWritePackedMsg, end) &&
|
||||
push16(value->timing_advance, ppWritePackedMsg, end) &&
|
||||
@@ -3102,8 +3112,7 @@ static uint8_t pack_nr_srs_indication_body(void* tlv, uint8_t **ppWritePackedMsg
|
||||
return 0;
|
||||
for(int i = 0; i < value->reported_symbol_list->num_rbs; i++)
|
||||
{
|
||||
if(!(push8(value->reported_symbol_list->rb_list->rb_snr, ppWritePackedMsg, end)
|
||||
))
|
||||
if (!push8(value->reported_symbol_list->rb_list[i].rb_snr, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
@@ -3179,32 +3188,36 @@ return 1;
|
||||
static uint8_t pack_nr_uci_pucch_0_1(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end) {
|
||||
nfapi_nr_uci_pucch_pdu_format_0_1_t* value = (nfapi_nr_uci_pucch_pdu_format_0_1_t*)tlv;
|
||||
|
||||
if(!(push8(value->pduBitmap, ppWritePackedMsg, end) &&
|
||||
push32(value->handle, ppWritePackedMsg, end) &&
|
||||
push16(value->rnti, ppWritePackedMsg, end) &&
|
||||
push8(value->pucch_format, ppWritePackedMsg, end) &&
|
||||
push8(value->ul_cqi, ppWritePackedMsg, end) &&
|
||||
push16(value->timing_advance, ppWritePackedMsg, end) &&
|
||||
push16(value->rssi, ppWritePackedMsg, end)
|
||||
))
|
||||
return 0;
|
||||
if (!push8(value->pduBitmap, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push32(value->handle, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push16(value->rnti, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push8(value->pucch_format, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push8(value->ul_cqi, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push16(value->timing_advance, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push16(value->rssi, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (value->pduBitmap & 0x01) { //SR
|
||||
if (!(push8(value->sr->sr_indication, ppWritePackedMsg, end) &&
|
||||
push8(value->sr->sr_confidence_level, ppWritePackedMsg, end)
|
||||
))
|
||||
return 0;
|
||||
if (!push8(value->sr->sr_indication, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push8(value->sr->sr_confidence_level, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (((value->pduBitmap >> 1) & 0x01)) { //HARQ
|
||||
if (!(push8(value->harq->num_harq, ppWritePackedMsg, end) &&
|
||||
push8(value->harq->harq_confidence_level, ppWritePackedMsg, end)
|
||||
))
|
||||
if (!push8(value->harq->num_harq, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push8(value->harq->harq_confidence_level, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
for (int i = 0; i < value->harq->num_harq; i++)
|
||||
{
|
||||
if (!(push8(value->harq->harq_list[i].harq_value, ppWritePackedMsg, end)
|
||||
))
|
||||
return 0;
|
||||
if (!push8(value->harq->harq_list[i].harq_value, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3214,57 +3227,79 @@ static uint8_t pack_nr_uci_pucch_0_1(void* tlv, uint8_t **ppWritePackedMsg, uint
|
||||
static uint8_t pack_nr_uci_pucch_2_3_4(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end) {
|
||||
nfapi_nr_uci_pucch_pdu_format_2_3_4_t* value = (nfapi_nr_uci_pucch_pdu_format_2_3_4_t*) tlv;
|
||||
|
||||
if(!(push8(value->pduBitmap, ppWritePackedMsg, end) &&
|
||||
push32(value->handle, ppWritePackedMsg, end) &&
|
||||
push16(value->rnti, ppWritePackedMsg, end) &&
|
||||
push8(value->pucch_format, ppWritePackedMsg, end) &&
|
||||
push8(value->ul_cqi, ppWritePackedMsg, end) &&
|
||||
push16(value->timing_advance, ppWritePackedMsg, end) &&
|
||||
push16(value->rssi, ppWritePackedMsg, end)
|
||||
))
|
||||
return 0;
|
||||
if (!push8(value->pduBitmap, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push32(value->handle, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push16(value->rnti, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push8(value->pucch_format, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push8(value->ul_cqi, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push16(value->timing_advance, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push16(value->rssi, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
|
||||
if (value->pduBitmap & 0x01) { //SR
|
||||
if(!(push8(value->sr.sr_bit_len, ppWritePackedMsg, end) &&
|
||||
pusharray8(value->sr.sr_payload, (int)(value->sr.sr_bit_len / 8) + 1, (int)(value->sr.sr_bit_len / 8) + 1, ppWritePackedMsg, end)
|
||||
))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (((value->pduBitmap >> 1) & 0x01)) { //HARQ
|
||||
if(!(push8(value->harq.harq_crc, ppWritePackedMsg, end) &&
|
||||
push8(value->harq.harq_bit_len, ppWritePackedMsg, end) &&
|
||||
pusharray8(value->harq.harq_payload, (int)(value->harq.harq_bit_len / 8) + 1, (int)(value->harq.harq_bit_len / 8) + 1, ppWritePackedMsg, end)
|
||||
))
|
||||
if (!push16(value->sr.sr_bit_len, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!pusharray8(value->sr.sr_payload,
|
||||
(int)((value->sr.sr_bit_len / 8) + 1),
|
||||
(int)((value->sr.sr_bit_len / 8) + 1),
|
||||
ppWritePackedMsg,
|
||||
end))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (((value->pduBitmap >> 2) & 0x01)) { //CSI-1
|
||||
if(!(push8(value->csi_part1.csi_part1_crc, ppWritePackedMsg, end) &&
|
||||
push8(value->csi_part1.csi_part1_bit_len, ppWritePackedMsg, end) &&
|
||||
pusharray8(value->csi_part1.csi_part1_payload, (int)(value->csi_part1.csi_part1_bit_len / 8) + 1, (int)(value->csi_part1.csi_part1_bit_len / 8) + 1, ppWritePackedMsg, end)
|
||||
))
|
||||
if ((value->pduBitmap >> 1) & 0x01) { //HARQ
|
||||
if (!push8(value->harq.harq_crc, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push16(value->harq.harq_bit_len, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!pusharray8(value->harq.harq_payload,
|
||||
(int)((value->harq.harq_bit_len / 8) + 1),
|
||||
(int)((value->harq.harq_bit_len / 8) + 1),
|
||||
ppWritePackedMsg,
|
||||
end))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (((value->pduBitmap >> 3) & 0x01)) { //CSI-2
|
||||
if(!(push8(value->csi_part2.csi_part2_crc, ppWritePackedMsg, end) &&
|
||||
push8(value->csi_part2.csi_part2_bit_len, ppWritePackedMsg, end) &&
|
||||
pusharray8(value->csi_part2.csi_part2_payload, (int)(value->csi_part2.csi_part2_bit_len / 8) + 1, (int)(value->csi_part2.csi_part2_bit_len / 8) + 1, ppWritePackedMsg, end)
|
||||
))
|
||||
if ((value->pduBitmap >> 2) & 0x01) { //CSI-1
|
||||
if (!push8(value->csi_part1.csi_part1_crc, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push16(value->csi_part1.csi_part1_bit_len, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!pusharray8(value->csi_part1.csi_part1_payload,
|
||||
(int)((value->csi_part1.csi_part1_bit_len / 8) + 1),
|
||||
(int)((value->csi_part1.csi_part1_bit_len / 8) + 1),
|
||||
ppWritePackedMsg,
|
||||
end))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((value->pduBitmap >> 3) & 0x01) { //CSI-2
|
||||
if (!push8(value->csi_part2.csi_part2_crc, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push16(value->csi_part2.csi_part2_bit_len, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!pusharray8(value->csi_part2.csi_part2_payload,
|
||||
(int)((value->csi_part2.csi_part2_bit_len / 8) + 1),
|
||||
(int)((value->csi_part2.csi_part2_bit_len / 8) + 1),
|
||||
ppWritePackedMsg,
|
||||
end))
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static uint8_t pack_nr_uci_indication_body(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
|
||||
static uint8_t pack_nr_uci_indication_body(nfapi_nr_uci_t* value, uint8_t **ppWritePackedMsg, uint8_t *end)
|
||||
{
|
||||
nfapi_nr_uci_t* value = (nfapi_nr_uci_t*)tlv;
|
||||
|
||||
if(!(push16(value->pdu_type, ppWritePackedMsg, end) &&
|
||||
push16(value->pdu_size, ppWritePackedMsg, end)
|
||||
))
|
||||
if (!push16(value->pdu_type, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push16(value->pdu_size, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
|
||||
switch (value->pdu_type) {
|
||||
@@ -3288,13 +3323,14 @@ static uint8_t pack_nr_uci_indication(void *msg, uint8_t **ppWritePackedMsg, uin
|
||||
{
|
||||
nfapi_nr_uci_indication_t *pNfapiMsg = (nfapi_nr_uci_indication_t*)msg;
|
||||
|
||||
if (!(push16(pNfapiMsg->sfn , ppWritePackedMsg, end) &&
|
||||
push16(pNfapiMsg->slot , ppWritePackedMsg, end) &&
|
||||
push16(pNfapiMsg->num_ucis, ppWritePackedMsg, end)
|
||||
))
|
||||
if (!push16(pNfapiMsg->sfn , ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push16(pNfapiMsg->slot , ppWritePackedMsg, end))
|
||||
return 0;
|
||||
if (!push16(pNfapiMsg->num_ucis, ppWritePackedMsg, end))
|
||||
return 0;
|
||||
|
||||
for(int i=0; i<pNfapiMsg->num_ucis;i++)
|
||||
for (int i = 0; i < pNfapiMsg->num_ucis; i++)
|
||||
{
|
||||
if (!pack_nr_uci_indication_body(&pNfapiMsg->uci_list[i], ppWritePackedMsg, end))
|
||||
return 0;
|
||||
@@ -4616,14 +4652,19 @@ static uint8_t unpack_ul_tti_groups_list_value(uint8_t **ppReadPackedMsg, uint8_
|
||||
static uint8_t unpack_ul_tti_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t *config) {
|
||||
nfapi_nr_ul_tti_request_t *pNfapiMsg = (nfapi_nr_ul_tti_request_t *)msg;
|
||||
|
||||
if (!(
|
||||
pull16(ppReadPackedMsg, &pNfapiMsg->SFN, end) &&
|
||||
pull16(ppReadPackedMsg, &pNfapiMsg->Slot, end) &&
|
||||
pull8(ppReadPackedMsg, &pNfapiMsg->n_pdus, end) &&
|
||||
pull8(ppReadPackedMsg, &pNfapiMsg->n_group, end) &&
|
||||
pull8(ppReadPackedMsg, &pNfapiMsg->rach_present, end) &&
|
||||
pull8(ppReadPackedMsg, &pNfapiMsg->n_ulcch, end) &&
|
||||
pull8(ppReadPackedMsg, &pNfapiMsg->n_ulsch, end) ))
|
||||
if (!pull16(ppReadPackedMsg, &pNfapiMsg->SFN, end))
|
||||
return 0;
|
||||
if (!pull16(ppReadPackedMsg, &pNfapiMsg->Slot, end))
|
||||
return 0;
|
||||
if (!pull8(ppReadPackedMsg, &pNfapiMsg->n_pdus, end))
|
||||
return 0;
|
||||
if (!pull8(ppReadPackedMsg, &pNfapiMsg->n_group, end))
|
||||
return 0;
|
||||
if (!pull8(ppReadPackedMsg, &pNfapiMsg->rach_present, end))
|
||||
return 0;
|
||||
if (!pull8(ppReadPackedMsg, &pNfapiMsg->n_ulcch, end))
|
||||
return 0;
|
||||
if (!pull8(ppReadPackedMsg, &pNfapiMsg->n_ulsch, end))
|
||||
return 0;
|
||||
|
||||
for(int i=0; i< pNfapiMsg->n_pdus; i++) {
|
||||
@@ -5506,14 +5547,18 @@ static uint8_t unpack_tx_data_pdu_list_value(uint8_t **ppReadPackedMsg, uint8_t
|
||||
|
||||
switch(pNfapiMsg->TLVs[i].tag) {
|
||||
case 0: {
|
||||
if(!pullarray32(ppReadPackedMsg, pNfapiMsg->TLVs[i].value.direct, 16384, pNfapiMsg->TLVs[i].length, end))
|
||||
if (!pullarray32(ppReadPackedMsg, pNfapiMsg->TLVs[i].value.direct,
|
||||
sizeof(pNfapiMsg->TLVs[i].value.direct) / sizeof(uint32_t),
|
||||
pNfapiMsg->TLVs[i].length / sizeof(uint32_t), end))
|
||||
return 0;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 1: {
|
||||
if(!pullarray32(ppReadPackedMsg, pNfapiMsg->TLVs[i].value.ptr, pNfapiMsg->TLVs[i].length, pNfapiMsg->TLVs[i].length, end))
|
||||
if (!pullarray32(ppReadPackedMsg,pNfapiMsg->TLVs[i].value.ptr,
|
||||
pNfapiMsg->TLVs[i].length / sizeof(uint32_t),
|
||||
pNfapiMsg->TLVs[i].length / sizeof(uint32_t), end))
|
||||
return 0;
|
||||
|
||||
break;
|
||||
@@ -5667,7 +5712,7 @@ static uint8_t unpack_nr_rx_data_indication_body(nfapi_nr_rx_data_pdu_t* value,
|
||||
return 0;
|
||||
|
||||
uint16_t length = value->pdu_length;
|
||||
value->pdu = nfapi_p7_allocate(length, config);
|
||||
value->pdu = nfapi_p7_allocate(sizeof(*value->pdu) * length, config);
|
||||
|
||||
if (pullarray8(ppReadPackedMsg, value->pdu, length, length, end) == 0)
|
||||
{
|
||||
@@ -5748,10 +5793,8 @@ return 1;
|
||||
|
||||
//SRS INDICATION
|
||||
|
||||
static uint8_t unpack_nr_srs_indication_body(void* tlv, uint8_t **ppReadPackedMsg, uint8_t *end)
|
||||
static uint8_t unpack_nr_srs_indication_body(nfapi_nr_srs_indication_pdu_t* value, uint8_t **ppReadPackedMsg, uint8_t *end)
|
||||
{
|
||||
nfapi_nr_srs_indication_pdu_t* value = (nfapi_nr_srs_indication_pdu_t*)tlv;
|
||||
|
||||
if(!(pull32(ppReadPackedMsg, &value->handle, end) &&
|
||||
pull16(ppReadPackedMsg, &value->rnti, end) &&
|
||||
pull16(ppReadPackedMsg, &value->timing_advance, end) &&
|
||||
@@ -5763,17 +5806,14 @@ static uint8_t unpack_nr_srs_indication_body(void* tlv, uint8_t **ppReadPackedMs
|
||||
return 0;
|
||||
for(int i = 0; i < value->reported_symbol_list->num_rbs; i++)
|
||||
{
|
||||
if(!(pull8(ppReadPackedMsg, &value->reported_symbol_list->rb_list->rb_snr, end)
|
||||
))
|
||||
if (!pull8(ppReadPackedMsg, &value->reported_symbol_list->rb_list[i].rb_snr, end))
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static uint8_t unpack_nr_srs_indication(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t* config)
|
||||
static uint8_t unpack_nr_srs_indication(uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_nr_srs_indication_t *pNfapiMsg, nfapi_p7_codec_config_t* config)
|
||||
{
|
||||
nfapi_nr_srs_indication_t *pNfapiMsg = (nfapi_nr_srs_indication_t*)msg;
|
||||
|
||||
if (!(pull16(ppReadPackedMsg,&pNfapiMsg->sfn , end) &&
|
||||
pull16(ppReadPackedMsg,&pNfapiMsg->slot , end) &&
|
||||
pull8(ppReadPackedMsg,&pNfapiMsg->number_of_pdus, end)
|
||||
@@ -5782,7 +5822,7 @@ static uint8_t unpack_nr_srs_indication(uint8_t **ppReadPackedMsg, uint8_t *end,
|
||||
|
||||
for(int i=0; i<pNfapiMsg->number_of_pdus;i++)
|
||||
{
|
||||
if(!unpack_nr_srs_indication_body(&pNfapiMsg->pdu_list,ppReadPackedMsg,end))
|
||||
if (!unpack_nr_srs_indication_body(&pNfapiMsg->pdu_list[i], ppReadPackedMsg, end))
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -5903,58 +5943,111 @@ static uint8_t unpack_nr_uci_pucch_0_1(nfapi_nr_uci_pucch_pdu_format_0_1_t *valu
|
||||
}
|
||||
|
||||
|
||||
static uint8_t unpack_nr_uci_pucch_2_3_4(nfapi_nr_uci_pucch_pdu_format_2_3_4_t* tlv, uint8_t **ppReadPackedMsg, uint8_t *end) {
|
||||
nfapi_nr_uci_pucch_pdu_format_2_3_4_t* value = (nfapi_nr_uci_pucch_pdu_format_2_3_4_t*) tlv;
|
||||
static uint8_t unpack_nr_uci_pucch_2_3_4(nfapi_nr_uci_pucch_pdu_format_2_3_4_t* value,
|
||||
uint8_t **ppReadPackedMsg,
|
||||
uint8_t *end,
|
||||
nfapi_p7_codec_config_t *config) {
|
||||
|
||||
if (!pull8(ppReadPackedMsg, &value->pduBitmap, end))
|
||||
return 0;
|
||||
if (!pull32(ppReadPackedMsg, &value->handle, end))
|
||||
return 0;
|
||||
if (!pull16(ppReadPackedMsg, &value->rnti, end))
|
||||
return 0;
|
||||
if (!pull8(ppReadPackedMsg, &value->pucch_format, end))
|
||||
return 0;
|
||||
if (!pull8(ppReadPackedMsg, &value->ul_cqi, end))
|
||||
return 0;
|
||||
if (!pull16(ppReadPackedMsg, &value->timing_advance, end))
|
||||
return 0;
|
||||
if (!pull16(ppReadPackedMsg, &value->rssi, end))
|
||||
return 0;
|
||||
|
||||
if(!(pull8(ppReadPackedMsg, &value->pduBitmap, end) &&
|
||||
pull32(ppReadPackedMsg, &value->handle, end) &&
|
||||
pull16(ppReadPackedMsg, &value->rnti, end) &&
|
||||
pull8(ppReadPackedMsg, &value->pucch_format, end) &&
|
||||
pull8(ppReadPackedMsg, &value->ul_cqi, end) &&
|
||||
pull16(ppReadPackedMsg, &value->timing_advance, end) &&
|
||||
pull16(ppReadPackedMsg, &value->rssi, end)
|
||||
))
|
||||
return 0;
|
||||
if (value->pduBitmap & 0x01) { //SR
|
||||
if(!(pull16(ppReadPackedMsg, &value->sr.sr_bit_len, end)))
|
||||
if (!pull16(ppReadPackedMsg, &value->sr.sr_bit_len, end))
|
||||
return 0;
|
||||
|
||||
value->sr.sr_payload = (uint8_t*) malloc(sizeof(uint8_t) * ((value->sr.sr_bit_len/8)));
|
||||
|
||||
if(!(pullarray8(ppReadPackedMsg, &value->sr.sr_payload[0], (int)(value->sr.sr_bit_len / 8), (int)(value->sr.sr_bit_len / 8), end)))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (((value->pduBitmap >> 1) & 0x01)) { //HARQ
|
||||
if(!(pull8(ppReadPackedMsg, &value->harq.harq_crc, end)) &&
|
||||
(pull16(ppReadPackedMsg, &value->harq.harq_bit_len, end)))
|
||||
value->sr.sr_payload = nfapi_p7_allocate(sizeof(*value->sr.sr_payload) *
|
||||
(int)((value->sr.sr_bit_len / 8) + 1),
|
||||
config);
|
||||
if (value->sr.sr_payload == NULL)
|
||||
{
|
||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s failed to allocate value->sr.sr_payload\n", __FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
value->harq.harq_payload = (uint8_t*) malloc(sizeof(uint8_t) * ((value->harq.harq_bit_len/8 )));
|
||||
|
||||
if(!(pullarray8(ppReadPackedMsg, value->harq.harq_payload, (int)(value->harq.harq_bit_len / 8), (int)(value->harq.harq_bit_len / 8), end)))
|
||||
if (!pullarray8(ppReadPackedMsg, value->sr.sr_payload,
|
||||
(int)((value->sr.sr_bit_len / 8) + 1),
|
||||
(int)((value->sr.sr_bit_len / 8) + 1),
|
||||
end))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (((value->pduBitmap >> 2) & 0x01)) { //CSI-1
|
||||
if(!(pull8(ppReadPackedMsg, &value->csi_part1.csi_part1_crc, end)) &&
|
||||
(pull16(ppReadPackedMsg, &value->csi_part1.csi_part1_bit_len, end)))
|
||||
if ((value->pduBitmap >> 1) & 0x01) { //HARQ
|
||||
if (!pull8(ppReadPackedMsg, &value->harq.harq_crc, end))
|
||||
return 0;
|
||||
if (!pull16(ppReadPackedMsg, &value->harq.harq_bit_len, end))
|
||||
return 0;
|
||||
|
||||
value->csi_part1.csi_part1_payload = (uint8_t*) malloc(sizeof(uint8_t) * ((value->csi_part1.csi_part1_bit_len/8)));
|
||||
value->harq.harq_payload = nfapi_p7_allocate(sizeof(*value->harq.harq_payload) *
|
||||
(int)((value->harq.harq_bit_len / 8) + 1),
|
||||
config);
|
||||
if (value->harq.harq_payload == NULL)
|
||||
{
|
||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s failed to allocate value->harq.harq_payload\n", __FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// if(!(pullarray8(ppReadPackedMsg, value->csi_part1.csi_part1_payload, (int)(value->csi_part1.csi_part1_bit_len / 8), (int)(value->csi_part1.csi_part1_bit_len / 8), end)))
|
||||
// return 0;
|
||||
if (!pullarray8(ppReadPackedMsg, value->harq.harq_payload,
|
||||
(int)((value->harq.harq_bit_len / 8) + 1),
|
||||
(int)((value->harq.harq_bit_len / 8) + 1),
|
||||
end))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (((value->pduBitmap >> 3) & 0x01)) { //CSI-2
|
||||
if(!(pull8(ppReadPackedMsg, &value->csi_part2.csi_part2_crc, end)) &&
|
||||
(pull16(ppReadPackedMsg, &value->csi_part2.csi_part2_bit_len, end)))
|
||||
if ((value->pduBitmap >> 2) & 0x01) { //CSI-1
|
||||
if (!pull8(ppReadPackedMsg, &value->csi_part1.csi_part1_crc, end))
|
||||
return 0;
|
||||
if (!pull16(ppReadPackedMsg, &value->csi_part1.csi_part1_bit_len, end))
|
||||
return 0;
|
||||
|
||||
value->csi_part2.csi_part2_payload = (uint8_t*) malloc(sizeof(uint8_t) * ((value->csi_part2.csi_part2_bit_len/8 )));
|
||||
value->csi_part1.csi_part1_payload = nfapi_p7_allocate(sizeof(*value->csi_part1.csi_part1_payload) *
|
||||
(int)((value->csi_part1.csi_part1_bit_len / 8) + 1),
|
||||
config);
|
||||
if (value->csi_part1.csi_part1_payload == NULL)
|
||||
{
|
||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s failed to allocate value->csi_part1.csi_part1_payload\n",
|
||||
__FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(!(pullarray8(ppReadPackedMsg, value->csi_part2.csi_part2_payload, (int)(value->csi_part2.csi_part2_bit_len / 8) , (int)(value->csi_part2.csi_part2_bit_len / 8) , end)))
|
||||
if (!pullarray8(ppReadPackedMsg, value->csi_part1.csi_part1_payload,
|
||||
(int)((value->csi_part1.csi_part1_bit_len / 8) + 1),
|
||||
(int)((value->csi_part1.csi_part1_bit_len / 8) + 1),
|
||||
end))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((value->pduBitmap >> 3) & 0x01) { //CSI-2
|
||||
if (!pull8(ppReadPackedMsg, &value->csi_part2.csi_part2_crc, end))
|
||||
return 0;
|
||||
if (!pull16(ppReadPackedMsg, &value->csi_part2.csi_part2_bit_len, end))
|
||||
return 0;
|
||||
|
||||
value->csi_part2.csi_part2_payload = nfapi_p7_allocate(sizeof(*value->csi_part2.csi_part2_payload) *
|
||||
(int)((value->csi_part2.csi_part2_bit_len / 8) + 1),
|
||||
config);
|
||||
if (value->csi_part2.csi_part2_payload == NULL)
|
||||
{
|
||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s failed to allocate value->csi_part2.csi_part2_payload\n",
|
||||
__FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!pullarray8(ppReadPackedMsg, value->csi_part2.csi_part2_payload,
|
||||
(int)((value->csi_part2.csi_part2_bit_len / 8) + 1),
|
||||
(int)((value->csi_part2.csi_part2_bit_len / 8) + 1),
|
||||
end))
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -5966,9 +6059,9 @@ static uint8_t unpack_nr_uci_indication_body(nfapi_nr_uci_t *value,
|
||||
uint8_t *end,
|
||||
nfapi_p7_codec_config_t *config)
|
||||
{
|
||||
if(!(pull16(ppReadPackedMsg, &value->pdu_type, end) &&
|
||||
pull16(ppReadPackedMsg, &value->pdu_size, end)
|
||||
))
|
||||
if (!pull16(ppReadPackedMsg, &value->pdu_type, end))
|
||||
return 0;
|
||||
if (!pull16(ppReadPackedMsg, &value->pdu_size, end))
|
||||
return 0;
|
||||
|
||||
switch (value->pdu_type) {
|
||||
@@ -5984,7 +6077,7 @@ static uint8_t unpack_nr_uci_indication_body(nfapi_nr_uci_t *value,
|
||||
}
|
||||
case NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE: {
|
||||
nfapi_nr_uci_pucch_pdu_format_2_3_4_t *uci_pdu = &value->pucch_pdu_format_2_3_4;
|
||||
if (!unpack_nr_uci_pucch_2_3_4(uci_pdu, ppReadPackedMsg, end))
|
||||
if (!unpack_nr_uci_pucch_2_3_4(uci_pdu, ppReadPackedMsg, end, config))
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
@@ -6000,17 +6093,18 @@ static uint8_t unpack_nr_uci_indication(uint8_t **ppReadPackedMsg, uint8_t *end,
|
||||
{
|
||||
nfapi_nr_uci_indication_t *pNfapiMsg = (nfapi_nr_uci_indication_t*)msg;
|
||||
|
||||
if (!(pull16(ppReadPackedMsg, &pNfapiMsg->sfn , end) &&
|
||||
pull16(ppReadPackedMsg, &pNfapiMsg->slot , end) &&
|
||||
pull16(ppReadPackedMsg, &pNfapiMsg->num_ucis, end)
|
||||
))
|
||||
return 0;
|
||||
if (!pull16(ppReadPackedMsg, &pNfapiMsg->sfn , end))
|
||||
return 0;
|
||||
if (!pull16(ppReadPackedMsg, &pNfapiMsg->slot , end))
|
||||
return 0;
|
||||
if (!pull16(ppReadPackedMsg, &pNfapiMsg->num_ucis, end))
|
||||
return 0;
|
||||
|
||||
pNfapiMsg->uci_list = nfapi_p7_allocate(sizeof(*pNfapiMsg->uci_list) * pNfapiMsg->num_ucis, config);
|
||||
for (int i = 0; i < pNfapiMsg->num_ucis; i++)
|
||||
{
|
||||
if(!unpack_nr_uci_indication_body(&pNfapiMsg->uci_list[i], ppReadPackedMsg, end, config))
|
||||
return 0;
|
||||
if (!unpack_nr_uci_indication_body(&pNfapiMsg->uci_list[i], ppReadPackedMsg, end, config))
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
||||
@@ -1473,7 +1473,7 @@ void vnf_handle_nr_slot_indication(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf
|
||||
}
|
||||
else
|
||||
{
|
||||
NFAPI_TRACE(NFAPI_TRACE_INFO, "%s: Handling NR SLOT Indication\n", __FUNCTION__);
|
||||
NFAPI_TRACE(NFAPI_TRACE_DEBUG, "%s: Handling NR SLOT Indication\n", __FUNCTION__);
|
||||
if(vnf_p7->_public.nr_slot_indication)
|
||||
{
|
||||
(vnf_p7->_public.nr_slot_indication)(&ind);
|
||||
@@ -2574,32 +2574,28 @@ int vnf_p7_read_dispatch_message(vnf_p7_t* vnf_p7)
|
||||
// resize the buffer if we have a large segment
|
||||
if(header.message_length > vnf_p7->rx_message_buffer_size)
|
||||
{
|
||||
NFAPI_TRACE(NFAPI_TRACE_NOTE, "reallocing rx buffer %d\n", header.message_length);
|
||||
NFAPI_TRACE(NFAPI_TRACE_NOTE, "reallocing rx buffer %d\n", header.message_length);
|
||||
vnf_p7->rx_message_buffer = realloc(vnf_p7->rx_message_buffer, header.message_length);
|
||||
vnf_p7->rx_message_buffer_size = header.message_length;
|
||||
}
|
||||
|
||||
// read the segment
|
||||
recvfrom_result = recvfrom(vnf_p7->socket, vnf_p7->rx_message_buffer, header.message_length, MSG_WAITALL, (struct sockaddr*)&remote_addr, &remote_addr_size);
|
||||
recvfrom_result = recvfrom(vnf_p7->socket, vnf_p7->rx_message_buffer, header.message_length, MSG_WAITALL | MSG_TRUNC, (struct sockaddr*)&remote_addr, &remote_addr_size);
|
||||
NFAPI_TRACE(NFAPI_TRACE_INFO, "recvfrom_result = %d from %s():%d\n", recvfrom_result, __FUNCTION__, __LINE__);
|
||||
|
||||
// todo : how to handle incomplete readfroms, need some sort of buffer/select
|
||||
|
||||
if(recvfrom_result == 0)
|
||||
{
|
||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "recvfrom returned 0\n");
|
||||
}
|
||||
else if(recvfrom_result != -1 && recvfrom_result != header.message_length)
|
||||
{
|
||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "Received unexpected number of bytes %d %d\n", recvfrom_result, header.message_length);
|
||||
|
||||
recvfrom_result += recvfrom(vnf_p7->socket, &vnf_p7->rx_message_buffer[recvfrom_result], header.message_length - recvfrom_result, MSG_WAITALL, (struct sockaddr*)&remote_addr, &remote_addr_size);
|
||||
|
||||
}
|
||||
|
||||
|
||||
if(recvfrom_result > 0)
|
||||
if (recvfrom_result > 0)
|
||||
{
|
||||
if (recvfrom_result != header.message_length)
|
||||
{
|
||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "(%d) Received unexpected number of bytes. %d != %d",
|
||||
__LINE__, recvfrom_result, header.message_length);
|
||||
break;
|
||||
}
|
||||
NFAPI_TRACE(NFAPI_TRACE_INFO, "Calling vnf_nr_handle_p7_message from %d\n", __LINE__);
|
||||
vnf_handle_p7_message(vnf_p7->rx_message_buffer, recvfrom_result, vnf_p7);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
export OPENAIR_HOME=$(pwd)
|
||||
export OPENAIR_DIR=$(pwd)
|
||||
export AWGN_RESULTS_DIR=$OPENAIR_DIR/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results
|
||||
export OPENAIR1_DIR=$OPENAIR_HOME/openair1
|
||||
export OPENAIR2_DIR=$OPENAIR_HOME/openair2
|
||||
export OPENAIR3_DIR=$OPENAIR_HOME/openair3
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "openair1/PHY/CODING/nrLDPC_decoder_LYC/nrLDPC_decoder_LYC.h"
|
||||
#include "openair1/PHY/defs_nr_common.h"
|
||||
#include "coding_unitary_defs.h"
|
||||
#include "common/utils/LOG/log.h"
|
||||
|
||||
#define MAX_BLOCK_LENGTH 8448
|
||||
|
||||
@@ -79,16 +80,19 @@ char quantize8bit(double D,double x)
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
double n_iter_mean;
|
||||
double n_iter_std;
|
||||
int n_iter_max;
|
||||
double n_iter_mean[400];
|
||||
double n_iter_std[400];
|
||||
int n_iter_max[400];
|
||||
double snr[400];
|
||||
double ber[400];
|
||||
double bler[400];
|
||||
} n_iter_stats_t;
|
||||
|
||||
nrLDPC_encoderfunc_t encoder_orig;
|
||||
|
||||
short lift_size[51]= {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20,22,24,26,28,30,32,36,40,44,48,52,56,60,64,72,80,88,96,104,112,120,128,144,160,176,192,208,224,240,256,288,320,352,384};
|
||||
|
||||
int test_ldpc(short No_iteration,
|
||||
int test_ldpc(short max_iterations,
|
||||
int nom_rate,
|
||||
int denom_rate,
|
||||
double SNR,
|
||||
@@ -102,8 +106,8 @@ int test_ldpc(short No_iteration,
|
||||
unsigned int *crc_misses,
|
||||
time_stats_t *time_optim,
|
||||
time_stats_t *time_decoder,
|
||||
n_iter_stats_t *dec_iter
|
||||
)
|
||||
n_iter_stats_t *dec_iter,
|
||||
int nsnr)
|
||||
{
|
||||
//clock initiate
|
||||
//time_stats_t time,time_optim,tinput,tprep,tparity,toutput, time_decoder;
|
||||
@@ -126,7 +130,6 @@ int test_ldpc(short No_iteration,
|
||||
//double channel_output[68 * 384];
|
||||
double modulated_input[MAX_NUM_DLSCH_SEGMENTS][68 * 384] = { 0 };
|
||||
char channel_output_fixed[MAX_NUM_DLSCH_SEGMENTS][68 * 384] = { 0 };
|
||||
unsigned int i,j,trial=0;
|
||||
short BG=0,nrows=0;//,ncols;
|
||||
int no_punctured_columns,removed_bit;
|
||||
int i1,Zc,Kb=0;
|
||||
@@ -137,12 +140,9 @@ int test_ldpc(short No_iteration,
|
||||
int code_rate_vec[8] = {15, 13, 25, 12, 23, 34, 56, 89};
|
||||
//double code_rate_actual_vec[8] = {0.2, 0.33333, 0.4, 0.5, 0.66667, 0.73333, 0.81481, 0.88};
|
||||
|
||||
t_nrLDPC_dec_params decParams;
|
||||
t_nrLDPC_procBuf nrLDPC_procBuf;
|
||||
t_nrLDPC_procBuf* p_nrLDPC_procBuf = &nrLDPC_procBuf;
|
||||
|
||||
t_nrLDPC_dec_params decParams[MAX_NUM_DLSCH_SEGMENTS]={0};
|
||||
|
||||
t_nrLDPC_time_stats decoder_profiler = {0};
|
||||
t_nrLDPC_time_stats* p_decoder_profiler =&decoder_profiler ;
|
||||
|
||||
int32_t n_iter = 0;
|
||||
|
||||
@@ -152,7 +152,7 @@ int test_ldpc(short No_iteration,
|
||||
*crc_misses=0;
|
||||
|
||||
// generate input block
|
||||
for(j=0;j<MAX_NUM_DLSCH_SEGMENTS;j++) {
|
||||
for(int j=0;j<MAX_NUM_DLSCH_SEGMENTS;j++) {
|
||||
test_input[j]=(unsigned char *)malloc16(sizeof(unsigned char) * block_length/8);
|
||||
memset(test_input[j], 0, sizeof(unsigned char) * block_length / 8);
|
||||
channel_input[j] = (unsigned char *)malloc16(sizeof(unsigned char) * 68*384);
|
||||
@@ -181,11 +181,8 @@ int test_ldpc(short No_iteration,
|
||||
reset_meas(&decoder_profiler.llr2bit);
|
||||
//reset_meas(&decoder_profiler.total);
|
||||
|
||||
// Allocate LDPC decoder buffers
|
||||
p_nrLDPC_procBuf = nrLDPC_init_mem();
|
||||
|
||||
for (j=0;j<MAX_NUM_DLSCH_SEGMENTS;j++) {
|
||||
for (i=0; i<block_length/8; i++) {
|
||||
for (int j=0;j<MAX_NUM_DLSCH_SEGMENTS;j++) {
|
||||
for (int i=0; i<block_length/8; i++) {
|
||||
test_input[j][i]=(unsigned char) rand();
|
||||
//test_input[j][i]=j%256;
|
||||
//test_input[j][i]=252;
|
||||
@@ -272,17 +269,17 @@ int test_ldpc(short No_iteration,
|
||||
// printf("puncture:%d\n",no_punctured_columns);
|
||||
removed_bit=(nrows-no_punctured_columns-2) * Zc+block_length-(int)(block_length/((float)nom_rate/(float)denom_rate));
|
||||
encoder_implemparams_t impp=INIT0_LDPCIMPLEMPARAMS;
|
||||
|
||||
|
||||
impp.gen_code=1;
|
||||
if (ntrials==0)
|
||||
encoder_orig(test_input,channel_input, Zc, BG, block_length, BG, &impp);
|
||||
impp.gen_code=0;
|
||||
for (trial=0; trial < ntrials; trial++)
|
||||
for (int trial=0; trial < ntrials; trial++)
|
||||
{
|
||||
segment_bler = 0;
|
||||
//// encoder
|
||||
start_meas(&time);
|
||||
for(j=0;j<n_segments;j++) {
|
||||
for(int j=0;j<n_segments;j++) {
|
||||
encoder_orig(&(test_input[j]), &(channel_input[j]),Zc,Kb,block_length,BG,&impp);
|
||||
}
|
||||
stop_meas(&time);
|
||||
@@ -294,7 +291,7 @@ int test_ldpc(short No_iteration,
|
||||
}
|
||||
stop_meas(time_optim);*/
|
||||
impp.n_segments=n_segments;
|
||||
for(j=0;j<(n_segments/8+1);j++) {
|
||||
for(int j=0;j<(n_segments/8+1);j++) {
|
||||
start_meas(time_optim);
|
||||
impp.macro_num=j;
|
||||
nrLDPC_encoder(test_input,channel_input_optim,Zc,Kb,block_length, BG, &impp);
|
||||
@@ -302,8 +299,8 @@ int test_ldpc(short No_iteration,
|
||||
}
|
||||
|
||||
if (ntrials==1)
|
||||
for (j=0;j<n_segments;j++)
|
||||
for (i = 0; i < block_length+(nrows-no_punctured_columns) * Zc - removed_bit; i++)
|
||||
for (int j=0;j<n_segments;j++)
|
||||
for (int i = 0; i < block_length+(nrows-no_punctured_columns) * Zc - removed_bit; i++)
|
||||
if (channel_input[j][i]!=channel_input_optim[j][i]) {
|
||||
printf("differ in seg %u pos %u (%u,%u)\n", j, i, channel_input[j][i], channel_input_optim[j][i]);
|
||||
return (-1);
|
||||
@@ -319,92 +316,60 @@ int test_ldpc(short No_iteration,
|
||||
printf("number of undecoded bits: %d\n", (Kb+nrows-no_punctured_columns-2) * Zc-removed_bit);
|
||||
}
|
||||
|
||||
//print_meas_now(&time, "", stdout);
|
||||
|
||||
// for (i=0;i<6400;i++)
|
||||
//printf("channel_input[%d]=%d\n",i,channel_input[i]);
|
||||
//printf("%d ",channel_input[i]);
|
||||
|
||||
//if ((BG==2) && (Zc==128||Zc==256))
|
||||
if (1) { // Transmitting one segment
|
||||
for(j=0;j<n_segments;j++) {
|
||||
for (i = 2*Zc; i < (Kb+nrows-no_punctured_columns) * Zc-removed_bit; i++) {
|
||||
for(int j=0;j<n_segments;j++) {
|
||||
for (int i = 2*Zc; i < (Kb+nrows-no_punctured_columns) * Zc-removed_bit; i++) {
|
||||
#ifdef DEBUG_CODER
|
||||
if ((i&0xf)==0)
|
||||
printf("\ne %u..%u: ",i,i+15);
|
||||
if ((i&0xf)==0)
|
||||
printf("\ne %u..%u: ",i,i+15);
|
||||
#endif
|
||||
|
||||
if (channel_input_optim[j][i-2*Zc]==0)
|
||||
modulated_input[j][i]=1.0;///sqrt(2); //QPSK
|
||||
else
|
||||
modulated_input[j][i]=-1.0;///sqrt(2);
|
||||
if (channel_input_optim[j][i-2*Zc]==0)
|
||||
modulated_input[j][i]=1.0;///sqrt(2); //QPSK
|
||||
else
|
||||
modulated_input[j][i]=-1.0;///sqrt(2);
|
||||
|
||||
///channel_output[i] = modulated_input[i] + gaussdouble(0.0,1.0) * 1/sqrt(2*SNR);
|
||||
//channel_output_fixed[i] = (char) ((channel_output[i]*128)<0?(channel_output[i]*128-0.5):(channel_output[i]*128+0.5)); //fixed point 9-7
|
||||
//printf("llr[%d]=%d\n",i,channel_output_fixed[i]);
|
||||
///channel_output[i] = modulated_input[i] + gaussdouble(0.0,1.0) * 1/sqrt(2*SNR);
|
||||
//channel_output_fixed[i] = (char) ((channel_output[i]*128)<0?(channel_output[i]*128-0.5):(channel_output[i]*128+0.5)); //fixed point 9-7
|
||||
//printf("llr[%d]=%d\n",i,channel_output_fixed[i]);
|
||||
|
||||
//channel_output_fixed[i] = (char)quantize(sigma/4.0,(2.0*modulated_input[i]) - 1.0 + sigma*gaussdouble(0.0,1.0),qbits);
|
||||
channel_output_fixed[j][i] = (char)quantize(sigma/4.0/4.0,modulated_input[j][i] + sigma*gaussdouble(0.0,1.0),qbits);
|
||||
//channel_output_fixed[i] = (char)quantize8bit(sigma/4.0,(2.0*modulated_input[i]) - 1.0 + sigma*gaussdouble(0.0,1.0));
|
||||
//printf("llr[%d]=%d\n",i,channel_output_fixed[i]);
|
||||
//printf("channel_output_fixed[%d]: %d\n",i,channel_output_fixed[i]);
|
||||
//channel_output_fixed[i] = (char)quantize(sigma/4.0,(2.0*modulated_input[i]) - 1.0 + sigma*gaussdouble(0.0,1.0),qbits);
|
||||
channel_output_fixed[j][i] = (char)quantize(sigma/4.0/4.0,modulated_input[j][i] + sigma*gaussdouble(0.0,1.0),qbits);
|
||||
//channel_output_fixed[i] = (char)quantize8bit(sigma/4.0,(2.0*modulated_input[i]) - 1.0 + sigma*gaussdouble(0.0,1.0));
|
||||
//printf("llr[%d]=%d\n",i,channel_output_fixed[i]);
|
||||
//printf("channel_output_fixed[%d]: %d\n",i,channel_output_fixed[i]);
|
||||
|
||||
|
||||
//channel_output_fixed[i] = (char)quantize(1,channel_output_fixed[i],qbits);
|
||||
//Uncoded BER
|
||||
unsigned char channel_output_uncoded = channel_output_fixed[j][i]<0 ? 1 /* QPSK demod */ : 0;
|
||||
|
||||
//Uncoded BER
|
||||
unsigned char channel_output_uncoded = channel_output_fixed[j][i]<0 ? 1 /* QPSK demod */ : 0;
|
||||
if (channel_output_uncoded != channel_input_optim[j][i-2*Zc])
|
||||
*errors_bit_uncoded = (*errors_bit_uncoded) + 1;
|
||||
|
||||
if (channel_output_uncoded != channel_input_optim[j][i-2*Zc])
|
||||
*errors_bit_uncoded = (*errors_bit_uncoded) + 1;
|
||||
|
||||
}
|
||||
} // End segments
|
||||
|
||||
//for (i=(Kb+nrows) * Zc-5;i<(Kb+nrows) * Zc;i++)
|
||||
//{
|
||||
// printf("channel_input[%d]=%d\n",i,channel_input[i]);
|
||||
//printf("%lf %d\n",channel_output[i], channel_output_fixed[i]);
|
||||
//printf("v[%d]=%lf\n",i,modulated_input[i]);}
|
||||
#ifdef DEBUG_CODER
|
||||
printf("\n");
|
||||
exit(-1);
|
||||
#endif
|
||||
|
||||
decParams.BG=BG;
|
||||
decParams.Z=Zc;
|
||||
decParams.R=code_rate_vec[R_ind];//13;
|
||||
decParams.numMaxIter=No_iteration;
|
||||
decParams.outMode = nrLDPC_outMode_BIT;
|
||||
decParams.block_length=block_length;
|
||||
//decParams.outMode =nrLDPC_outMode_LLRINT8;
|
||||
nrLDPC_initcall(&decParams, (int8_t*)channel_output_fixed[j], (int8_t*)estimated_output[j]);
|
||||
for(j=0;j<n_segments;j++) {
|
||||
start_meas(time_decoder);
|
||||
n_iter = nrLDPC_decoder(&decParams, (int8_t*)channel_output_fixed[j], (int8_t*)estimated_output[j], p_nrLDPC_procBuf, p_decoder_profiler);
|
||||
stop_meas(time_decoder);
|
||||
}
|
||||
|
||||
//for (i=(Kb+nrows) * Zc-5;i<(Kb+nrows) * Zc;i++)
|
||||
// printf("esimated_output[%d]=%d\n",i,esimated_output[i]);
|
||||
|
||||
//count errors
|
||||
for(j=0;j<n_segments;j++) {
|
||||
for (i=0; i<block_length>>3; i++)
|
||||
{
|
||||
//printf("block_length>>3: %d \n",block_length>>3);
|
||||
/// printf("i: %d \n",i);
|
||||
///printf("estimated_output[%d]: %d \n",i,estimated_output[i]);
|
||||
///printf("test_input[0][%d]: %d \n",i,test_input[0][i]);
|
||||
if (estimated_output[j][i] != test_input[j][i])
|
||||
{
|
||||
//////printf("error pos %d (%d, %d)\n\n",i,estimated_output[i],test_input[0][i]);
|
||||
segment_bler = segment_bler + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG_CODER
|
||||
printf("\n");
|
||||
exit(-1);
|
||||
#endif
|
||||
|
||||
for (i=0; i<block_length; i++)
|
||||
decParams[j].BG=BG;
|
||||
decParams[j].Z=Zc;
|
||||
decParams[j].R=code_rate_vec[R_ind];//13;
|
||||
decParams[j].numMaxIter=max_iterations;
|
||||
decParams[j].outMode = nrLDPC_outMode_BIT;
|
||||
decParams[j].block_length=block_length;
|
||||
nrLDPC_initcall(&decParams[j], (int8_t*)channel_output_fixed[j], (int8_t*)estimated_output[j]);
|
||||
}
|
||||
for(int j=0;j<n_segments;j++) {
|
||||
start_meas(time_decoder);
|
||||
n_iter = nrLDPC_decoder(&decParams[j], (int8_t*)channel_output_fixed[j], (int8_t*)estimated_output[j], &decoder_profiler);
|
||||
stop_meas(time_decoder);
|
||||
//count errors
|
||||
if ( memcmp(estimated_output[j], test_input[j], block_length/8 ) != 0 ) {
|
||||
segment_bler++;
|
||||
}
|
||||
for (int i=0; i<block_length; i++)
|
||||
{
|
||||
unsigned char estoutputbit = (estimated_output[j][i/8]&(1<<(i&7)))>>(i&7);
|
||||
unsigned char inputbit = (test_input[j][i/8]&(1<<(i&7)))>>(i&7); // Further correct for multiple segments
|
||||
@@ -412,40 +377,33 @@ int test_ldpc(short No_iteration,
|
||||
*errors_bit = (*errors_bit) + 1;
|
||||
}
|
||||
|
||||
//if (*errors == 1000)
|
||||
//break;
|
||||
n_iter_mean += n_iter;
|
||||
n_iter_std += pow(n_iter-1,2);
|
||||
|
||||
n_iter_mean = n_iter_mean + n_iter;
|
||||
n_iter_std = n_iter_std + pow(n_iter-1,2);
|
||||
if ( n_iter > n_iter_max )
|
||||
n_iter_max = n_iter;
|
||||
|
||||
if ( n_iter > n_iter_max )
|
||||
n_iter_max = n_iter;
|
||||
|
||||
} // end segments
|
||||
} // end segments
|
||||
|
||||
if (segment_bler != 0)
|
||||
*errors = (*errors) + 1;
|
||||
*errors = (*errors) + 1;
|
||||
|
||||
}
|
||||
/*else if (trial==0)
|
||||
printf("decoder is not supported\n");*/
|
||||
}
|
||||
|
||||
|
||||
dec_iter->n_iter_mean = n_iter_mean/(double)ntrials/(double)n_segments - 1;
|
||||
dec_iter->n_iter_std = sqrt(n_iter_std/(double)ntrials/(double)n_segments - pow(n_iter_mean/(double)ntrials/(double)n_segments - 1,2));
|
||||
dec_iter->n_iter_max = n_iter_max -1;
|
||||
dec_iter->n_iter_mean[nsnr] = n_iter_mean/(double)ntrials/(double)n_segments - 1;
|
||||
dec_iter->n_iter_std[nsnr] = sqrt(n_iter_std/(double)ntrials/(double)n_segments - pow(n_iter_mean/(double)ntrials/(double)n_segments - 1,2));
|
||||
dec_iter->n_iter_max[nsnr] = n_iter_max -1;
|
||||
|
||||
*errors_bit_uncoded = *errors_bit_uncoded / (double)((Kb+nrows-no_punctured_columns-2) * Zc-removed_bit);
|
||||
|
||||
for(j=0;j<MAX_NUM_DLSCH_SEGMENTS;j++) {
|
||||
for(int j=0;j<MAX_NUM_DLSCH_SEGMENTS;j++) {
|
||||
free(test_input[j]);
|
||||
free(channel_input[j]);
|
||||
free(channel_input_optim[j]);
|
||||
}
|
||||
|
||||
nrLDPC_free_mem(p_nrLDPC_procBuf);
|
||||
|
||||
print_meas(&time,"ldpc_encoder",NULL,NULL);
|
||||
print_meas(time_optim,"ldpc_encoder_optim",NULL,NULL);
|
||||
print_meas(&tinput,"ldpc_encoder_optim(input)",NULL,NULL);
|
||||
@@ -476,7 +434,7 @@ int main(int argc, char *argv[])
|
||||
double errors_bit_uncoded;
|
||||
short block_length=8448; // decoder supports length: 1201 -> 1280, 2401 -> 2560
|
||||
char *ldpc_version=NULL; /* version of the ldpc decoder library to use (XXX suffix to use when loading libldpc_XXX.so */
|
||||
short No_iteration=5;
|
||||
short max_iterations=5;
|
||||
int n_segments=1;
|
||||
//double rate=0.333;
|
||||
|
||||
@@ -486,7 +444,7 @@ int main(int argc, char *argv[])
|
||||
unsigned char qbits=8;
|
||||
unsigned int decoded_errors[10000]; // initiate the size of matrix equivalent to size of SNR
|
||||
int c,i=0, i1 = 0;
|
||||
int loglvl=OAILOG_WARNING;
|
||||
|
||||
int n_trials = 1;
|
||||
double SNR_step = 0.1;
|
||||
|
||||
@@ -494,14 +452,11 @@ int main(int argc, char *argv[])
|
||||
int test_uncoded= 0;
|
||||
|
||||
time_stats_t time_optim[10], time_decoder[10];
|
||||
n_iter_stats_t dec_iter[3];
|
||||
n_iter_stats_t dec_iter;
|
||||
|
||||
short BG=0,Zc,Kb=0;
|
||||
if ( load_configmodule(argc,argv,CONFIG_ENABLECMDLINEONLY) == 0) {
|
||||
exit_fun(" Error, configuration module init failed\n");
|
||||
} // must be done before specific options parsing to prevent errasing them
|
||||
|
||||
while ((c = getopt (argc, argv, "q:r:s:S:l:L:G:n:d:i:t:u:hv:")) != -1)
|
||||
|
||||
while ((c = getopt (argc, argv, "q:r:s:S:l:G:n:d:i:t:u:hv:")) != -1)
|
||||
switch (c)
|
||||
{
|
||||
case 'q':
|
||||
@@ -519,10 +474,6 @@ int main(int argc, char *argv[])
|
||||
case 'l':
|
||||
block_length = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
loglvl = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'G':
|
||||
ldpc_version="_cuda";
|
||||
@@ -545,7 +496,7 @@ int main(int argc, char *argv[])
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
No_iteration = atoi(optarg);
|
||||
max_iterations = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
@@ -560,11 +511,10 @@ int main(int argc, char *argv[])
|
||||
printf("BG1 (blocklength > 3840): 1/3, 2/3, 22/25 (8/9) \n");
|
||||
printf("BG2 (blocklength <= 3840): 1/5, 1/3, 2/3 \n\n");
|
||||
printf("-h This message\n");
|
||||
printf("-L <log level, 0(errors), 1(warning), 2(info) 3(debug) 4 (trace)>\n");
|
||||
printf("-q Quantization bits, Default: 8\n");
|
||||
printf("-r Nominator rate, (1, 2, 22), Default: 1\n");
|
||||
printf("-d Denominator rate, (3, 5, 25), Default: 1\n");
|
||||
printf("-l Block length (l > 3840 -> BG1, rest BG2 ), Default: 8448\n");
|
||||
printf("-l Block length (l > 3840 -> BG1, rest BG2 ), Default: 8448\n");
|
||||
printf("-G give 1 to run cuda for LDPC, Default: 0\n");
|
||||
printf("-n Number of simulation trials, Default: 1\n");
|
||||
//printf("-M MCS2 for TB 2\n");
|
||||
@@ -583,8 +533,6 @@ int main(int argc, char *argv[])
|
||||
printf("n_trials %d: \n", n_trials);
|
||||
printf("SNR0 %f: \n", SNR0);
|
||||
|
||||
logInit();
|
||||
set_glog(loglvl);
|
||||
|
||||
if (ldpc_version != NULL)
|
||||
load_nrLDPClib(ldpc_version);
|
||||
@@ -632,7 +580,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
char fname[200];
|
||||
sprintf(fname,"ldpctest_BG_%d_Zc_%d_rate_%d-%d_block_length_%d_maxit_%d.txt",BG,Zc,nom_rate,denom_rate,block_length, No_iteration);
|
||||
sprintf(fname,"ldpctest_BG_%d_Zc_%d_rate_%d-%d_block_length_%d_maxit_%d.txt",BG,Zc,nom_rate,denom_rate,block_length, max_iterations);
|
||||
FILE *fd=fopen(fname,"w");
|
||||
AssertFatal(fd!=NULL,"cannot open %s\n",fname);
|
||||
|
||||
@@ -647,7 +595,7 @@ int main(int argc, char *argv[])
|
||||
else
|
||||
SNR_lin = pow(10,SNR/10.0)*nom_rate/denom_rate;
|
||||
printf("Linear SNR: %f\n", SNR_lin);
|
||||
decoded_errors[i]=test_ldpc(No_iteration,
|
||||
decoded_errors[i]=test_ldpc(max_iterations,
|
||||
nom_rate,
|
||||
denom_rate,
|
||||
SNR_lin, // noise standard deviation
|
||||
@@ -661,14 +609,18 @@ int main(int argc, char *argv[])
|
||||
&crc_misses,
|
||||
time_optim,
|
||||
time_decoder,
|
||||
dec_iter);
|
||||
&dec_iter,
|
||||
i);
|
||||
|
||||
printf("SNR %f, BLER %f (%u/%d)\n", SNR, (float)decoded_errors[i]/(float)n_trials, decoded_errors[i], n_trials);
|
||||
printf("SNR %f, BER %f (%u/%d)\n", SNR, (float)errors_bit/(float)n_trials/(float)block_length/(double)n_segments, decoded_errors[i], n_trials);
|
||||
dec_iter.snr[i] = SNR;
|
||||
dec_iter.ber[i] = (float)errors_bit/(float)n_trials/(float)block_length/(double)n_segments;
|
||||
dec_iter.bler[i] = (float)decoded_errors[i]/(float)n_trials;
|
||||
printf("SNR %f, BLER %f (%u/%d)\n", SNR, dec_iter.bler[i], decoded_errors[i], n_trials);
|
||||
printf("SNR %f, BER %f (%u/%d)\n", SNR, dec_iter.ber[i], decoded_errors[i], n_trials);
|
||||
printf("SNR %f, Uncoded BER %f (%u/%d)\n",SNR, errors_bit_uncoded/(float)n_trials/(double)n_segments, decoded_errors[i], n_trials);
|
||||
printf("SNR %f, Mean iterations: %f\n",SNR, dec_iter->n_iter_mean);
|
||||
printf("SNR %f, Std iterations: %f\n",SNR, dec_iter->n_iter_std);
|
||||
printf("SNR %f, Max iterations: %d\n",SNR, dec_iter->n_iter_max);
|
||||
printf("SNR %f, Mean iterations: %f\n",SNR, dec_iter.n_iter_mean[i]);
|
||||
printf("SNR %f, Std iterations: %f\n",SNR, dec_iter.n_iter_std[i]);
|
||||
printf("SNR %f, Max iterations: %d\n",SNR, dec_iter.n_iter_max[i]);
|
||||
printf("\n");
|
||||
printf("Encoding time mean: %15.3f us\n",(double)time_optim->diff/time_optim->trials/1000.0/get_cpu_freq_GHz());
|
||||
printf("Encoding time std: %15.3f us\n",sqrt((double)time_optim->diff_square/time_optim->trials/pow(1000,2)/pow(get_cpu_freq_GHz(),2)-pow((double)time_optim->diff/time_optim->trials/1000.0/get_cpu_freq_GHz(),2)));
|
||||
@@ -689,16 +641,20 @@ int main(int argc, char *argv[])
|
||||
(double)time_decoder->diff/time_decoder->trials/1000.0/get_cpu_freq_GHz(),
|
||||
sqrt((double)time_decoder->diff_square/time_decoder->trials/pow(1000,2)/pow(get_cpu_freq_GHz(),2)-pow((double)time_decoder->diff/time_decoder->trials/1000.0/get_cpu_freq_GHz(),2)),
|
||||
(double)time_decoder->max/1000.0/get_cpu_freq_GHz(),
|
||||
dec_iter->n_iter_mean,
|
||||
dec_iter->n_iter_std,
|
||||
dec_iter->n_iter_max
|
||||
dec_iter.n_iter_mean[i],
|
||||
dec_iter.n_iter_std[i],
|
||||
dec_iter.n_iter_max[i]
|
||||
);
|
||||
|
||||
if (decoded_errors[i] == 0) break;
|
||||
|
||||
i=i+1;
|
||||
if (decoded_errors[i-1] == 0) break;
|
||||
|
||||
}
|
||||
fclose(fd);
|
||||
LOG_M("ldpctestStats.m","SNR",&dec_iter.snr[0],i,1,7);
|
||||
LOG_MM("ldpctestStats.m","BLER",&dec_iter.bler[0],i,1,7);
|
||||
LOG_MM("ldpctestStats.m","BER",&dec_iter.ber[0],i,1,7);
|
||||
LOG_MM("ldpctestStats.m","meanIter",&dec_iter.n_iter_mean[0],i,1,7);
|
||||
|
||||
loader_reset();
|
||||
logTerm();
|
||||
|
||||
@@ -37,17 +37,12 @@
|
||||
\param p_lut Pointer to decoder LUTs
|
||||
\param Z Lifting size
|
||||
*/
|
||||
static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z)
|
||||
static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, int8_t* bnProcBuf, int8_t* bnProcBufRes, int8_t* llrProcBuf, int8_t* llrRes, uint16_t Z)
|
||||
{
|
||||
const uint8_t* lut_numBnInBnGroups = p_lut->numBnInBnGroups;
|
||||
const uint32_t* lut_startAddrBnGroups = p_lut->startAddrBnGroups;
|
||||
const uint16_t* lut_startAddrBnGroupsLlr = p_lut->startAddrBnGroupsLlr;
|
||||
|
||||
int8_t* bnProcBuf = p_procBuf->bnProcBuf;
|
||||
int8_t* bnProcBufRes = p_procBuf->bnProcBufRes;
|
||||
int8_t* llrRes = p_procBuf->llrRes;
|
||||
int8_t* llrProcBuf = p_procBuf->llrProcBuf;
|
||||
|
||||
__m128i* p_bnProcBuf;
|
||||
__m256i* p_bnProcBufRes;
|
||||
__m128i* p_llrProcBuf;
|
||||
@@ -1681,7 +1676,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
|
||||
\param p_lut Pointer to decoder LUTs
|
||||
\param Z Lifting size
|
||||
*/
|
||||
static inline void nrLDPC_bnProc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z)
|
||||
static inline void nrLDPC_bnProc(t_nrLDPC_lut* p_lut, int8_t* bnProcBuf, int8_t* bnProcBufRes, int8_t* llrRes, uint16_t Z)
|
||||
{
|
||||
// BN Processing calculating the values to send back to the CNs for next iteration
|
||||
// bnProcBufRes contains the sum of all edges to each BN at the start of each group
|
||||
@@ -1690,10 +1685,6 @@ static inline void nrLDPC_bnProc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBu
|
||||
const uint32_t* lut_startAddrBnGroups = p_lut->startAddrBnGroups;
|
||||
const uint16_t* lut_startAddrBnGroupsLlr = p_lut->startAddrBnGroupsLlr;
|
||||
|
||||
int8_t* bnProcBuf = p_procBuf->bnProcBuf;
|
||||
int8_t* bnProcBufRes = p_procBuf->bnProcBufRes;
|
||||
int8_t* llrRes = p_procBuf->llrRes;
|
||||
|
||||
__m256i* p_bnProcBuf;
|
||||
__m256i* p_bnProcBufRes;
|
||||
__m256i* p_llrRes;
|
||||
|
||||
@@ -37,14 +37,11 @@
|
||||
\param p_procBuf Pointer to processing buffers
|
||||
\param Z Lifting size
|
||||
*/
|
||||
static inline void nrLDPC_cnProc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z)
|
||||
static inline void nrLDPC_cnProc_BG2(t_nrLDPC_lut* p_lut, int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z)
|
||||
{
|
||||
const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups;
|
||||
const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups;
|
||||
|
||||
int8_t* cnProcBuf = p_procBuf->cnProcBuf;
|
||||
int8_t* cnProcBufRes = p_procBuf->cnProcBufRes;
|
||||
|
||||
__m256i* p_cnProcBuf;
|
||||
__m256i* p_cnProcBufRes;
|
||||
|
||||
@@ -372,14 +369,11 @@ static inline void nrLDPC_cnProc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
\param p_lut Pointer to decoder LUTs
|
||||
\param Z Lifting size
|
||||
*/
|
||||
static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z)
|
||||
static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z)
|
||||
{
|
||||
const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups;
|
||||
const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups;
|
||||
|
||||
int8_t* cnProcBuf = p_procBuf->cnProcBuf;
|
||||
int8_t* cnProcBufRes = p_procBuf->cnProcBufRes;
|
||||
|
||||
__m256i* p_cnProcBuf;
|
||||
__m256i* p_cnProcBufRes;
|
||||
|
||||
@@ -871,14 +865,11 @@ static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr
|
||||
\param Z Lifting size
|
||||
\return 32-bit parity check indicator
|
||||
*/
|
||||
static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z)
|
||||
static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z)
|
||||
{
|
||||
const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups;
|
||||
const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups;
|
||||
|
||||
int8_t* cnProcBuf = p_procBuf->cnProcBuf;
|
||||
int8_t* cnProcBufRes = p_procBuf->cnProcBufRes;
|
||||
|
||||
__m256i* p_cnProcBuf;
|
||||
__m256i* p_cnProcBufRes;
|
||||
|
||||
@@ -1506,14 +1497,11 @@ static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
\param Z Lifting size
|
||||
\return 32-bit parity check indicator
|
||||
*/
|
||||
static inline uint32_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z)
|
||||
static inline uint32_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z)
|
||||
{
|
||||
const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups;
|
||||
const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups;
|
||||
|
||||
int8_t* cnProcBuf = p_procBuf->cnProcBuf;
|
||||
int8_t* cnProcBufRes = p_procBuf->cnProcBufRes;
|
||||
|
||||
__m256i* p_cnProcBuf;
|
||||
__m256i* p_cnProcBufRes;
|
||||
|
||||
|
||||
@@ -45,22 +45,22 @@
|
||||
#include "nrLDPC_tools/nrLDPC_debug.h"
|
||||
#endif
|
||||
|
||||
static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDPC_procBuf* p_procBuf, uint32_t numLLR, t_nrLDPC_lut* p_lut, t_nrLDPC_dec_params* p_decParams, t_nrLDPC_time_stats* p_profiler);
|
||||
static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, uint32_t numLLR, t_nrLDPC_lut* p_lut, t_nrLDPC_dec_params* p_decParams, t_nrLDPC_time_stats* p_profiler);
|
||||
int check_crc(uint8_t* decoded_bytes, uint32_t n, uint32_t F, uint8_t crc_type);
|
||||
void nrLDPC_initcall(t_nrLDPC_dec_params* p_decParams, int8_t* p_llr, int8_t* p_out) {
|
||||
}
|
||||
int32_t nrLDPC_decod(t_nrLDPC_dec_params* p_decParams, int8_t* p_llr, int8_t* p_out, t_nrLDPC_procBuf* p_procBuf, t_nrLDPC_time_stats* p_profiler)
|
||||
int32_t nrLDPC_decod(t_nrLDPC_dec_params* p_decParams, int8_t* p_llr, int8_t* p_out, t_nrLDPC_time_stats* p_profiler)
|
||||
{
|
||||
uint32_t numLLR;
|
||||
uint32_t numIter = 0;
|
||||
t_nrLDPC_lut lut;
|
||||
t_nrLDPC_lut* p_lut = &lut;
|
||||
|
||||
//printf("p_procBuf->cnProcBuf = %p\n", p_procBuf->cnProcBuf);
|
||||
// Initialize decoder core(s) with correct LUTs
|
||||
numLLR = nrLDPC_init(p_decParams, p_lut);
|
||||
|
||||
// Launch LDPC decoder core for one segment
|
||||
numIter = nrLDPC_decoder_core(p_llr, p_out, p_procBuf, numLLR, p_lut, p_decParams, p_profiler);
|
||||
numIter = nrLDPC_decoder_core(p_llr, p_out, numLLR, p_lut, p_decParams, p_profiler);
|
||||
|
||||
return numIter;
|
||||
}
|
||||
@@ -74,13 +74,20 @@ int32_t nrLDPC_decod(t_nrLDPC_dec_params* p_decParams, int8_t* p_llr, int8_t* p_
|
||||
\param p_decParams LDPC decoder parameters
|
||||
\param p_profiler LDPC profiler statistics
|
||||
*/
|
||||
static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDPC_procBuf* p_procBuf, uint32_t numLLR, t_nrLDPC_lut* p_lut, t_nrLDPC_dec_params* p_decParams, t_nrLDPC_time_stats* p_profiler)
|
||||
static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, uint32_t numLLR, t_nrLDPC_lut* p_lut, t_nrLDPC_dec_params* p_decParams, t_nrLDPC_time_stats* p_profiler)
|
||||
{
|
||||
uint16_t Z = p_decParams->Z;
|
||||
uint8_t BG = p_decParams->BG;
|
||||
uint8_t numMaxIter = p_decParams->numMaxIter;
|
||||
e_nrLDPC_outMode outMode = p_decParams->outMode;
|
||||
|
||||
int8_t cnProcBuf[NR_LDPC_SIZE_CN_PROC_BUF] __attribute__ ((aligned(32))) = {0};
|
||||
int8_t cnProcBufRes[NR_LDPC_SIZE_CN_PROC_BUF] __attribute__ ((aligned(32))) = {0};
|
||||
int8_t bnProcBuf[NR_LDPC_SIZE_BN_PROC_BUF] __attribute__ ((aligned(32))) = {0};
|
||||
int8_t bnProcBufRes[NR_LDPC_SIZE_BN_PROC_BUF] __attribute__ ((aligned(32))) = {0};
|
||||
int8_t llrRes[NR_LDPC_MAX_NUM_LLR] __attribute__ ((aligned(32))) = {0};
|
||||
int8_t llrProcBuf[NR_LDPC_MAX_NUM_LLR] __attribute__ ((aligned(32))) = {0};
|
||||
int8_t llrOut[NR_LDPC_MAX_NUM_LLR] __attribute__ ((aligned(32))) = {0};
|
||||
// Minimum number of iterations is 1
|
||||
// 0 iterations means hard-decision on input LLRs
|
||||
uint32_t i = 1;
|
||||
@@ -95,9 +102,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
||||
else
|
||||
{
|
||||
// Use LLR processing buffer as temporary output buffer
|
||||
p_llrOut = p_procBuf->llrProcBuf;
|
||||
// Clear llrProcBuf
|
||||
memset(p_llrOut,0, NR_LDPC_MAX_NUM_LLR*sizeof(int8_t));
|
||||
p_llrOut = llrOut;
|
||||
}
|
||||
|
||||
|
||||
@@ -105,14 +110,14 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
start_meas(&p_profiler->llr2llrProcBuf);
|
||||
#endif
|
||||
nrLDPC_llr2llrProcBuf(p_lut, p_llr, p_procBuf, Z, BG);
|
||||
nrLDPC_llr2llrProcBuf(p_lut, p_llr, llrProcBuf, Z, BG);
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->llr2llrProcBuf);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_initBuffer2File(nrLDPC_buffers_LLR_PROC);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_LLR_PROC, p_procBuf);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_LLR_PROC, llrProcBuf);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
@@ -120,11 +125,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
||||
#endif
|
||||
if (BG == 1)
|
||||
{
|
||||
nrLDPC_llr2CnProcBuf_BG1(p_lut, p_llr, p_procBuf, Z);
|
||||
nrLDPC_llr2CnProcBuf_BG1(p_lut, p_llr, cnProcBuf, Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
nrLDPC_llr2CnProcBuf_BG2(p_lut, p_llr, p_procBuf, Z);
|
||||
nrLDPC_llr2CnProcBuf_BG2(p_lut, p_llr, cnProcBuf, Z);
|
||||
}
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->llr2CnProcBuf);
|
||||
@@ -132,7 +137,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_initBuffer2File(nrLDPC_buffers_CN_PROC);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC, p_procBuf);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC, cnProcBuf);
|
||||
#endif
|
||||
|
||||
// First iteration
|
||||
@@ -143,11 +148,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
||||
#endif
|
||||
if (BG == 1)
|
||||
{
|
||||
nrLDPC_cnProc_BG1(p_lut, p_procBuf, Z);
|
||||
nrLDPC_cnProc_BG1(p_lut, cnProcBuf, cnProcBufRes, Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
nrLDPC_cnProc_BG2(p_lut, p_procBuf, Z);
|
||||
nrLDPC_cnProc_BG2(p_lut, cnProcBuf, cnProcBufRes, Z);
|
||||
}
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->cnProc);
|
||||
@@ -155,7 +160,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_initBuffer2File(nrLDPC_buffers_CN_PROC_RES);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC_RES, p_procBuf);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC_RES, cnProcBufRes);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
@@ -163,11 +168,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
||||
#endif
|
||||
if (BG == 1)
|
||||
{
|
||||
nrLDPC_cn2bnProcBuf_BG1(p_lut, p_procBuf, Z);
|
||||
nrLDPC_cn2bnProcBuf_BG1(p_lut, cnProcBufRes, bnProcBuf, Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
nrLDPC_cn2bnProcBuf_BG2(p_lut, p_procBuf, Z);
|
||||
nrLDPC_cn2bnProcBuf_BG2(p_lut, cnProcBufRes, bnProcBuf, Z);
|
||||
}
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->cn2bnProcBuf);
|
||||
@@ -175,34 +180,34 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_initBuffer2File(nrLDPC_buffers_BN_PROC);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC, p_procBuf);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC, bnProcBuf);
|
||||
#endif
|
||||
|
||||
// BN processing
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
start_meas(&p_profiler->bnProcPc);
|
||||
#endif
|
||||
nrLDPC_bnProcPc(p_lut, p_procBuf, Z);
|
||||
nrLDPC_bnProcPc(p_lut, bnProcBuf, bnProcBufRes, llrProcBuf, llrRes, Z);
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->bnProcPc);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_initBuffer2File(nrLDPC_buffers_LLR_RES);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_LLR_RES, p_procBuf);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_LLR_RES, llrRes);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
start_meas(&p_profiler->bnProc);
|
||||
#endif
|
||||
nrLDPC_bnProc(p_lut, p_procBuf, Z);
|
||||
nrLDPC_bnProc(p_lut, bnProcBuf, bnProcBufRes, llrRes, Z);
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->bnProc);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_initBuffer2File(nrLDPC_buffers_BN_PROC_RES);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC_RES, p_procBuf);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC_RES, bnProcBufRes);
|
||||
#endif
|
||||
|
||||
// BN results to CN processing buffer
|
||||
@@ -211,18 +216,18 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
||||
#endif
|
||||
if (BG == 1)
|
||||
{
|
||||
nrLDPC_bn2cnProcBuf_BG1(p_lut, p_procBuf, Z);
|
||||
nrLDPC_bn2cnProcBuf_BG1(p_lut, bnProcBufRes, cnProcBuf, Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
nrLDPC_bn2cnProcBuf_BG2(p_lut, p_procBuf, Z);
|
||||
nrLDPC_bn2cnProcBuf_BG2(p_lut, bnProcBufRes, cnProcBuf, Z);
|
||||
}
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->bn2cnProcBuf);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC, p_procBuf);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC, cnProcBuf);
|
||||
#endif
|
||||
|
||||
// Parity Check not necessary here since it will fail
|
||||
@@ -242,18 +247,18 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
||||
#endif
|
||||
if (BG == 1)
|
||||
{
|
||||
nrLDPC_cnProc_BG1(p_lut, p_procBuf, Z);
|
||||
nrLDPC_cnProc_BG1(p_lut, cnProcBuf, cnProcBufRes, Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
nrLDPC_cnProc_BG2(p_lut, p_procBuf, Z);
|
||||
nrLDPC_cnProc_BG2(p_lut, cnProcBuf, cnProcBufRes, Z);
|
||||
}
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->cnProc);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC_RES, p_procBuf);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC_RES, cnProcBufRes);
|
||||
#endif
|
||||
|
||||
// Send CN results back to BNs
|
||||
@@ -262,43 +267,43 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
||||
#endif
|
||||
if (BG == 1)
|
||||
{
|
||||
nrLDPC_cn2bnProcBuf_BG1(p_lut, p_procBuf, Z);
|
||||
nrLDPC_cn2bnProcBuf_BG1(p_lut, cnProcBufRes, bnProcBuf, Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
nrLDPC_cn2bnProcBuf_BG2(p_lut, p_procBuf, Z);
|
||||
nrLDPC_cn2bnProcBuf_BG2(p_lut, cnProcBufRes, bnProcBuf, Z);
|
||||
}
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->cn2bnProcBuf);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC, p_procBuf);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC, bnProcBuf);
|
||||
#endif
|
||||
|
||||
// BN Processing
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
start_meas(&p_profiler->bnProcPc);
|
||||
#endif
|
||||
nrLDPC_bnProcPc(p_lut, p_procBuf, Z);
|
||||
nrLDPC_bnProcPc(p_lut, bnProcBuf, bnProcBufRes, llrProcBuf, llrRes, Z);
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->bnProcPc);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_LLR_RES, p_procBuf);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_LLR_RES, llrRes);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
start_meas(&p_profiler->bnProc);
|
||||
#endif
|
||||
nrLDPC_bnProc(p_lut, p_procBuf, Z);
|
||||
nrLDPC_bnProc(p_lut, bnProcBuf, bnProcBufRes, llrRes, Z);
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->bnProc);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC_RES, p_procBuf);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC_RES, bnProcBufRes);
|
||||
#endif
|
||||
|
||||
// BN results to CN processing buffer
|
||||
@@ -307,18 +312,18 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
||||
#endif
|
||||
if (BG == 1)
|
||||
{
|
||||
nrLDPC_bn2cnProcBuf_BG1(p_lut, p_procBuf, Z);
|
||||
nrLDPC_bn2cnProcBuf_BG1(p_lut, bnProcBufRes, cnProcBuf, Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
nrLDPC_bn2cnProcBuf_BG2(p_lut, p_procBuf, Z);
|
||||
nrLDPC_bn2cnProcBuf_BG2(p_lut, bnProcBufRes, cnProcBuf, Z);
|
||||
}
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->bn2cnProcBuf);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC, p_procBuf);
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC, cnProcBuf);
|
||||
#endif
|
||||
|
||||
// Parity Check
|
||||
@@ -328,123 +333,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
||||
#endif
|
||||
if (BG == 1)
|
||||
{
|
||||
pcRes = nrLDPC_cnProcPc_BG1(p_lut, p_procBuf, Z);
|
||||
pcRes = nrLDPC_cnProcPc_BG1(p_lut, cnProcBuf, cnProcBufRes, Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
pcRes = nrLDPC_cnProcPc_BG2(p_lut, p_procBuf, Z);
|
||||
}
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->cnProcPc);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
// Last iteration
|
||||
if ( (i < numMaxIter) && (pcRes != 0) )
|
||||
{
|
||||
// Increase iteration counter
|
||||
i++;
|
||||
|
||||
// CN processing
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
start_meas(&p_profiler->cnProc);
|
||||
#endif
|
||||
if (BG == 1)
|
||||
{
|
||||
nrLDPC_cnProc_BG1(p_lut, p_procBuf, Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
nrLDPC_cnProc_BG2(p_lut, p_procBuf, Z);
|
||||
}
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->cnProc);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC_RES, p_procBuf);
|
||||
#endif
|
||||
|
||||
// Send CN results back to BNs
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
start_meas(&p_profiler->cn2bnProcBuf);
|
||||
#endif
|
||||
if (BG == 1)
|
||||
{
|
||||
nrLDPC_cn2bnProcBuf_BG1(p_lut, p_procBuf, Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
nrLDPC_cn2bnProcBuf_BG2(p_lut, p_procBuf, Z);
|
||||
}
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->cn2bnProcBuf);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC, p_procBuf);
|
||||
#endif
|
||||
|
||||
// BN Processing
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
start_meas(&p_profiler->bnProcPc);
|
||||
#endif
|
||||
nrLDPC_bnProcPc(p_lut, p_procBuf, Z);
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->bnProcPc);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_LLR_RES, p_procBuf);
|
||||
#endif
|
||||
|
||||
// If parity check not enabled, no need to send the BN proc results
|
||||
// back to CNs
|
||||
#ifdef NR_LDPC_ENABLE_PARITY_CHECK
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
start_meas(&p_profiler->bnProc);
|
||||
#endif
|
||||
nrLDPC_bnProc(p_lut, p_procBuf, Z);
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->bnProc);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC_RES, p_procBuf);
|
||||
#endif
|
||||
|
||||
// BN results to CN processing buffer
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
start_meas(&p_profiler->bn2cnProcBuf);
|
||||
#endif
|
||||
if (BG == 1)
|
||||
{
|
||||
nrLDPC_bn2cnProcBuf_BG1(p_lut, p_procBuf, Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
nrLDPC_bn2cnProcBuf_BG2(p_lut, p_procBuf, Z);
|
||||
}
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->bn2cnProcBuf);
|
||||
#endif
|
||||
|
||||
#ifdef NR_LDPC_DEBUG_MODE
|
||||
nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC, p_procBuf);
|
||||
#endif
|
||||
|
||||
// Parity Check
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
start_meas(&p_profiler->cnProcPc);
|
||||
#endif
|
||||
if (BG == 1)
|
||||
{
|
||||
pcRes = nrLDPC_cnProcPc_BG1(p_lut, p_procBuf, Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
pcRes = nrLDPC_cnProcPc_BG2(p_lut, p_procBuf, Z);
|
||||
pcRes = nrLDPC_cnProcPc_BG2(p_lut, cnProcBuf, cnProcBufRes, Z);
|
||||
}
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->cnProcPc);
|
||||
@@ -466,7 +359,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
start_meas(&p_profiler->llrRes2llrOut);
|
||||
#endif
|
||||
nrLDPC_llrRes2llrOut(p_lut, p_llrOut, p_procBuf, Z, BG);
|
||||
nrLDPC_llrRes2llrOut(p_lut, p_llrOut, llrRes, Z, BG);
|
||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||
stop_meas(&p_profiler->llrRes2llrOut);
|
||||
#endif
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
/*!\file nrLDPC_init_mem.h
|
||||
* \brief Defines the function to initialize the LDPC decoder and sets correct LUTs.
|
||||
* \author Sebastian Wagner (TCL Communications) Email: <mailto:sebastian.wagner@tcl.com>
|
||||
* \date 07-12-2018
|
||||
* \version 1.0
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#ifndef __NR_LDPC_INIT_MEM__H__
|
||||
#define __NR_LDPC_INIT_MEM__H__
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "nrLDPC_types.h"
|
||||
|
||||
/**
|
||||
\brief Allocates 32 byte aligned memory and initializes to zero
|
||||
\param size Input size in bytes
|
||||
\return Pointer to memory
|
||||
*/
|
||||
static inline void* malloc32_clear(size_t size)
|
||||
{
|
||||
void* ptr = (void*) memalign(32, size+32);
|
||||
memset(ptr, 0, size);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
/**
|
||||
\brief Allocates and initializes the internal decoder processing buffers
|
||||
\param p_decParams Pointer to decoder parameters
|
||||
\param p_lut Pointer to decoder LUTs
|
||||
\return Number of LLR values
|
||||
*/
|
||||
static inline t_nrLDPC_procBuf* nrLDPC_init_mem(void)
|
||||
{
|
||||
t_nrLDPC_procBuf* p_procBuf = (t_nrLDPC_procBuf*) malloc32_clear(sizeof(t_nrLDPC_procBuf));
|
||||
|
||||
if (p_procBuf)
|
||||
{
|
||||
p_procBuf->cnProcBuf = (int8_t*) malloc32_clear(NR_LDPC_SIZE_CN_PROC_BUF*sizeof(int8_t));
|
||||
p_procBuf->cnProcBufRes = (int8_t*) malloc32_clear(NR_LDPC_SIZE_CN_PROC_BUF*sizeof(int8_t));
|
||||
p_procBuf->bnProcBuf = (int8_t*) malloc32_clear(NR_LDPC_SIZE_BN_PROC_BUF*sizeof(int8_t));
|
||||
p_procBuf->bnProcBufRes = (int8_t*) malloc32_clear(NR_LDPC_SIZE_BN_PROC_BUF*sizeof(int8_t));
|
||||
p_procBuf->llrRes = (int8_t*) malloc32_clear(NR_LDPC_MAX_NUM_LLR *sizeof(int8_t));
|
||||
p_procBuf->llrProcBuf = (int8_t*) malloc32_clear(NR_LDPC_MAX_NUM_LLR *sizeof(int8_t));
|
||||
}
|
||||
|
||||
return(p_procBuf);
|
||||
}
|
||||
|
||||
static inline void nrLDPC_free_mem(t_nrLDPC_procBuf* p_procBuf)
|
||||
{
|
||||
free(p_procBuf->cnProcBuf);
|
||||
free(p_procBuf->cnProcBufRes);
|
||||
free(p_procBuf->bnProcBuf);
|
||||
free(p_procBuf->bnProcBufRes);
|
||||
free(p_procBuf->llrRes);
|
||||
free(p_procBuf->llrProcBuf);
|
||||
|
||||
free(p_procBuf);
|
||||
}
|
||||
#endif
|
||||
@@ -97,7 +97,7 @@ static inline void *nrLDPC_circ_memcpy(int8_t *str1, const int8_t *str2, uint16_
|
||||
\param Z Lifting size
|
||||
\param BG Base graph
|
||||
*/
|
||||
static inline void nrLDPC_llr2llrProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrLDPC_procBuf* p_procBuf, uint16_t Z, uint8_t BG)
|
||||
static inline void nrLDPC_llr2llrProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, int8_t* llrProcBuf, uint16_t Z, uint8_t BG)
|
||||
{
|
||||
uint32_t i;
|
||||
const uint8_t numBn2CnG1 = p_lut->numBnInBnGroups[0];
|
||||
@@ -109,7 +109,6 @@ static inline void nrLDPC_llr2llrProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrL
|
||||
const uint8_t* lut_llr2llrProcBufBnPos = p_lut->llr2llrProcBufBnPos;
|
||||
|
||||
uint32_t idxBn;
|
||||
int8_t* llrProcBuf = p_procBuf->llrProcBuf;
|
||||
|
||||
// Copy LLRs connected to 1 CN
|
||||
if (numBn2CnG1 > 0)
|
||||
@@ -133,7 +132,7 @@ static inline void nrLDPC_llr2llrProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrL
|
||||
\param p_procBuf Pointer to the processing buffers
|
||||
\param Z Lifting size
|
||||
*/
|
||||
static inline void nrLDPC_llr2CnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrLDPC_procBuf* p_procBuf, uint16_t Z)
|
||||
static inline void nrLDPC_llr2CnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* llr, int8_t* cnProcBuf, uint16_t Z)
|
||||
{
|
||||
const uint16_t (*lut_circShift_CNG3) [lut_numCnInCnGroups_BG1_R13[0]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[0]]) p_lut->circShift[0];
|
||||
const uint16_t (*lut_circShift_CNG4) [lut_numCnInCnGroups_BG1_R13[1]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[1]]) p_lut->circShift[1];
|
||||
@@ -158,7 +157,6 @@ static inline void nrLDPC_llr2CnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* llr, t_
|
||||
const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups;
|
||||
const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups;
|
||||
|
||||
int8_t* cnProcBuf = p_procBuf->cnProcBuf;
|
||||
uint32_t i;
|
||||
uint32_t j;
|
||||
|
||||
@@ -342,7 +340,7 @@ static inline void nrLDPC_llr2CnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* llr, t_
|
||||
\param p_procBuf Pointer to the processing buffers
|
||||
\param Z Lifting size
|
||||
*/
|
||||
static inline void nrLDPC_llr2CnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrLDPC_procBuf* p_procBuf, uint16_t Z)
|
||||
static inline void nrLDPC_llr2CnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* llr, int8_t* cnProcBuf, uint16_t Z)
|
||||
{
|
||||
const uint16_t (*lut_circShift_CNG3) [lut_numCnInCnGroups_BG2_R15[0]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[0]]) p_lut->circShift[0];
|
||||
const uint16_t (*lut_circShift_CNG4) [lut_numCnInCnGroups_BG2_R15[1]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[1]]) p_lut->circShift[1];
|
||||
@@ -361,7 +359,6 @@ static inline void nrLDPC_llr2CnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* llr, t_
|
||||
const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups;
|
||||
const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups;
|
||||
|
||||
int8_t* cnProcBuf = p_procBuf->cnProcBuf;
|
||||
uint32_t i;
|
||||
uint32_t j;
|
||||
|
||||
@@ -478,7 +475,7 @@ static inline void nrLDPC_llr2CnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* llr, t_
|
||||
\param p_procBuf Pointer to the processing buffers
|
||||
\param Z Lifting size
|
||||
*/
|
||||
static inline void nrLDPC_cn2bnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z)
|
||||
static inline void nrLDPC_cn2bnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* cnProcBufRes, int8_t* bnProcBuf, uint16_t Z)
|
||||
{
|
||||
const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups;
|
||||
const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups;
|
||||
@@ -504,9 +501,6 @@ static inline void nrLDPC_cn2bnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
const uint8_t (*lut_bnPosBnProcBuf_CNG8) [lut_numCnInCnGroups[4]] = (const uint8_t(*)[lut_numCnInCnGroups[4]]) p_lut->bnPosBnProcBuf[4];
|
||||
const uint8_t (*lut_bnPosBnProcBuf_CNG10) [lut_numCnInCnGroups[5]] = (const uint8_t(*)[lut_numCnInCnGroups[5]]) p_lut->bnPosBnProcBuf[5];
|
||||
|
||||
int8_t* cnProcBufRes = p_procBuf->cnProcBufRes;
|
||||
int8_t* bnProcBuf = p_procBuf->bnProcBuf;
|
||||
|
||||
int8_t* p_cnProcBufRes;
|
||||
uint32_t bitOffsetInGroup;
|
||||
uint32_t i;
|
||||
@@ -621,7 +615,7 @@ static inline void nrLDPC_cn2bnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
\param p_procBuf Pointer to the processing buffers
|
||||
\param Z Lifting size
|
||||
*/
|
||||
static inline void nrLDPC_cn2bnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z)
|
||||
static inline void nrLDPC_cn2bnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* cnProcBufRes, int8_t* bnProcBuf, uint16_t Z)
|
||||
{
|
||||
const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups;
|
||||
const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups;
|
||||
@@ -655,9 +649,6 @@ static inline void nrLDPC_cn2bnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
const uint8_t (*lut_bnPosBnProcBuf_CNG10)[lut_numCnInCnGroups[7]] = (const uint8_t(*)[lut_numCnInCnGroups[7]]) p_lut->bnPosBnProcBuf[7];
|
||||
const uint8_t (*lut_bnPosBnProcBuf_CNG19)[lut_numCnInCnGroups[8]] = (const uint8_t(*)[lut_numCnInCnGroups[8]]) p_lut->bnPosBnProcBuf[8];
|
||||
|
||||
int8_t* cnProcBufRes = p_procBuf->cnProcBufRes;
|
||||
int8_t* bnProcBuf = p_procBuf->bnProcBuf;
|
||||
|
||||
int8_t* p_cnProcBufRes;
|
||||
uint32_t bitOffsetInGroup;
|
||||
uint32_t i;
|
||||
@@ -819,7 +810,7 @@ static inline void nrLDPC_cn2bnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
\param p_procBuf Pointer to the processing buffers
|
||||
\param Z Lifting size
|
||||
*/
|
||||
static inline void nrLDPC_bn2cnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z)
|
||||
static inline void nrLDPC_bn2cnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* bnProcBufRes, int8_t* cnProcBuf, uint16_t Z)
|
||||
{
|
||||
const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups;
|
||||
const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups;
|
||||
@@ -845,9 +836,6 @@ static inline void nrLDPC_bn2cnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
const uint8_t (*lut_bnPosBnProcBuf_CNG8) [lut_numCnInCnGroups[4]] = (const uint8_t(*)[lut_numCnInCnGroups[4]]) p_lut->bnPosBnProcBuf[4];
|
||||
const uint8_t (*lut_bnPosBnProcBuf_CNG10) [lut_numCnInCnGroups[5]] = (const uint8_t(*)[lut_numCnInCnGroups[5]]) p_lut->bnPosBnProcBuf[5];
|
||||
|
||||
int8_t* cnProcBuf = p_procBuf->cnProcBuf;
|
||||
int8_t* bnProcBufRes = p_procBuf->bnProcBufRes;
|
||||
|
||||
int8_t* p_cnProcBuf;
|
||||
uint32_t bitOffsetInGroup;
|
||||
uint32_t i;
|
||||
@@ -961,7 +949,7 @@ static inline void nrLDPC_bn2cnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
\param p_procBuf Pointer to the processing buffers
|
||||
\param Z Lifting size
|
||||
*/
|
||||
static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z)
|
||||
static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* bnProcBufRes, int8_t* cnProcBuf, uint16_t Z)
|
||||
{
|
||||
const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups;
|
||||
const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups;
|
||||
@@ -995,9 +983,6 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
const uint8_t (*lut_bnPosBnProcBuf_CNG10)[lut_numCnInCnGroups[7]] = (const uint8_t(*)[lut_numCnInCnGroups[7]]) p_lut->bnPosBnProcBuf[7];
|
||||
const uint8_t (*lut_bnPosBnProcBuf_CNG19)[lut_numCnInCnGroups[8]] = (const uint8_t(*)[lut_numCnInCnGroups[8]]) p_lut->bnPosBnProcBuf[8];
|
||||
|
||||
int8_t* cnProcBuf = p_procBuf->cnProcBuf;
|
||||
int8_t* bnProcBufRes = p_procBuf->bnProcBufRes;
|
||||
|
||||
int8_t* p_cnProcBuf;
|
||||
uint32_t bitOffsetInGroup;
|
||||
uint32_t i;
|
||||
@@ -1157,7 +1142,7 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
||||
\param Z Lifting size
|
||||
\param BG Base graph
|
||||
*/
|
||||
static inline void nrLDPC_llrRes2llrOut(t_nrLDPC_lut* p_lut, int8_t* llrOut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z, uint8_t BG)
|
||||
static inline void nrLDPC_llrRes2llrOut(t_nrLDPC_lut* p_lut, int8_t* llrOut, int8_t* llrRes, uint16_t Z, uint8_t BG)
|
||||
{
|
||||
uint32_t i;
|
||||
const uint8_t numBn2CnG1 = p_lut->numBnInBnGroups[0];
|
||||
@@ -1168,7 +1153,6 @@ static inline void nrLDPC_llrRes2llrOut(t_nrLDPC_lut* p_lut, int8_t* llrOut, t_n
|
||||
const uint16_t* lut_llr2llrProcBufAddr = p_lut->llr2llrProcBufAddr;
|
||||
const uint8_t* lut_llr2llrProcBufBnPos = p_lut->llr2llrProcBufBnPos;
|
||||
|
||||
int8_t* llrRes = p_procBuf->llrRes;
|
||||
int8_t* p_llrOut = &llrOut[0];
|
||||
uint32_t idxBn;
|
||||
|
||||
|
||||
@@ -87,38 +87,38 @@ static inline void nrLDPC_initFile(const char* fileName)
|
||||
\brief Writes data of predefined buffers to file
|
||||
\param buffer Enum of buffer name to write
|
||||
*/
|
||||
static inline void nrLDPC_debug_writeBuffer2File(e_nrLDPC_buffers buffer, t_nrLDPC_procBuf* p_procBuf)
|
||||
static inline void nrLDPC_debug_writeBuffer2File(e_nrLDPC_buffers buffer, int8_t* p_buffer)
|
||||
{
|
||||
switch (buffer)
|
||||
{
|
||||
case nrLDPC_buffers_LLR_PROC:
|
||||
{
|
||||
nrLDPC_writeFile("llrProcBuf.txt", p_procBuf->llrProcBuf, NR_LDPC_MAX_NUM_LLR);
|
||||
nrLDPC_writeFile("llrProcBuf.txt", p_buffer, NR_LDPC_MAX_NUM_LLR);
|
||||
break;
|
||||
}
|
||||
case nrLDPC_buffers_CN_PROC:
|
||||
{
|
||||
nrLDPC_writeFile("cnProcBuf.txt", p_procBuf->cnProcBuf, NR_LDPC_SIZE_CN_PROC_BUF);
|
||||
nrLDPC_writeFile("cnProcBuf.txt", p_buffer, NR_LDPC_SIZE_CN_PROC_BUF);
|
||||
break;
|
||||
}
|
||||
case nrLDPC_buffers_CN_PROC_RES:
|
||||
{
|
||||
nrLDPC_writeFile("cnProcBufRes.txt", p_procBuf->cnProcBufRes, NR_LDPC_SIZE_CN_PROC_BUF);
|
||||
nrLDPC_writeFile("cnProcBufRes.txt", p_buffer, NR_LDPC_SIZE_CN_PROC_BUF);
|
||||
break;
|
||||
}
|
||||
case nrLDPC_buffers_BN_PROC:
|
||||
{
|
||||
nrLDPC_writeFile("bnProcBuf.txt", p_procBuf->bnProcBuf, NR_LDPC_SIZE_BN_PROC_BUF);
|
||||
nrLDPC_writeFile("bnProcBuf.txt", p_buffer, NR_LDPC_SIZE_BN_PROC_BUF);
|
||||
break;
|
||||
}
|
||||
case nrLDPC_buffers_BN_PROC_RES:
|
||||
{
|
||||
nrLDPC_writeFile("bnProcBufRes.txt", p_procBuf->bnProcBufRes, NR_LDPC_SIZE_BN_PROC_BUF);
|
||||
nrLDPC_writeFile("bnProcBufRes.txt", p_buffer, NR_LDPC_SIZE_BN_PROC_BUF);
|
||||
break;
|
||||
}
|
||||
case nrLDPC_buffers_LLR_RES:
|
||||
{
|
||||
nrLDPC_writeFile("llrRes.txt", p_procBuf->llrRes, NR_LDPC_MAX_NUM_LLR);
|
||||
nrLDPC_writeFile("llrRes.txt", p_buffer, NR_LDPC_MAX_NUM_LLR);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,5 +71,5 @@ typedef int(*nrLDPC_encoderfunc_t)(unsigned char **,unsigned char **,int,int,sho
|
||||
\param p_llrOut Output vector
|
||||
\param p_profiler LDPC profiler statistics
|
||||
*/
|
||||
typedef int32_t(*nrLDPC_decoderfunc_t)(t_nrLDPC_dec_params *, int8_t *, int8_t *, t_nrLDPC_procBuf *, t_nrLDPC_time_stats * );
|
||||
typedef int32_t(*nrLDPC_decoderfunc_t)(t_nrLDPC_dec_params* , int8_t*, int8_t* , t_nrLDPC_time_stats* );
|
||||
#endif
|
||||
|
||||
@@ -34,5 +34,4 @@ extern nrLDPC_initcallfunc_t nrLDPC_initcall;
|
||||
extern nrLDPC_decoderfunc_t nrLDPC_decoder;
|
||||
extern nrLDPC_encoderfunc_t nrLDPC_encoder;
|
||||
// inline functions:
|
||||
#include "openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init_mem.h"
|
||||
#endif
|
||||
|
||||
@@ -76,8 +76,6 @@ void free_gNB_ulsch(NR_gNB_ULSCH_t **ulschptr, uint16_t N_RB_UL)
|
||||
free_and_zero(ulsch->harq_processes[i]->c[r]);
|
||||
free_and_zero(ulsch->harq_processes[i]->d[r]);
|
||||
free_and_zero(ulsch->harq_processes[i]->w[r]);
|
||||
nrLDPC_free_mem(ulsch->harq_processes[i]->p_nrLDPC_procBuf[r]);
|
||||
ulsch->harq_processes[i]->p_nrLDPC_procBuf[r] = NULL;
|
||||
}
|
||||
free_and_zero(ulsch->harq_processes[i]);
|
||||
ulsch->harq_processes[i] = NULL;
|
||||
@@ -101,22 +99,21 @@ NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations, uint16_t N_RB_UL)
|
||||
|
||||
uint32_t ulsch_bytes = a_segments*1056; // allocated bytes per segment
|
||||
ulsch = (NR_gNB_ULSCH_t *)malloc16_clear(sizeof(NR_gNB_ULSCH_t));
|
||||
|
||||
|
||||
ulsch->max_ldpc_iterations = max_ldpc_iterations;
|
||||
ulsch->Mlimit = 4;
|
||||
|
||||
|
||||
for (i=0; i<NR_MAX_ULSCH_HARQ_PROCESSES; i++) {
|
||||
|
||||
|
||||
ulsch->harq_processes[i] = (NR_UL_gNB_HARQ_t *)malloc16_clear(sizeof(NR_UL_gNB_HARQ_t));
|
||||
ulsch->harq_processes[i]->b = (uint8_t*)malloc16_clear(ulsch_bytes);
|
||||
for (r=0; r<a_segments; r++) {
|
||||
ulsch->harq_processes[i]->p_nrLDPC_procBuf[r] = nrLDPC_init_mem();
|
||||
ulsch->harq_processes[i]->c[r] = (uint8_t*)malloc16_clear(8448*sizeof(uint8_t));
|
||||
ulsch->harq_processes[i]->d[r] = (int16_t*)malloc16_clear((68*384)*sizeof(int16_t));
|
||||
ulsch->harq_processes[i]->w[r] = (int16_t*)malloc16_clear((3*(6144+64))*sizeof(int16_t));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return(ulsch);
|
||||
}
|
||||
|
||||
@@ -360,7 +357,6 @@ void nr_processULSegment(void* arg) {
|
||||
no_iteration_ldpc = nrLDPC_decoder(p_decoderParms,
|
||||
(int8_t*)&pl[0],
|
||||
llrProcBuf,
|
||||
ulsch_harq->p_nrLDPC_procBuf[r],
|
||||
p_procTime);
|
||||
|
||||
if (check_crc((uint8_t*)llrProcBuf,length_dec,ulsch_harq->F,crc_type)) {
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
void nr_adjust_synch_ue(NR_DL_FRAME_PARMS *frame_parms,
|
||||
PHY_VARS_NR_UE *ue,
|
||||
module_id_t gNB_id,
|
||||
const int estimateSz, struct complex16 dl_ch_estimates_time[][estimateSz],
|
||||
const int estimateSz,
|
||||
struct complex16 dl_ch_estimates_time[][estimateSz],
|
||||
uint8_t frame,
|
||||
uint8_t subframe,
|
||||
unsigned char clear,
|
||||
|
||||
@@ -197,9 +197,9 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
|
||||
|
||||
|
||||
int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||
int estimateSz,
|
||||
struct complex16 dl_ch_estimates [][estimateSz],
|
||||
struct complex16 dl_ch_estimates_time [][estimateSz],
|
||||
int estimateSz,
|
||||
struct complex16 dl_ch_estimates [][estimateSz],
|
||||
struct complex16 dl_ch_estimates_time [][ue->frame_parms.ofdm_symbol_size],
|
||||
UE_nr_rxtx_proc_t *proc,
|
||||
uint8_t gNB_id,
|
||||
unsigned char Ns,
|
||||
@@ -320,7 +320,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
||||
dl_ch = (int16_t *)&dl_ch_estimates[aarx][ch_offset];
|
||||
|
||||
memset(dl_ch,0,sizeof(*dl_ch)*(ue->frame_parms.ofdm_symbol_size));
|
||||
memset(dl_ch,0,sizeof(struct complex16)*(ue->frame_parms.ofdm_symbol_size));
|
||||
|
||||
#ifdef DEBUG_CH
|
||||
printf("pbch ch est pilot addr %p RB_DL %d\n",&pilot[0], ue->frame_parms.N_RB_DL);
|
||||
@@ -387,10 +387,10 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||
|
||||
// in 2nd symbol, skip middle REs (48 with DMRS, 144 for SSS, and another 48 with DMRS)
|
||||
if (dmrss == 1 && pilot_cnt == 12) {
|
||||
pilot_cnt=48;
|
||||
re_offset = (re_offset+144) % ue->frame_parms.ofdm_symbol_size;
|
||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
||||
dl_ch += 288;
|
||||
pilot_cnt=48;
|
||||
re_offset = (re_offset+144) % ue->frame_parms.ofdm_symbol_size;
|
||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
||||
dl_ch += 288;
|
||||
}
|
||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
||||
@@ -452,10 +452,12 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||
(int16_t*) &dl_ch_estimates[aarx][ch_offset],
|
||||
(int16_t*) dl_ch_estimates_time[aarx],
|
||||
1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (dmrss == 2)
|
||||
UEscopeCopy(ue, pbchDlChEstimateTime, (void*)dl_ch_estimates_time, sizeof(struct complex16), ue->frame_parms.nb_antennas_rx, idftsizeidx);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
@@ -104,11 +104,9 @@ void free_nr_ue_dlsch(NR_UE_DLSCH_t **dlschptr, uint16_t N_RB_DL) {
|
||||
dlsch->harq_processes[i]->c[r] = NULL;
|
||||
free16(dlsch->harq_processes[i]->d[r],5*8448);
|
||||
dlsch->harq_processes[i]->d[r] = NULL;
|
||||
nrLDPC_free_mem(dlsch->harq_processes[i]->p_nrLDPC_procBuf[r]);
|
||||
}
|
||||
free16(dlsch->harq_processes[i]->c,a_segments);
|
||||
free16(dlsch->harq_processes[i]->d,a_segments);
|
||||
free16(dlsch->harq_processes[i]->p_nrLDPC_procBuf,a_segments);
|
||||
|
||||
free16(dlsch->harq_processes[i],sizeof(NR_DL_UE_HARQ_t));
|
||||
dlsch->harq_processes[i] = NULL;
|
||||
@@ -161,9 +159,7 @@ NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint
|
||||
|
||||
dlsch->harq_processes[i]->c = (uint8_t **)malloc16(a_segments*sizeof(uint8_t *));
|
||||
dlsch->harq_processes[i]->d = (int16_t **)malloc16(a_segments*sizeof(int16_t *));
|
||||
dlsch->harq_processes[i]->p_nrLDPC_procBuf = (t_nrLDPC_procBuf **)malloc16(a_segments*sizeof(t_nrLDPC_procBuf *));
|
||||
for (int r=0; r<a_segments; r++) {
|
||||
dlsch->harq_processes[i]->p_nrLDPC_procBuf[r] = nrLDPC_init_mem();
|
||||
dlsch->harq_processes[i]->c[r] = (uint8_t *)malloc16(1056);
|
||||
dlsch->harq_processes[i]->d[r] = (int16_t *)malloc16(5*8448*sizeof(int16_t));
|
||||
if (dlsch->harq_processes[i]->c[r])
|
||||
@@ -301,132 +297,128 @@ void nr_processDLSegment(void* arg) {
|
||||
t_nrLDPC_time_stats procTime = {0};
|
||||
t_nrLDPC_time_stats* p_procTime = &procTime ;
|
||||
|
||||
t_nrLDPC_procBuf **p_nrLDPC_procBuf = harq_process->p_nrLDPC_procBuf;
|
||||
int16_t w[5*8448];
|
||||
memset(w,0,(5*8448)*sizeof(short));
|
||||
|
||||
start_meas(&rdata->ts_deinterleave);
|
||||
|
||||
int16_t w[5*8448];
|
||||
memset(w,0,(5*8448)*sizeof(short));
|
||||
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING, VCD_FUNCTION_IN);
|
||||
nr_deinterleaving_ldpc(E,
|
||||
Qm,
|
||||
w, // [hna] w is e
|
||||
dlsch_llr+r_offset);
|
||||
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING, VCD_FUNCTION_OUT);
|
||||
stop_meas(&rdata->ts_deinterleave);
|
||||
|
||||
start_meas(&rdata->ts_deinterleave);
|
||||
start_meas(&rdata->ts_rate_unmatch);
|
||||
/* LOG_D(PHY,"HARQ_PID %d Rate Matching Segment %d (coded bits %d,E %d, F %d,unpunctured/repeated bits %d, TBS %d, mod_order %d, nb_rb %d, Nl %d, rv %d, round %d)...\n",
|
||||
harq_pid,r, G,E,harq_process->F,
|
||||
Kr*3,
|
||||
harq_process->TBS,
|
||||
Qm,
|
||||
harq_process->nb_rb,
|
||||
harq_process->Nl,
|
||||
harq_process->rvidx,
|
||||
harq_process->round); */
|
||||
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING, VCD_FUNCTION_IN);
|
||||
|
||||
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING, VCD_FUNCTION_IN);
|
||||
nr_deinterleaving_ldpc(E,
|
||||
Qm,
|
||||
w, // [hna] w is e
|
||||
dlsch_llr+r_offset);
|
||||
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING, VCD_FUNCTION_OUT);
|
||||
stop_meas(&rdata->ts_deinterleave);
|
||||
|
||||
start_meas(&rdata->ts_rate_unmatch);
|
||||
/* LOG_D(PHY,"HARQ_PID %d Rate Matching Segment %d (coded bits %d,E %d, F %d,unpunctured/repeated bits %d, TBS %d, mod_order %d, nb_rb %d, Nl %d, rv %d, round %d)...\n",
|
||||
harq_pid,r, G,E,harq_process->F,
|
||||
Kr*3,
|
||||
harq_process->TBS,
|
||||
Qm,
|
||||
harq_process->nb_rb,
|
||||
harq_process->Nl,
|
||||
harq_process->rvidx,
|
||||
harq_process->round); */
|
||||
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING, VCD_FUNCTION_IN);
|
||||
|
||||
if (nr_rate_matching_ldpc_rx(Ilbrm,
|
||||
Tbslbrm,
|
||||
p_decoderParms->BG,
|
||||
p_decoderParms->Z,
|
||||
harq_process->d[r],
|
||||
w,
|
||||
harq_process->C,
|
||||
harq_process->rvidx,
|
||||
(harq_process->first_rx==1)?1:0,
|
||||
E,
|
||||
harq_process->F,
|
||||
Kr-harq_process->F-2*(p_decoderParms->Z))==-1) {
|
||||
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING, VCD_FUNCTION_OUT);
|
||||
stop_meas(&rdata->ts_rate_unmatch);
|
||||
LOG_E(PHY,"dlsch_decoding.c: Problem in rate_matching\n");
|
||||
rdata->decodeIterations = dlsch->max_ldpc_iterations + 1;
|
||||
return;
|
||||
}
|
||||
if (nr_rate_matching_ldpc_rx(Ilbrm,
|
||||
Tbslbrm,
|
||||
p_decoderParms->BG,
|
||||
p_decoderParms->Z,
|
||||
harq_process->d[r],
|
||||
w,
|
||||
harq_process->C,
|
||||
harq_process->rvidx,
|
||||
(harq_process->first_rx==1)?1:0,
|
||||
E,
|
||||
harq_process->F,
|
||||
Kr-harq_process->F-2*(p_decoderParms->Z))==-1) {
|
||||
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING, VCD_FUNCTION_OUT);
|
||||
stop_meas(&rdata->ts_rate_unmatch);
|
||||
LOG_E(PHY,"dlsch_decoding.c: Problem in rate_matching\n");
|
||||
rdata->decodeIterations = dlsch->max_ldpc_iterations + 1;
|
||||
return;
|
||||
}
|
||||
stop_meas(&rdata->ts_rate_unmatch);
|
||||
|
||||
r_offset += E;
|
||||
r_offset += E;
|
||||
|
||||
if (LOG_DEBUGFLAG(DEBUG_DLSCH_DECOD)) {
|
||||
LOG_D(PHY,"decoder input(segment %u) :",r);
|
||||
if (LOG_DEBUGFLAG(DEBUG_DLSCH_DECOD)) {
|
||||
LOG_D(PHY,"decoder input(segment %u) :",r);
|
||||
|
||||
for (int i=0; i<E; i++)
|
||||
LOG_D(PHY,"%d : %d\n",i,harq_process->d[r][i]);
|
||||
for (int i=0; i<E; i++)
|
||||
LOG_D(PHY,"%d : %d\n",i,harq_process->d[r][i]);
|
||||
|
||||
LOG_D(PHY,"\n");
|
||||
LOG_D(PHY,"\n");
|
||||
}
|
||||
|
||||
memset(harq_process->c[r],0,Kr_bytes);
|
||||
|
||||
if (harq_process->C == 1) {
|
||||
if (A > NR_MAX_PDSCH_TBS)
|
||||
crc_type = CRC24_A;
|
||||
else
|
||||
crc_type = CRC16;
|
||||
|
||||
length_dec = harq_process->B;
|
||||
} else {
|
||||
crc_type = CRC24_B;
|
||||
length_dec = (harq_process->B+24*harq_process->C)/harq_process->C;
|
||||
}
|
||||
|
||||
{
|
||||
start_meas(&rdata->ts_ldpc_decode);
|
||||
//set first 2*Z_c bits to zeros
|
||||
memset(&z[0],0,2*harq_process->Z*sizeof(int16_t));
|
||||
//set Filler bits
|
||||
memset((&z[0]+K_bits_F),127,harq_process->F*sizeof(int16_t));
|
||||
//Move coded bits before filler bits
|
||||
memcpy((&z[0]+2*harq_process->Z),harq_process->d[r],(K_bits_F-2*harq_process->Z)*sizeof(int16_t));
|
||||
//skip filler bits
|
||||
memcpy((&z[0]+Kr),harq_process->d[r]+(Kr-2*harq_process->Z),(kc*harq_process->Z-Kr)*sizeof(int16_t));
|
||||
|
||||
//Saturate coded bits before decoding into 8 bits values
|
||||
for (i=0, j=0; j < ((kc*harq_process->Z)>>4)+1; i+=2, j++) {
|
||||
pl[j] = _mm_packs_epi16(pv[i],pv[i+1]);
|
||||
}
|
||||
|
||||
memset(harq_process->c[r],0,Kr_bytes);
|
||||
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC, VCD_FUNCTION_IN);
|
||||
p_decoderParms->block_length=length_dec;
|
||||
nrLDPC_initcall(p_decoderParms, (int8_t*)&pl[0], llrProcBuf);
|
||||
no_iteration_ldpc = nrLDPC_decoder(p_decoderParms,
|
||||
(int8_t *)&pl[0],
|
||||
llrProcBuf,
|
||||
p_procTime);
|
||||
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC, VCD_FUNCTION_OUT);
|
||||
|
||||
if (harq_process->C == 1) {
|
||||
if (A > NR_MAX_PDSCH_TBS)
|
||||
crc_type = CRC24_A;
|
||||
else
|
||||
crc_type = CRC16;
|
||||
// Fixme: correct type is unsigned, but nrLDPC_decoder and all called behind use signed int
|
||||
if (check_crc((uint8_t *)llrProcBuf,length_dec,harq_process->F,crc_type)) {
|
||||
LOG_D(PHY,"Segment %u CRC OK\n\033[0m",r);
|
||||
|
||||
length_dec = harq_process->B;
|
||||
if (r==0) {
|
||||
for (int i=0; i<10; i++) LOG_D(PHY,"byte %d : %x\n",i,((uint8_t *)llrProcBuf)[i]);
|
||||
}
|
||||
|
||||
//Temporary hack
|
||||
no_iteration_ldpc = dlsch->max_ldpc_iterations;
|
||||
rdata->decodeIterations = no_iteration_ldpc;
|
||||
} else {
|
||||
crc_type = CRC24_B;
|
||||
length_dec = (harq_process->B+24*harq_process->C)/harq_process->C;
|
||||
LOG_D(PHY,"CRC NOT OK\n\033[0m");
|
||||
}
|
||||
|
||||
{
|
||||
start_meas(&rdata->ts_ldpc_decode);
|
||||
//set first 2*Z_c bits to zeros
|
||||
memset(&z[0],0,2*harq_process->Z*sizeof(int16_t));
|
||||
//set Filler bits
|
||||
memset((&z[0]+K_bits_F),127,harq_process->F*sizeof(int16_t));
|
||||
//Move coded bits before filler bits
|
||||
memcpy((&z[0]+2*harq_process->Z),harq_process->d[r],(K_bits_F-2*harq_process->Z)*sizeof(int16_t));
|
||||
//skip filler bits
|
||||
memcpy((&z[0]+Kr),harq_process->d[r]+(Kr-2*harq_process->Z),(kc*harq_process->Z-Kr)*sizeof(int16_t));
|
||||
nb_total_decod++;
|
||||
|
||||
//Saturate coded bits before decoding into 8 bits values
|
||||
for (i=0, j=0; j < ((kc*harq_process->Z)>>4)+1; i+=2, j++) {
|
||||
pl[j] = _mm_packs_epi16(pv[i],pv[i+1]);
|
||||
}
|
||||
|
||||
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC, VCD_FUNCTION_IN);
|
||||
p_decoderParms->block_length=length_dec;
|
||||
nrLDPC_initcall(p_decoderParms, (int8_t*)&pl[0], llrProcBuf);
|
||||
no_iteration_ldpc = nrLDPC_decoder(p_decoderParms,
|
||||
(int8_t *)&pl[0],
|
||||
llrProcBuf,
|
||||
p_nrLDPC_procBuf[r],
|
||||
p_procTime);
|
||||
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC, VCD_FUNCTION_OUT);
|
||||
|
||||
// Fixme: correct type is unsigned, but nrLDPC_decoder and all called behind use signed int
|
||||
if (check_crc((uint8_t *)llrProcBuf,length_dec,harq_process->F,crc_type)) {
|
||||
LOG_D(PHY,"Segment %u CRC OK\n",r);
|
||||
|
||||
if (r==0) {
|
||||
for (int i=0; i<10; i++) LOG_D(PHY,"byte %d : %x\n",i,((uint8_t *)llrProcBuf)[i]);
|
||||
}
|
||||
|
||||
//Temporary hack
|
||||
no_iteration_ldpc = dlsch->max_ldpc_iterations;
|
||||
rdata->decodeIterations = no_iteration_ldpc;
|
||||
} else {
|
||||
LOG_D(PHY,"CRC NOT OK\n");
|
||||
}
|
||||
|
||||
nb_total_decod++;
|
||||
|
||||
if (no_iteration_ldpc > dlsch->max_ldpc_iterations) {
|
||||
nb_error_decod++;
|
||||
}
|
||||
|
||||
for (int m=0; m < Kr>>3; m ++) {
|
||||
harq_process->c[r][m]= (uint8_t) llrProcBuf[m];
|
||||
}
|
||||
|
||||
stop_meas(&rdata->ts_ldpc_decode);
|
||||
if (no_iteration_ldpc > dlsch->max_ldpc_iterations) {
|
||||
nb_error_decod++;
|
||||
}
|
||||
|
||||
for (int m=0; m < Kr>>3; m ++) {
|
||||
harq_process->c[r][m]= (uint8_t) llrProcBuf[m];
|
||||
}
|
||||
|
||||
stop_meas(&rdata->ts_ldpc_decode);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
|
||||
|
||||
@@ -146,23 +146,26 @@ int nr_pbch_detection(UE_nr_rxtx_proc_t * proc, PHY_VARS_NR_UE *ue, int pbch_ini
|
||||
|
||||
start_meas(&ue->dlsch_channel_estimation_stats);
|
||||
// computing channel estimation for selected best ssb
|
||||
const int estimateSz=7*2*frame_parms->ofdm_symbol_size;
|
||||
const int estimateSz = frame_parms->symbols_per_slot * frame_parms->ofdm_symbol_size;
|
||||
__attribute__ ((aligned(32))) struct complex16 dl_ch_estimates[frame_parms->nb_antennas_rx][estimateSz];
|
||||
__attribute__ ((aligned(32))) struct complex16 dl_ch_estimates_time[frame_parms->nb_antennas_rx][estimateSz];
|
||||
__attribute__ ((aligned(32))) struct complex16 dl_ch_estimates_time[frame_parms->nb_antennas_rx][frame_parms->ofdm_symbol_size];
|
||||
|
||||
for(int i=pbch_initial_symbol; i<pbch_initial_symbol+3;i++)
|
||||
nr_pbch_channel_estimation(ue,estimateSz, dl_ch_estimates, dl_ch_estimates_time,
|
||||
proc,0,0,i,i-pbch_initial_symbol,temp_ptr->i_ssb,temp_ptr->n_hf);
|
||||
|
||||
stop_meas(&ue->dlsch_channel_estimation_stats);
|
||||
fapiPbch_t result;
|
||||
ret = nr_rx_pbch(ue,
|
||||
proc,
|
||||
estimateSz, dl_ch_estimates,
|
||||
ue->pbch_vars[0],
|
||||
estimateSz,
|
||||
dl_ch_estimates,
|
||||
ue->pbch_vars[0],
|
||||
frame_parms,
|
||||
0,
|
||||
temp_ptr->i_ssb,
|
||||
SISO,
|
||||
&result);
|
||||
&result);
|
||||
|
||||
temp_ptr=temp_ptr->next_ssb;
|
||||
}
|
||||
|
||||
@@ -196,8 +196,6 @@ typedef struct {
|
||||
uint8_t rvidx;
|
||||
/// MIMO mode for this DLSCH
|
||||
MIMO_nrmode_t mimo_mode;
|
||||
/// LDPC processing buffers
|
||||
t_nrLDPC_procBuf **p_nrLDPC_procBuf;
|
||||
/// Number of code segments
|
||||
uint32_t C;
|
||||
/// Number of bits in code segments
|
||||
|
||||
@@ -280,8 +280,6 @@ typedef struct {
|
||||
uint32_t C;
|
||||
/// Pointers to code blocks after LDPC coding (38.212 V15.4.0 section 5.3.2)
|
||||
int16_t *d[MAX_NUM_NR_ULSCH_SEGMENTS];
|
||||
/// LDPC processing buffer
|
||||
t_nrLDPC_procBuf* p_nrLDPC_procBuf[MAX_NUM_NR_ULSCH_SEGMENTS];
|
||||
/// LDPC lifting size (38.212 V15.4.0 table 5.3.2-1)
|
||||
uint32_t Z;
|
||||
/// code blocks after bit selection in rate matching for LDPC code (38.212 V15.4.0 section 5.4.2.1)
|
||||
|
||||
@@ -36,10 +36,11 @@
|
||||
#include "fapi_nr_ue_l1.h"
|
||||
#include "harq_nr.h"
|
||||
//#include "PHY/phy_vars_nr_ue.h"
|
||||
|
||||
#include "openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h"
|
||||
#include "PHY/defs_nr_UE.h"
|
||||
#include "PHY/impl_defs_nr.h"
|
||||
#include "utils.h"
|
||||
#include "openair2/PHY_INTERFACE/queue_t.h"
|
||||
|
||||
extern PHY_VARS_NR_UE ***PHY_vars_UE_g;
|
||||
|
||||
@@ -49,8 +50,64 @@ queue_t nr_rx_ind_queue;
|
||||
queue_t nr_crc_ind_queue;
|
||||
queue_t nr_uci_ind_queue;
|
||||
|
||||
int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response) {
|
||||
static void fill_uci_2_3_4(nfapi_nr_uci_pucch_pdu_format_2_3_4_t *pdu_2_3_4,
|
||||
fapi_nr_ul_config_pucch_pdu *pucch_pdu)
|
||||
{
|
||||
memset(pdu_2_3_4, 0, sizeof(*pdu_2_3_4));
|
||||
pdu_2_3_4->handle = 0;
|
||||
pdu_2_3_4->rnti = pucch_pdu->rnti;
|
||||
pdu_2_3_4->pucch_format = 2;
|
||||
pdu_2_3_4->ul_cqi = 255;
|
||||
pdu_2_3_4->timing_advance = 0;
|
||||
pdu_2_3_4->rssi = 0;
|
||||
// TODO: Eventually check 38.212:Sect.631 to know when to use csi_part2, for now only using csi_part1
|
||||
pdu_2_3_4->pduBitmap = 4;
|
||||
pdu_2_3_4->csi_part1.csi_part1_bit_len = pucch_pdu->nr_of_symbols;
|
||||
int csi_part1_byte_len = (int)((pdu_2_3_4->csi_part1.csi_part1_bit_len / 8) + 1);
|
||||
AssertFatal(!pdu_2_3_4->csi_part1.csi_part1_payload, "pdu_2_3_4->csi_part1.csi_part1_payload != NULL\n");
|
||||
pdu_2_3_4->csi_part1.csi_part1_payload = CALLOC(csi_part1_byte_len,
|
||||
sizeof(pdu_2_3_4->csi_part1.csi_part1_payload));
|
||||
for (int k = 0; k < csi_part1_byte_len; k++)
|
||||
{
|
||||
pdu_2_3_4->csi_part1.csi_part1_payload[k] = (pucch_pdu->payload >> (k * 8)) & 0xff;
|
||||
}
|
||||
pdu_2_3_4->csi_part1.csi_part1_crc = 0;
|
||||
}
|
||||
|
||||
static void free_uci_inds(nfapi_nr_uci_indication_t *uci_ind)
|
||||
{
|
||||
for (int k = 0; k < uci_ind->num_ucis; k++)
|
||||
{
|
||||
if (uci_ind->uci_list[k].pdu_type == NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE)
|
||||
{
|
||||
nfapi_nr_uci_pucch_pdu_format_0_1_t *pdu_0_1 = &uci_ind->uci_list[k].pucch_pdu_format_0_1;
|
||||
free(pdu_0_1->sr);
|
||||
pdu_0_1->sr = NULL;
|
||||
if (pdu_0_1->harq)
|
||||
{
|
||||
free(pdu_0_1->harq->harq_list);
|
||||
pdu_0_1->harq->harq_list = NULL;
|
||||
}
|
||||
free(pdu_0_1->harq);
|
||||
pdu_0_1->harq = NULL;
|
||||
}
|
||||
if (uci_ind->uci_list[k].pdu_type == NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE)
|
||||
{
|
||||
nfapi_nr_uci_pucch_pdu_format_2_3_4_t *pdu_2_3_4 = &uci_ind->uci_list[k].pucch_pdu_format_2_3_4;
|
||||
free(pdu_2_3_4->sr.sr_payload);
|
||||
pdu_2_3_4->sr.sr_payload = NULL;
|
||||
free(pdu_2_3_4->harq.harq_payload);
|
||||
pdu_2_3_4->harq.harq_payload = NULL;
|
||||
}
|
||||
}
|
||||
free(uci_ind->uci_list);
|
||||
uci_ind->uci_list = NULL;
|
||||
free(uci_ind);
|
||||
uci_ind = NULL;
|
||||
}
|
||||
|
||||
int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response) {
|
||||
NR_UE_MAC_INST_t *mac = get_mac_inst(0);
|
||||
if(scheduled_response != NULL)
|
||||
{
|
||||
if (scheduled_response->ul_config != NULL)
|
||||
@@ -60,7 +117,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response
|
||||
"Too many ul_config pdus %d", ul_config->number_pdus);
|
||||
for (int i = 0; i < ul_config->number_pdus; ++i)
|
||||
{
|
||||
LOG_I(PHY, "In %s: processing type %d PDU of %d total UL PDUs (ul_config %p) \n",
|
||||
LOG_D(NR_PHY, "In %s: processing type %d PDU of %d total UL PDUs (ul_config %p) \n",
|
||||
__FUNCTION__, ul_config->ul_config_list[i].pdu_type, ul_config->number_pdus, ul_config);
|
||||
|
||||
uint8_t pdu_type = ul_config->ul_config_list[i].pdu_type;
|
||||
@@ -95,10 +152,6 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response
|
||||
abstracting L1. */
|
||||
rx_ind->pdu_list[j].timing_advance = 31;
|
||||
rx_ind->pdu_list[j].ul_cqi = 255;
|
||||
char buffer[1024];
|
||||
hexdump(rx_ind->pdu_list[j].pdu, rx_ind->pdu_list[j].pdu_length, buffer, sizeof(buffer));
|
||||
LOG_D(NR_MAC, "Hexdump of pdu %s before queuing rx_ind\n",
|
||||
buffer);
|
||||
}
|
||||
|
||||
crc_ind->header.message_id = NFAPI_NR_PHY_MSG_TYPE_CRC_INDICATION;
|
||||
@@ -118,6 +171,11 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response
|
||||
crc_ind->crc_list[j].tb_crc_status = 0;
|
||||
crc_ind->crc_list[j].timing_advance = 31;
|
||||
crc_ind->crc_list[j].ul_cqi = 255;
|
||||
AssertFatal(mac->nr_ue_emul_l1.harq[crc_ind->crc_list[j].harq_id].active_ul_harq_sfn_slot == -1,
|
||||
"We did not send an active CRC when we should have!\n");
|
||||
mac->nr_ue_emul_l1.harq[crc_ind->crc_list[j].harq_id].active_ul_harq_sfn_slot = NFAPI_SFNSLOT2HEX(crc_ind->sfn, crc_ind->slot);
|
||||
LOG_D(NR_MAC, "This is sched sfn/sl [%d %d] and crc sfn/sl [%d %d] with mcs_index in ul_cqi -> %d\n",
|
||||
scheduled_response->frame, scheduled_response->slot, crc_ind->sfn, crc_ind->slot,pusch_config_pdu->mcs_index);
|
||||
}
|
||||
|
||||
if (!put_queue(&nr_rx_ind_queue, rx_ind))
|
||||
@@ -150,28 +208,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
LOG_I(NR_MAC, "Unknown ul_config->pdu_type %d\n", pdu_type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
scheduled_response->ul_config->number_pdus = 0;
|
||||
}
|
||||
|
||||
if (scheduled_response->dl_config != NULL)
|
||||
{
|
||||
fapi_nr_dl_config_request_t *dl_config = scheduled_response->dl_config;
|
||||
AssertFatal(dl_config->number_pdus < sizeof(dl_config->dl_config_list) / sizeof(dl_config->dl_config_list[0]),
|
||||
"Too many dl_config pdus %d", dl_config->number_pdus);
|
||||
for (int i = 0; i < dl_config->number_pdus; ++i)
|
||||
{
|
||||
LOG_D(PHY, "In %s: processing %s PDU of %d total DL PDUs (dl_config %p) \n",
|
||||
__FUNCTION__, dl_pdu_type[dl_config->dl_config_list[i].pdu_type - 1], dl_config->number_pdus, dl_config);
|
||||
|
||||
uint8_t pdu_type = dl_config->dl_config_list[i].pdu_type;
|
||||
switch (pdu_type)
|
||||
{
|
||||
case (FAPI_NR_DL_CONFIG_TYPE_DLSCH):
|
||||
case FAPI_NR_UL_CONFIG_TYPE_PUCCH:
|
||||
{
|
||||
nfapi_nr_uci_indication_t *uci_ind = CALLOC(1, sizeof(*uci_ind));
|
||||
uci_ind->header.message_id = NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION;
|
||||
@@ -181,35 +218,70 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response
|
||||
uci_ind->uci_list = CALLOC(uci_ind->num_ucis, sizeof(*uci_ind->uci_list));
|
||||
for (int j = 0; j < uci_ind->num_ucis; j++)
|
||||
{
|
||||
nfapi_nr_uci_pucch_pdu_format_0_1_t *pdu_0_1 = &uci_ind->uci_list[j].pucch_pdu_format_0_1;
|
||||
uci_ind->uci_list[j].pdu_type = NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE;
|
||||
uci_ind->uci_list[j].pdu_size = sizeof(nfapi_nr_uci_pucch_pdu_format_0_1_t);
|
||||
memset(pdu_0_1, 0, sizeof(*pdu_0_1));
|
||||
pdu_0_1->handle = 0;
|
||||
pdu_0_1->rnti = dl_config->dl_config_list[i].dlsch_config_pdu.rnti;
|
||||
pdu_0_1->pucch_format = 1;
|
||||
pdu_0_1->ul_cqi = 255;
|
||||
pdu_0_1->timing_advance = 0;
|
||||
pdu_0_1->rssi = 0;
|
||||
LOG_D(NR_MAC, "ul_config->ul_config_list[%d].pucch_config_pdu.n_bit = %d\n", i, ul_config->ul_config_list[i].pucch_config_pdu.n_bit);
|
||||
if (ul_config->ul_config_list[i].pucch_config_pdu.n_bit > 3 && mac->nr_ue_emul_l1.num_csi_reports > 0)
|
||||
{
|
||||
uci_ind->uci_list[j].pdu_type = NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE;
|
||||
uci_ind->uci_list[j].pdu_size = sizeof(nfapi_nr_uci_pucch_pdu_format_2_3_4_t);
|
||||
nfapi_nr_uci_pucch_pdu_format_2_3_4_t *pdu_2_3_4 = &uci_ind->uci_list[j].pucch_pdu_format_2_3_4;
|
||||
fill_uci_2_3_4(pdu_2_3_4, &ul_config->ul_config_list[i].pucch_config_pdu);
|
||||
}
|
||||
else
|
||||
{
|
||||
nfapi_nr_uci_pucch_pdu_format_0_1_t *pdu_0_1 = &uci_ind->uci_list[j].pucch_pdu_format_0_1;
|
||||
uci_ind->uci_list[j].pdu_type = NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE;
|
||||
uci_ind->uci_list[j].pdu_size = sizeof(nfapi_nr_uci_pucch_pdu_format_0_1_t);
|
||||
memset(pdu_0_1, 0, sizeof(*pdu_0_1));
|
||||
pdu_0_1->handle = 0;
|
||||
pdu_0_1->rnti = ul_config->ul_config_list[i].pucch_config_pdu.rnti;
|
||||
pdu_0_1->pucch_format = 1;
|
||||
pdu_0_1->ul_cqi = 255;
|
||||
pdu_0_1->timing_advance = 0;
|
||||
pdu_0_1->rssi = 0;
|
||||
|
||||
if (mac->nr_ue_emul_l1.num_harqs > 0) {
|
||||
int harq_index = 0;
|
||||
pdu_0_1->pduBitmap = 2; // (value->pduBitmap >> 1) & 0x01) == HARQ and (value->pduBitmap) & 0x01) == SR
|
||||
pdu_0_1->harq = CALLOC(1, sizeof(*pdu_0_1->harq));
|
||||
pdu_0_1->harq->num_harq = mac->nr_ue_emul_l1.num_harqs;
|
||||
pdu_0_1->harq->harq_confidence_level = 0;
|
||||
pdu_0_1->harq->harq_list = CALLOC(pdu_0_1->harq->num_harq, sizeof(*pdu_0_1->harq->harq_list));
|
||||
int harq_pid = -1;
|
||||
for (int k = 0; k < NR_MAX_HARQ_PROCESSES; k++)
|
||||
{
|
||||
if (mac->nr_ue_emul_l1.harq[k].active &&
|
||||
mac->nr_ue_emul_l1.harq[k].active_dl_harq_sfn == uci_ind->sfn &&
|
||||
mac->nr_ue_emul_l1.harq[k].active_dl_harq_slot == uci_ind->slot)
|
||||
{
|
||||
mac->nr_ue_emul_l1.harq[k].active = false;
|
||||
harq_pid = k;
|
||||
AssertFatal(harq_index < pdu_0_1->harq->num_harq, "Invalid harq_index %d\n", harq_index);
|
||||
pdu_0_1->harq->harq_list[harq_index].harq_value = !mac->dl_harq_info[k].ack;
|
||||
harq_index++;
|
||||
}
|
||||
}
|
||||
AssertFatal(harq_pid != -1, "No active harq_pid, sfn_slot = %u.%u", uci_ind->sfn, uci_ind->slot);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LOG_I(NR_PHY, "In %s: Filled queue uci_ind which was filled by dlconfig.\n"
|
||||
"uci_num %d, SFN/SLOT: [%d, %d]\n",
|
||||
__FUNCTION__, uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot);
|
||||
|
||||
if (!put_queue(&nr_uci_ind_queue, uci_ind))
|
||||
{
|
||||
LOG_E(NR_MAC, "Put_queue failed for uci_ind\n");
|
||||
free(uci_ind->uci_list);
|
||||
free(uci_ind);
|
||||
}
|
||||
LOG_D(NR_PHY, "Sending UCI with %d PDUs in sfn.slot %d/%d\n",
|
||||
uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot);
|
||||
NR_UL_IND_t ul_info = {
|
||||
.uci_ind = *uci_ind,
|
||||
};
|
||||
send_nsa_standalone_msg(&ul_info, uci_ind->header.message_id);
|
||||
free_uci_inds(uci_ind);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
LOG_W(NR_MAC, "Unknown ul_config->pdu_type %d\n", pdu_type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
dl_config->number_pdus = 0;
|
||||
scheduled_response->ul_config->number_pdus = 0;
|
||||
}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1404,9 +1404,11 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
|
||||
if (slot_ssb) {
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_PBCH, VCD_FUNCTION_IN);
|
||||
LOG_D(PHY," ------ PBCH ChannelComp/LLR: frame.slot %d.%d ------ \n", frame_rx%1024, nr_slot_rx);
|
||||
const int estimateSz=7*2*sizeof(int)*fp->ofdm_symbol_size;
|
||||
|
||||
const int estimateSz = fp->symbols_per_slot * fp->ofdm_symbol_size;
|
||||
__attribute__ ((aligned(32))) struct complex16 dl_ch_estimates[fp->nb_antennas_rx][estimateSz];
|
||||
__attribute__ ((aligned(32))) struct complex16 dl_ch_estimates_time[fp->nb_antennas_rx][estimateSz];
|
||||
__attribute__ ((aligned(32))) struct complex16 dl_ch_estimates_time[fp->nb_antennas_rx][fp->ofdm_symbol_size];
|
||||
|
||||
for (int i=1; i<4; i++) {
|
||||
|
||||
nr_slot_fep(ue,
|
||||
@@ -1414,7 +1416,6 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
|
||||
(ue->symbol_offset+i)%(fp->symbols_per_slot),
|
||||
nr_slot_rx);
|
||||
|
||||
|
||||
start_meas(&ue->dlsch_channel_estimation_stats);
|
||||
nr_pbch_channel_estimation(ue, estimateSz, dl_ch_estimates, dl_ch_estimates_time,proc,gNB_id,nr_slot_rx,(ue->symbol_offset+i)%(fp->symbols_per_slot),i-1,(fp->ssb_index)&7,fp->half_frame_bit);
|
||||
stop_meas(&ue->dlsch_channel_estimation_stats);
|
||||
@@ -1432,7 +1433,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
|
||||
nr_adjust_synch_ue(fp,
|
||||
ue,
|
||||
gNB_id,
|
||||
estimateSz, dl_ch_estimates_time,
|
||||
fp->ofdm_symbol_size,
|
||||
dl_ch_estimates_time,
|
||||
frame_rx,
|
||||
nr_slot_rx,
|
||||
0,
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
|
||||
16.000000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0
|
||||
16.100000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0
|
||||
16.200000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0
|
||||
16.300000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0
|
||||
16.400000;27;15840;0.704000;4999;5002;0;0;0;0;0;0;0
|
||||
16.500000;27;15840;0.704000;4981;5002;0;0;0;0;0;0;0
|
||||
16.600000;27;15840;0.704000;4887;5002;0;0;0;0;0;0;0
|
||||
16.700000;27;15840;0.704000;4688;5002;0;0;0;0;0;0;0
|
||||
16.800000;27;15840;0.704000;4176;5002;0;0;0;0;0;0;0
|
||||
16.900000;27;15840;0.704000;3340;5002;0;0;0;0;0;0;0
|
||||
17.000000;27;15840;0.704000;2386;5002;0;0;0;0;0;0;0
|
||||
17.100000;27;15840;0.704000;1510;5002;0;0;0;0;0;0;0
|
||||
17.200000;27;15840;0.704000;1000;5552;0;0;0;0;0;0;0
|
||||
17.300000;27;15840;0.704000;926;10000;0;0;0;0;0;0;0
|
||||
17.400000;27;15840;0.704000;516;10000;0;0;0;0;0;0;0
|
||||
17.500000;27;15840;0.704000;287;10000;0;0;0;0;0;0;0
|
||||
17.600000;27;15840;0.704000;198;10000;0;0;0;0;0;0;0
|
||||
17.700000;27;15840;0.704000;135;10000;0;0;0;0;0;0;0
|
||||
17.800000;27;15840;0.704000;102;10000;0;0;0;0;0;0;0
|
||||
17.900000;27;15840;0.704000;94;10000;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,62 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
-4;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-3.9;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-3.8;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-3.7;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-3.6;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-3.5;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-3.4;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-3.3;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-3.2;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-3.1;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-3;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-2.9;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-2.8;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-2.7;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-2.6;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-2.5;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-2.4;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-2.3;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-2.2;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-2.1;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-2;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
|
||||
-1.9;0;1864;0.2344;1499;1500;0;0;0;0;0;0;0
|
||||
-1.8;0;1864;0.2344;1499;1500;0;0;0;0;0;0;0
|
||||
-1.7;0;1864;0.2344;1498;1500;0;0;0;0;0;0;0
|
||||
-1.6;0;1864;0.2344;1498;1500;0;0;0;0;0;0;0
|
||||
-1.5;0;1864;0.2344;1497;1500;0;0;0;0;0;0;0
|
||||
-1.4;0;1864;0.2344;1445;1500;0;0;0;0;0;0;0
|
||||
-1.3;0;1864;0.2344;1394;1500;0;0;0;0;0;0;0
|
||||
-1.2;0;1864;0.2344;1346;1500;0;0;0;0;0;0;0
|
||||
-1.1;0;1864;0.2344;1299;1500;0;0;0;0;0;0;0
|
||||
-1;0;1864;0.2344;1253;1500;0;0;0;0;0;0;0
|
||||
-0.9;0;1864;0.2344;980;1500;0;0;0;0;0;0;0
|
||||
-0.8;0;1864;0.2344;767;1500;0;0;0;0;0;0;0
|
||||
-0.7;0;1864;0.2344;600;1500;0;0;0;0;0;0;0
|
||||
-0.6;0;1864;0.2344;469;1500;0;0;0;0;0;0;0
|
||||
-0.5;0;1864;0.2344;367;1500;0;0;0;0;0;0;0
|
||||
-0.4;0;1864;0.2344;215;1500;0;0;0;0;0;0;0
|
||||
-0.3;0;1864;0.2344;126;1500;0;0;0;0;0;0;0
|
||||
-0.2;0;1864;0.2344;74;1500;0;0;0;0;0;0;0
|
||||
-0.1;0;1864;0.2344;43;1500;0;0;0;0;0;0;0
|
||||
0;0;1864;0.2344;26;1500;0;0;0;0;0;0;0
|
||||
0.1;0;1864;0.2344;12;1500;0;0;0;0;0;0;0
|
||||
0.2;0;1864;0.2344;5;1500;0;0;0;0;0;0;0
|
||||
0.3;0;1864;0.2344;2;1500;0;0;0;0;0;0;0
|
||||
0.4;0;1864;0.2344;1;1500;0;0;0;0;0;0;0
|
||||
0.5;0;1864;0.2344;1;1500;0;0;0;0;0;0;0
|
||||
0.6;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
|
||||
0.7;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
|
||||
0.8;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
|
||||
0.9;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
|
||||
1;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
|
||||
1.1;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
|
||||
1.2;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
|
||||
1.3;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
|
||||
1.4;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
|
||||
1.5;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
|
||||
1.6;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
|
||||
1.7;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
|
||||
1.8;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
|
||||
1.9;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
|
||||
2;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,92 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
3;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
3.1;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
3.2;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
3.3;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
3.4;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
3.5;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
3.6;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
3.7;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
3.8;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
3.9;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
4;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
4.1;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
4.2;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
4.3;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
4.4;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
4.5;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
4.6;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
4.7;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
4.8;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
4.9;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
5;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
|
||||
5.1;10;10504;1.3281;1454;1500;0;0;0;0;0;0;0
|
||||
5.2;10;10504;1.3281;1410;1500;0;0;0;0;0;0;0
|
||||
5.3;10;10504;1.3281;1367;1500;0;0;0;0;0;0;0
|
||||
5.4;10;10504;1.3281;1325;1500;0;0;0;0;0;0;0
|
||||
5.5;10;10504;1.3281;1285;1500;0;0;0;0;0;0;0
|
||||
5.6;10;10504;1.3281;1026;1500;0;0;0;0;0;0;0
|
||||
5.7;10;10504;1.3281;819;1500;0;0;0;0;0;0;0
|
||||
5.8;10;10504;1.3281;654;1500;0;0;0;0;0;0;0
|
||||
5.9;10;10504;1.3281;522;1500;0;0;0;0;0;0;0
|
||||
6;10;10504;1.3281;417;1500;0;0;0;0;0;0;0
|
||||
6.1;10;10504;1.3281;309;1500;0;0;0;0;0;0;0
|
||||
6.2;10;10504;1.3281;229;1500;0;0;0;0;0;0;0
|
||||
6.3;10;10504;1.3281;169;1500;0;0;0;0;0;0;0
|
||||
6.4;10;10504;1.3281;125;1500;0;0;0;0;0;0;0
|
||||
6.5;10;10504;1.3281;93;1500;0;0;0;0;0;0;0
|
||||
6.6;10;10504;1.3281;64;1500;0;0;0;0;0;0;0
|
||||
6.7;10;10504;1.3281;44;1500;0;0;0;0;0;0;0
|
||||
6.8;10;10504;1.3281;31;1500;0;0;0;0;0;0;0
|
||||
6.9;10;10504;1.3281;21;1500;0;0;0;0;0;0;0
|
||||
7;10;10504;1.3281;15;1500;0;0;0;0;0;0;0
|
||||
7.1;10;10504;1.3281;7;1500;0;0;0;0;0;0;0
|
||||
7.2;10;10504;1.3281;3;1500;0;0;0;0;0;0;0
|
||||
7.3;10;10504;1.3281;1;1500;0;0;0;0;0;0;0
|
||||
7.4;10;10504;1.3281;1;1500;0;0;0;0;0;0;0
|
||||
7.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
7.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
7.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
7.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
7.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
8.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
8.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
8.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
8.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
8.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
8.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
8.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
8.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
8.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
9.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
9.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
9.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
9.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
9.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
9.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
9.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
9.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
9.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
10;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
10.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
10.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
10.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
10.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
10.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
10.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
10.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
10.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
10.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
11;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
11.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
11.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
11.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
11.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
11.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
11.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
11.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
11.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
11.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
12;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,92 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
3.1;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
3.2;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
3.3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
3.4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
3.5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
3.6;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
3.7;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
3.8;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
3.9;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
4.1;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
4.2;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
4.3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
4.4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
4.5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
4.6;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
4.7;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
4.8;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
4.9;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
5.1;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
5.2;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
5.3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
5.4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
5.5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
|
||||
5.6;11;11784;1.4766;1494;1500;0;0;0;0;0;0;0
|
||||
5.7;11;11784;1.4766;1489;1500;0;0;0;0;0;0;0
|
||||
5.8;11;11784;1.4766;1483;1500;0;0;0;0;0;0;0
|
||||
5.9;11;11784;1.4766;1477;1500;0;0;0;0;0;0;0
|
||||
6;11;11784;1.4766;1472;1500;0;0;0;0;0;0;0
|
||||
6.1;11;11784;1.4766;1367;1500;0;0;0;0;0;0;0
|
||||
6.2;11;11784;1.4766;1269;1500;0;0;0;0;0;0;0
|
||||
6.3;11;11784;1.4766;1179;1500;0;0;0;0;0;0;0
|
||||
6.4;11;11784;1.4766;1095;1500;0;0;0;0;0;0;0
|
||||
6.5;11;11784;1.4766;1016;1500;0;0;0;0;0;0;0
|
||||
6.6;11;11784;1.4766;762;1500;0;0;0;0;0;0;0
|
||||
6.7;11;11784;1.4766;571;1500;0;0;0;0;0;0;0
|
||||
6.8;11;11784;1.4766;428;1500;0;0;0;0;0;0;0
|
||||
6.9;11;11784;1.4766;320;1500;0;0;0;0;0;0;0
|
||||
7;11;11784;1.4766;240;1500;0;0;0;0;0;0;0
|
||||
7.1;11;11784;1.4766;169;1500;0;0;0;0;0;0;0
|
||||
7.2;11;11784;1.4766;119;1500;0;0;0;0;0;0;0
|
||||
7.3;11;11784;1.4766;83;1500;0;0;0;0;0;0;0
|
||||
7.4;11;11784;1.4766;59;1500;0;0;0;0;0;0;0
|
||||
7.5;11;11784;1.4766;41;1500;0;0;0;0;0;0;0
|
||||
7.6;11;11784;1.4766;24;1500;0;0;0;0;0;0;0
|
||||
7.7;11;11784;1.4766;14;1500;0;0;0;0;0;0;0
|
||||
7.8;11;11784;1.4766;8;1500;0;0;0;0;0;0;0
|
||||
7.9;11;11784;1.4766;5;1500;0;0;0;0;0;0;0
|
||||
8;11;11784;1.4766;3;1500;0;0;0;0;0;0;0
|
||||
8.1;11;11784;1.4766;1;1500;0;0;0;0;0;0;0
|
||||
8.2;11;11784;1.4766;1;1500;0;0;0;0;0;0;0
|
||||
8.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
8.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
8.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
8.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
8.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
8.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
8.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
9.1;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
9.2;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
9.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
9.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
9.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
9.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
9.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
9.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
9.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
10;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
10.1;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
10.2;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
10.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
10.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
10.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
10.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
10.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
10.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
10.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
11;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
11.1;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
11.2;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
11.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
11.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
11.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
11.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
11.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
11.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
11.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
12;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,92 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
3.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
3.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
3.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
3.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
3.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
3.6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
3.7;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
3.8;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
3.9;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
4.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
4.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
4.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
4.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
4.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
4.6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
4.7;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
4.8;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
4.9;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
5.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
5.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
5.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
5.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
5.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
5.6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
5.7;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
5.8;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
5.9;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
6.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
6.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
6.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
6.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
6.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
|
||||
6.6;12;13576;1.6953;1498;1500;0;0;0;0;0;0;0
|
||||
6.7;12;13576;1.6953;1495;1500;0;0;0;0;0;0;0
|
||||
6.8;12;13576;1.6953;1493;1500;0;0;0;0;0;0;0
|
||||
6.9;12;13576;1.6953;1491;1500;0;0;0;0;0;0;0
|
||||
7;12;13576;1.6953;1488;1500;0;0;0;0;0;0;0
|
||||
7.1;12;13576;1.6953;1357;1500;0;0;0;0;0;0;0
|
||||
7.2;12;13576;1.6953;1238;1500;0;0;0;0;0;0;0
|
||||
7.3;12;13576;1.6953;1129;1500;0;0;0;0;0;0;0
|
||||
7.4;12;13576;1.6953;1029;1500;0;0;0;0;0;0;0
|
||||
7.5;12;13576;1.6953;939;1500;0;0;0;0;0;0;0
|
||||
7.6;12;13576;1.6953;632;1500;0;0;0;0;0;0;0
|
||||
7.7;12;13576;1.6953;425;1500;0;0;0;0;0;0;0
|
||||
7.8;12;13576;1.6953;286;1500;0;0;0;0;0;0;0
|
||||
7.9;12;13576;1.6953;193;1500;0;0;0;0;0;0;0
|
||||
8;12;13576;1.6953;130;1500;0;0;0;0;0;0;0
|
||||
8.1;12;13576;1.6953;91;1500;0;0;0;0;0;0;0
|
||||
8.2;12;13576;1.6953;64;1500;0;0;0;0;0;0;0
|
||||
8.3;12;13576;1.6953;45;1500;0;0;0;0;0;0;0
|
||||
8.4;12;13576;1.6953;32;1500;0;0;0;0;0;0;0
|
||||
8.5;12;13576;1.6953;23;1500;0;0;0;0;0;0;0
|
||||
8.6;12;13576;1.6953;12;1500;0;0;0;0;0;0;0
|
||||
8.7;12;13576;1.6953;6;1500;0;0;0;0;0;0;0
|
||||
8.8;12;13576;1.6953;3;1500;0;0;0;0;0;0;0
|
||||
8.9;12;13576;1.6953;2;1500;0;0;0;0;0;0;0
|
||||
9;12;13576;1.6953;1;1500;0;0;0;0;0;0;0
|
||||
9.1;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
9.2;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
9.3;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
9.4;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
9.5;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
9.6;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
9.7;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
9.8;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
9.9;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
10;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
10.1;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
10.2;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
10.3;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
10.4;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
10.5;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
10.6;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
10.7;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
10.8;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
10.9;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
11;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
11.1;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
11.2;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
11.3;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
11.4;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
11.5;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
11.6;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
11.7;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
11.8;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
11.9;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
12;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,72 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
7;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0
|
||||
7.1;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0
|
||||
7.2;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0
|
||||
7.3;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0
|
||||
7.4;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0
|
||||
7.5;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0
|
||||
7.6;13;15112;1.9141;1444;1500;0;0;0;0;0;0;0
|
||||
7.7;13;15112;1.9141;1391;1500;0;0;0;0;0;0;0
|
||||
7.8;13;15112;1.9141;1340;1500;0;0;0;0;0;0;0
|
||||
7.9;13;15112;1.9141;1290;1500;0;0;0;0;0;0;0
|
||||
8;13;15112;1.9141;1243;1500;0;0;0;0;0;0;0
|
||||
8.1;13;15112;1.9141;878;1500;0;0;0;0;0;0;0
|
||||
8.2;13;15112;1.9141;620;1500;0;0;0;0;0;0;0
|
||||
8.3;13;15112;1.9141;438;1500;0;0;0;0;0;0;0
|
||||
8.4;13;15112;1.9141;309;1500;0;0;0;0;0;0;0
|
||||
8.5;13;15112;1.9141;219;1500;0;0;0;0;0;0;0
|
||||
8.6;13;15112;1.9141;173;1500;0;0;0;0;0;0;0
|
||||
8.7;13;15112;1.9141;137;1500;0;0;0;0;0;0;0
|
||||
8.8;13;15112;1.9141;109;1500;0;0;0;0;0;0;0
|
||||
8.9;13;15112;1.9141;86;1500;0;0;0;0;0;0;0
|
||||
9;13;15112;1.9141;68;1500;0;0;0;0;0;0;0
|
||||
9.1;13;15112;1.9141;47;1500;0;0;0;0;0;0;0
|
||||
9.2;13;15112;1.9141;33;1500;0;0;0;0;0;0;0
|
||||
9.3;13;15112;1.9141;23;1500;0;0;0;0;0;0;0
|
||||
9.4;13;15112;1.9141;16;1500;0;0;0;0;0;0;0
|
||||
9.5;13;15112;1.9141;11;1500;0;0;0;0;0;0;0
|
||||
9.6;13;15112;1.9141;5;1500;0;0;0;0;0;0;0
|
||||
9.7;13;15112;1.9141;2;1500;0;0;0;0;0;0;0
|
||||
9.8;13;15112;1.9141;1;1500;0;0;0;0;0;0;0
|
||||
9.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
10;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
10.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
10.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
10.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
10.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
10.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
10.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
10.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
10.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
10.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
11;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
11.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
11.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
11.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
11.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
11.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
11.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
11.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
11.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
11.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
12;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
12.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
12.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
12.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
12.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
12.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
12.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
12.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
12.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
12.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
13;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
13.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
13.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
13.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
13.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
13.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
13.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
13.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
13.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
13.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
14;13;15112;1.9141;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,72 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
7;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
7.1;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
7.2;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
7.3;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
7.4;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
7.5;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
7.6;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
7.7;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
7.8;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
7.9;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
8;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
8.1;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
8.2;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
8.3;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
8.4;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
8.5;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0
|
||||
8.6;14;17424;2.1602;1497;1500;0;0;0;0;0;0;0
|
||||
8.7;14;17424;2.1602;1493;1500;0;0;0;0;0;0;0
|
||||
8.8;14;17424;2.1602;1490;1500;0;0;0;0;0;0;0
|
||||
8.9;14;17424;2.1602;1487;1500;0;0;0;0;0;0;0
|
||||
9;14;17424;2.1602;1484;1500;0;0;0;0;0;0;0
|
||||
9.1;14;17424;2.1602;1291;1500;0;0;0;0;0;0;0
|
||||
9.2;14;17424;2.1602;1123;1500;0;0;0;0;0;0;0
|
||||
9.3;14;17424;2.1602;977;1500;0;0;0;0;0;0;0
|
||||
9.4;14;17424;2.1602;850;1500;0;0;0;0;0;0;0
|
||||
9.5;14;17424;2.1602;739;1500;0;0;0;0;0;0;0
|
||||
9.6;14;17424;2.1602;508;1500;0;0;0;0;0;0;0
|
||||
9.7;14;17424;2.1602;349;1500;0;0;0;0;0;0;0
|
||||
9.8;14;17424;2.1602;239;1500;0;0;0;0;0;0;0
|
||||
9.9;14;17424;2.1602;164;1500;0;0;0;0;0;0;0
|
||||
10;14;17424;2.1602;113;1500;0;0;0;0;0;0;0
|
||||
10.1;14;17424;2.1602;85;1500;0;0;0;0;0;0;0
|
||||
10.2;14;17424;2.1602;63;1500;0;0;0;0;0;0;0
|
||||
10.3;14;17424;2.1602;47;1500;0;0;0;0;0;0;0
|
||||
10.4;14;17424;2.1602;35;1500;0;0;0;0;0;0;0
|
||||
10.5;14;17424;2.1602;27;1500;0;0;0;0;0;0;0
|
||||
10.6;14;17424;2.1602;12;1500;0;0;0;0;0;0;0
|
||||
10.7;14;17424;2.1602;6;1500;0;0;0;0;0;0;0
|
||||
10.8;14;17424;2.1602;3;1500;0;0;0;0;0;0;0
|
||||
10.9;14;17424;2.1602;1;1500;0;0;0;0;0;0;0
|
||||
11;14;17424;2.1602;1;1500;0;0;0;0;0;0;0
|
||||
11.1;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
11.2;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
11.3;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
11.4;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
11.5;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
11.6;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
11.7;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
11.8;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
11.9;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
12;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
12.1;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
12.2;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
12.3;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
12.4;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
12.5;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
12.6;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
12.7;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
12.8;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
12.9;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
13;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
13.1;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
13.2;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
13.3;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
13.4;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
13.5;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
13.6;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
13.7;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
13.8;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
13.9;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
14;14;17424;2.1602;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,72 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
7;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
7.1;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
7.2;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
7.3;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
7.4;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
7.5;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
7.6;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
7.7;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
7.8;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
7.9;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
8;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
8.1;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
8.2;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
8.3;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
8.4;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
8.5;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
8.6;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
8.7;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
8.8;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
8.9;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
9;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
9.1;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0
|
||||
9.2;15;18960;2.4063;1499;1500;0;0;0;0;0;0;0
|
||||
9.3;15;18960;2.4063;1499;1500;0;0;0;0;0;0;0
|
||||
9.4;15;18960;2.4063;1499;1500;0;0;0;0;0;0;0
|
||||
9.5;15;18960;2.4063;1498;1500;0;0;0;0;0;0;0
|
||||
9.6;15;18960;2.4063;1377;1500;0;0;0;0;0;0;0
|
||||
9.7;15;18960;2.4063;1265;1500;0;0;0;0;0;0;0
|
||||
9.8;15;18960;2.4063;1163;1500;0;0;0;0;0;0;0
|
||||
9.9;15;18960;2.4063;1069;1500;0;0;0;0;0;0;0
|
||||
10;15;18960;2.4063;982;1500;0;0;0;0;0;0;0
|
||||
10.1;15;18960;2.4063;664;1500;0;0;0;0;0;0;0
|
||||
10.2;15;18960;2.4063;450;1500;0;0;0;0;0;0;0
|
||||
10.3;15;18960;2.4063;304;1500;0;0;0;0;0;0;0
|
||||
10.4;15;18960;2.4063;206;1500;0;0;0;0;0;0;0
|
||||
10.5;15;18960;2.4063;139;1500;0;0;0;0;0;0;0
|
||||
10.6;15;18960;2.4063;113;1500;0;0;0;0;0;0;0
|
||||
10.7;15;18960;2.4063;92;1500;0;0;0;0;0;0;0
|
||||
10.8;15;18960;2.4063;75;1500;0;0;0;0;0;0;0
|
||||
10.9;15;18960;2.4063;61;1500;0;0;0;0;0;0;0
|
||||
11;15;18960;2.4063;50;1500;0;0;0;0;0;0;0
|
||||
11.1;15;18960;2.4063;29;1500;0;0;0;0;0;0;0
|
||||
11.2;15;18960;2.4063;17;1500;0;0;0;0;0;0;0
|
||||
11.3;15;18960;2.4063;10;1500;0;0;0;0;0;0;0
|
||||
11.4;15;18960;2.4063;6;1500;0;0;0;0;0;0;0
|
||||
11.5;15;18960;2.4063;3;1500;0;0;0;0;0;0;0
|
||||
11.6;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
11.7;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
11.8;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
11.9;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
12;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
12.1;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
12.2;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
12.3;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
12.4;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
12.5;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
12.6;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
12.7;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
12.8;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
12.9;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
13;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
13.1;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
13.2;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
13.3;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
13.4;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
13.5;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
13.6;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
13.7;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
13.8;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
13.9;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
14;15;18960;2.4063;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,72 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
7.1;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
7.2;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
7.3;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
7.4;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
7.5;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
7.6;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
7.7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
7.8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
7.9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
8.1;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
8.2;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
8.3;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
8.4;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
8.5;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
8.6;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
8.7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
8.8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
8.9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
9.1;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
9.2;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
9.3;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
9.4;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
9.5;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
9.6;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
9.7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
9.8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
9.9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
10;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0
|
||||
10.1;16;20496;2.5703;1424;1500;0;0;0;0;0;0;0
|
||||
10.2;16;20496;2.5703;1352;1500;0;0;0;0;0;0;0
|
||||
10.3;16;20496;2.5703;1283;1500;0;0;0;0;0;0;0
|
||||
10.4;16;20496;2.5703;1218;1500;0;0;0;0;0;0;0
|
||||
10.5;16;20496;2.5703;1157;1500;0;0;0;0;0;0;0
|
||||
10.6;16;20496;2.5703;775;1500;0;0;0;0;0;0;0
|
||||
10.7;16;20496;2.5703;519;1500;0;0;0;0;0;0;0
|
||||
10.8;16;20496;2.5703;348;1500;0;0;0;0;0;0;0
|
||||
10.9;16;20496;2.5703;233;1500;0;0;0;0;0;0;0
|
||||
11;16;20496;2.5703;156;1500;0;0;0;0;0;0;0
|
||||
11.1;16;20496;2.5703;132;1500;0;0;0;0;0;0;0
|
||||
11.2;16;20496;2.5703;111;1500;0;0;0;0;0;0;0
|
||||
11.3;16;20496;2.5703;94;1500;0;0;0;0;0;0;0
|
||||
11.4;16;20496;2.5703;79;1500;0;0;0;0;0;0;0
|
||||
11.5;16;20496;2.5703;67;1500;0;0;0;0;0;0;0
|
||||
11.6;16;20496;2.5703;44;1500;0;0;0;0;0;0;0
|
||||
11.7;16;20496;2.5703;29;1500;0;0;0;0;0;0;0
|
||||
11.8;16;20496;2.5703;19;1500;0;0;0;0;0;0;0
|
||||
11.9;16;20496;2.5703;12;1500;0;0;0;0;0;0;0
|
||||
12;16;20496;2.5703;8;1500;0;0;0;0;0;0;0
|
||||
12.1;16;20496;2.5703;4;1500;0;0;0;0;0;0;0
|
||||
12.2;16;20496;2.5703;2;1500;0;0;0;0;0;0;0
|
||||
12.3;16;20496;2.5703;1;1500;0;0;0;0;0;0;0
|
||||
12.4;16;20496;2.5703;1;1500;0;0;0;0;0;0;0
|
||||
12.5;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
12.6;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
12.7;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
12.8;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
12.9;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
13;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
13.1;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
13.2;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
13.3;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
13.4;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
13.5;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
13.6;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
13.7;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
13.8;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
13.9;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
14;16;20496;2.5703;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,72 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
10;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0
|
||||
10.1;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0
|
||||
10.2;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0
|
||||
10.3;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0
|
||||
10.4;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0
|
||||
10.5;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0
|
||||
10.6;17;20496;2.5664;1498;1500;0;0;0;0;0;0;0
|
||||
10.7;17;20496;2.5664;1496;1500;0;0;0;0;0;0;0
|
||||
10.8;17;20496;2.5664;1494;1500;0;0;0;0;0;0;0
|
||||
10.9;17;20496;2.5664;1493;1500;0;0;0;0;0;0;0
|
||||
11;17;20496;2.5664;1491;1500;0;0;0;0;0;0;0
|
||||
11.1;17;20496;2.5664;1336;1500;0;0;0;0;0;0;0
|
||||
11.2;17;20496;2.5664;1197;1500;0;0;0;0;0;0;0
|
||||
11.3;17;20496;2.5664;1072;1500;0;0;0;0;0;0;0
|
||||
11.4;17;20496;2.5664;961;1500;0;0;0;0;0;0;0
|
||||
11.5;17;20496;2.5664;861;1500;0;0;0;0;0;0;0
|
||||
11.6;17;20496;2.5664;603;1500;0;0;0;0;0;0;0
|
||||
11.7;17;20496;2.5664;423;1500;0;0;0;0;0;0;0
|
||||
11.8;17;20496;2.5664;296;1500;0;0;0;0;0;0;0
|
||||
11.9;17;20496;2.5664;208;1500;0;0;0;0;0;0;0
|
||||
12;17;20496;2.5664;146;1500;0;0;0;0;0;0;0
|
||||
12.1;17;20496;2.5664;125;1500;0;0;0;0;0;0;0
|
||||
12.2;17;20496;2.5664;107;1500;0;0;0;0;0;0;0
|
||||
12.3;17;20496;2.5664;92;1500;0;0;0;0;0;0;0
|
||||
12.4;17;20496;2.5664;79;1500;0;0;0;0;0;0;0
|
||||
12.5;17;20496;2.5664;68;1500;0;0;0;0;0;0;0
|
||||
12.6;17;20496;2.5664;50;1500;0;0;0;0;0;0;0
|
||||
12.7;17;20496;2.5664;37;1500;0;0;0;0;0;0;0
|
||||
12.8;17;20496;2.5664;28;1500;0;0;0;0;0;0;0
|
||||
12.9;17;20496;2.5664;20;1500;0;0;0;0;0;0;0
|
||||
13;17;20496;2.5664;15;1500;0;0;0;0;0;0;0
|
||||
13.1;17;20496;2.5664;9;1500;0;0;0;0;0;0;0
|
||||
13.2;17;20496;2.5664;5;1500;0;0;0;0;0;0;0
|
||||
13.3;17;20496;2.5664;3;1500;0;0;0;0;0;0;0
|
||||
13.4;17;20496;2.5664;2;1500;0;0;0;0;0;0;0
|
||||
13.5;17;20496;2.5664;1;1500;0;0;0;0;0;0;0
|
||||
13.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
13.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
13.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
13.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
14;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
14.1;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
14.2;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
14.3;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
14.4;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
14.5;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
14.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
14.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
14.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
14.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
15;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
15.1;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
15.2;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
15.3;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
15.4;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
15.5;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
15.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
15.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
15.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
15.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
16;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
16.1;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
16.2;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
16.3;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
16.4;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
16.5;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
16.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
16.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
16.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
16.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
17;17;20496;2.5664;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,72 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
10;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0
|
||||
10.1;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0
|
||||
10.2;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0
|
||||
10.3;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0
|
||||
10.4;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0
|
||||
10.5;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0
|
||||
10.6;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0
|
||||
10.7;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0
|
||||
10.8;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0
|
||||
10.9;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0
|
||||
11;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0
|
||||
11.1;18;21504;2.7305;1499;1500;0;0;0;0;0;0;0
|
||||
11.2;18;21504;2.7305;1499;1500;0;0;0;0;0;0;0
|
||||
11.3;18;21504;2.7305;1498;1500;0;0;0;0;0;0;0
|
||||
11.4;18;21504;2.7305;1498;1500;0;0;0;0;0;0;0
|
||||
11.5;18;21504;2.7305;1497;1500;0;0;0;0;0;0;0
|
||||
11.6;18;21504;2.7305;1399;1500;0;0;0;0;0;0;0
|
||||
11.7;18;21504;2.7305;1307;1500;0;0;0;0;0;0;0
|
||||
11.8;18;21504;2.7305;1221;1500;0;0;0;0;0;0;0
|
||||
11.9;18;21504;2.7305;1141;1500;0;0;0;0;0;0;0
|
||||
12;18;21504;2.7305;1066;1500;0;0;0;0;0;0;0
|
||||
12.1;18;21504;2.7305;788;1500;0;0;0;0;0;0;0
|
||||
12.2;18;21504;2.7305;582;1500;0;0;0;0;0;0;0
|
||||
12.3;18;21504;2.7305;431;1500;0;0;0;0;0;0;0
|
||||
12.4;18;21504;2.7305;318;1500;0;0;0;0;0;0;0
|
||||
12.5;18;21504;2.7305;235;1500;0;0;0;0;0;0;0
|
||||
12.6;18;21504;2.7305;185;1500;0;0;0;0;0;0;0
|
||||
12.7;18;21504;2.7305;146;1500;0;0;0;0;0;0;0
|
||||
12.8;18;21504;2.7305;115;1500;0;0;0;0;0;0;0
|
||||
12.9;18;21504;2.7305;90;1500;0;0;0;0;0;0;0
|
||||
13;18;21504;2.7305;71;1500;0;0;0;0;0;0;0
|
||||
13.1;18;21504;2.7305;50;1500;0;0;0;0;0;0;0
|
||||
13.2;18;21504;2.7305;35;1500;0;0;0;0;0;0;0
|
||||
13.3;18;21504;2.7305;25;1500;0;0;0;0;0;0;0
|
||||
13.4;18;21504;2.7305;18;1500;0;0;0;0;0;0;0
|
||||
13.5;18;21504;2.7305;12;1500;0;0;0;0;0;0;0
|
||||
13.6;18;21504;2.7305;7;1500;0;0;0;0;0;0;0
|
||||
13.7;18;21504;2.7305;3;1500;0;0;0;0;0;0;0
|
||||
13.8;18;21504;2.7305;2;1500;0;0;0;0;0;0;0
|
||||
13.9;18;21504;2.7305;1;1500;0;0;0;0;0;0;0
|
||||
14;18;21504;2.7305;1;1500;0;0;0;0;0;0;0
|
||||
14.1;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
14.2;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
14.3;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
14.4;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
14.5;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
14.6;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
14.7;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
14.8;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
14.9;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
15;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
15.1;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
15.2;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
15.3;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
15.4;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
15.5;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
15.6;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
15.7;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
15.8;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
15.9;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
16;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
16.1;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
16.2;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
16.3;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
16.4;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
16.5;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
16.6;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
16.7;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
16.8;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
16.9;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
17;18;21504;2.7305;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,72 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
10;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
10.1;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
10.2;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
10.3;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
10.4;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
10.5;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
10.6;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
10.7;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
10.8;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
10.9;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
11;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
11.1;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
11.2;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
11.3;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
11.4;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
11.5;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
11.6;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
11.7;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
11.8;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
11.9;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
12;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0
|
||||
12.1;19;24072;3.0293;1499;1500;0;0;0;0;0;0;0
|
||||
12.2;19;24072;3.0293;1499;1500;0;0;0;0;0;0;0
|
||||
12.3;19;24072;3.0293;1498;1500;0;0;0;0;0;0;0
|
||||
12.4;19;24072;3.0293;1497;1500;0;0;0;0;0;0;0
|
||||
12.5;19;24072;3.0293;1497;1500;0;0;0;0;0;0;0
|
||||
12.6;19;24072;3.0293;1389;1500;0;0;0;0;0;0;0
|
||||
12.7;19;24072;3.0293;1290;1500;0;0;0;0;0;0;0
|
||||
12.8;19;24072;3.0293;1197;1500;0;0;0;0;0;0;0
|
||||
12.9;19;24072;3.0293;1111;1500;0;0;0;0;0;0;0
|
||||
13;19;24072;3.0293;1032;1500;0;0;0;0;0;0;0
|
||||
13.1;19;24072;3.0293;746;1500;0;0;0;0;0;0;0
|
||||
13.2;19;24072;3.0293;539;1500;0;0;0;0;0;0;0
|
||||
13.3;19;24072;3.0293;390;1500;0;0;0;0;0;0;0
|
||||
13.4;19;24072;3.0293;282;1500;0;0;0;0;0;0;0
|
||||
13.5;19;24072;3.0293;204;1500;0;0;0;0;0;0;0
|
||||
13.6;19;24072;3.0293;166;1500;0;0;0;0;0;0;0
|
||||
13.7;19;24072;3.0293;135;1500;0;0;0;0;0;0;0
|
||||
13.8;19;24072;3.0293;110;1500;0;0;0;0;0;0;0
|
||||
13.9;19;24072;3.0293;89;1500;0;0;0;0;0;0;0
|
||||
14;19;24072;3.0293;73;1500;0;0;0;0;0;0;0
|
||||
14.1;19;24072;3.0293;54;1500;0;0;0;0;0;0;0
|
||||
14.2;19;24072;3.0293;41;1500;0;0;0;0;0;0;0
|
||||
14.3;19;24072;3.0293;30;1500;0;0;0;0;0;0;0
|
||||
14.4;19;24072;3.0293;23;1500;0;0;0;0;0;0;0
|
||||
14.5;19;24072;3.0293;17;1500;0;0;0;0;0;0;0
|
||||
14.6;19;24072;3.0293;9;1500;0;0;0;0;0;0;0
|
||||
14.7;19;24072;3.0293;5;1500;0;0;0;0;0;0;0
|
||||
14.8;19;24072;3.0293;3;1500;0;0;0;0;0;0;0
|
||||
14.9;19;24072;3.0293;2;1500;0;0;0;0;0;0;0
|
||||
15;19;24072;3.0293;1;1500;0;0;0;0;0;0;0
|
||||
15.1;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
15.2;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
15.3;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
15.4;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
15.5;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
15.6;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
15.7;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
15.8;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
15.9;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
16;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
16.1;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
16.2;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
16.3;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
16.4;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
16.5;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
16.6;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
16.7;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
16.8;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
16.9;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
17;19;24072;3.0293;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,27 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
-4;1;2472;0.3066;1500;1500;0;0;0;0;0;0;0
|
||||
-3.9;1;2472;0.3066;1497;1500;0;0;0;0;0;0;0
|
||||
-3.8;1;2472;0.3066;1494;1500;0;0;0;0;0;0;0
|
||||
-3.7;1;2472;0.3066;1490;1500;0;0;0;0;0;0;0
|
||||
-3.6;1;2472;0.3066;1487;1500;0;0;0;0;0;0;0
|
||||
-3.5;1;2472;0.3066;1484;1500;0;0;0;0;0;0;0
|
||||
-3.4;1;2472;0.3066;1386;1500;0;0;0;0;0;0;0
|
||||
-3.3;1;2472;0.3066;1295;1500;0;0;0;0;0;0;0
|
||||
-3.2;1;2472;0.3066;1209;1500;0;0;0;0;0;0;0
|
||||
-3.1;1;2472;0.3066;1130;1500;0;0;0;0;0;0;0
|
||||
-3;1;2472;0.3066;1055;1500;0;0;0;0;0;0;0
|
||||
-2.9;1;2472;0.3066;863;1500;0;0;0;0;0;0;0
|
||||
-2.8;1;2472;0.3066;706;1500;0;0;0;0;0;0;0
|
||||
-2.7;1;2472;0.3066;577;1500;0;0;0;0;0;0;0
|
||||
-2.6;1;2472;0.3066;472;1500;0;0;0;0;0;0;0
|
||||
-2.5;1;2472;0.3066;386;1500;0;0;0;0;0;0;0
|
||||
-2.4;1;2472;0.3066;215;1500;0;0;0;0;0;0;0
|
||||
-2.3;1;2472;0.3066;120;1500;0;0;0;0;0;0;0
|
||||
-2.2;1;2472;0.3066;67;1500;0;0;0;0;0;0;0
|
||||
-2.1;1;2472;0.3066;37;1500;0;0;0;0;0;0;0
|
||||
-2;1;2472;0.3066;21;1500;0;0;0;0;0;0;0
|
||||
-1.9;1;2472;0.3066;9;1500;0;0;0;0;0;0;0
|
||||
-1.8;1;2472;0.3066;4;1500;0;0;0;0;0;0;0
|
||||
-1.7;1;2472;0.3066;2;1500;0;0;0;0;0;0;0
|
||||
-1.6;1;2472;0.3066;1;1500;0;0;0;0;0;0;0
|
||||
-1.5;1;2472;0.3066;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,72 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
10;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
10.1;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
10.2;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
10.3;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
10.4;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
10.5;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
10.6;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
10.7;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
10.8;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
10.9;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
11;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
11.1;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
11.2;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
11.3;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
11.4;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
11.5;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
11.6;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
11.7;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
11.8;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
11.9;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
12;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
12.1;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
12.2;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
12.3;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
12.4;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
12.5;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
12.6;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
12.7;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
12.8;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
12.9;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
13;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0
|
||||
13.1;20;26632;3.3223;1499;1500;0;0;0;0;0;0;0
|
||||
13.2;20;26632;3.3223;1499;1500;0;0;0;0;0;0;0
|
||||
13.3;20;26632;3.3223;1498;1500;0;0;0;0;0;0;0
|
||||
13.4;20;26632;3.3223;1498;1500;0;0;0;0;0;0;0
|
||||
13.5;20;26632;3.3223;1497;1500;0;0;0;0;0;0;0
|
||||
13.6;20;26632;3.3223;1390;1500;0;0;0;0;0;0;0
|
||||
13.7;20;26632;3.3223;1291;1500;0;0;0;0;0;0;0
|
||||
13.8;20;26632;3.3223;1199;1500;0;0;0;0;0;0;0
|
||||
13.9;20;26632;3.3223;1113;1500;0;0;0;0;0;0;0
|
||||
14;20;26632;3.3223;1034;1500;0;0;0;0;0;0;0
|
||||
14.1;20;26632;3.3223;745;1500;0;0;0;0;0;0;0
|
||||
14.2;20;26632;3.3223;537;1500;0;0;0;0;0;0;0
|
||||
14.3;20;26632;3.3223;387;1500;0;0;0;0;0;0;0
|
||||
14.4;20;26632;3.3223;279;1500;0;0;0;0;0;0;0
|
||||
14.5;20;26632;3.3223;201;1500;0;0;0;0;0;0;0
|
||||
14.6;20;26632;3.3223;161;1500;0;0;0;0;0;0;0
|
||||
14.7;20;26632;3.3223;129;1500;0;0;0;0;0;0;0
|
||||
14.8;20;26632;3.3223;104;1500;0;0;0;0;0;0;0
|
||||
14.9;20;26632;3.3223;83;1500;0;0;0;0;0;0;0
|
||||
15;20;26632;3.3223;67;1500;0;0;0;0;0;0;0
|
||||
15.1;20;26632;3.3223;45;1500;0;0;0;0;0;0;0
|
||||
15.2;20;26632;3.3223;30;1500;0;0;0;0;0;0;0
|
||||
15.3;20;26632;3.3223;20;1500;0;0;0;0;0;0;0
|
||||
15.4;20;26632;3.3223;13;1500;0;0;0;0;0;0;0
|
||||
15.5;20;26632;3.3223;9;1500;0;0;0;0;0;0;0
|
||||
15.6;20;26632;3.3223;4;1500;0;0;0;0;0;0;0
|
||||
15.7;20;26632;3.3223;1;1500;0;0;0;0;0;0;0
|
||||
15.8;20;26632;3.3223;1;1500;0;0;0;0;0;0;0
|
||||
15.9;20;26632;3.3223;0;1500;0;0;0;0;0;0;0
|
||||
16;20;26632;3.3223;0;1500;0;0;0;0;0;0;0
|
||||
16.1;20;26632;3.3223;0;1500;0;0;0;0;0;0;0
|
||||
16.2;20;26632;3.3223;0;1500;0;0;0;0;0;0;0
|
||||
16.3;20;26632;3.3223;0;1500;0;0;0;0;0;0;0
|
||||
16.4;20;26632;3.3223;0;1500;0;0;0;0;0;0;0
|
||||
16.5;20;26632;3.3223;0;1500;0;0;0;0;0;0;0
|
||||
16.6;20;26632;3.3223;0;1500;0;0;0;0;0;0;0
|
||||
16.7;20;26632;3.3223;0;1500;0;0;0;0;0;0;0
|
||||
16.8;20;26632;3.3223;0;1500;0;0;0;0;0;0;0
|
||||
16.9;20;26632;3.3223;0;1500;0;0;0;0;0;0;0
|
||||
17;20;26632;3.3223;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,72 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
10;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
10.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
10.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
10.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
10.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
10.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
10.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
10.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
10.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
10.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
11;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
11.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
11.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
11.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
11.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
11.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
11.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
11.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
11.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
11.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
12;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
12.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
12.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
12.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
12.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
12.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
12.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
12.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
12.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
12.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
13;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
13.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
13.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
13.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
13.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
13.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
13.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
13.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
13.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
13.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
14;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0
|
||||
14.1;21;28680;3.6094;1472;1500;0;0;0;0;0;0;0
|
||||
14.2;21;28680;3.6094;1444;1500;0;0;0;0;0;0;0
|
||||
14.3;21;28680;3.6094;1417;1500;0;0;0;0;0;0;0
|
||||
14.4;21;28680;3.6094;1390;1500;0;0;0;0;0;0;0
|
||||
14.5;21;28680;3.6094;1364;1500;0;0;0;0;0;0;0
|
||||
14.6;21;28680;3.6094;1040;1500;0;0;0;0;0;0;0
|
||||
14.7;21;28680;3.6094;793;1500;0;0;0;0;0;0;0
|
||||
14.8;21;28680;3.6094;605;1500;0;0;0;0;0;0;0
|
||||
14.9;21;28680;3.6094;461;1500;0;0;0;0;0;0;0
|
||||
15;21;28680;3.6094;351;1500;0;0;0;0;0;0;0
|
||||
15.1;21;28680;3.6094;265;1500;0;0;0;0;0;0;0
|
||||
15.2;21;28680;3.6094;199;1500;0;0;0;0;0;0;0
|
||||
15.3;21;28680;3.6094;150;1500;0;0;0;0;0;0;0
|
||||
15.4;21;28680;3.6094;113;1500;0;0;0;0;0;0;0
|
||||
15.5;21;28680;3.6094;85;1500;0;0;0;0;0;0;0
|
||||
15.6;21;28680;3.6094;79;1500;0;0;0;0;0;0;0
|
||||
15.7;21;28680;3.6094;73;1500;0;0;0;0;0;0;0
|
||||
15.8;21;28680;3.6094;67;1500;0;0;0;0;0;0;0
|
||||
15.9;21;28680;3.6094;62;1500;0;0;0;0;0;0;0
|
||||
16;21;28680;3.6094;57;1500;0;0;0;0;0;0;0
|
||||
16.1;21;28680;3.6094;37;1500;0;0;0;0;0;0;0
|
||||
16.2;21;28680;3.6094;23;1500;0;0;0;0;0;0;0
|
||||
16.3;21;28680;3.6094;15;1500;0;0;0;0;0;0;0
|
||||
16.4;21;28680;3.6094;10;1500;0;0;0;0;0;0;0
|
||||
16.5;21;28680;3.6094;6;1500;0;0;0;0;0;0;0
|
||||
16.6;21;28680;3.6094;3;1500;0;0;0;0;0;0;0
|
||||
16.7;21;28680;3.6094;1;1500;0;0;0;0;0;0;0
|
||||
16.8;21;28680;3.6094;1;1500;0;0;0;0;0;0;0
|
||||
16.9;21;28680;3.6094;0;1500;0;0;0;0;0;0;0
|
||||
17;21;28680;3.6094;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,52 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
14;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0
|
||||
14.1;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0
|
||||
14.2;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0
|
||||
14.3;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0
|
||||
14.4;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0
|
||||
14.5;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0
|
||||
14.6;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0
|
||||
14.7;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0
|
||||
14.8;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0
|
||||
14.9;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0
|
||||
15;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0
|
||||
15.1;22;31240;3.9023;1421;1500;0;0;0;0;0;0;0
|
||||
15.2;22;31240;3.9023;1347;1500;0;0;0;0;0;0;0
|
||||
15.3;22;31240;3.9023;1276;1500;0;0;0;0;0;0;0
|
||||
15.4;22;31240;3.9023;1209;1500;0;0;0;0;0;0;0
|
||||
15.5;22;31240;3.9023;1146;1500;0;0;0;0;0;0;0
|
||||
15.6;22;31240;3.9023;807;1500;0;0;0;0;0;0;0
|
||||
15.7;22;31240;3.9023;569;1500;0;0;0;0;0;0;0
|
||||
15.8;22;31240;3.9023;400;1500;0;0;0;0;0;0;0
|
||||
15.9;22;31240;3.9023;282;1500;0;0;0;0;0;0;0
|
||||
16;22;31240;3.9023;199;1500;0;0;0;0;0;0;0
|
||||
16.1;22;31240;3.9023;165;1500;0;0;0;0;0;0;0
|
||||
16.2;22;31240;3.9023;137;1500;0;0;0;0;0;0;0
|
||||
16.3;22;31240;3.9023;114;1500;0;0;0;0;0;0;0
|
||||
16.4;22;31240;3.9023;94;1500;0;0;0;0;0;0;0
|
||||
16.5;22;31240;3.9023;78;1500;0;0;0;0;0;0;0
|
||||
16.6;22;31240;3.9023;74;1500;0;0;0;0;0;0;0
|
||||
16.7;22;31240;3.9023;69;1500;0;0;0;0;0;0;0
|
||||
16.8;22;31240;3.9023;65;1500;0;0;0;0;0;0;0
|
||||
16.9;22;31240;3.9023;61;1500;0;0;0;0;0;0;0
|
||||
17;22;31240;3.9023;58;1500;0;0;0;0;0;0;0
|
||||
17.1;22;31240;3.9023;36;1500;0;0;0;0;0;0;0
|
||||
17.2;22;31240;3.9023;23;1500;0;0;0;0;0;0;0
|
||||
17.3;22;31240;3.9023;15;1500;0;0;0;0;0;0;0
|
||||
17.4;22;31240;3.9023;9;1500;0;0;0;0;0;0;0
|
||||
17.5;22;31240;3.9023;6;1500;0;0;0;0;0;0;0
|
||||
17.6;22;31240;3.9023;3;1500;0;0;0;0;0;0;0
|
||||
17.7;22;31240;3.9023;1;1500;0;0;0;0;0;0;0
|
||||
17.8;22;31240;3.9023;1;1500;0;0;0;0;0;0;0
|
||||
17.9;22;31240;3.9023;0;1500;0;0;0;0;0;0;0
|
||||
18;22;31240;3.9023;0;1500;0;0;0;0;0;0;0
|
||||
18.1;22;31240;3.9023;0;1500;0;0;0;0;0;0;0
|
||||
18.2;22;31240;3.9023;0;1500;0;0;0;0;0;0;0
|
||||
18.3;22;31240;3.9023;0;1500;0;0;0;0;0;0;0
|
||||
18.4;22;31240;3.9023;0;1500;0;0;0;0;0;0;0
|
||||
18.5;22;31240;3.9023;0;1500;0;0;0;0;0;0;0
|
||||
18.6;22;31240;3.9023;0;1500;0;0;0;0;0;0;0
|
||||
18.7;22;31240;3.9023;0;1500;0;0;0;0;0;0;0
|
||||
18.8;22;31240;3.9023;0;1500;0;0;0;0;0;0;0
|
||||
18.9;22;31240;3.9023;0;1500;0;0;0;0;0;0;0
|
||||
19;22;31240;3.9023;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,92 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
15;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0
|
||||
15.1;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0
|
||||
15.2;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0
|
||||
15.3;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0
|
||||
15.4;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0
|
||||
15.5;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0
|
||||
15.6;23;33816;4.2129;1499;1500;0;0;0;0;0;0;0
|
||||
15.7;23;33816;4.2129;1499;1500;0;0;0;0;0;0;0
|
||||
15.8;23;33816;4.2129;1498;1500;0;0;0;0;0;0;0
|
||||
15.9;23;33816;4.2129;1498;1500;0;0;0;0;0;0;0
|
||||
16;23;33816;4.2129;1497;1500;0;0;0;0;0;0;0
|
||||
16.1;23;33816;4.2129;1360;1500;0;0;0;0;0;0;0
|
||||
16.2;23;33816;4.2129;1236;1500;0;0;0;0;0;0;0
|
||||
16.3;23;33816;4.2129;1123;1500;0;0;0;0;0;0;0
|
||||
16.4;23;33816;4.2129;1020;1500;0;0;0;0;0;0;0
|
||||
16.5;23;33816;4.2129;927;1500;0;0;0;0;0;0;0
|
||||
16.6;23;33816;4.2129;630;1500;0;0;0;0;0;0;0
|
||||
16.7;23;33816;4.2129;428;1500;0;0;0;0;0;0;0
|
||||
16.8;23;33816;4.2129;291;1500;0;0;0;0;0;0;0
|
||||
16.9;23;33816;4.2129;198;1500;0;0;0;0;0;0;0
|
||||
17;23;33816;4.2129;135;1500;0;0;0;0;0;0;0
|
||||
17.1;23;33816;4.2129;120;1500;0;0;0;0;0;0;0
|
||||
17.2;23;33816;4.2129;108;1500;0;0;0;0;0;0;0
|
||||
17.3;23;33816;4.2129;96;1500;0;0;0;0;0;0;0
|
||||
17.4;23;33816;4.2129;86;1500;0;0;0;0;0;0;0
|
||||
17.5;23;33816;4.2129;77;1500;0;0;0;0;0;0;0
|
||||
17.6;23;33816;4.2129;70;1500;0;0;0;0;0;0;0
|
||||
17.7;23;33816;4.2129;63;1500;0;0;0;0;0;0;0
|
||||
17.8;23;33816;4.2129;57;1500;0;0;0;0;0;0;0
|
||||
17.9;23;33816;4.2129;52;1500;0;0;0;0;0;0;0
|
||||
18;23;33816;4.2129;47;1500;0;0;0;0;0;0;0
|
||||
18.1;23;33816;4.2129;28;1500;0;0;0;0;0;0;0
|
||||
18.2;23;33816;4.2129;16;1500;0;0;0;0;0;0;0
|
||||
18.3;23;33816;4.2129;9;1500;0;0;0;0;0;0;0
|
||||
18.4;23;33816;4.2129;6;1500;0;0;0;0;0;0;0
|
||||
18.5;23;33816;4.2129;3;1500;0;0;0;0;0;0;0
|
||||
18.6;23;33816;4.2129;3;1500;0;0;0;0;0;0;0
|
||||
18.7;23;33816;4.2129;3;1500;0;0;0;0;0;0;0
|
||||
18.8;23;33816;4.2129;3;1500;0;0;0;0;0;0;0
|
||||
18.9;23;33816;4.2129;3;1500;0;0;0;0;0;0;0
|
||||
19;23;33816;4.2129;3;1500;0;0;0;0;0;0;0
|
||||
19.1;23;33816;4.2129;3;1500;0;0;0;0;0;0;0
|
||||
19.2;23;33816;4.2129;4;1500;0;0;0;0;0;0;0
|
||||
19.3;23;33816;4.2129;5;1500;0;0;0;0;0;0;0
|
||||
19.4;23;33816;4.2129;6;1500;0;0;0;0;0;0;0
|
||||
19.5;23;33816;4.2129;8;1500;0;0;0;0;0;0;0
|
||||
19.6;23;33816;4.2129;6;1500;0;0;0;0;0;0;0
|
||||
19.7;23;33816;4.2129;4;1500;0;0;0;0;0;0;0
|
||||
19.8;23;33816;4.2129;3;1500;0;0;0;0;0;0;0
|
||||
19.9;23;33816;4.2129;2;1500;0;0;0;0;0;0;0
|
||||
20;23;33816;4.2129;2;1500;0;0;0;0;0;0;0
|
||||
20.1;23;33816;4.2129;1;1500;0;0;0;0;0;0;0
|
||||
20.2;23;33816;4.2129;1;1500;0;0;0;0;0;0;0
|
||||
20.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
20.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
20.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
20.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
20.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
20.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
20.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
21;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
21.1;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
21.2;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
21.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
21.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
21.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
21.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
21.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
21.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
21.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
22;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
22.1;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
22.2;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
22.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
22.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
22.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
22.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
22.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
22.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
22.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
23;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
23.1;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
23.2;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
23.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
23.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
23.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
23.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
23.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
23.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
23.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
24;23;33816;4.2129;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,92 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
15;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
15.1;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
15.2;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
15.3;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
15.4;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
15.5;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
15.6;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
15.7;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
15.8;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
15.9;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
16;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
16.1;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
16.2;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
16.3;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
16.4;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
16.5;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0
|
||||
16.6;24;35856;4.5234;1474;1500;0;0;0;0;0;0;0
|
||||
16.7;24;35856;4.5234;1449;1500;0;0;0;0;0;0;0
|
||||
16.8;24;35856;4.5234;1424;1500;0;0;0;0;0;0;0
|
||||
16.9;24;35856;4.5234;1400;1500;0;0;0;0;0;0;0
|
||||
17;24;35856;4.5234;1376;1500;0;0;0;0;0;0;0
|
||||
17.1;24;35856;4.5234;1016;1500;0;0;0;0;0;0;0
|
||||
17.2;24;35856;4.5234;751;1500;0;0;0;0;0;0;0
|
||||
17.3;24;35856;4.5234;554;1500;0;0;0;0;0;0;0
|
||||
17.4;24;35856;4.5234;410;1500;0;0;0;0;0;0;0
|
||||
17.5;24;35856;4.5234;303;1500;0;0;0;0;0;0;0
|
||||
17.6;24;35856;4.5234;232;1500;0;0;0;0;0;0;0
|
||||
17.7;24;35856;4.5234;177;1500;0;0;0;0;0;0;0
|
||||
17.8;24;35856;4.5234;136;1500;0;0;0;0;0;0;0
|
||||
17.9;24;35856;4.5234;104;1500;0;0;0;0;0;0;0
|
||||
18;24;35856;4.5234;80;1500;0;0;0;0;0;0;0
|
||||
18.1;24;35856;4.5234;79;1500;0;0;0;0;0;0;0
|
||||
18.2;24;35856;4.5234;78;1500;0;0;0;0;0;0;0
|
||||
18.3;24;35856;4.5234;77;1500;0;0;0;0;0;0;0
|
||||
18.4;24;35856;4.5234;76;1500;0;0;0;0;0;0;0
|
||||
18.5;24;35856;4.5234;75;1500;0;0;0;0;0;0;0
|
||||
18.6;24;35856;4.5234;59;1500;0;0;0;0;0;0;0
|
||||
18.7;24;35856;4.5234;46;1500;0;0;0;0;0;0;0
|
||||
18.8;24;35856;4.5234;36;1500;0;0;0;0;0;0;0
|
||||
18.9;24;35856;4.5234;28;1500;0;0;0;0;0;0;0
|
||||
19;24;35856;4.5234;22;1500;0;0;0;0;0;0;0
|
||||
19.1;24;35856;4.5234;21;1500;0;0;0;0;0;0;0
|
||||
19.2;24;35856;4.5234;20;1500;0;0;0;0;0;0;0
|
||||
19.3;24;35856;4.5234;20;1500;0;0;0;0;0;0;0
|
||||
19.4;24;35856;4.5234;19;1500;0;0;0;0;0;0;0
|
||||
19.5;24;35856;4.5234;18;1500;0;0;0;0;0;0;0
|
||||
19.6;24;35856;4.5234;22;1500;0;0;0;0;0;0;0
|
||||
19.7;24;35856;4.5234;26;1500;0;0;0;0;0;0;0
|
||||
19.8;24;35856;4.5234;31;1500;0;0;0;0;0;0;0
|
||||
19.9;24;35856;4.5234;36;1500;0;0;0;0;0;0;0
|
||||
20;24;35856;4.5234;43;1500;0;0;0;0;0;0;0
|
||||
20.1;24;35856;4.5234;35;1500;0;0;0;0;0;0;0
|
||||
20.2;24;35856;4.5234;29;1500;0;0;0;0;0;0;0
|
||||
20.3;24;35856;4.5234;23;1500;0;0;0;0;0;0;0
|
||||
20.4;24;35856;4.5234;19;1500;0;0;0;0;0;0;0
|
||||
20.5;24;35856;4.5234;15;1500;0;0;0;0;0;0;0
|
||||
20.6;24;35856;4.5234;8;1500;0;0;0;0;0;0;0
|
||||
20.7;24;35856;4.5234;4;1500;0;0;0;0;0;0;0
|
||||
20.8;24;35856;4.5234;2;1500;0;0;0;0;0;0;0
|
||||
20.9;24;35856;4.5234;1;1500;0;0;0;0;0;0;0
|
||||
21;24;35856;4.5234;1;1500;0;0;0;0;0;0;0
|
||||
21.1;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
21.2;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
21.3;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
21.4;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
21.5;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
21.6;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
21.7;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
21.8;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
21.9;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
22;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
22.1;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
22.2;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
22.3;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
22.4;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
22.5;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
22.6;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
22.7;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
22.8;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
22.9;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
23;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
23.1;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
23.2;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
23.3;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
23.4;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
23.5;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
23.6;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
23.7;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
23.8;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
23.9;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
24;24;35856;4.5234;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,92 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
15;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
15.1;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
15.2;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
15.3;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
15.4;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
15.5;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
15.6;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
15.7;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
15.8;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
15.9;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
16;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
16.1;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
16.2;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
16.3;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
16.4;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
16.5;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
16.6;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
16.7;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
16.8;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
16.9;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
17;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0
|
||||
17.1;25;37896;4.8164;1493;1500;0;0;0;0;0;0;0
|
||||
17.2;25;37896;4.8164;1486;1500;0;0;0;0;0;0;0
|
||||
17.3;25;37896;4.8164;1478;1500;0;0;0;0;0;0;0
|
||||
17.4;25;37896;4.8164;1471;1500;0;0;0;0;0;0;0
|
||||
17.5;25;37896;4.8164;1464;1500;0;0;0;0;0;0;0
|
||||
17.6;25;37896;4.8164;1138;1500;0;0;0;0;0;0;0
|
||||
17.7;25;37896;4.8164;885;1500;0;0;0;0;0;0;0
|
||||
17.8;25;37896;4.8164;688;1500;0;0;0;0;0;0;0
|
||||
17.9;25;37896;4.8164;535;1500;0;0;0;0;0;0;0
|
||||
18;25;37896;4.8164;416;1500;0;0;0;0;0;0;0
|
||||
18.1;25;37896;4.8164;302;1500;0;0;0;0;0;0;0
|
||||
18.2;25;37896;4.8164;219;1500;0;0;0;0;0;0;0
|
||||
18.3;25;37896;4.8164;159;1500;0;0;0;0;0;0;0
|
||||
18.4;25;37896;4.8164;115;1500;0;0;0;0;0;0;0
|
||||
18.5;25;37896;4.8164;84;1500;0;0;0;0;0;0;0
|
||||
18.6;25;37896;4.8164;89;1500;0;0;0;0;0;0;0
|
||||
18.7;25;37896;4.8164;94;1500;0;0;0;0;0;0;0
|
||||
18.8;25;37896;4.8164;100;1500;0;0;0;0;0;0;0
|
||||
18.9;25;37896;4.8164;106;1500;0;0;0;0;0;0;0
|
||||
19;25;37896;4.8164;113;1500;0;0;0;0;0;0;0
|
||||
19.1;25;37896;4.8164;110;1500;0;0;0;0;0;0;0
|
||||
19.2;25;37896;4.8164;108;1500;0;0;0;0;0;0;0
|
||||
19.3;25;37896;4.8164;105;1500;0;0;0;0;0;0;0
|
||||
19.4;25;37896;4.8164;103;1500;0;0;0;0;0;0;0
|
||||
19.5;25;37896;4.8164;101;1500;0;0;0;0;0;0;0
|
||||
19.6;25;37896;4.8164;89;1500;0;0;0;0;0;0;0
|
||||
19.7;25;37896;4.8164;79;1500;0;0;0;0;0;0;0
|
||||
19.8;25;37896;4.8164;71;1500;0;0;0;0;0;0;0
|
||||
19.9;25;37896;4.8164;63;1500;0;0;0;0;0;0;0
|
||||
20;25;37896;4.8164;56;1500;0;0;0;0;0;0;0
|
||||
20.1;25;37896;4.8164;58;1500;0;0;0;0;0;0;0
|
||||
20.2;25;37896;4.8164;61;1500;0;0;0;0;0;0;0
|
||||
20.3;25;37896;4.8164;64;1500;0;0;0;0;0;0;0
|
||||
20.4;25;37896;4.8164;67;1500;0;0;0;0;0;0;0
|
||||
20.5;25;37896;4.8164;71;1500;0;0;0;0;0;0;0
|
||||
20.6;25;37896;4.8164;64;1500;0;0;0;0;0;0;0
|
||||
20.7;25;37896;4.8164;58;1500;0;0;0;0;0;0;0
|
||||
20.8;25;37896;4.8164;52;1500;0;0;0;0;0;0;0
|
||||
20.9;25;37896;4.8164;47;1500;0;0;0;0;0;0;0
|
||||
21;25;37896;4.8164;43;1500;0;0;0;0;0;0;0
|
||||
21.1;25;37896;4.8164;27;1500;0;0;0;0;0;0;0
|
||||
21.2;25;37896;4.8164;17;1500;0;0;0;0;0;0;0
|
||||
21.3;25;37896;4.8164;10;1500;0;0;0;0;0;0;0
|
||||
21.4;25;37896;4.8164;6;1500;0;0;0;0;0;0;0
|
||||
21.5;25;37896;4.8164;4;1500;0;0;0;0;0;0;0
|
||||
21.6;25;37896;4.8164;2;1500;0;0;0;0;0;0;0
|
||||
21.7;25;37896;4.8164;1;1500;0;0;0;0;0;0;0
|
||||
21.8;25;37896;4.8164;1;1500;0;0;0;0;0;0;0
|
||||
21.9;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
22;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
22.1;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
22.2;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
22.3;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
22.4;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
22.5;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
22.6;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
22.7;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
22.8;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
22.9;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
23;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
23.1;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
23.2;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
23.3;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
23.4;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
23.5;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
23.6;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
23.7;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
23.8;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
23.9;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
24;25;37896;4.8164;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,92 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
15;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
15.1;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
15.2;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
15.3;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
15.4;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
15.5;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
15.6;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
15.7;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
15.8;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
15.9;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
16;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
16.1;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
16.2;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
16.3;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
16.4;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
16.5;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
16.6;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
16.7;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
16.8;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
16.9;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
17;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
17.1;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
17.2;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
17.3;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
17.4;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
17.5;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
17.6;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
17.7;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
17.8;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
17.9;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
18;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0
|
||||
18.1;26;40976;5.1152;1496;1500;0;0;0;0;0;0;0
|
||||
18.2;26;40976;5.1152;1492;1500;0;0;0;0;0;0;0
|
||||
18.3;26;40976;5.1152;1487;1500;0;0;0;0;0;0;0
|
||||
18.4;26;40976;5.1152;1483;1500;0;0;0;0;0;0;0
|
||||
18.5;26;40976;5.1152;1479;1500;0;0;0;0;0;0;0
|
||||
18.6;26;40976;5.1152;1188;1500;0;0;0;0;0;0;0
|
||||
18.7;26;40976;5.1152;954;1500;0;0;0;0;0;0;0
|
||||
18.8;26;40976;5.1152;766;1500;0;0;0;0;0;0;0
|
||||
18.9;26;40976;5.1152;615;1500;0;0;0;0;0;0;0
|
||||
19;26;40976;5.1152;494;1500;0;0;0;0;0;0;0
|
||||
19.1;26;40976;5.1152;478;1500;0;0;0;0;0;0;0
|
||||
19.2;26;40976;5.1152;462;1500;0;0;0;0;0;0;0
|
||||
19.3;26;40976;5.1152;447;1500;0;0;0;0;0;0;0
|
||||
19.4;26;40976;5.1152;433;1500;0;0;0;0;0;0;0
|
||||
19.5;26;40976;5.1152;419;1500;0;0;0;0;0;0;0
|
||||
19.6;26;40976;5.1152;491;1500;0;0;0;0;0;0;0
|
||||
19.7;26;40976;5.1152;577;1500;0;0;0;0;0;0;0
|
||||
19.8;26;40976;5.1152;677;1500;0;0;0;0;0;0;0
|
||||
19.9;26;40976;5.1152;795;1500;0;0;0;0;0;0;0
|
||||
20;26;40976;5.1152;934;1500;0;0;0;0;0;0;0
|
||||
20.1;26;40976;5.1152;799;1500;0;0;0;0;0;0;0
|
||||
20.2;26;40976;5.1152;684;1500;0;0;0;0;0;0;0
|
||||
20.3;26;40976;5.1152;586;1500;0;0;0;0;0;0;0
|
||||
20.4;26;40976;5.1152;502;1500;0;0;0;0;0;0;0
|
||||
20.5;26;40976;5.1152;429;1500;0;0;0;0;0;0;0
|
||||
20.6;26;40976;5.1152;315;1500;0;0;0;0;0;0;0
|
||||
20.7;26;40976;5.1152;231;1500;0;0;0;0;0;0;0
|
||||
20.8;26;40976;5.1152;169;1500;0;0;0;0;0;0;0
|
||||
20.9;26;40976;5.1152;124;1500;0;0;0;0;0;0;0
|
||||
21;26;40976;5.1152;91;1500;0;0;0;0;0;0;0
|
||||
21.1;26;40976;5.1152;87;1500;0;0;0;0;0;0;0
|
||||
21.2;26;40976;5.1152;84;1500;0;0;0;0;0;0;0
|
||||
21.3;26;40976;5.1152;81;1500;0;0;0;0;0;0;0
|
||||
21.4;26;40976;5.1152;78;1500;0;0;0;0;0;0;0
|
||||
21.5;26;40976;5.1152;75;1500;0;0;0;0;0;0;0
|
||||
21.6;26;40976;5.1152;75;1500;0;0;0;0;0;0;0
|
||||
21.7;26;40976;5.1152;75;1500;0;0;0;0;0;0;0
|
||||
21.8;26;40976;5.1152;75;1500;0;0;0;0;0;0;0
|
||||
21.9;26;40976;5.1152;75;1500;0;0;0;0;0;0;0
|
||||
22;26;40976;5.1152;75;1500;0;0;0;0;0;0;0
|
||||
22.1;26;40976;5.1152;73;1500;0;0;0;0;0;0;0
|
||||
22.2;26;40976;5.1152;72;1500;0;0;0;0;0;0;0
|
||||
22.3;26;40976;5.1152;70;1500;0;0;0;0;0;0;0
|
||||
22.4;26;40976;5.1152;68;1500;0;0;0;0;0;0;0
|
||||
22.5;26;40976;5.1152;67;1500;0;0;0;0;0;0;0
|
||||
22.6;26;40976;5.1152;53;1500;0;0;0;0;0;0;0
|
||||
22.7;26;40976;5.1152;42;1500;0;0;0;0;0;0;0
|
||||
22.8;26;40976;5.1152;33;1500;0;0;0;0;0;0;0
|
||||
22.9;26;40976;5.1152;26;1500;0;0;0;0;0;0;0
|
||||
23;26;40976;5.1152;21;1500;0;0;0;0;0;0;0
|
||||
23.1;26;40976;5.1152;11;1500;0;0;0;0;0;0;0
|
||||
23.2;26;40976;5.1152;6;1500;0;0;0;0;0;0;0
|
||||
23.3;26;40976;5.1152;3;1500;0;0;0;0;0;0;0
|
||||
23.4;26;40976;5.1152;2;1500;0;0;0;0;0;0;0
|
||||
23.5;26;40976;5.1152;1;1500;0;0;0;0;0;0;0
|
||||
23.6;26;40976;5.1152;1;1500;0;0;0;0;0;0;0
|
||||
23.7;26;40976;5.1152;0;1500;0;0;0;0;0;0;0
|
||||
23.8;26;40976;5.1152;0;1500;0;0;0;0;0;0;0
|
||||
23.9;26;40976;5.1152;0;1500;0;0;0;0;0;0;0
|
||||
24;26;40976;5.1152;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,92 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
18;27;42016;5.332;1500;1500;0;0;0;0;0;0;0
|
||||
18.1;27;42016;5.332;1500;1500;0;0;0;0;0;0;0
|
||||
18.2;27;42016;5.332;1500;1500;0;0;0;0;0;0;0
|
||||
18.3;27;42016;5.332;1500;1500;0;0;0;0;0;0;0
|
||||
18.4;27;42016;5.332;1500;1500;0;0;0;0;0;0;0
|
||||
18.5;27;42016;5.332;1500;1500;0;0;0;0;0;0;0
|
||||
18.6;27;42016;5.332;1465;1500;0;0;0;0;0;0;0
|
||||
18.7;27;42016;5.332;1430;1500;0;0;0;0;0;0;0
|
||||
18.8;27;42016;5.332;1397;1500;0;0;0;0;0;0;0
|
||||
18.9;27;42016;5.332;1364;1500;0;0;0;0;0;0;0
|
||||
19;27;42016;5.332;1332;1500;0;0;0;0;0;0;0
|
||||
19.1;27;42016;5.332;1092;1500;0;0;0;0;0;0;0
|
||||
19.2;27;42016;5.332;896;1500;0;0;0;0;0;0;0
|
||||
19.3;27;42016;5.332;735;1500;0;0;0;0;0;0;0
|
||||
19.4;27;42016;5.332;603;1500;0;0;0;0;0;0;0
|
||||
19.5;27;42016;5.332;494;1500;0;0;0;0;0;0;0
|
||||
19.6;27;42016;5.332;572;1500;0;0;0;0;0;0;0
|
||||
19.7;27;42016;5.332;662;1500;0;0;0;0;0;0;0
|
||||
19.8;27;42016;5.332;766;1500;0;0;0;0;0;0;0
|
||||
19.9;27;42016;5.332;886;1500;0;0;0;0;0;0;0
|
||||
20;27;42016;5.332;1025;1500;0;0;0;0;0;0;0
|
||||
20.1;27;42016;5.332;1041;1500;0;0;0;0;0;0;0
|
||||
20.2;27;42016;5.332;1058;1500;0;0;0;0;0;0;0
|
||||
20.3;27;42016;5.332;1074;1500;0;0;0;0;0;0;0
|
||||
20.4;27;42016;5.332;1091;1500;0;0;0;0;0;0;0
|
||||
20.5;27;42016;5.332;1109;1500;0;0;0;0;0;0;0
|
||||
20.6;27;42016;5.332;811;1500;0;0;0;0;0;0;0
|
||||
20.7;27;42016;5.332;594;1500;0;0;0;0;0;0;0
|
||||
20.8;27;42016;5.332;434;1500;0;0;0;0;0;0;0
|
||||
20.9;27;42016;5.332;318;1500;0;0;0;0;0;0;0
|
||||
21;27;42016;5.332;233;1500;0;0;0;0;0;0;0
|
||||
21.1;27;42016;5.332;187;1500;0;0;0;0;0;0;0
|
||||
21.2;27;42016;5.332;150;1500;0;0;0;0;0;0;0
|
||||
21.3;27;42016;5.332;121;1500;0;0;0;0;0;0;0
|
||||
21.4;27;42016;5.332;97;1500;0;0;0;0;0;0;0
|
||||
21.5;27;42016;5.332;78;1500;0;0;0;0;0;0;0
|
||||
21.6;27;42016;5.332;78;1500;0;0;0;0;0;0;0
|
||||
21.7;27;42016;5.332;77;1500;0;0;0;0;0;0;0
|
||||
21.8;27;42016;5.332;76;1500;0;0;0;0;0;0;0
|
||||
21.9;27;42016;5.332;76;1500;0;0;0;0;0;0;0
|
||||
22;27;42016;5.332;75;1500;0;0;0;0;0;0;0
|
||||
22.1;27;42016;5.332;75;1500;0;0;0;0;0;0;0
|
||||
22.2;27;42016;5.332;75;1500;0;0;0;0;0;0;0
|
||||
22.3;27;42016;5.332;75;1500;0;0;0;0;0;0;0
|
||||
22.4;27;42016;5.332;75;1500;0;0;0;0;0;0;0
|
||||
22.5;27;42016;5.332;75;1500;0;0;0;0;0;0;0
|
||||
22.6;27;42016;5.332;75;1500;0;0;0;0;0;0;0
|
||||
22.7;27;42016;5.332;75;1500;0;0;0;0;0;0;0
|
||||
22.8;27;42016;5.332;75;1500;0;0;0;0;0;0;0
|
||||
22.9;27;42016;5.332;75;1500;0;0;0;0;0;0;0
|
||||
23;27;42016;5.332;75;1500;0;0;0;0;0;0;0
|
||||
23.1;27;42016;5.332;75;1500;0;0;0;0;0;0;0
|
||||
23.2;27;42016;5.332;74;1500;0;0;0;0;0;0;0
|
||||
23.3;27;42016;5.332;74;1500;0;0;0;0;0;0;0
|
||||
23.4;27;42016;5.332;74;1500;0;0;0;0;0;0;0
|
||||
23.5;27;42016;5.332;74;1500;0;0;0;0;0;0;0
|
||||
23.6;27;42016;5.332;68;1500;0;0;0;0;0;0;0
|
||||
23.7;27;42016;5.332;63;1500;0;0;0;0;0;0;0
|
||||
23.8;27;42016;5.332;59;1500;0;0;0;0;0;0;0
|
||||
23.9;27;42016;5.332;55;1500;0;0;0;0;0;0;0
|
||||
24;27;42016;5.332;51;1500;0;0;0;0;0;0;0
|
||||
24.1;27;42016;5.332;38;1500;0;0;0;0;0;0;0
|
||||
24.2;27;42016;5.332;29;1500;0;0;0;0;0;0;0
|
||||
24.3;27;42016;5.332;21;1500;0;0;0;0;0;0;0
|
||||
24.4;27;42016;5.332;16;1500;0;0;0;0;0;0;0
|
||||
24.5;27;42016;5.332;12;1500;0;0;0;0;0;0;0
|
||||
24.6;27;42016;5.332;7;1500;0;0;0;0;0;0;0
|
||||
24.7;27;42016;5.332;4;1500;0;0;0;0;0;0;0
|
||||
24.8;27;42016;5.332;3;1500;0;0;0;0;0;0;0
|
||||
24.9;27;42016;5.332;2;1500;0;0;0;0;0;0;0
|
||||
25;27;42016;5.332;1;1500;0;0;0;0;0;0;0
|
||||
25.1;27;42016;5.332;1;1500;0;0;0;0;0;0;0
|
||||
25.2;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
25.3;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
25.4;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
25.5;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
25.6;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
25.7;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
25.8;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
25.9;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
26;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
26.1;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
26.2;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
26.3;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
26.4;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
26.5;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
26.6;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
26.7;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
26.8;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
26.9;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
27;27;42016;5.332;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,92 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
18;28;44040;5.547;1500;1500;0;0;0;0;0;0;0
|
||||
18.1;28;44040;5.547;1500;1500;0;0;0;0;0;0;0
|
||||
18.2;28;44040;5.547;1500;1500;0;0;0;0;0;0;0
|
||||
18.3;28;44040;5.547;1500;1500;0;0;0;0;0;0;0
|
||||
18.4;28;44040;5.547;1500;1500;0;0;0;0;0;0;0
|
||||
18.5;28;44040;5.547;1500;1500;0;0;0;0;0;0;0
|
||||
18.6;28;44040;5.547;1500;1500;0;0;0;0;0;0;0
|
||||
18.7;28;44040;5.547;1500;1500;0;0;0;0;0;0;0
|
||||
18.8;28;44040;5.547;1500;1500;0;0;0;0;0;0;0
|
||||
18.9;28;44040;5.547;1500;1500;0;0;0;0;0;0;0
|
||||
19;28;44040;5.547;1500;1500;0;0;0;0;0;0;0
|
||||
19.1;28;44040;5.547;1499;1500;0;0;0;0;0;0;0
|
||||
19.2;28;44040;5.547;1498;1500;0;0;0;0;0;0;0
|
||||
19.3;28;44040;5.547;1498;1500;0;0;0;0;0;0;0
|
||||
19.4;28;44040;5.547;1497;1500;0;0;0;0;0;0;0
|
||||
19.5;28;44040;5.547;1496;1500;0;0;0;0;0;0;0
|
||||
19.6;28;44040;5.547;1429;1500;0;0;0;0;0;0;0
|
||||
19.7;28;44040;5.547;1366;1500;0;0;0;0;0;0;0
|
||||
19.8;28;44040;5.547;1305;1500;0;0;0;0;0;0;0
|
||||
19.9;28;44040;5.547;1247;1500;0;0;0;0;0;0;0
|
||||
20;28;44040;5.547;1191;1500;0;0;0;0;0;0;0
|
||||
20.1;28;44040;5.547;1234;1500;0;0;0;0;0;0;0
|
||||
20.2;28;44040;5.547;1279;1500;0;0;0;0;0;0;0
|
||||
20.3;28;44040;5.547;1325;1500;0;0;0;0;0;0;0
|
||||
20.4;28;44040;5.547;1373;1500;0;0;0;0;0;0;0
|
||||
20.5;28;44040;5.547;1423;1500;0;0;0;0;0;0;0
|
||||
20.6;28;44040;5.547;1426;1500;0;0;0;0;0;0;0
|
||||
20.7;28;44040;5.547;1429;1500;0;0;0;0;0;0;0
|
||||
20.8;28;44040;5.547;1432;1500;0;0;0;0;0;0;0
|
||||
20.9;28;44040;5.547;1435;1500;0;0;0;0;0;0;0
|
||||
21;28;44040;5.547;1438;1500;0;0;0;0;0;0;0
|
||||
21.1;28;44040;5.547;1207;1500;0;0;0;0;0;0;0
|
||||
21.2;28;44040;5.547;1014;1500;0;0;0;0;0;0;0
|
||||
21.3;28;44040;5.547;851;1500;0;0;0;0;0;0;0
|
||||
21.4;28;44040;5.547;715;1500;0;0;0;0;0;0;0
|
||||
21.5;28;44040;5.547;600;1500;0;0;0;0;0;0;0
|
||||
21.6;28;44040;5.547;418;1500;0;0;0;0;0;0;0
|
||||
21.7;28;44040;5.547;290;1500;0;0;0;0;0;0;0
|
||||
21.8;28;44040;5.547;202;1500;0;0;0;0;0;0;0
|
||||
21.9;28;44040;5.547;140;1500;0;0;0;0;0;0;0
|
||||
22;28;44040;5.547;98;1500;0;0;0;0;0;0;0
|
||||
22.1;28;44040;5.547;93;1500;0;0;0;0;0;0;0
|
||||
22.2;28;44040;5.547;88;1500;0;0;0;0;0;0;0
|
||||
22.3;28;44040;5.547;83;1500;0;0;0;0;0;0;0
|
||||
22.4;28;44040;5.547;79;1500;0;0;0;0;0;0;0
|
||||
22.5;28;44040;5.547;75;1500;0;0;0;0;0;0;0
|
||||
22.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
22.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
22.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
22.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
23;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
23.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
23.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
23.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
23.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
23.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
23.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
23.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
23.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
23.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
24;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
24.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
24.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
24.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
24.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
24.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
24.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
24.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
24.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
24.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
25;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
25.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
25.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
25.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
25.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
25.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
25.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
25.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
25.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
25.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
26;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
26.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
26.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
26.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
26.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
26.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
26.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
26.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
26.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
26.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
27;28;44040;5.547;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,62 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
-4;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-3.9;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-3.8;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-3.7;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-3.6;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-3.5;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-3.4;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-3.3;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-3.2;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-3.1;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-3;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-2.9;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-2.8;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-2.7;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-2.6;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-2.5;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-2.4;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-2.3;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-2.2;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-2.1;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-2;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-1.9;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-1.8;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-1.7;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-1.6;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-1.5;2;2976;0.377;1500;1500;0;0;0;0;0;0;0
|
||||
-1.4;2;2976;0.377;1486;1500;0;0;0;0;0;0;0
|
||||
-1.3;2;2976;0.377;1473;1500;0;0;0;0;0;0;0
|
||||
-1.2;2;2976;0.377;1459;1500;0;0;0;0;0;0;0
|
||||
-1.1;2;2976;0.377;1446;1500;0;0;0;0;0;0;0
|
||||
-1;2;2976;0.377;1432;1500;0;0;0;0;0;0;0
|
||||
-0.9;2;2976;0.377;1149;1500;0;0;0;0;0;0;0
|
||||
-0.8;2;2976;0.377;921;1500;0;0;0;0;0;0;0
|
||||
-0.7;2;2976;0.377;738;1500;0;0;0;0;0;0;0
|
||||
-0.6;2;2976;0.377;592;1500;0;0;0;0;0;0;0
|
||||
-0.5;2;2976;0.377;475;1500;0;0;0;0;0;0;0
|
||||
-0.4;2;2976;0.377;292;1500;0;0;0;0;0;0;0
|
||||
-0.3;2;2976;0.377;179;1500;0;0;0;0;0;0;0
|
||||
-0.2;2;2976;0.377;110;1500;0;0;0;0;0;0;0
|
||||
-0.1;2;2976;0.377;68;1500;0;0;0;0;0;0;0
|
||||
0;2;2976;0.377;42;1500;0;0;0;0;0;0;0
|
||||
0.1;2;2976;0.377;22;1500;0;0;0;0;0;0;0
|
||||
0.2;2;2976;0.377;11;1500;0;0;0;0;0;0;0
|
||||
0.3;2;2976;0.377;6;1500;0;0;0;0;0;0;0
|
||||
0.4;2;2976;0.377;3;1500;0;0;0;0;0;0;0
|
||||
0.5;2;2976;0.377;2;1500;0;0;0;0;0;0;0
|
||||
0.6;2;2976;0.377;0;1500;0;0;0;0;0;0;0
|
||||
0.7;2;2976;0.377;0;1500;0;0;0;0;0;0;0
|
||||
0.8;2;2976;0.377;0;1500;0;0;0;0;0;0;0
|
||||
0.9;2;2976;0.377;0;1500;0;0;0;0;0;0;0
|
||||
1;2;2976;0.377;0;1500;0;0;0;0;0;0;0
|
||||
1.1;2;2976;0.377;0;1500;0;0;0;0;0;0;0
|
||||
1.2;2;2976;0.377;0;1500;0;0;0;0;0;0;0
|
||||
1.3;2;2976;0.377;0;1500;0;0;0;0;0;0;0
|
||||
1.4;2;2976;0.377;0;1500;0;0;0;0;0;0;0
|
||||
1.5;2;2976;0.377;0;1500;0;0;0;0;0;0;0
|
||||
1.6;2;2976;0.377;0;1500;0;0;0;0;0;0;0
|
||||
1.7;2;2976;0.377;0;1500;0;0;0;0;0;0;0
|
||||
1.8;2;2976;0.377;0;1500;0;0;0;0;0;0;0
|
||||
1.9;2;2976;0.377;0;1500;0;0;0;0;0;0;0
|
||||
2;2;2976;0.377;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,62 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
-4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-3.9;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-3.8;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-3.7;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-3.6;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-3.5;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-3.4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-3.3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-3.2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-3.1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-2.9;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-2.8;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-2.7;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-2.6;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-2.5;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-2.4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-2.3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-2.2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-2.1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-1.9;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-1.8;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-1.7;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-1.6;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-1.5;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-1.4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-1.3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-1.2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-1.1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0
|
||||
-0.9;3;3912;0.4902;1499;1500;0;0;0;0;0;0;0
|
||||
-0.8;3;3912;0.4902;1498;1500;0;0;0;0;0;0;0
|
||||
-0.7;3;3912;0.4902;1496;1500;0;0;0;0;0;0;0
|
||||
-0.6;3;3912;0.4902;1495;1500;0;0;0;0;0;0;0
|
||||
-0.5;3;3912;0.4902;1494;1500;0;0;0;0;0;0;0
|
||||
-0.4;3;3912;0.4902;1322;1500;0;0;0;0;0;0;0
|
||||
-0.3;3;3912;0.4902;1169;1500;0;0;0;0;0;0;0
|
||||
-0.2;3;3912;0.4902;1034;1500;0;0;0;0;0;0;0
|
||||
-0.1;3;3912;0.4902;915;1500;0;0;0;0;0;0;0
|
||||
0;3;3912;0.4902;809;1500;0;0;0;0;0;0;0
|
||||
0.1;3;3912;0.4902;504;1500;0;0;0;0;0;0;0
|
||||
0.2;3;3912;0.4902;314;1500;0;0;0;0;0;0;0
|
||||
0.3;3;3912;0.4902;196;1500;0;0;0;0;0;0;0
|
||||
0.4;3;3912;0.4902;122;1500;0;0;0;0;0;0;0
|
||||
0.5;3;3912;0.4902;76;1500;0;0;0;0;0;0;0
|
||||
0.6;3;3912;0.4902;37;1500;0;0;0;0;0;0;0
|
||||
0.7;3;3912;0.4902;18;1500;0;0;0;0;0;0;0
|
||||
0.8;3;3912;0.4902;9;1500;0;0;0;0;0;0;0
|
||||
0.9;3;3912;0.4902;4;1500;0;0;0;0;0;0;0
|
||||
1;3;3912;0.4902;2;1500;0;0;0;0;0;0;0
|
||||
1.1;3;3912;0.4902;0;1500;0;0;0;0;0;0;0
|
||||
1.2;3;3912;0.4902;0;1500;0;0;0;0;0;0;0
|
||||
1.3;3;3912;0.4902;0;1500;0;0;0;0;0;0;0
|
||||
1.4;3;3912;0.4902;0;1500;0;0;0;0;0;0;0
|
||||
1.5;3;3912;0.4902;0;1500;0;0;0;0;0;0;0
|
||||
1.6;3;3912;0.4902;0;1500;0;0;0;0;0;0;0
|
||||
1.7;3;3912;0.4902;0;1500;0;0;0;0;0;0;0
|
||||
1.8;3;3912;0.4902;0;1500;0;0;0;0;0;0;0
|
||||
1.9;3;3912;0.4902;0;1500;0;0;0;0;0;0;0
|
||||
2;3;3912;0.4902;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,62 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
-1;4;4736;0.6016;1500;1500;0;0;0;0;0;0;0
|
||||
-0.9;4;4736;0.6016;1499;1500;0;0;0;0;0;0;0
|
||||
-0.8;4;4736;0.6016;1498;1500;0;0;0;0;0;0;0
|
||||
-0.7;4;4736;0.6016;1496;1500;0;0;0;0;0;0;0
|
||||
-0.6;4;4736;0.6016;1495;1500;0;0;0;0;0;0;0
|
||||
-0.5;4;4736;0.6016;1494;1500;0;0;0;0;0;0;0
|
||||
-0.4;4;4736;0.6016;1322;1500;0;0;0;0;0;0;0
|
||||
-0.3;4;4736;0.6016;1169;1500;0;0;0;0;0;0;0
|
||||
-0.2;4;4736;0.6016;1034;1500;0;0;0;0;0;0;0
|
||||
-0.1;4;4736;0.6016;915;1500;0;0;0;0;0;0;0
|
||||
0;4;4736;0.6016;809;1500;0;0;0;0;0;0;0
|
||||
0.1;4;4736;0.6016;504;1500;0;0;0;0;0;0;0
|
||||
0.2;4;4736;0.6016;314;1500;0;0;0;0;0;0;0
|
||||
0.3;4;4736;0.6016;196;1500;0;0;0;0;0;0;0
|
||||
0.4;4;4736;0.6016;122;1500;0;0;0;0;0;0;0
|
||||
0.5;4;4736;0.6016;76;1500;0;0;0;0;0;0;0
|
||||
0.6;4;4736;0.6016;37;1500;0;0;0;0;0;0;0
|
||||
0.7;4;4736;0.6016;18;1500;0;0;0;0;0;0;0
|
||||
0.8;4;4736;0.6016;9;1500;0;0;0;0;0;0;0
|
||||
0.9;4;4736;0.6016;4;1500;0;0;0;0;0;0;0
|
||||
1;4;4736;0.6016;2;1500;0;0;0;0;0;0;0
|
||||
1.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
1.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
1.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
1.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
1.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
1.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
1.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
1.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
1.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
2.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
2.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
2.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
2.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
2.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
2.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
2.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
2.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
2.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
3.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
3.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
3.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
3.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
3.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
3.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
3.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
3.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
3.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
4.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
4.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
4.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
4.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
4.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
4.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
4.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
4.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
4.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0
|
||||
|
@@ -0,0 +1,62 @@
|
||||
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
|
||||
-1;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0
|
||||
-0.9;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0
|
||||
-0.8;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0
|
||||
-0.7;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0
|
||||
-0.6;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0
|
||||
-0.5;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0
|
||||
-0.4;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0
|
||||
-0.3;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0
|
||||
-0.2;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0
|
||||
-0.1;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0
|
||||
0;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0
|
||||
0.1;5;5888;0.7402;1499;1500;0;0;0;0;0;0;0
|
||||
0.2;5;5888;0.7402;1499;1500;0;0;0;0;0;0;0
|
||||
0.3;5;5888;0.7402;1498;1500;0;0;0;0;0;0;0
|
||||
0.4;5;5888;0.7402;1498;1500;0;0;0;0;0;0;0
|
||||
0.5;5;5888;0.7402;1497;1500;0;0;0;0;0;0;0
|
||||
0.6;5;5888;0.7402;1323;1500;0;0;0;0;0;0;0
|
||||
0.7;5;5888;0.7402;1170;1500;0;0;0;0;0;0;0
|
||||
0.8;5;5888;0.7402;1034;1500;0;0;0;0;0;0;0
|
||||
0.9;5;5888;0.7402;914;1500;0;0;0;0;0;0;0
|
||||
1;5;5888;0.7402;808;1500;0;0;0;0;0;0;0
|
||||
1.1;5;5888;0.7402;513;1500;0;0;0;0;0;0;0
|
||||
1.2;5;5888;0.7402;326;1500;0;0;0;0;0;0;0
|
||||
1.3;5;5888;0.7402;207;1500;0;0;0;0;0;0;0
|
||||
1.4;5;5888;0.7402;131;1500;0;0;0;0;0;0;0
|
||||
1.5;5;5888;0.7402;83;1500;0;0;0;0;0;0;0
|
||||
1.6;5;5888;0.7402;48;1500;0;0;0;0;0;0;0
|
||||
1.7;5;5888;0.7402;28;1500;0;0;0;0;0;0;0
|
||||
1.8;5;5888;0.7402;16;1500;0;0;0;0;0;0;0
|
||||
1.9;5;5888;0.7402;9;1500;0;0;0;0;0;0;0
|
||||
2;5;5888;0.7402;5;1500;0;0;0;0;0;0;0
|
||||
2.1;5;5888;0.7402;2;1500;0;0;0;0;0;0;0
|
||||
2.2;5;5888;0.7402;1;1500;0;0;0;0;0;0;0
|
||||
2.3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
2.4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
2.5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
2.6;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
2.7;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
2.8;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
2.9;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
3.1;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
3.2;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
3.3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
3.4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
3.5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
3.6;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
3.7;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
3.8;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
3.9;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
4.1;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
4.2;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
4.3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
4.4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
4.5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
4.6;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
4.7;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
4.8;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
4.9;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user