From db326bbf44d1fb6a74ca8e3a94c1cb6b167f84a3 Mon Sep 17 00:00:00 2001 From: Guy De Souza <desouza@eurecom.fr> Date: Wed, 25 Apr 2018 10:14:54 +0200 Subject: [PATCH] SSB repositioning --- nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h | 2 ++ openair1/PHY/INIT/nr_init.c | 2 ++ openair1/PHY/INIT/nr_init_ru.c | 4 ++-- openair1/PHY/NR_TRANSPORT/nr_pss.c | 2 +- openair1/PHY/NR_TRANSPORT/nr_sss.c | 2 +- openair1/PHY/defs.h | 2 ++ openair1/SCHED_NR/defs.h | 1 + openair1/SCHED_NR/nr_ru_procedures.c | 3 +-- openair1/SCHED_NR/phy_procedures_nr_common.c | 8 ++++---- openair1/SCHED_NR/phy_procedures_nr_gNB.c | 2 +- targets/RT/USER/nr-ru.c | 6 +++--- 11 files changed, 20 insertions(+), 14 deletions(-) diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h index 5ce2761256..0d4eec073d 100644 --- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h +++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface.h @@ -684,6 +684,7 @@ typedef struct { nfapi_uint16_tlv_t ssb_position_in_burst; nfapi_uint16_tlv_t ssb_periodicity; nfapi_uint16_tlv_t ss_pbch_block_power; + nfapi_uint16_tlv_t n_ssb_crb; } nfapi_sch_config_t; #define NFAPI_SCH_CONFIG_PRIMARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG 0x001E @@ -694,6 +695,7 @@ typedef struct { #define NFAPI_SCH_CONFIG_SSB_POSITION_IN_BURST 0x0023 #define NFAPI_SCH_CONFIG_SSB_PERIODICITY 0x0024 #define NFAPI_SCH_CONFIG_SS_PBCH_BLOCK_POWER 0x0025 +#define NFAPI_SCH_CONFIG_N_SSB_CRB 0x0025 typedef struct { nfapi_uint16_tlv_t configuration_index; diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index 9d8a70905c..67d6720d64 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -347,6 +347,8 @@ void nr_phy_config_request(PHY_VARS_gNB *gNB) gNB_config->rf_config.ul_channel_bandwidth.value = 106; gNB_config->sch_config.half_frame_index.value = 0; gNB_config->sch_config.ssb_subcarrier_offset.value = 0; + gNB_config->sch_config.n_ssb_crb.value = 86; + gNB_config->sch_config.ssb_subcarrier_offset.value = 0; gNB->mac_enabled = 1; diff --git a/openair1/PHY/INIT/nr_init_ru.c b/openair1/PHY/INIT/nr_init_ru.c index 1eb4c2bd2f..fdad8e94ab 100644 --- a/openair1/PHY/INIT/nr_init_ru.c +++ b/openair1/PHY/INIT/nr_init_ru.c @@ -79,14 +79,14 @@ int nr_phy_init_RU(RU_t *ru) { LOG_I(PHY,"[INIT] common.txdata_BF= %p (%lu bytes)\n",ru->common.txdataF_BF, ru->nb_tx*sizeof(int32_t*)); for (i=0; i<ru->nb_tx; i++) { - ru->common.txdataF_BF[i] = (int32_t*)malloc16_clear(fp->samples_per_frame_wCP*sizeof(int32_t) ); + ru->common.txdataF_BF[i] = (int32_t*)malloc16_clear(fp->samples_per_subframe_wCP*sizeof(int32_t) ); LOG_I(PHY,"txdataF_BF[%d] %p for RU %d\n",i,ru->common.txdataF_BF[i],ru->idx); } // allocate FFT output buffers (RX) ru->common.rxdataF = (int32_t**)malloc16(ru->nb_rx*sizeof(int32_t*) ); for (i=0; i<ru->nb_rx; i++) { // allocate 2 subframes of I/Q signal data (frequency) - ru->common.rxdataF[i] = (int32_t*)malloc16_clear(sizeof(int32_t)*(2*fp->samples_per_frame_wCP) ); + ru->common.rxdataF[i] = (int32_t*)malloc16_clear(sizeof(int32_t)*(2*fp->samples_per_subframe_wCP) ); LOG_I(PHY,"rxdataF[%d] %p for RU %d\n",i,ru->common.rxdataF[i],ru->idx); } diff --git a/openair1/PHY/NR_TRANSPORT/nr_pss.c b/openair1/PHY/NR_TRANSPORT/nr_pss.c index d30bab8cfb..0c8984c4ed 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pss.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pss.c @@ -63,7 +63,7 @@ int nr_generate_pss( int16_t *d_pss, { // PSS occupies a predefined position (subcarriers 56-182, symbol 0) within the SSB block starting from - k = frame_parms->first_carrier_offset + config->sch_config.ssb_subcarrier_offset.value + 56; //and + k = frame_parms->first_carrier_offset + frame_parms->ssb_start_subcarrier + 56; //and l = ssb_start_symbol; for (m = 0; m < NR_PSS_LENGTH; m++) { diff --git a/openair1/PHY/NR_TRANSPORT/nr_sss.c b/openair1/PHY/NR_TRANSPORT/nr_sss.c index e8959ca9d1..ac3d4d2743 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_sss.c +++ b/openair1/PHY/NR_TRANSPORT/nr_sss.c @@ -73,7 +73,7 @@ int nr_generate_sss( int16_t *d_sss, { // SSS occupies a predefined position (subcarriers 56-182, symbol 2) within the SSB block starting from - k = frame_parms->first_carrier_offset + config->sch_config.ssb_subcarrier_offset.value + 56; //and + k = frame_parms->first_carrier_offset + frame_parms->ssb_start_subcarrier + 56; //and l = ssb_start_symbol + 2; for (m = 0; m < NR_SSS_LENGTH; m++) { diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index 28184d741a..7d9ef29627 100644 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -204,6 +204,8 @@ typedef struct { uint32_t samples_per_subframe_wCP; /// Number of samples in a radio frame without CP uint32_t samples_per_frame_wCP; + /// Start in Subcarrier index of the SSB block + uint16_t ssb_start_subcarrier; } NR_DL_FRAME_PARMS; struct PHY_VARS_gNB_s; diff --git a/openair1/SCHED_NR/defs.h b/openair1/SCHED_NR/defs.h index 17df26cac2..97ffe24e36 100644 --- a/openair1/SCHED_NR/defs.h +++ b/openair1/SCHED_NR/defs.h @@ -45,5 +45,6 @@ int nr_generate_sss( int16_t *d_sss, uint8_t ssb_start_symbol, nfapi_config_request_t* config, NR_DL_FRAME_PARMS *frame_parms); +void nr_set_ssb_first_subcarrier(nfapi_config_request_t *cfg, NR_DL_FRAME_PARMS *fp); #endif diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c index 7c115939a3..3d01cb9781 100644 --- a/openair1/SCHED_NR/nr_ru_procedures.c +++ b/openair1/SCHED_NR/nr_ru_procedures.c @@ -32,8 +32,7 @@ #include "PHY/defs.h" #include "PHY/extern.h" -#include "SCHED/defs.h" -#include "SCHED/extern.h" +#include "SCHED_NR/defs.h" #include "PHY/LTE_TRANSPORT/if4_tools.h" #include "PHY/LTE_TRANSPORT/if5_tools.h" diff --git a/openair1/SCHED_NR/phy_procedures_nr_common.c b/openair1/SCHED_NR/phy_procedures_nr_common.c index ef00e588e2..54f04eb9c7 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_common.c +++ b/openair1/SCHED_NR/phy_procedures_nr_common.c @@ -31,8 +31,7 @@ */ #include "PHY/defs.h" #include "PHY/extern.h" -#include "SCHED/defs.h" -#include "SCHED/extern.h" +#include "SCHED_NR/defs.h" nr_subframe_t nr_subframe_select(nfapi_config_request_t *cfg,unsigned char subframe) @@ -75,7 +74,8 @@ int nr_get_ssb_start_symbol(nfapi_config_request_t *cfg, NR_DL_FRAME_PARMS *fp) return symbol; } -void nr_set_ssb_first_subcarrier(nfapi_config_request_t *cfg) +void nr_set_ssb_first_subcarrier(nfapi_config_request_t *cfg, NR_DL_FRAME_PARMS *fp) { - cfg->sch_config.ssb_subcarrier_offset.value = 0; + int start_rb = cfg->sch_config.n_ssb_crb.value / pow(2,cfg->subframe_config.numerology_index_mu.value); + fp->ssb_start_subcarrier = 12 * start_rb + cfg->sch_config.ssb_subcarrier_offset.value; } diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 609b845cc1..ece9e7a576 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -51,7 +51,7 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int subframe) { LOG_D(PHY,"common_signal_procedures: frame %d, subframe %d\n",frame,subframe); int ssb_start_symbol = nr_get_ssb_start_symbol(cfg, fp); - //nr_set_ssb_first_subcarrier(cfg); + nr_set_ssb_first_subcarrier(cfg, fp); if (subframe == ss_subframe) { diff --git a/targets/RT/USER/nr-ru.c b/targets/RT/USER/nr-ru.c index 8b5c752837..3a63503c04 100644 --- a/targets/RT/USER/nr-ru.c +++ b/targets/RT/USER/nr-ru.c @@ -814,9 +814,9 @@ void tx_rf(RU_t *ru) { for (i=0; i<ru->nb_tx; i++) txp[i] = (void*)&ru->common.txdata[i][(proc->subframe_tx*fp->samples_per_subframe)-sf_extension]; - /*if (proc->subframe_tx == 9){ - write_output("txdataF_frame.m","txdataF_frame",&ru->common.txdataF_BF[i],fp->samples_per_frame_wCP, 1, 1); - write_output("txdata_frame.m","txdata_frame",&ru->common.txdata[i],fp->samples_per_frame, 1, 1); + /*if (proc->subframe_tx == 0){ + write_output("txdataF_frame.m","txdataF_frame",&ru->common.txdataF_BF[i],fp->samples_per_subframe_wCP, 1, 1); + write_output("txdata_frame.m","txdata_frame",&ru->common.txdata[i],fp->samples_per_subframe, 1, 1); }*/ VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, (proc->timestamp_tx-ru->openair0_cfg.tx_sample_advance)&0xffffffff ); -- GitLab