mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-19 15:40:30 +00:00
Compare commits
2 Commits
IISc_pathl
...
simd_mod_6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aca2d708ac | ||
|
|
951eaba61a |
@@ -23,6 +23,10 @@
|
||||
#include "PHY/NR_REFSIG/nr_mod_table.h"
|
||||
#include "executables/softmodem-common.h"
|
||||
|
||||
#if defined(__SSE2__)
|
||||
#include <immintrin.h>
|
||||
#endif
|
||||
|
||||
//Table 6.3.1.5-1 Precoding Matrix W 1 layer 2 antenna ports 'n' = -1 and 'o' = -j
|
||||
const char nr_W_1l_2p[6][2][1] = {
|
||||
{{'1'}, {'0'}}, // pmi 0
|
||||
@@ -110,6 +114,52 @@ const char nr_W_4l_4p[5][4][4] = {
|
||||
{{'1', '1', '1', '1'}, {'1', 'n', '1', 'n'}, {'j', 'j', 'o', 'o'}, {'j', 'o', 'o', 'j'}} // pmi 4
|
||||
};
|
||||
|
||||
|
||||
|
||||
#if defined(__SSE2__)
|
||||
static
|
||||
__m256i unpack12to16(const uint8_t *addr)
|
||||
{
|
||||
// It start loading from addr-4. It consumes 24 bytes starting from addr
|
||||
// Don't use this for the first vector of a page-aligned array, or the last
|
||||
__m256i v = _mm256_loadu_si256( (const __m256i*)(addr-4) );
|
||||
// v = [ x H G F E | D C B A x ] where each letter is a 3-byte pair of two 12-bytes fields, and x is 4 bytes of garbage we load but ignore
|
||||
|
||||
// From 3 bytes, expand to 4 bytes i.e., 4,5,6 -> 4,5,5,6
|
||||
const __m256i bytegrouping =
|
||||
_mm256_setr_epi8(4,5, 5,6, 7,8, 8,9, 10,11, 11,12, 13,14, 14,15, // low half uses last 12B
|
||||
0,1, 1,2, 3,4, 4,5, 6,7, 7,8, 9,10, 10,11); // high half uses first 12B
|
||||
//
|
||||
v = _mm256_shuffle_epi8(v, bytegrouping);
|
||||
// each 16-bit chunk has the bits it needs, but not in the right position
|
||||
|
||||
// in each chunk of 8 nibbles (4 bytes): e.g., 4,5,5,6 -> [ f e d c | d c b a ]
|
||||
__m256i hi = _mm256_srli_epi16(v, 4); // [ 0 f e d | xxxx ]
|
||||
__m256i lo = _mm256_and_si256(v, _mm256_set1_epi32(0x00000FFF)); // [ 0000 | 0 c b a ]
|
||||
|
||||
return _mm256_blend_epi16(lo, hi, 0b10101010);
|
||||
// nibbles in each pair of epi16: [ 0 f e d | 0 c b a ]
|
||||
}
|
||||
|
||||
/*
|
||||
// consumes 24 bytes starting at addr.
|
||||
static
|
||||
__m256i unpack6to8(const uint8_t *addr)
|
||||
{
|
||||
__m256i const v = unpack12to16(addr); // [ 0000 cccc | ccaa aaaa] in every epi16 bits positions
|
||||
|
||||
__m256i const m0 = _mm256_set1_epi16(0b00000000000111111);
|
||||
__m256i const lo = v & m0; // [ 0000 0000 | 00aa aaaa ]
|
||||
__m256i const hi = _mm256_slli_epi16(v, 2); // [ 00cc cccc | aaaa aa00 ]
|
||||
|
||||
__m256i const m1 = _mm256_set1_epi16(0xFF00);
|
||||
return _mm256_blendv_epi8(lo, hi, m1); // [00cc cccc | 00aa aaaa]
|
||||
}
|
||||
*/
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
void nr_modulation(uint32_t *in,
|
||||
uint32_t length,
|
||||
uint16_t mod_order,
|
||||
@@ -119,7 +169,9 @@ void nr_modulation(uint32_t *in,
|
||||
int32_t* nr_mod_table32;
|
||||
int32_t* out32 = (int32_t*) out;
|
||||
uint8_t* in_bytes = (uint8_t*) in;
|
||||
#ifndef __SSE2__
|
||||
uint64_t* in64 = (uint64_t*) in;
|
||||
#endif
|
||||
int64_t* out64 = (int64_t*) out;
|
||||
uint32_t i;
|
||||
|
||||
@@ -171,6 +223,15 @@ void nr_modulation(uint32_t *in,
|
||||
return;
|
||||
|
||||
case 6:
|
||||
#if defined(__SSE2__)
|
||||
for(i =0 ; i < length - 3 * 64; i += 3 * 64 ){
|
||||
// Consume 24 bytes and unpack them in 32 bytes.
|
||||
__m256i const v = unpack12to16((uint8_t*)&in[i/8]);
|
||||
for(int j = 0; j < 16; ++j){
|
||||
*out64++ = nr_64qam_mod_table[((int16_t*)&v)[j]];
|
||||
}
|
||||
}
|
||||
#else
|
||||
for (i = 0; i < length - 3 * 64; i += 3 * 64) {
|
||||
uint64_t x = *in64++;
|
||||
uint64_t x1 = x & 0xfff;
|
||||
@@ -212,6 +273,7 @@ void nr_modulation(uint32_t *in,
|
||||
x2 = ((x>>52)&0xff0) | (x2>>60);
|
||||
*out64++ = nr_64qam_mod_table[x2];
|
||||
}
|
||||
#endif
|
||||
while (i + 24 <= length) {
|
||||
uint32_t xx = 0;
|
||||
memcpy(&xx, in_bytes + i / 8, 3);
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
#include "nr_refsig.h"
|
||||
#include "nr_mod_table.h"
|
||||
short nr_qpsk_mod_table[8];
|
||||
int16_t nr_qpsk_mod_table[8];
|
||||
|
||||
int32_t nr_16qam_mod_table[16];
|
||||
simde__m128i nr_qpsk_byte_mod_table[2048];
|
||||
@@ -39,57 +39,57 @@ void nr_generate_modulation_table() {
|
||||
float sqrt170 = 0.076696;
|
||||
float val = 32768.0;
|
||||
uint32_t i,j;
|
||||
short* table;
|
||||
int16_t* table;
|
||||
|
||||
// QPSK
|
||||
for (i=0; i<4; i++) {
|
||||
nr_qpsk_mod_table[i*2] = (short)(1-2*(i&1))*val*sqrt2*sqrt2;
|
||||
nr_qpsk_mod_table[i*2+1] = (short)(1-2*((i>>1)&1))*val*sqrt2*sqrt2;
|
||||
nr_qpsk_mod_table[i*2] = (int16_t)(1-2*(i&1))*val*sqrt2*sqrt2;
|
||||
nr_qpsk_mod_table[i*2+1] = (int16_t)(1-2*((i>>1)&1))*val*sqrt2*sqrt2;
|
||||
//printf("%d j%d\n",nr_qpsk_mod_table[i*2],nr_qpsk_mod_table[i*2+1]);
|
||||
}
|
||||
|
||||
//QPSK m128
|
||||
table = (short*) nr_qpsk_byte_mod_table;
|
||||
table = (int16_t*) nr_qpsk_byte_mod_table;
|
||||
for (i=0; i<256; i++) {
|
||||
for (j=0; j<4; j++) {
|
||||
table[i*8+(j*2)] = (short)(1-2*((i>>(j*2))&1))*val*sqrt2*sqrt2;
|
||||
table[i*8+(j*2)+1] = (short)(1-2*((i>>(j*2+1))&1))*val*sqrt2*sqrt2;
|
||||
table[i*8+(j*2)] = (int16_t)(1-2*((i>>(j*2))&1))*val*sqrt2*sqrt2;
|
||||
table[i*8+(j*2)+1] = (int16_t)(1-2*((i>>(j*2+1))&1))*val*sqrt2*sqrt2;
|
||||
//printf("%d j%d\n",nr_qpsk_byte_mod_table[i*8+(j*2)],nr_qpsk_byte_mod_table[i*8+(j*2)+1]);
|
||||
}
|
||||
}
|
||||
|
||||
//16QAM
|
||||
table = (short*) nr_16qam_byte_mod_table;
|
||||
table = (int16_t*) nr_16qam_byte_mod_table;
|
||||
for (i=0; i<256; i++) {
|
||||
for (j=0; j<2; j++) {
|
||||
table[i*4+(j*2)] = (short)((1-2*((i>>(j*4))&1))*(2-(1-2*((i>>(j*4+2))&1))))*val*sqrt10*sqrt2;
|
||||
table[i*4+(j*2)+1] = (short)((1-2*((i>>(j*4+1))&1))*(2-(1-2*((i>>(j*4+3))&1))))*val*sqrt10*sqrt2;
|
||||
table[i*4+(j*2)] = (int16_t)((1-2*((i>>(j*4))&1))*(2-(1-2*((i>>(j*4+2))&1))))*val*sqrt10*sqrt2;
|
||||
table[i*4+(j*2)+1] = (int16_t)((1-2*((i>>(j*4+1))&1))*(2-(1-2*((i>>(j*4+3))&1))))*val*sqrt10*sqrt2;
|
||||
//printf("%d j%d\n",nr_16qam_byte_mod_table[i*4+(j*2)],nr_16qam_byte_mod_table[i*4+(j*2)+1]);
|
||||
}
|
||||
}
|
||||
|
||||
table = (short*) nr_16qam_mod_table;
|
||||
table = (int16_t*) nr_16qam_mod_table;
|
||||
for (i=0; i<16; i++) {
|
||||
table[i*2] = (short)((1-2*(i&1))*(2-(1-2*((i>>2)&1))))*val*sqrt10*sqrt2;
|
||||
table[i*2+1] = (short)((1-2*((i>>1)&1))*(2-(1-2*((i>>3)&1))))*val*sqrt10*sqrt2;
|
||||
table[i*2] = (int16_t)((1-2*(i&1))*(2-(1-2*((i>>2)&1))))*val*sqrt10*sqrt2;
|
||||
table[i*2+1] = (int16_t)((1-2*((i>>1)&1))*(2-(1-2*((i>>3)&1))))*val*sqrt10*sqrt2;
|
||||
//printf("%d j%d\n",table[i*2],table[i*2+1]);
|
||||
}
|
||||
|
||||
//64QAM
|
||||
table = (short*) nr_64qam_mod_table;
|
||||
table = (int16_t*) nr_64qam_mod_table;
|
||||
for (i=0; i<4096; i++) {
|
||||
for (j=0; j<2; j++) {
|
||||
table[i*4+(j*2)] = (short)((1-2*((i>>(j*6))&1))*(4-(1-2*((i>>(j*6+2))&1))*(2-(1-2*((i>>(j*6+4))&1)))))*val*sqrt42*sqrt2;
|
||||
table[i*4+(j*2)+1] = (short)((1-2*((i>>(j*6+1))&1))*(4-(1-2*((i>>(j*6+3))&1))*(2-(1-2*((i>>(j*6+5))&1)))))*val*sqrt42*sqrt2;
|
||||
table[i*4+(j*2)] = (int16_t)((1-2*((i>>(j*6))&1))*(4-(1-2*((i>>(j*6+2))&1))*(2-(1-2*((i>>(j*6+4))&1)))))*val*sqrt42*sqrt2;
|
||||
table[i*4+(j*2)+1] = (int16_t)((1-2*((i>>(j*6+1))&1))*(4-(1-2*((i>>(j*6+3))&1))*(2-(1-2*((i>>(j*6+5))&1)))))*val*sqrt42*sqrt2;
|
||||
//printf("%d j%d\n",table[i*4+(j*2)],table[i*4+(j*2)+1]);
|
||||
}
|
||||
}
|
||||
|
||||
//256QAM
|
||||
table = (short*) nr_256qam_mod_table;
|
||||
table = (int16_t*) nr_256qam_mod_table;
|
||||
for (i=0; i<256; i++) {
|
||||
table[i*2] = (short)((1-2*(i&1))*(8-(1-2*((i>>2)&1))*(4-(1-2*((i>>4)&1))*(2-(1-2*((i>>6)&1))))))*val*sqrt170*sqrt2;
|
||||
table[i*2+1] = (short)((1-2*((i>>1)&1))*(8-(1-2*((i>>3)&1))*(4-(1-2*((i>>5)&1))*(2-(1-2*((i>>7)&1))))))*val*sqrt170*sqrt2;
|
||||
table[i*2] = (int16_t)((1-2*(i&1))*(8-(1-2*((i>>2)&1))*(4-(1-2*((i>>4)&1))*(2-(1-2*((i>>6)&1))))))*val*sqrt170*sqrt2;
|
||||
table[i*2+1] = (int16_t)((1-2*((i>>1)&1))*(8-(1-2*((i>>3)&1))*(4-(1-2*((i>>5)&1))*(2-(1-2*((i>>7)&1))))))*val*sqrt170*sqrt2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,11 +46,6 @@ extern void print_shorts(char *s,simde__m128i *x);
|
||||
static mapping channelmod_names[] = {
|
||||
CHANNELMOD_MAP_INIT
|
||||
};
|
||||
static mapping plmod_names[] = {
|
||||
PLMOD_MAP_INIT
|
||||
};
|
||||
|
||||
int plmodelid_fromstrtype(char *modeltype);
|
||||
static char *module_id_str[] = MODULEID_STR_INIT;
|
||||
static int channelmod_show_cmd(char *buff, int debug, telnet_printfunc_t prnt);
|
||||
static int channelmod_modify_cmd(char *buff, int debug, telnet_printfunc_t prnt);
|
||||
@@ -85,182 +80,6 @@ static channel_desc_t **defined_channels;
|
||||
static char *modellist_name;
|
||||
|
||||
|
||||
void fill_pathloss_desc(channel_desc_t *chan_desc,
|
||||
double h_bs,
|
||||
double h_ut,
|
||||
double H,
|
||||
double W,
|
||||
double d_2d,
|
||||
int flag ) {
|
||||
chan_desc->pathloss_model_var.h_bs = h_bs;
|
||||
chan_desc->pathloss_model_var.h_ut = h_ut;
|
||||
chan_desc->pathloss_model_var.H = H;
|
||||
chan_desc->pathloss_model_var.W = W;
|
||||
chan_desc->pathloss_model_var.d_2d = d_2d;
|
||||
chan_desc->PM_Flag = flag;
|
||||
LOG_I(OCM,"Getting Pathloss Model descriptors. h_bs %lf, h_ut %lf, H %lf, W %lf, d_2d %lf\n",h_bs,h_ut,H,W,d_2d);
|
||||
}
|
||||
|
||||
|
||||
void set_pathloss_default_values(channel_desc_t *chan_desc){
|
||||
|
||||
switch (chan_desc->pathloss_model)
|
||||
{
|
||||
double h_bs,h_ut,H,W,d_2d;
|
||||
int flag;
|
||||
case None:
|
||||
{h_bs = 0;
|
||||
h_ut = 0;
|
||||
H = 0;
|
||||
W = 0;
|
||||
d_2d = 0;
|
||||
flag = 0;
|
||||
fill_pathloss_desc(chan_desc,h_bs,h_ut,H,W,d_2d,flag);
|
||||
break;}
|
||||
|
||||
case RMa_LOS:
|
||||
{h_bs = 35;
|
||||
h_ut = 1.5;
|
||||
H = 5;
|
||||
W = 20;
|
||||
d_2d = 10;
|
||||
flag = 1;
|
||||
fill_pathloss_desc(chan_desc,h_bs,h_ut,H,W,d_2d,flag);
|
||||
break;}
|
||||
|
||||
case RMa_NLOS:
|
||||
{ h_bs = 35;
|
||||
h_ut = 1.5;
|
||||
H = 5;
|
||||
W = 20;
|
||||
d_2d = 10;
|
||||
flag = 1;
|
||||
fill_pathloss_desc(chan_desc,h_bs,h_ut,H,W,d_2d,flag);
|
||||
break;}
|
||||
|
||||
case UMa_LOS:
|
||||
{ h_bs = 25;
|
||||
h_ut = 1.5;
|
||||
H = 5;
|
||||
W = 20;
|
||||
d_2d = 10;
|
||||
flag = 1;
|
||||
fill_pathloss_desc(chan_desc,h_bs,h_ut,H,W,d_2d,flag);
|
||||
break;}
|
||||
|
||||
case UMa_NLOS:
|
||||
{ h_bs = 25;
|
||||
h_ut = 1.5;
|
||||
H = 5;
|
||||
W = 20;
|
||||
d_2d = 10;
|
||||
flag = 1;
|
||||
fill_pathloss_desc(chan_desc,h_bs,h_ut,H,W,d_2d,flag);
|
||||
break;}
|
||||
|
||||
case UMi_SC_LOS:
|
||||
{h_bs = 10;
|
||||
h_ut = 1.5;
|
||||
H = 5;
|
||||
W = 20;
|
||||
d_2d = 10;
|
||||
flag = 1;
|
||||
fill_pathloss_desc(chan_desc,h_bs,h_ut,H,W,d_2d,flag);
|
||||
break;}
|
||||
|
||||
case UMi_SC_NLOS:
|
||||
{h_bs = 10;
|
||||
h_ut = 1.5;
|
||||
H = 5;
|
||||
W = 20;
|
||||
d_2d = 10;
|
||||
flag = 1;
|
||||
fill_pathloss_desc(chan_desc,h_bs,h_ut,H,W,d_2d,flag);
|
||||
break;}
|
||||
|
||||
case InH_Office_LOS:
|
||||
{h_bs = 10;
|
||||
h_ut = 1.5;
|
||||
H = 5;
|
||||
W = 20;
|
||||
d_2d = 1;
|
||||
flag = 1;
|
||||
fill_pathloss_desc(chan_desc,h_bs,h_ut,H,W,d_2d,flag);
|
||||
break;}
|
||||
|
||||
case InH_Office_NLOS:
|
||||
{h_bs = 10;
|
||||
h_ut = 1.5;
|
||||
H = 5;
|
||||
W = 20;
|
||||
d_2d = 1;
|
||||
flag = 1;
|
||||
fill_pathloss_desc(chan_desc,h_bs,h_ut,H,W,d_2d,flag);
|
||||
break;}
|
||||
|
||||
case InF_LOS:
|
||||
{h_bs = 10;
|
||||
h_ut = 1.5;
|
||||
H = 5;
|
||||
W = 20;
|
||||
d_2d = 1;
|
||||
flag = 1;
|
||||
fill_pathloss_desc(chan_desc,h_bs,h_ut,H,W,d_2d,flag);
|
||||
break;}
|
||||
|
||||
case InF_NLOS_SL:
|
||||
{h_bs = 10;
|
||||
h_ut = 1.5;
|
||||
H = 5;
|
||||
W = 20;
|
||||
d_2d = 1;
|
||||
flag = 1;
|
||||
fill_pathloss_desc(chan_desc,h_bs,h_ut,H,W,d_2d,flag);
|
||||
break;}
|
||||
|
||||
case InF_NLOS_DL:
|
||||
{h_bs = 10;
|
||||
h_ut = 1.5;
|
||||
H = 5;
|
||||
W = 20;
|
||||
d_2d = 1;
|
||||
flag = 1;
|
||||
fill_pathloss_desc(chan_desc,h_bs,h_ut,H,W,d_2d,flag);
|
||||
break;}
|
||||
|
||||
case InF_NLOS_SH:
|
||||
{h_bs = 10;
|
||||
h_ut = 1.5;
|
||||
H = 5;
|
||||
W = 20;
|
||||
d_2d = 1;
|
||||
flag = 1;
|
||||
fill_pathloss_desc(chan_desc,h_bs,h_ut,H,W,d_2d,flag);
|
||||
break;}
|
||||
|
||||
case InF_NLOS_DH:
|
||||
{h_bs = 10;
|
||||
h_ut = 1.5;
|
||||
H = 5;
|
||||
W = 20;
|
||||
d_2d = 1;
|
||||
flag = 1;
|
||||
fill_pathloss_desc(chan_desc,h_bs,h_ut,H,W,d_2d,flag);
|
||||
break;}
|
||||
|
||||
default:
|
||||
{h_bs = 0;
|
||||
h_ut = 0;
|
||||
H = 0;
|
||||
W = 0;
|
||||
d_2d = 0;
|
||||
flag = 0;
|
||||
fill_pathloss_desc(chan_desc,h_bs,h_ut,H,W,d_2d,flag);
|
||||
break;}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void fill_channel_desc(channel_desc_t *chan_desc,
|
||||
uint8_t nb_tx,
|
||||
uint8_t nb_rx,
|
||||
@@ -747,7 +566,6 @@ double get_normalization_ch_factor(channel_desc_t *desc)
|
||||
channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
|
||||
uint8_t nb_rx,
|
||||
SCM_t channel_model,
|
||||
pathloss_model_t pathloss_model,
|
||||
double sampling_rate,
|
||||
uint64_t center_freq,
|
||||
double channel_bandwidth,
|
||||
@@ -802,8 +620,6 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
|
||||
double *tdl_amps_dB;
|
||||
double *tdl_delays;
|
||||
|
||||
set_pathloss_default_values(chan_desc);
|
||||
|
||||
/* Spatial Channel Models (SCM) channel model from TR 38.901 Section 7.7.2 */
|
||||
switch (channel_model) {
|
||||
case SCM_A:
|
||||
@@ -1414,7 +1230,7 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
|
||||
nb_taps = 1;
|
||||
Td = 0;
|
||||
channel_length = 1;
|
||||
ricean_factor = 1;
|
||||
ricean_factor = 0.0;
|
||||
aoa = .03;
|
||||
maxDoppler = 0;
|
||||
fill_channel_desc(chan_desc,nb_tx,
|
||||
@@ -2176,12 +1992,12 @@ static int channelmod_print_help(char *buff, int debug, telnet_printfunc_t prnt
|
||||
prnt("channelmod show current: display the currently used models in the running executable\n");
|
||||
prnt("channelmod modify <model index> <param name> <param value>: set the specified parameters in a current model to the given value\n");
|
||||
prnt(" <model index> specifies the model, the show current model command can be used to list the current models indexes\n");
|
||||
prnt(" <param name> can be one of \"riceanf\", \"aoa\", \"randaoa\", \"ploss\", \"noise_power_dB\", \"offset\", \"forgetf\",\"pathloss_model\", \"hBS\", \"hUT\", \"H\", \"W\"\n");
|
||||
prnt(" <param name> can be one of \"riceanf\", \"aoa\", \"randaoa\", \"ploss\", \"noise_power_dB\", \"offset\", \"forgetf\"\n");
|
||||
return CMDSTATUS_FOUND;
|
||||
}
|
||||
|
||||
static char *pnames[] = {"riceanf", "aoa", "randaoa", "ploss", "noise_power_dB", "offset", "forgetf","pathloss_model","hBS","hUT","H","W",NULL};
|
||||
static char *pformat[] = {"%lf", "%lf", "%i", "%lf", "%lf", "%i", "%lf","%s","%lf","%lf","%lf","%lf",NULL};
|
||||
static char *pnames[] = {"riceanf", "aoa", "randaoa", "ploss", "noise_power_dB", "offset", "forgetf", NULL};
|
||||
static char *pformat[] = {"%lf", "%lf", "%i", "%lf", "%lf", "%i", "%lf", NULL};
|
||||
int get_channel_params(char *buf, int debug, void *vdata, telnet_printfunc_t prnt)
|
||||
{
|
||||
if (buf == NULL) {
|
||||
@@ -2243,7 +2059,7 @@ int get_channel_params(char *buf, int debug, void *vdata, telnet_printfunc_t prn
|
||||
|
||||
} /* get_currentchannel_type */
|
||||
|
||||
void display_channelmodel(channel_desc_t *cd,int debug, telnet_printfunc_t prnt) {
|
||||
static void display_channelmodel(channel_desc_t *cd,int debug, telnet_printfunc_t prnt) {
|
||||
prnt("model owner: %s\n",(cd->module_id != 0)?module_id_str[cd->module_id]:"not set");
|
||||
prnt("nb_tx: %i nb_rx: %i taps: %i bandwidth: %lf sampling: %lf\n",cd->nb_tx, cd->nb_rx, cd->nb_taps, cd->channel_bandwidth, cd->sampling_rate);
|
||||
prnt("channel length: %i Max path delay: %lf ricean fact.: %lf angle of arrival: %lf (randomized:%s)\n",
|
||||
@@ -2252,8 +2068,7 @@ void display_channelmodel(channel_desc_t *cd,int debug, telnet_printfunc_t prnt)
|
||||
cd->max_Doppler, cd->path_loss_dB, cd->noise_power_dB, cd->channel_offset, cd->forgetting_factor);
|
||||
prnt("Initial phase: %lf nb_path: %i \n",
|
||||
cd->ip, cd->nb_paths);
|
||||
char* pathlossmodel_names[] = {"None", "RMa_LOS", "RMa_NLOS", "UMa_LOS", "UMa_NLOS", "UMi_SC_LOS", "UMi_SC_NLOS", "InH_Office_LOS", "InH_Office_NLOS", "InF_LOS", "InF_NLOS_DL", "InF_NLOS_DH", "InF_NLOS_SL", "InF_NLOS_SH"};
|
||||
prnt("Pathloss Model: %s hBS: %lf hUT: %lf H:%lf W:%lf distance_2d: %lf PMFlag:%d\n",pathlossmodel_names[cd->pathloss_model],cd->pathloss_model_var.h_bs,cd->pathloss_model_var.h_ut,cd->pathloss_model_var.H,cd->pathloss_model_var.W,cd->pathloss_model_var.d_2d,cd->PM_Flag);
|
||||
|
||||
for (int i=0; i<cd->nb_taps ; i++) {
|
||||
prnt("taps: %i lin. ampli. : %lf delay: %lf \n",i,cd->amps[i], cd->delays[i]);
|
||||
}
|
||||
@@ -2340,202 +2155,6 @@ static int channelmod_show_cmd(char *buff, int debug, telnet_printfunc_t prnt) {
|
||||
|
||||
|
||||
|
||||
double g(double d_2D){
|
||||
if(d_2D<=18)
|
||||
return 0;
|
||||
else
|
||||
return((5/4)*pow((d_2D/100),3)*exp(-d_2D/150));
|
||||
}
|
||||
|
||||
double c1(double d_2D,double h_UT){
|
||||
if(h_UT<13)
|
||||
return 0;
|
||||
else if(h_UT<=23 || h_UT>=13){
|
||||
double b= g(d_2D);
|
||||
return(pow(((h_UT-13)/10),1.5)*b);
|
||||
}else return 0.0;
|
||||
}
|
||||
|
||||
double generateRandomNumber(double min, double max){
|
||||
int numValues = (int)((max - min) / 0.5) + 1;
|
||||
int randomIndex = rand() % numValues;
|
||||
double randomNumber = min + randomIndex * 0.5;
|
||||
return randomNumber;
|
||||
}
|
||||
|
||||
int calculate_pathloss_cmd(channel_desc_t *chan_desc){
|
||||
|
||||
double d_2D = chan_desc->pathloss_model_var.d_2d; //2D Distance
|
||||
double h_BS = chan_desc->pathloss_model_var.h_bs; //Base Station Antenna Height
|
||||
double h_UT = chan_desc->pathloss_model_var.h_ut; //User Terminal Antenna Height
|
||||
double h = chan_desc->pathloss_model_var.H; //Average Height of Buildings
|
||||
double w = chan_desc->pathloss_model_var.W; //Average Width of the street
|
||||
double fc = (double)chan_desc->center_freq; //Center Frequency
|
||||
double fc_norm = fc/(pow(10,9)); //Normalized Center Frequency to 1Ghz
|
||||
const double c = 299792458; /* 3e8 */
|
||||
|
||||
|
||||
double d_3D = sqrt((d_2D*d_2D)+((h_BS-h_UT)*(h_BS-h_UT))); //3D Distance
|
||||
|
||||
if(chan_desc->pathloss_model == RMa_LOS || chan_desc->pathloss_model == RMa_NLOS){
|
||||
double d_BP = (2*M_PI*h_BS*h_UT*fc)/c; //Break Point Distance
|
||||
double d_3D_BP = sqrt((d_BP*d_BP)+((h_BS-h_UT)*(h_BS-h_UT)));
|
||||
double PL1 = 20*log10(40*M_PI*d_3D*fc_norm/3)+(min(pow(0.03*h,1.72),10))*log10(d_3D)-min(pow(0.044*h,1.72),14.77)+(0.002*log10(h)*d_3D)+gaussZiggurat(0.0,(4.0*4.0));
|
||||
double PL2 = (20*log10(40*M_PI*d_3D_BP*fc_norm/3)+(min(pow(0.03*h,1.72),10))*log10(d_3D_BP)-min(pow(0.044*h,1.72),14.77)+0.002*log10(h)*d_3D_BP)+40*log10(d_3D/d_BP)+gaussZiggurat(0.0,(6.0*6.0));
|
||||
double RMa_LOS_PL;
|
||||
if(d_2D<=d_BP || d_2D>=10){
|
||||
RMa_LOS_PL=PL1;
|
||||
}
|
||||
else{
|
||||
RMa_LOS_PL=PL2;
|
||||
}
|
||||
if(chan_desc->pathloss_model==RMa_LOS){
|
||||
chan_desc->path_loss_dB=-1*RMa_LOS_PL;
|
||||
printf("Pathloss is set to %lf db",RMa_LOS_PL);
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
double RMa_NLOS_PL;
|
||||
double PL3 = 161.04 -7.1*log10(w)+(7.5*log10(h))-((24.37-3.7*(h/h_BS)*(h/h_BS))*(log10(h_BS)))+((43.42-3.1*log10(h_BS))*(log10(d_3D)-3))+(20*log10(fc_norm))-(3.2*(log10(11.75*h_UT))*(log10(11.75*h_UT)) - 4.97)+gaussZiggurat(0.0,(8.0*8.0));
|
||||
RMa_NLOS_PL = max(RMa_LOS_PL,PL3);
|
||||
chan_desc->path_loss_dB=-1*RMa_NLOS_PL;
|
||||
printf("Pathloss is set to %lf db",RMa_NLOS_PL);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if(chan_desc->pathloss_model == UMa_LOS || chan_desc->pathloss_model == UMa_NLOS){
|
||||
double hE;
|
||||
double a = c1(d_2D,h_UT);
|
||||
double pr = 1/(1+a);
|
||||
if(pr>0.5)
|
||||
hE=1;
|
||||
else
|
||||
hE=generateRandomNumber(12,(h_UT - 1.5));
|
||||
//Effective antenna lengths
|
||||
double h1_BS=h_BS-hE;
|
||||
double h1_UT=h_UT-hE;
|
||||
double d1_BP=(4*h1_BS*h1_UT*fc/c);
|
||||
double PL1 = 28+(22*log10(d_3D))+(20*log10(fc_norm))+gaussZiggurat(0,(4*4));
|
||||
double PL2 = 28+(40*log10(d_3D))+(20*log10(fc_norm))-(9*log10((pow(d1_BP,2)+pow((h_BS-h_UT),2))))+gaussZiggurat(0,(4*4));
|
||||
double UMa_LOS_PL=0;
|
||||
if(d_2D<=d1_BP || d_2D>=10){
|
||||
UMa_LOS_PL=PL1;
|
||||
}
|
||||
else if (d_2D<=5000 || d_2D > d1_BP){
|
||||
UMa_LOS_PL=PL2;
|
||||
}
|
||||
if(chan_desc->pathloss_model==RMa_LOS){
|
||||
chan_desc->path_loss_dB=-1*UMa_LOS_PL;
|
||||
printf("Pathloss is set to %lf db",UMa_LOS_PL);
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
double UMa_NLOS_PL;
|
||||
double PL3 = 13.54+(39.08*log10(d_3D))+(20*log10(fc_norm))-(0.6*(h_UT-1.5))+gaussZiggurat(0,(6*6));
|
||||
UMa_NLOS_PL = max(UMa_LOS_PL,PL3);
|
||||
chan_desc->path_loss_dB=-1*UMa_NLOS_PL;
|
||||
printf("Pathloss is set to %lf db",UMa_NLOS_PL);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if(chan_desc->pathloss_model == UMi_SC_LOS || chan_desc->pathloss_model == UMi_SC_NLOS){
|
||||
//Effective Antenna Lengths
|
||||
double h1_BS=h_BS-1;
|
||||
double h1_UT=h_UT-1;
|
||||
double d1_BP=(4*h1_BS*h1_UT*fc/c); //Break Point Distance
|
||||
double PL1 = 32.4+(21*log10(d_3D))+(20*log10(fc_norm))+gaussZiggurat(0,(4*4));
|
||||
double PL2 = 32.4+(40*log10(d_3D))+(20*log10(fc_norm))-(9.5*log10((pow(d1_BP,2)+pow((h_BS-h_UT),2))))+gaussZiggurat(0,(4*4));
|
||||
double UMi_SC_LOS_PL=0;
|
||||
if(d_2D<=d1_BP || d_2D>=10){
|
||||
UMi_SC_LOS_PL=PL1;
|
||||
}
|
||||
else if (d_2D<=5000 || d_2D > d1_BP){
|
||||
UMi_SC_LOS_PL=PL2;
|
||||
}
|
||||
if(chan_desc->pathloss_model==RMa_LOS){
|
||||
chan_desc->path_loss_dB=-1*UMi_SC_LOS_PL;
|
||||
printf("Pathloss is set to %lf db",UMi_SC_LOS_PL);
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
double UMi_SC_NLOS_PL;
|
||||
double PL3 = (35.3*log10(d_3D))+22.4+(21.3*log10(fc_norm))-(0.3*(h_UT-1.5))+gaussZiggurat(0,(7.82*7.82));
|
||||
UMi_SC_NLOS_PL = max(UMi_SC_LOS_PL,PL3);
|
||||
chan_desc->path_loss_dB=-1*UMi_SC_NLOS_PL;
|
||||
printf("Pathloss is set to %lf db",UMi_SC_NLOS_PL);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if(chan_desc->pathloss_model == InH_Office_LOS || chan_desc->pathloss_model == InH_Office_NLOS){
|
||||
|
||||
if(d_3D>150 || d_3D <1){
|
||||
printf("InH_Office Model is valid only between 1<=d_3D<=150");
|
||||
return 0;
|
||||
}
|
||||
|
||||
double InH_LOS_PL = 32.4+(17.3*log10(d_3D))+(20*log10(fc_norm))+gaussZiggurat(0,(3*3));
|
||||
if(chan_desc->pathloss_model==InH_Office_LOS){
|
||||
chan_desc->path_loss_dB=-1*InH_LOS_PL;
|
||||
printf("Pathloss is set to %lf db",InH_LOS_PL);
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
double PL1 = (38.3*log10(d_3D))+17.3+(24.9*log10(fc_norm))+gaussZiggurat(0,(8.03*8.03));
|
||||
double InH_NLOS_PL = max(InH_LOS_PL,PL1);
|
||||
chan_desc->path_loss_dB=-1*InH_NLOS_PL;
|
||||
printf("Pathloss is set to %lf db",InH_NLOS_PL);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if(chan_desc->pathloss_model == InF_LOS || chan_desc->pathloss_model == InF_NLOS_DH || chan_desc->pathloss_model == InF_NLOS_SH || chan_desc->pathloss_model == InF_NLOS_DL || chan_desc->pathloss_model == InF_NLOS_SL){
|
||||
|
||||
if(d_3D>600 || d_3D <1){
|
||||
printf("InH_Office Model is valid only between 1<=d_3D<=600");
|
||||
return 0;
|
||||
}
|
||||
|
||||
double InF_LOS_PL = 31.84+(21.50*log10(d_3D))+(19*log10(fc_norm))+gaussZiggurat(0,(4*4));
|
||||
if(chan_desc->pathloss_model==InF_LOS){
|
||||
chan_desc->path_loss_dB=-1*InF_LOS_PL;
|
||||
printf("Pathloss is set to %lf db",InF_LOS_PL);
|
||||
return 0;
|
||||
}
|
||||
else if(chan_desc->pathloss_model==InF_NLOS_SL || chan_desc->pathloss_model==InF_NLOS_DL){
|
||||
double PL1 = 33+(25.5*log10(d_3D))+(20*log10(fc_norm))+gaussZiggurat(0,(5.7*5.7));
|
||||
double InF_NLOS_SL_PL = max(InF_LOS_PL,PL1);
|
||||
if(chan_desc->pathloss_model==InF_NLOS_SL){
|
||||
chan_desc->path_loss_dB=-1*InF_NLOS_SL_PL;
|
||||
printf("Pathloss is set to %lf db",InF_NLOS_SL_PL);
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
double PL2 = 18.6+(35.7*log10(d_3D))+(20*log10(fc_norm))+gaussZiggurat(0,(7.2*7.2));
|
||||
double InF_NLOS_DL_PL = max(max(InF_LOS_PL,InF_NLOS_SL_PL),PL2);
|
||||
chan_desc->path_loss_dB=-1*InF_NLOS_DL_PL;
|
||||
printf("Pathloss is set to %lf db",InF_NLOS_DL_PL);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if(chan_desc->pathloss_model==InF_NLOS_SH){
|
||||
double PL3=32.4+(23*log10(d_3D))+(20*log10(fc_norm))+gaussZiggurat(0,(5.9*5.9));
|
||||
double InF_NLOS_SH_PL=max(PL3,InF_LOS_PL);
|
||||
chan_desc->path_loss_dB=-1*InF_NLOS_SH_PL;
|
||||
printf("Pathloss is set to %lf db",InF_NLOS_SH_PL);
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
double PL4=33.63+(21.9*log10(d_3D))+(20*log10(fc_norm))+gaussZiggurat(0,(4*4));
|
||||
double InF_NLOS_DH_PL=max(PL4,InF_LOS_PL);
|
||||
chan_desc->path_loss_dB=-1*InF_NLOS_DH_PL;
|
||||
printf("Pathloss is set to %lf db",InF_NLOS_DH_PL);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int channelmod_modify_cmd(char *buff, int debug, telnet_printfunc_t prnt) {
|
||||
char *param=NULL, *value=NULL;
|
||||
int cd_id= -1;
|
||||
@@ -2574,14 +2193,8 @@ static int channelmod_modify_cmd(char *buff, int debug, telnet_printfunc_t prnt)
|
||||
else
|
||||
defined_channels[cd_id]->random_aoa=i;
|
||||
} else if ( strcmp(param,"ploss") == 0) {
|
||||
if (defined_channels[cd_id]->PM_Flag==0){
|
||||
double dbl = atof(value);
|
||||
defined_channels[cd_id]->path_loss_dB=dbl;
|
||||
}
|
||||
else{
|
||||
prnt("ERROR: Pathloss cannot be varied as Pathloss Model is set\n");
|
||||
}
|
||||
|
||||
double dbl = atof(value);
|
||||
defined_channels[cd_id]->path_loss_dB=dbl;
|
||||
} else if ( strcmp(param,"noise_power_dB") == 0) {
|
||||
double dbl = atof(value);
|
||||
defined_channels[cd_id]->noise_power_dB=dbl;
|
||||
@@ -2595,60 +2208,10 @@ static int channelmod_modify_cmd(char *buff, int debug, telnet_printfunc_t prnt)
|
||||
prnt("ERROR: forgetting factor range: 0 to 1 (disable variation), %lf is outof range\n",dbl);
|
||||
else
|
||||
defined_channels[cd_id]->forgetting_factor=dbl;
|
||||
}
|
||||
else if ( strcmp(param,"hUT") == 0) {
|
||||
double dbl = atof(value);
|
||||
if (defined_channels[cd_id]->pathloss_model== RMa_LOS || defined_channels[cd_id]->pathloss_model== RMa_NLOS)
|
||||
{
|
||||
if (dbl <1 || dbl > 10)
|
||||
prnt("Error: For Rma Model hUT can vary between 1<=hUT<=10; %lf is outof range\n",dbl);
|
||||
else
|
||||
defined_channels[cd_id]->pathloss_model_var.h_ut=dbl;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dbl <1.5 || dbl > 22.5)
|
||||
prnt("Error: For the given Pathloss Model hUT can vary between 1.5<=hUT<=22.5; %lf is outof range\n",dbl);
|
||||
else
|
||||
defined_channels[cd_id]-> pathloss_model_var.h_ut=dbl;
|
||||
}
|
||||
}
|
||||
else if ( strcmp(param,"hBS") == 0) {
|
||||
double dbl = atof(value);
|
||||
if (dbl <10 || dbl > 150)
|
||||
prnt("Error: For the given Pathloss Model hBS can vary between 10<=hUT<=150; %lf is outof range\n",dbl);
|
||||
else
|
||||
defined_channels[cd_id]->pathloss_model_var.h_bs=dbl;
|
||||
}
|
||||
else if ( strcmp(param,"H") == 0) {
|
||||
double dbl = atof(value);
|
||||
if (dbl <5 || dbl > 50)
|
||||
prnt("Error: For the given Pathloss Model H can vary between 5<=hUT<=50; %lf is outof range\n",dbl);
|
||||
else
|
||||
defined_channels[cd_id]->pathloss_model_var.H=dbl;
|
||||
}
|
||||
else if ( strcmp(param,"W") == 0) {
|
||||
double dbl = atof(value);
|
||||
if (dbl <5 || dbl > 50)
|
||||
prnt("Error: For the given Pathloss Model W can vary between 5<=hUT<=50; %lf is outof range\n",dbl);
|
||||
else
|
||||
defined_channels[cd_id]->pathloss_model_var.W=dbl;
|
||||
}
|
||||
else if ( strcmp(param,"pathloss_model") == 0) {
|
||||
int dbl = plmodelid_fromstrtype(value);
|
||||
if (dbl <0)
|
||||
prnt("Error: The Given Pathloss Model is not valid\n",dbl);
|
||||
else{
|
||||
defined_channels[cd_id]->pathloss_model=dbl;
|
||||
set_pathloss_default_values(defined_channels[cd_id]);
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
} else {
|
||||
prnt("ERROR: %s, unknown channel parameter\n",param);
|
||||
return CMDSTATUS_FOUND;
|
||||
}
|
||||
calculate_pathloss_cmd(defined_channels[cd_id]);
|
||||
display_channelmodel(defined_channels[cd_id],debug,prnt);
|
||||
free(param);
|
||||
free(value);
|
||||
@@ -2697,15 +2260,6 @@ int modelid_fromstrtype(char *modeltype) {
|
||||
return modelid;
|
||||
}
|
||||
|
||||
int plmodelid_fromstrtype(char *modeltype) {
|
||||
int modelid=map_str_to_int(plmod_names,modeltype);
|
||||
|
||||
if (modelid < 0)
|
||||
LOG_E(OCM,"random_channel.c: Error Pathloss model %s unknown\n",modeltype);
|
||||
|
||||
return modelid;
|
||||
}
|
||||
|
||||
double channelmod_get_snr_dB(void) {
|
||||
return snr_dB;
|
||||
}
|
||||
@@ -2730,7 +2284,7 @@ void init_channelmod(void) {
|
||||
} /* init_channelmod */
|
||||
|
||||
|
||||
int load_channellist(uint8_t nb_tx, uint8_t nb_rx, double sampling_rate, double channel_bandwidth, uint64_t fc) {
|
||||
int load_channellist(uint8_t nb_tx, uint8_t nb_rx, double sampling_rate, double channel_bandwidth) {
|
||||
paramdef_t achannel_params[] = CHANNELMOD_MODEL_PARAMS_DESC;
|
||||
paramlist_def_t channel_list;
|
||||
memset(&channel_list,0,sizeof(paramlist_def_t));
|
||||
@@ -2745,11 +2299,9 @@ int load_channellist(uint8_t nb_tx, uint8_t nb_rx, double sampling_rate, double
|
||||
int pindex_PL = config_paramidx_fromname(achannel_params,numparams, CHANNELMOD_MODEL_PL_PNAME );
|
||||
int pindex_NP = config_paramidx_fromname(achannel_params,numparams, CHANNELMOD_MODEL_NP_PNAME );
|
||||
int pindex_TYPE = config_paramidx_fromname(achannel_params,numparams, CHANNELMOD_MODEL_TYPE_PNAME);
|
||||
int pindex_PLM = config_paramidx_fromname(achannel_params,numparams, CHANNELMOD_MODEL_PLM_PNAME);
|
||||
|
||||
for (int i=0; i<channel_list.numelt; i++) {
|
||||
int modid = modelid_fromstrtype( *(channel_list.paramarray[i][pindex_TYPE].strptr) );
|
||||
int plmid = plmodelid_fromstrtype( *(channel_list.paramarray[i][pindex_PLM].strptr) );
|
||||
|
||||
if (modid <0) {
|
||||
LOG_E(OCM,"Valid channel model types:\n");
|
||||
@@ -2761,22 +2313,11 @@ int load_channellist(uint8_t nb_tx, uint8_t nb_rx, double sampling_rate, double
|
||||
AssertFatal(0, "\n Choose a valid model type\n");
|
||||
}
|
||||
|
||||
if (plmid <0) {
|
||||
LOG_E(OCM,"Valid Pathloss model types:\n");
|
||||
|
||||
for (int m=0; plmod_names[i].name != NULL ; m++) {
|
||||
printf(" %s ", map_int_to_str(plmod_names,m ));
|
||||
}
|
||||
|
||||
AssertFatal(0, "\n Choose a valid model type\n");
|
||||
}
|
||||
|
||||
channel_desc_t *channeldesc_p = new_channel_desc_scm(nb_tx,
|
||||
nb_rx,
|
||||
modid,
|
||||
plmid,
|
||||
sampling_rate,
|
||||
fc,
|
||||
0,
|
||||
channel_bandwidth,
|
||||
*(channel_list.paramarray[i][pindex_DT].dblptr),
|
||||
0.0,
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
#ifndef __SIMULATION_TOOLS_DEFS_H__
|
||||
#define __SIMULATION_TOOLS_DEFS_H__
|
||||
#include "PHY/defs_common.h"
|
||||
#include "common/utils/telnetsrv/telnetsrv.h"
|
||||
#include <pthread.h>
|
||||
/** @defgroup _numerical_ Useful Numerical Functions
|
||||
*@{
|
||||
@@ -58,51 +57,6 @@ typedef enum {
|
||||
CORR_LEVEL_HIGH
|
||||
} corr_level_t;
|
||||
|
||||
typedef struct pathloss_model_variable_t_s{
|
||||
//antenna height for BS in meters
|
||||
double h_bs;
|
||||
//antenna height for UT (User Terminal) in meters
|
||||
double h_ut;
|
||||
//H = avg. building height in meters
|
||||
double H ;
|
||||
//W = avg. street width in meters
|
||||
double W ;
|
||||
//2D distance between Tx and Rx in meters
|
||||
double d_2d;
|
||||
}pathloss_model_variable_t;
|
||||
|
||||
|
||||
typedef enum {
|
||||
//No Pathloss model selected user can set Pathloss.
|
||||
None,
|
||||
//Rural Macro Line of Sight
|
||||
RMa_LOS,
|
||||
//Rural Macro Non-Line of Sight
|
||||
RMa_NLOS,
|
||||
//Urban Macro Line of Sight
|
||||
UMa_LOS,
|
||||
//Urban Macro Non-Line of Sight
|
||||
UMa_NLOS,
|
||||
//Urabn Micro Street Canyon Line of Sight
|
||||
UMi_SC_LOS,
|
||||
//Urabn Micro Street Canyon Non-Line of Sight
|
||||
UMi_SC_NLOS,
|
||||
//Indoor Hotspot Office Line of Sight
|
||||
InH_Office_LOS,
|
||||
//Indoor Hotspot Office Non-Line of Sight
|
||||
InH_Office_NLOS,
|
||||
//Indoor Factory Line of Sight
|
||||
InF_LOS,
|
||||
//Indoor Factory with Dense clutter and Low base station height (both Tx and Rx are below the average height of the clutter)
|
||||
InF_NLOS_DL,
|
||||
//Indoor Factory with Dense clutter and High base station height (Tx or Rx elevated above the clutter)
|
||||
InF_NLOS_DH,
|
||||
//Indoor Factory with Sparse clutter and Low base station height (both Tx and Rx are below the average height of the clutter)
|
||||
InF_NLOS_SL,
|
||||
//Indoor Factory with Sparse clutter and High base station height (Tx or Rx elevated above the clutter)
|
||||
InF_NLOS_SH
|
||||
} pathloss_model_t;
|
||||
|
||||
typedef struct {
|
||||
///Number of tx antennas
|
||||
uint8_t nb_tx;
|
||||
@@ -169,15 +123,9 @@ typedef struct {
|
||||
/// identifies channel descriptor owner (the module which created this descriptor
|
||||
channelmod_moduleid_t module_id;
|
||||
/// name of this descriptor,used for model created from config file at init time
|
||||
char *model_name;
|
||||
char *model_name;
|
||||
/// flags to properly trigger memory free
|
||||
unsigned int free_flags;
|
||||
/// Pathloss Models as defined by TR 38.901 version 16.1.0 Release 16
|
||||
pathloss_model_t pathloss_model;
|
||||
/// Variables required for pathloss models
|
||||
pathloss_model_variable_t pathloss_model_var;
|
||||
///Pathloss Model Flag doesn't let the user change the pathloss directly when Pathloss Model is set
|
||||
int PM_Flag;
|
||||
} channel_desc_t;
|
||||
|
||||
typedef struct {
|
||||
@@ -310,23 +258,6 @@ typedef enum {
|
||||
#define CONFIG_HLP_SNR "Set average SNR in dB (for --siml1 option)\n"
|
||||
#define CHANNELMOD_SECTION "channelmod"
|
||||
|
||||
#define PLMOD_MAP_INIT \
|
||||
{"None",None},\
|
||||
{"RMa_LOS",RMa_LOS},\
|
||||
{"RMa_NLOS",RMa_NLOS},\
|
||||
{"UMa_LOS",UMa_LOS},\
|
||||
{"UMa_NLOS",UMa_NLOS},\
|
||||
{"UMi_SC_LOS",UMi_SC_LOS},\
|
||||
{"UMi_SC_NLOS",UMi_SC_NLOS},\
|
||||
{"InH_Office_LOS",InH_Office_LOS},\
|
||||
{"InH_Office_NLOS",InH_Office_NLOS},\
|
||||
{"InF_LOS",InF_LOS},\
|
||||
{"InF_NLOS_DL",InF_NLOS_DL},\
|
||||
{"InF_NLOS_DH",InF_NLOS_DH},\
|
||||
{"InF_NLOS_SL",InF_NLOS_SL},\
|
||||
{"InF_NLOS_SH",InF_NLOS_SH},\
|
||||
{NULL, -1}
|
||||
|
||||
/* global channel modelization parameters */
|
||||
#define CHANNELMOD_MODELLIST_PARANAME "modellist"
|
||||
|
||||
@@ -340,10 +271,9 @@ typedef enum {
|
||||
}
|
||||
// clang-format on
|
||||
|
||||
/* parameters for one model */
|
||||
/* parameters for one model */
|
||||
#define CHANNELMOD_MODEL_NAME_PNAME "model_name"
|
||||
#define CHANNELMOD_MODEL_TYPE_PNAME "type"
|
||||
#define CHANNELMOD_MODEL_PLM_PNAME "pathloss_model"
|
||||
#define CHANNELMOD_MODEL_PL_PNAME "ploss_dB"
|
||||
#define CHANNELMOD_MODEL_NP_PNAME "noise_power_dB"
|
||||
#define CHANNELMOD_MODEL_FF_PNAME "forgetfact"
|
||||
@@ -354,7 +284,6 @@ typedef enum {
|
||||
#define CHANNELMOD_MODEL_PARAMS_DESC { \
|
||||
{CHANNELMOD_MODEL_NAME_PNAME, "name of the model\n", 0, .strptr=NULL , .defstrval="", TYPE_STRING, 0 }, \
|
||||
{CHANNELMOD_MODEL_TYPE_PNAME, "name of the model type\n", 0, .strptr=NULL , .defstrval="AWGN", TYPE_STRING, 0 }, \
|
||||
{CHANNELMOD_MODEL_PLM_PNAME, "name of the pathloss Model\n", 0, .strptr=NULL , .defstrval="None", TYPE_STRING, 0 }, \
|
||||
{CHANNELMOD_MODEL_PL_PNAME, "channel path loss in dB\n", 0, .dblptr=NULL, .defdblval=0, TYPE_DOUBLE, 0 }, \
|
||||
{CHANNELMOD_MODEL_NP_PNAME, "channel noise in dB\n", 0, .dblptr=NULL, .defdblval=-50, TYPE_DOUBLE, 0 }, \
|
||||
{CHANNELMOD_MODEL_FF_PNAME, "channel forget factor ((0 to 1)\n", 0, .dblptr=NULL, .defdblval=0, TYPE_DOUBLE, 0 }, \
|
||||
@@ -391,7 +320,6 @@ typedef struct {
|
||||
channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
|
||||
uint8_t nb_rx,
|
||||
SCM_t channel_model,
|
||||
pathloss_model_t pathloss_model,
|
||||
double sampling_rate,
|
||||
uint64_t center_freq,
|
||||
double channel_bandwidth,
|
||||
@@ -405,7 +333,6 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
|
||||
|
||||
channel_desc_t *find_channel_desc_fromname( char *modelname );
|
||||
|
||||
int calculate_pathloss_cmd(channel_desc_t *chan_desc);
|
||||
|
||||
/**
|
||||
\brief free memory allocated for a model descriptor
|
||||
@@ -626,14 +553,14 @@ int modelid_fromstrtype(char *modeltype);
|
||||
double channelmod_get_snr_dB(void);
|
||||
double channelmod_get_sinr_dB(void);
|
||||
void init_channelmod(void) ;
|
||||
int load_channellist(uint8_t nb_tx, uint8_t nb_rx, double sampling_rate, double channel_bandwidth, uint64_t fc) ;
|
||||
int load_channellist(uint8_t nb_tx, uint8_t nb_rx, double sampling_rate, double channel_bandwidth) ;
|
||||
double N_RB2sampling_rate(uint16_t N_RB);
|
||||
double N_RB2channel_bandwidth(uint16_t N_RB);
|
||||
|
||||
/* Linear phase noise model */
|
||||
/*!
|
||||
\brief This function produce phase noise and add to input signal
|
||||
\param ts Sampling time
|
||||
\param ts Sampling time
|
||||
\param *Re *Im Real and Imag part of the signal
|
||||
*/
|
||||
//look-up table for the sine (cosine) function
|
||||
|
||||
Submodule openair2/E2AP/flexric updated: 035fd2e8f9...8ee3aca107
@@ -120,7 +120,6 @@ typedef enum { SIMU_ROLE_SERVER = 1, SIMU_ROLE_CLIENT } simuRole;
|
||||
|
||||
static void getset_currentchannels_type(char *buf, int debug, webdatadef_t *tdata, telnet_printfunc_t prnt);
|
||||
extern int get_currentchannels_type(char *buf, int debug, webdatadef_t *tdata, telnet_printfunc_t prnt); // in random_channel.c
|
||||
extern void display_channelmodel(channel_desc_t *cd,int debug, telnet_printfunc_t prnt); // in randon_channel.c
|
||||
static int rfsimu_setchanmod_cmd(char *buff, int debug, telnet_printfunc_t prnt, void *arg);
|
||||
static int rfsimu_setdistance_cmd(char *buff, int debug, telnet_printfunc_t prnt, void *arg);
|
||||
static int rfsimu_getdistance_cmd(char *buff, int debug, telnet_printfunc_t prnt, void *arg);
|
||||
@@ -161,7 +160,6 @@ typedef struct {
|
||||
simuRole role;
|
||||
char *ip;
|
||||
uint16_t port;
|
||||
uint64_t fc; //center frequency
|
||||
int saveIQfile;
|
||||
buffer_t buf[MAX_FD_RFSIMU];
|
||||
int rx_num_channels;
|
||||
@@ -169,7 +167,6 @@ typedef struct {
|
||||
double sample_rate;
|
||||
double tx_bw;
|
||||
int channelmod;
|
||||
int pathlossmod;
|
||||
double chan_pathloss;
|
||||
double chan_forgetfact;
|
||||
int chan_offset;
|
||||
@@ -357,7 +354,7 @@ static void rfsimulator_readconfig(rfsimulator_state_t *rfsimulator) {
|
||||
break;
|
||||
} else if (strcmp(rfsimu_params[p].strlistptr[i],"chanmod") == 0) {
|
||||
init_channelmod();
|
||||
load_channellist(rfsimulator->tx_num_channels, rfsimulator->rx_num_channels, rfsimulator->sample_rate, rfsimulator->tx_bw, rfsimulator->fc);
|
||||
load_channellist(rfsimulator->tx_num_channels, rfsimulator->rx_num_channels, rfsimulator->sample_rate, rfsimulator->tx_bw);
|
||||
rfsimulator->channelmod=true;
|
||||
} else {
|
||||
fprintf(stderr, "unknown rfsimulator option: %s\n", rfsimu_params[p].strlistptr[i]);
|
||||
@@ -414,7 +411,6 @@ static int rfsimu_setchanmod_cmd(char *buff, int debug, telnet_printfunc_t prnt,
|
||||
channel_desc_t *newmodel = new_channel_desc_scm(t->tx_num_channels,
|
||||
t->rx_num_channels,
|
||||
channelmod,
|
||||
t->pathlossmod,
|
||||
t->sample_rate,
|
||||
0,
|
||||
t->tx_bw,
|
||||
@@ -571,9 +567,6 @@ static int rfsimu_setdistance_cmd(char *buff, int debug, telnet_printfunc_t prnt
|
||||
const int nbTx = cd->nb_tx;
|
||||
prnt(" %s: Modifying model %s...\n", __func__, modelname);
|
||||
rfsimu_offset_change_cirBuf(b->circularBuf, t->nextRxTstamp, CirSize, old_offset, new_offset, nbTx);
|
||||
cd->pathloss_model_var.d_2d = new_distance;
|
||||
calculate_pathloss_cmd(cd);
|
||||
display_channelmodel(cd,debug,prnt);
|
||||
}
|
||||
|
||||
free(modelname);
|
||||
@@ -1084,8 +1077,7 @@ int device_init(openair0_device *device, openair0_config_t *openair0_cfg) {
|
||||
rfsimulator->tx_num_channels=openair0_cfg->tx_num_channels;
|
||||
rfsimulator->rx_num_channels=openair0_cfg->rx_num_channels;
|
||||
rfsimulator->sample_rate=openair0_cfg->sample_rate;
|
||||
rfsimulator->fc=openair0_cfg->tx_freq[0];
|
||||
rfsimulator->tx_bw=openair0_cfg->tx_bw;
|
||||
rfsimulator->tx_bw=openair0_cfg->tx_bw;
|
||||
rfsimulator_readconfig(rfsimulator);
|
||||
LOG_W(HW, "sample_rate %f\n", rfsimulator->sample_rate);
|
||||
pthread_mutex_init(&Sockmutex, NULL);
|
||||
|
||||
@@ -1,334 +0,0 @@
|
||||
Active_gNBs = ( "gNB-OAI");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
gNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_ID = 0xe00;
|
||||
gNB_name = "gNB-OAI";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
plmn_list = ({ mcc = 001; mnc = 01; mnc_length = 2; snssaiList = ({ sst = 1; }) });
|
||||
|
||||
nr_cellid = 12345678L;
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
do_CSIRS = 1;
|
||||
do_SRS = 1;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
{
|
||||
controlResourceSetZero = 12;
|
||||
searchSpaceZero = 0;
|
||||
});
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
|
||||
physCellId = 0;
|
||||
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
|
||||
absoluteFrequencySSB = 641280;
|
||||
dl_frequencyBand = 78;
|
||||
# this is 3600 MHz
|
||||
dl_absoluteFrequencyPointA = 640008;
|
||||
#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=27,L=48 (275*(L-1))+RBstart
|
||||
initialDLBWPlocationAndBandwidth = 28875; # 6366 12925 12956 28875 12952
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 1;
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 12;
|
||||
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 = 13;
|
||||
preambleReceivedTargetPower = -96;
|
||||
#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 = 4;
|
||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
|
||||
#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 = "192.168.70.132";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
preference = "ipv4";
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
|
||||
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.70.129/24";
|
||||
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
|
||||
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.70.129/24";
|
||||
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
};
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 150;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 0;
|
||||
ul_max_mcs = 28;
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
prach_dtx_threshold = 120;
|
||||
pucch0_dtx_threshold = 100;
|
||||
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 12;
|
||||
att_rx = 12;
|
||||
bands = [78];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 114;
|
||||
eNB_instances = [0];
|
||||
#beamforming 1x4 matrix:
|
||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||
clock_src = "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";
|
||||
}
|
||||
);
|
||||
|
||||
rfsimulator :
|
||||
{
|
||||
serveraddr = "server";
|
||||
serverport = "4043";
|
||||
options = "chanmod"; #("saviq"); or/and "chanmod"
|
||||
modelname = "AWGN";
|
||||
IQfile = "/tmp/rfsimulator.iqs";
|
||||
};
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
# valid values: nea0, nea1, nea2, nea3
|
||||
ciphering_algorithms = ( "nea0" );
|
||||
|
||||
# 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";
|
||||
};
|
||||
|
||||
channelmod = {
|
||||
max_chan=10;
|
||||
modellist="modellist_rfsimu_1";
|
||||
modellist_rfsimu_1 = (
|
||||
{
|
||||
model_name = "rfsimu_channel_enB0"
|
||||
type = "AWGN";
|
||||
ploss_dB = 0;
|
||||
noise_power_dB = -10;
|
||||
forgetfact = 0;
|
||||
offset = 0;
|
||||
ds_tdl = 0;
|
||||
},
|
||||
{
|
||||
model_name = "rfsimu_channel_ue0"
|
||||
type = "AWGN";
|
||||
ploss_dB = 0;
|
||||
noise_power_dB = -10;
|
||||
forgetfact = 0;
|
||||
offset = 0;
|
||||
ds_tdl = 0;
|
||||
}
|
||||
);
|
||||
modellist_rfsimu_2 = (
|
||||
{
|
||||
model_name = "rfsimu_channel_ue0"
|
||||
type = "AWGN";
|
||||
ploss_dB = 0;
|
||||
noise_power_dB = 0;
|
||||
forgetfact = 0;
|
||||
offset = 0;
|
||||
ds_tdl = 0;
|
||||
},
|
||||
{
|
||||
model_name = "rfsimu_channel_ue1"
|
||||
type = "AWGN";
|
||||
ploss_dB = 0;
|
||||
noise_power_dB = 0;
|
||||
forgetfact = 0;
|
||||
offset = 0;
|
||||
ds_tdl = 0;
|
||||
},
|
||||
{
|
||||
model_name = "rfsimu_channel_ue2"
|
||||
type = "AWGN";
|
||||
ploss_dB = 0;
|
||||
noise_power_dB = 0;
|
||||
forgetfact = 0;
|
||||
offset = 0;
|
||||
ds_tdl = 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";
|
||||
ngap_log_level ="debug";
|
||||
f1ap_log_level ="debug";
|
||||
};
|
||||
|
||||
e2_agent = {
|
||||
near_ric_ip_addr = "127.0.0.1";
|
||||
#sm_dir = "/path/where/the/SMs/are/located/"
|
||||
sm_dir = "/usr/local/lib/flexric/"
|
||||
};
|
||||
@@ -1,76 +0,0 @@
|
||||
uicc0 = {
|
||||
imsi = "001010000000001";
|
||||
key = "fec86ba6eb707ed08905757b1bb44b8f";
|
||||
opc= "C42449363BBAD02B66D16BC975D77CC1";
|
||||
dnn= "oai";
|
||||
nssai_sst=1;
|
||||
nssai_sd=0xffffff;
|
||||
}
|
||||
|
||||
channelmod = {
|
||||
max_chan=10;
|
||||
modellist="modellist_rfsimu_1";
|
||||
modellist_rfsimu_1 = (
|
||||
{
|
||||
model_name = "rfsimu_channel_enB0"
|
||||
type = "AWGN";
|
||||
ploss_dB = 0;
|
||||
noise_power_dB = -10;
|
||||
forgetfact = 0;
|
||||
offset = 0;
|
||||
ds_tdl = 0;
|
||||
},
|
||||
{
|
||||
model_name = "rfsimu_channel_ue0"
|
||||
type = "AWGN";
|
||||
ploss_dB = 0;
|
||||
noise_power_dB = -10;
|
||||
forgetfact = 0;
|
||||
offset = 0;
|
||||
ds_tdl = 0;
|
||||
}
|
||||
);
|
||||
modellist_rfsimu_2 = (
|
||||
{
|
||||
model_name = "rfsimu_channel_ue0"
|
||||
type = "AWGN";
|
||||
ploss_dB = 0;
|
||||
noise_power_dB = 0;
|
||||
forgetfact = 0;
|
||||
offset = 0;
|
||||
ds_tdl = 0;
|
||||
},
|
||||
{
|
||||
model_name = "rfsimu_channel_ue1"
|
||||
type = "AWGN";
|
||||
ploss_dB = 0;
|
||||
noise_power_dB = 0;
|
||||
forgetfact = 0;
|
||||
offset = 0;
|
||||
ds_tdl = 0;
|
||||
},
|
||||
{
|
||||
model_name = "rfsimu_channel_ue2"
|
||||
type = "AWGN";
|
||||
ploss_dB = 0;
|
||||
noise_power_dB = 0;
|
||||
forgetfact = 0;
|
||||
offset = 0;
|
||||
ds_tdl = 0;
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level ="info";
|
||||
hw_log_level ="info";
|
||||
phy_log_level ="critical";
|
||||
mac_log_level ="critical";
|
||||
rlc_log_level ="critical";
|
||||
pdcp_log_level ="critical";
|
||||
rrc_log_level ="critical";
|
||||
ngap_log_level ="critical";
|
||||
f1ap_log_level ="critical";
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user