Merge remote-tracking branch 'origin/rework-5G-scope' into develop_integration_2020_w25
This commit is contained in:
@@ -963,7 +963,9 @@ if(!IS_SOFTMODEM_NOS1)
|
|||||||
scopeParms_t p;
|
scopeParms_t p;
|
||||||
p.argc=&argc;
|
p.argc=&argc;
|
||||||
p.argv=argv;
|
p.argv=argv;
|
||||||
startScope(&p);
|
p.gNB=RC.gNB[0];
|
||||||
|
p.ru=RC.ru[0];
|
||||||
|
gNBinitScope(&p);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nfapi_mode != 1 && nfapi_mode != 2) {
|
if (nfapi_mode != 1 && nfapi_mode != 2) {
|
||||||
|
|||||||
@@ -76,36 +76,11 @@ unsigned short config_frames[4] = {2,9,11,13};
|
|||||||
#include <openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h>
|
#include <openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h>
|
||||||
#include <openair1/SCHED_NR_UE/fapi_nr_ue_l1.h>
|
#include <openair1/SCHED_NR_UE/fapi_nr_ue_l1.h>
|
||||||
|
|
||||||
#include <forms.h>
|
|
||||||
|
|
||||||
|
|
||||||
/* Callbacks, globals and object handlers */
|
|
||||||
|
|
||||||
extern void reset_stats( FL_OBJECT *, long );
|
|
||||||
//extern void initTpool(char *params, tpool_t *pool, bool performanceMeas);
|
|
||||||
|
|
||||||
/* Forms and Objects */
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
FL_FORM *stats_form;
|
|
||||||
void *vdata;
|
|
||||||
char *cdata;
|
|
||||||
long ldata;
|
|
||||||
FL_OBJECT *stats_text;
|
|
||||||
FL_OBJECT *stats_button;
|
|
||||||
} FD_stats_form;
|
|
||||||
|
|
||||||
extern FD_stats_form *create_form_stats_form( void );
|
|
||||||
|
|
||||||
#include "PHY/TOOLS/nr_phy_scope.h"
|
|
||||||
//#include "stats.h"
|
//#include "stats.h"
|
||||||
// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
|
// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
|
||||||
|
#include "PHY/TOOLS/nr_phy_scope.h"
|
||||||
// at eNB 0, an UL scope for every UE
|
// at eNB 0, an UL scope for every UE
|
||||||
FD_phy_scope_nrue *form_nrue[NUMBER_OF_UE_MAX];
|
|
||||||
//FD_lte_phy_scope_enb *form_enb[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
|
//FD_lte_phy_scope_enb *form_enb[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
|
||||||
//FD_stats_form *form_stats=NULL,*form_stats_l2=NULL;
|
|
||||||
char title[255];
|
|
||||||
static pthread_t forms_thread; //xforms
|
|
||||||
|
|
||||||
#include <executables/nr-uesoftmodem.h>
|
#include <executables/nr-uesoftmodem.h>
|
||||||
#include "executables/softmodem-common.h"
|
#include "executables/softmodem-common.h"
|
||||||
@@ -304,35 +279,6 @@ void reset_stats(FL_OBJECT *button, long arg) {
|
|||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *scope_thread(void *arg) {
|
|
||||||
sleep(5);
|
|
||||||
|
|
||||||
while (!oai_exit) {
|
|
||||||
phy_scope_nrUE(form_nrue[0],
|
|
||||||
PHY_vars_UE_g[0][0],
|
|
||||||
0,0,1);
|
|
||||||
usleep(100*1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
pthread_exit((void *)arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void init_scope(void) {
|
|
||||||
int fl_argc=1;
|
|
||||||
|
|
||||||
if (do_forms==1) {
|
|
||||||
char *name="5G-UE-scope";
|
|
||||||
fl_initialize (&fl_argc, &name, NULL, 0, 0);
|
|
||||||
int UE_id = 0;
|
|
||||||
form_nrue[UE_id] = create_phy_scope_nrue();
|
|
||||||
sprintf (title, "NR DL SCOPE UE");
|
|
||||||
fl_show_form (form_nrue[UE_id]->phy_scope_nrue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
|
||||||
threadCreate(&forms_thread, scope_thread, NULL, "scope", -1, OAI_PRIORITY_RT_LOW);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void *l2l1_task(void *arg) {
|
void *l2l1_task(void *arg) {
|
||||||
MessageDef *message_p = NULL;
|
MessageDef *message_p = NULL;
|
||||||
int result;
|
int result;
|
||||||
@@ -814,7 +760,8 @@ int main( int argc, char **argv ) {
|
|||||||
memset (&UE_PF_PO[0][0], 0, sizeof(UE_PF_PO_t)*NUMBER_OF_UE_MAX*MAX_NUM_CCs);
|
memset (&UE_PF_PO[0][0], 0, sizeof(UE_PF_PO_t)*NUMBER_OF_UE_MAX*MAX_NUM_CCs);
|
||||||
configure_linux();
|
configure_linux();
|
||||||
mlockall(MCL_CURRENT | MCL_FUTURE);
|
mlockall(MCL_CURRENT | MCL_FUTURE);
|
||||||
init_scope();
|
if (do_forms)
|
||||||
|
nrUEinitScope(PHY_vars_UE_g[0][0]);
|
||||||
number_of_cards = 1;
|
number_of_cards = 1;
|
||||||
|
|
||||||
for(int CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
for(int CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||||
|
|||||||
@@ -821,15 +821,14 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
|||||||
pllr_symbol_cw0 += llr_offset_symbol;
|
pllr_symbol_cw0 += llr_offset_symbol;
|
||||||
pllr_symbol_cw1 += llr_offset_symbol;
|
pllr_symbol_cw1 += llr_offset_symbol;
|
||||||
|
|
||||||
/*
|
LOG_D(PHY,"compute LLRs [AbsSubframe %d.%d-%d] NbRB %d Qm %d LLRs-Length %d LLR-Offset %d @LLR Buff %p @LLR Buff(symb) %p energy: %d\n",
|
||||||
LOG_I(PHY,"compute LLRs [AbsSubframe %d.%d-%d] NbRB %d Qm %d LLRs-Length %d LLR-Offset %d @LLR Buff %p @LLR Buff(symb) %p\n",
|
|
||||||
frame, subframe,symbol,
|
frame, subframe,symbol,
|
||||||
nb_rb,dlsch0_harq->Qm,
|
nb_rb,dlsch0_harq->Qm,
|
||||||
pdsch_vars[eNB_id]->llr_length[symbol],
|
pdsch_vars[eNB_id]->llr_length[symbol],
|
||||||
pdsch_vars[eNB_id]->llr_offset[symbol],
|
pdsch_vars[eNB_id]->llr_offset[symbol],
|
||||||
(int16_t*)pdsch_vars[eNB_id]->llr[0],
|
(int16_t*)pdsch_vars[eNB_id]->llr[0],
|
||||||
pllr_symbol_cw0);
|
pllr_symbol_cw0,
|
||||||
*/
|
signal_energy(pdsch_vars[eNB_id]->rxdataF_comp0[0], 7*2*frame_parms->N_RB_DL*12));
|
||||||
switch (dlsch0_harq->Qm) {
|
switch (dlsch0_harq->Qm) {
|
||||||
case 2 :
|
case 2 :
|
||||||
if ((rx_type==rx_standard) || (codeword_TB1 == -1)) {
|
if ((rx_type==rx_standard) || (codeword_TB1 == -1)) {
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
|
|
||||||
#include "PHY/impl_defs_nr.h"
|
#include "PHY/impl_defs_nr.h"
|
||||||
#include "PHY/sse_intrin.h"
|
#include "PHY/sse_intrin.h"
|
||||||
|
#include <common/utils/LOG/log.h>
|
||||||
|
|
||||||
__m64 byte2m64_re[256];
|
__m64 byte2m64_re[256];
|
||||||
__m64 byte2m64_im[256];
|
__m64 byte2m64_im[256];
|
||||||
@@ -42,7 +43,7 @@ void init_byte2m64(void) {
|
|||||||
byte2m64_im[s] = _mm_insert_pi16(byte2m64_im[s],(1-2*((s>>5)&1)),2);
|
byte2m64_im[s] = _mm_insert_pi16(byte2m64_im[s],(1-2*((s>>5)&1)),2);
|
||||||
byte2m64_re[s] = _mm_insert_pi16(byte2m64_re[s],(1-2*((s>>6)&1)),3);
|
byte2m64_re[s] = _mm_insert_pi16(byte2m64_re[s],(1-2*((s>>6)&1)),3);
|
||||||
byte2m64_im[s] = _mm_insert_pi16(byte2m64_im[s],(1-2*((s>>7)&1)),3);
|
byte2m64_im[s] = _mm_insert_pi16(byte2m64_im[s],(1-2*((s>>7)&1)),3);
|
||||||
printf("init_scrambling_luts: s %x (%d) ((%d,%d),(%d,%d),(%d,%d),(%d,%d))\n",
|
LOG_T(PHY,"init_scrambling_luts: s %x (%d) ((%d,%d),(%d,%d),(%d,%d),(%d,%d))\n",
|
||||||
((uint16_t*)&s)[0],
|
((uint16_t*)&s)[0],
|
||||||
(1-2*(s&1)),
|
(1-2*(s&1)),
|
||||||
((int16_t*)&byte2m64_re[s])[0],((int16_t*)&byte2m64_im[s])[0],
|
((int16_t*)&byte2m64_re[s])[0],((int16_t*)&byte2m64_im[s])[0],
|
||||||
|
|||||||
@@ -1145,8 +1145,8 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
|
|||||||
//----------------------------------------------------------
|
//----------------------------------------------------------
|
||||||
//-------------------- LLRs computation --------------------
|
//-------------------- LLRs computation --------------------
|
||||||
//----------------------------------------------------------
|
//----------------------------------------------------------
|
||||||
|
|
||||||
start_meas(&gNB->ulsch_llr_stats);
|
start_meas(&gNB->ulsch_llr_stats);
|
||||||
|
AssertFatal(gNB->pusch_vars[UE_id]->rxdataF_ext_offset * rel15_ul->qam_mod_order+nb_re_pusch*rel15_ul->qam_mod_order < (8*((3*8*6144)+12)) , "Mysterious llr buffer size check");
|
||||||
nr_ulsch_compute_llr(&gNB->pusch_vars[UE_id]->rxdataF_comp[0][symbol * rel15_ul->rb_size * NR_NB_SC_PER_RB],
|
nr_ulsch_compute_llr(&gNB->pusch_vars[UE_id]->rxdataF_comp[0][symbol * rel15_ul->rb_size * NR_NB_SC_PER_RB],
|
||||||
gNB->pusch_vars[UE_id]->ul_ch_mag0,
|
gNB->pusch_vars[UE_id]->ul_ch_mag0,
|
||||||
gNB->pusch_vars[UE_id]->ul_ch_magb0,
|
gNB->pusch_vars[UE_id]->ul_ch_magb0,
|
||||||
|
|||||||
+661
-735
File diff suppressed because it is too large
Load Diff
@@ -34,55 +34,15 @@
|
|||||||
//#include "PHY/impl_defs_top.h"
|
//#include "PHY/impl_defs_top.h"
|
||||||
#include "PHY/defs_nr_UE.h"
|
#include "PHY/defs_nr_UE.h"
|
||||||
|
|
||||||
/* Forms and Objects */
|
|
||||||
typedef struct {
|
|
||||||
FL_FORM * phy_scope_gnb;
|
|
||||||
FL_OBJECT * rxsig_t;
|
|
||||||
FL_OBJECT * chest_f;
|
|
||||||
FL_OBJECT * chest_t;
|
|
||||||
FL_OBJECT * pusch_comp;
|
|
||||||
FL_OBJECT * pucch_comp;
|
|
||||||
FL_OBJECT * pucch_comp1;
|
|
||||||
FL_OBJECT * pusch_llr;
|
|
||||||
FL_OBJECT * pusch_tput;
|
|
||||||
FL_OBJECT * button_0;
|
|
||||||
} FD_phy_scope_gnb;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
FL_FORM * phy_scope_nrue;
|
|
||||||
FL_OBJECT * rxsig_t;
|
|
||||||
FL_OBJECT * chest_f;
|
|
||||||
FL_OBJECT * chest_t;
|
|
||||||
FL_OBJECT * pbch_comp;
|
|
||||||
FL_OBJECT * pbch_llr;
|
|
||||||
FL_OBJECT * pdcch_comp;
|
|
||||||
FL_OBJECT * pdcch_llr;
|
|
||||||
FL_OBJECT * pdsch_comp;
|
|
||||||
FL_OBJECT * pdsch_llr;
|
|
||||||
FL_OBJECT * pdsch_comp1;
|
|
||||||
FL_OBJECT * pdsch_llr1;
|
|
||||||
FL_OBJECT * pdsch_tput;
|
|
||||||
FL_OBJECT * button_0;
|
|
||||||
} FD_phy_scope_nrue;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int *argc;
|
int *argc;
|
||||||
char **argv;
|
char **argv;
|
||||||
RU_t* ru;
|
RU_t *ru;
|
||||||
PHY_VARS_gNB *gNB;
|
PHY_VARS_gNB *gNB;
|
||||||
} scopeParms_t;
|
} scopeParms_t;
|
||||||
|
|
||||||
extern unsigned char scope_enb_num_ue;
|
void gNBinitScope(scopeParms_t *p);
|
||||||
FD_phy_scope_nrue * create_phy_scope_nrue( void );
|
void nrUEinitScope(PHY_VARS_NR_UE *ue);
|
||||||
|
|
||||||
void phy_scope_nrUE(FD_phy_scope_nrue *form,
|
|
||||||
PHY_VARS_NR_UE *phy_vars_ue,
|
|
||||||
int eNB_id,
|
|
||||||
int UE_id,
|
|
||||||
uint8_t subframe);
|
|
||||||
|
|
||||||
|
|
||||||
void startScope(scopeParms_t * p);
|
|
||||||
|
|
||||||
extern RAN_CONTEXT_t RC;
|
extern RAN_CONTEXT_t RC;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -476,14 +476,16 @@ static bool flushInput(rfsimulator_state_t *t, int timeout, int nsamps_for_initi
|
|||||||
b->trashingPacket=true;
|
b->trashingPacket=true;
|
||||||
} else if ( b->lastReceivedTS < b->th.timestamp) {
|
} else if ( b->lastReceivedTS < b->th.timestamp) {
|
||||||
int nbAnt= b->th.nbAnt;
|
int nbAnt= b->th.nbAnt;
|
||||||
|
if ( b->th.timestamp-b->lastReceivedTS < CirSize ) {
|
||||||
for (uint64_t index=b->lastReceivedTS; index < b->th.timestamp; index++ ) {
|
for (uint64_t index=b->lastReceivedTS; index < b->th.timestamp; index++ ) {
|
||||||
for (int a=0; a < nbAnt; a++) {
|
for (int a=0; a < nbAnt; a++) {
|
||||||
b->circularBuf[(index*nbAnt+a)%CirSize].r = 0;
|
b->circularBuf[(index*nbAnt+a)%CirSize].r = 0;
|
||||||
b->circularBuf[(index*nbAnt+a)%CirSize].i = 0;
|
b->circularBuf[(index*nbAnt+a)%CirSize].i = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
memset(b->circularBuf, 0, sampleToByte(CirSize,1));
|
||||||
|
}
|
||||||
if (b->lastReceivedTS != 0 && b->th.timestamp-b->lastReceivedTS > 50 )
|
if (b->lastReceivedTS != 0 && b->th.timestamp-b->lastReceivedTS > 50 )
|
||||||
LOG_W(HW,"UEsock: %d gap of: %ld in reception\n", fd, b->th.timestamp-b->lastReceivedTS );
|
LOG_W(HW,"UEsock: %d gap of: %ld in reception\n", fd, b->th.timestamp-b->lastReceivedTS );
|
||||||
b->lastReceivedTS=b->th.timestamp;
|
b->lastReceivedTS=b->th.timestamp;
|
||||||
@@ -646,10 +648,11 @@ int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimestamp, vo
|
|||||||
);
|
);
|
||||||
else { // no channel modeling
|
else { // no channel modeling
|
||||||
sample_t *out=(sample_t *)samplesVoid[a];
|
sample_t *out=(sample_t *)samplesVoid[a];
|
||||||
|
const int64_t base=t->nextTimestamp*nbAnt+a;
|
||||||
for ( int i=0; i < nsamps; i++ ) {
|
for ( int i=0; i < nsamps; i++ ) {
|
||||||
out[i].r+=ptr->circularBuf[((t->nextTimestamp+i)*nbAnt+a)%CirSize].r;
|
const int idx=(i*nbAnt+base)%CirSize;
|
||||||
out[i].i+=ptr->circularBuf[((t->nextTimestamp+i)*nbAnt+a)%CirSize].i;
|
out[i].r+=ptr->circularBuf[idx].r;
|
||||||
|
out[i].i+=ptr->circularBuf[idx].i;
|
||||||
}
|
}
|
||||||
} // end of no channel modeling
|
} // end of no channel modeling
|
||||||
} // end for a...
|
} // end for a...
|
||||||
|
|||||||
Reference in New Issue
Block a user