fix multi blocks transport issue in fs6, and simulators related ul issue for rfsim
This commit is contained in:
+18
-3
@@ -21,6 +21,12 @@
|
||||
#define FS6_BUF_SIZE 100*1000
|
||||
static UDPsock_t sockFS6;
|
||||
|
||||
int sum(uint8_t * b, int s) {
|
||||
int sum=0;
|
||||
for (int i=0; i < s; i++)
|
||||
sum+=b[i];
|
||||
return sum;
|
||||
}
|
||||
|
||||
void prach_eNB_tosplit(uint8_t *bufferZone, int bufSize, PHY_VARS_eNB *eNB) {
|
||||
fs6_ul_t *header=(fs6_ul_t *) commonUDPdata(bufferZone);
|
||||
@@ -647,7 +653,8 @@ void recvFs6Ul(uint8_t *bufferZone, int nbBlocks, PHY_VARS_eNB *eNB) {
|
||||
memcpy(eNB->pusch_vars[hULUE(bufPtr)->UE_id]->ulsch_power,
|
||||
hULUE(bufPtr)->ulsch_power,
|
||||
sizeof(int)*2);
|
||||
LOG_W(PHY,"Received ulsch data for: rnti:%d, fsf: %d/%d\n", ulsch->rnti, eNB->proc.frame_rx, eNB->proc.subframe_rx);
|
||||
LOG_I(PHY,"Received ulsch data for: rnti:%d, fsf: %d/%d\n",
|
||||
ulsch->rnti, eNB->proc.frame_rx, eNB->proc.subframe_rx);
|
||||
} else if ( type == fs6ULcch ) {
|
||||
int nb_uci=hULUEuci(bufPtr)->nb_active_ue;
|
||||
fs6_ul_uespec_uci_element_t *tmp=(fs6_ul_uespec_uci_element_t *)(hULUEuci(bufPtr)+1);
|
||||
@@ -715,6 +722,7 @@ void rcvFs6DL(uint8_t *bufferZone, int nbBlocks, PHY_VARS_eNB *eNB, int frame, i
|
||||
dlsch_harq->Nl=hDLUE(bufPtr)->Nl;
|
||||
dlsch_harq->pdsch_start=hDLUE(bufPtr)->pdsch_start;
|
||||
#ifdef PHY_TX_THREAD
|
||||
dlsch_harq->CEmode = hDLUE(bufPtr)->CEmode;
|
||||
dlsch_harq->i0=hDLUE(bufPtr)->i0;
|
||||
dlsch_harq->sib1_br_flag=hDLUE(bufPtr)->sib1_br_flag;
|
||||
#else
|
||||
@@ -723,6 +731,8 @@ void rcvFs6DL(uint8_t *bufferZone, int nbBlocks, PHY_VARS_eNB *eNB, int frame, i
|
||||
#endif
|
||||
memcpy(dlsch_harq->e,
|
||||
hDLUE(bufPtr)+1, hDLUE(bufPtr)->dataLen);
|
||||
LOG_D(PHY,"received %d bits, in harq id: %di fsf: %d.%d, sum %d\n",
|
||||
hDLUE(bufPtr)->dataLen, hDLUE(bufPtr)->harq_pid, frame, subframe, sum(dlsch_harq->e, hDLUE(bufPtr)->dataLen));
|
||||
} else if (type == fs6UlConfig) {
|
||||
int nbUE=(((commonUDP_t *)bufPtr)->contentBytes - sizeof(fs6_dl_t)) / sizeof( fs6_dl_ulsched_t ) ;
|
||||
|
||||
@@ -759,7 +769,8 @@ void rcvFs6DL(uint8_t *bufferZone, int nbBlocks, PHY_VARS_eNB *eNB, int frame, i
|
||||
ulsch_harq->srs_active=hTxULUE(bufPtr)->srs_active;
|
||||
ulsch_harq->TBS=hTxULUE(bufPtr)->TBS;
|
||||
ulsch_harq->Nsymb_pusch=hTxULUE(bufPtr)->Nsymb_pusch;
|
||||
LOG_W(PHY,"Received request to perform ulsch for: rnti:%d, fsf: %d/%d\n", ulsch->rnti, frame, subframe);
|
||||
LOG_I(PHY,"Received request to perform ulsch for: rnti:%d, fsf: %d/%d\n",
|
||||
ulsch->rnti, frame, subframe);
|
||||
}
|
||||
} else if ( type == fs6ULConfigCCH ) {
|
||||
fs6_dl_uespec_ulcch_element_t *tmp=(fs6_dl_uespec_ulcch_element_t *)(hTxULcch(bufPtr)+1);
|
||||
@@ -979,6 +990,7 @@ void appendFs6DLUE(uint8_t *bufferZone, LTE_DL_FRAME_PARMS *fp, int UE_id, int8_
|
||||
hDLUE(newUDPheader)->Nl=harqData->Nl;
|
||||
hDLUE(newUDPheader)->pdsch_start=harqData->pdsch_start;
|
||||
#ifdef PHY_TX_THREAD
|
||||
hDLUE(newUDPheader)->CEmode=harqData->CEmode;
|
||||
hDLUE(newUDPheader)->i0=harqData->i0;
|
||||
hDLUE(newUDPheader)->sib1_br_flag=harqData->sib1_br_flag;
|
||||
#else
|
||||
@@ -987,8 +999,11 @@ void appendFs6DLUE(uint8_t *bufferZone, LTE_DL_FRAME_PARMS *fp, int UE_id, int8_
|
||||
#endif
|
||||
hDLUE(newUDPheader)->dataLen=UEdataLen;
|
||||
memcpy(hDLUE(newUDPheader)+1, harqData->e, UEdataLen);
|
||||
LOG_D(PHY,"sending %d bits, in harq id: %di fsf: %d.%d, sum %d\n",
|
||||
UEdataLen , harq_pid, frame, subframe, sum(harqData->e, UEdataLen));
|
||||
|
||||
//for (int i=0; i < UEdataLen; i++)
|
||||
//LOG_D(PHY,"buffer e:%hhx\n", ( (uint8_t *)(hDLUE(newUDPheader)+1) )[i]);
|
||||
//LOG_D(PHY,"buffer ei[%d]:%hhx\n", i, ( (uint8_t *)(hDLUE(newUDPheader)+1) )[i]);
|
||||
}
|
||||
|
||||
void appendFs6DLUEcch(uint8_t *bufferZone, PHY_VARS_eNB *eNB, int frame, int subframe) {
|
||||
|
||||
@@ -109,6 +109,7 @@ typedef struct {
|
||||
uint16_t rnti;
|
||||
int16_t sqrt_rho_a;
|
||||
int16_t sqrt_rho_b;
|
||||
CEmode_t CEmode:8;
|
||||
uint16_t nb_rb;
|
||||
uint8_t Qm;
|
||||
int8_t Nl;
|
||||
|
||||
@@ -116,9 +116,11 @@ int receiveSubFrame(UDPsock_t *sock, void *bufferZone, int bufferSize, uint16_t
|
||||
rcved++;
|
||||
bufferZone+=ret;
|
||||
}
|
||||
LOG_D(HW,"Received: blocks: %d/%d, size %d, TS: %lu\n",
|
||||
rcved, bufOrigin->nbBlocks, ret, bufOrigin->timestamp);
|
||||
|
||||
} while ( rcved == 0 || rcved < bufOrigin->nbBlocks );
|
||||
|
||||
LOG_D(HW,"Received: nb_blocks: %d, TS: %lu\n",rcved, bufOrigin->timestamp);
|
||||
return rcved;
|
||||
}
|
||||
|
||||
@@ -136,8 +138,10 @@ int sendSubFrame(UDPsock_t *sock, void *bufferZone, ssize_t secondHeaderSize, ui
|
||||
do {
|
||||
if (blockId > 0 ) {
|
||||
commonUDP_t *currentHeader=(commonUDP_t *)bufferZone;
|
||||
*currentHeader=*UDPheader;
|
||||
currentHeader->timestamp=UDPheader->timestamp;
|
||||
currentHeader->nbBlocks=UDPheader->nbBlocks;
|
||||
currentHeader->blockID=blockId;
|
||||
currentHeader->contentType=UDPheader->contentType;
|
||||
memcpy(commonUDPdata((void *)currentHeader), commonUDPdata(bufferZone), secondHeaderSize);
|
||||
}
|
||||
|
||||
@@ -151,11 +155,12 @@ int sendSubFrame(UDPsock_t *sock, void *bufferZone, ssize_t secondHeaderSize, ui
|
||||
LOG_W(HW,"Wrote socket doesn't return size %d (val: %d, errno:%d, %s)\n",
|
||||
sz, ret, errno, strerror(errno));
|
||||
|
||||
LOG_D(HW,"Sent: TS: %lu, blocks %d/%d, block size : %d \n",
|
||||
UDPheader->timestamp, UDPheader->nbBlocks-nbBlocks, UDPheader->nbBlocks, sz);
|
||||
|
||||
bufferZone+=sz;
|
||||
nbBlocks--;
|
||||
} while (nbBlocks);
|
||||
|
||||
LOG_D(HW,"Sent: TS: %lu, nb blocks %d, size of first block: %lu \n",
|
||||
UDPheader->timestamp, UDPheader->nbBlocks, alignedSize((void *)UDPheader));
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -590,10 +590,10 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
|
||||
|
||||
LOG_I(PHY,"[UE%d] Initial sync : Estimated power: %d dB\n",ue->Mod_id,ue->measurements.rx_power_avg_dB[0] );
|
||||
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM )
|
||||
if (IS_SOFTMODEM_BASICSIM )
|
||||
phy_adjust_gain(ue,ue->measurements.rx_power_avg_dB[0],0);
|
||||
} else {
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM )
|
||||
if (IS_SOFTMODEM_BASICSIM )
|
||||
phy_adjust_gain(ue,dB_fixed(ue->measurements.rssi),0);
|
||||
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
||||
int i, prach_len;
|
||||
uint16_t first_nonzero_root_idx=0;
|
||||
|
||||
if ( !(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
|
||||
if ( !(IS_SOFTMODEM_BASICSIM ) ) {
|
||||
prach_start = (ue->rx_offset+subframe*ue->frame_parms.samples_per_tti-ue->hw_timing_advance-ue->N_TA_offset);
|
||||
#ifdef PRACH_DEBUG
|
||||
LOG_I(PHY,"[UE %d] prach_start %d, rx_offset %d, hw_timing_advance %d, N_TA_offset %d\n", ue->Mod_id,
|
||||
@@ -473,7 +473,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
||||
AssertFatal(prach_fmt<4,
|
||||
"prach_fmt4 not fully implemented" );
|
||||
|
||||
if (!(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
|
||||
if (!(IS_SOFTMODEM_BASICSIM ) ) {
|
||||
int j;
|
||||
int overflow = prach_start + prach_len - LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*ue->frame_parms.samples_per_tti;
|
||||
LOG_I( PHY, "prach_start=%d, overflow=%d\n", prach_start, overflow );
|
||||
|
||||
@@ -166,13 +166,16 @@ unsigned int get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb_rb
|
||||
int gain_dB;
|
||||
double gain_lin;
|
||||
|
||||
if (power_dBm<=power_max_dBm)
|
||||
if ( (power_dBm<=power_max_dBm) && ! IS_SOFTMODEM_RFSIM)
|
||||
gain_dB = power_dBm - power_max_dBm;
|
||||
else
|
||||
gain_dB = 0;
|
||||
|
||||
gain_lin = pow(10,.1*gain_dB);
|
||||
AssertFatal((nb_rb >0) && (nb_rb <= N_RB_UL),"Illegal nb_rb/N_RB_UL combination (%d/%d)\n",nb_rb,N_RB_UL);
|
||||
LOG_D(PHY," tx gain: %d = %d * sqrt ( pow(10, 0.1*max(0,%d-%d)) * %d/%d ) (gain lin=%f (dB=%d))\n",
|
||||
(int)(AMP*sqrt(gain_lin*N_RB_UL/(double)nb_rb)),
|
||||
AMP, power_dBm, power_max_dBm, N_RB_UL, nb_rb, gain_lin, gain_dB);
|
||||
return((int)(AMP*sqrt(gain_lin*N_RB_UL/(double)nb_rb)));
|
||||
}
|
||||
|
||||
@@ -1099,7 +1102,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
|
||||
|
||||
nsymb = (frame_parms->Ncp == 0) ? 14 : 12;
|
||||
|
||||
if (!(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
|
||||
if (!IS_SOFTMODEM_BASICSIM) {
|
||||
ulsch_start = (ue->rx_offset+subframe_tx*frame_parms->samples_per_tti-
|
||||
ue->hw_timing_advance-
|
||||
ue->timing_advance-
|
||||
@@ -1130,7 +1133,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
|
||||
}
|
||||
|
||||
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
||||
int *Buff = (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ? &ue->common_vars.txdata[aa][ulsch_start] :dummy_tx_buffer;
|
||||
int *Buff = IS_SOFTMODEM_BASICSIM ? &ue->common_vars.txdata[aa][ulsch_start] :dummy_tx_buffer;
|
||||
|
||||
if (frame_parms->Ncp == 1) {
|
||||
PHY_ofdm_mod(&ue->common_vars.txdataF[aa][subframe_tx*nsymb*frame_parms->ofdm_symbol_size],
|
||||
@@ -1151,7 +1154,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
|
||||
&ue->frame_parms);
|
||||
}
|
||||
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
|
||||
if (IS_SOFTMODEM_BASICSIM ) {
|
||||
apply_7_5_kHz(ue,&ue->common_vars.txdata[aa][ulsch_start],0);
|
||||
apply_7_5_kHz(ue,&ue->common_vars.txdata[aa][ulsch_start],1);
|
||||
} else {
|
||||
@@ -1159,7 +1162,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
|
||||
apply_7_5_kHz(ue,dummy_tx_buffer,1);
|
||||
}
|
||||
|
||||
if (!(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
|
||||
if (!(IS_SOFTMODEM_BASICSIM ) ) {
|
||||
overflow = ulsch_start - 9*frame_parms->samples_per_tti;
|
||||
|
||||
for (k=ulsch_start,l=0; k<cmin(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,ulsch_start+frame_parms->samples_per_tti); k++,l++) {
|
||||
@@ -1259,7 +1262,7 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
ue->prach_resources[eNB_id]->ra_RNTI);
|
||||
ue->tx_total_RE[subframe_tx] = 96;
|
||||
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
|
||||
if (IS_SOFTMODEM_BASICSIM ) {
|
||||
ue->prach_vars[eNB_id]->amp = get_tx_amp(ue->tx_power_dBm[subframe_tx],
|
||||
ue->tx_power_max_dBm,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
@@ -1630,7 +1633,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
||||
|
||||
ue->tx_total_RE[subframe_tx] = nb_rb*12;
|
||||
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
|
||||
if (IS_SOFTMODEM_BASICSIM ) {
|
||||
tx_amp = AMP;
|
||||
} else {
|
||||
tx_amp = get_tx_amp(ue->tx_power_dBm[subframe_tx],
|
||||
@@ -1704,7 +1707,7 @@ void ue_srs_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8
|
||||
Po_SRS = ue->tx_power_max_dBm;
|
||||
}
|
||||
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
|
||||
if (IS_SOFTMODEM_BASICSIM) {
|
||||
tx_amp = AMP;
|
||||
} else {
|
||||
if (ue->mac_enabled==1) {
|
||||
@@ -1942,7 +1945,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
ue->tx_power_dBm[subframe_tx] = Po_PUCCH;
|
||||
ue->tx_total_RE[subframe_tx] = 12;
|
||||
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
|
||||
if (IS_SOFTMODEM_BASICSIM ) {
|
||||
tx_amp = AMP;
|
||||
} else {
|
||||
tx_amp = get_tx_amp(Po_PUCCH,
|
||||
@@ -2023,7 +2026,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
ue->tx_power_dBm[subframe_tx] = Po_PUCCH;
|
||||
ue->tx_total_RE[subframe_tx] = 12;
|
||||
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
|
||||
if (IS_SOFTMODEM_BASICSIM ) {
|
||||
tx_amp = AMP;
|
||||
} else {
|
||||
tx_amp = get_tx_amp(Po_PUCCH,
|
||||
@@ -2269,7 +2272,7 @@ void ue_measurement_procedures(
|
||||
// AGC
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GAIN_CONTROL, VCD_FUNCTION_IN);
|
||||
|
||||
if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM )
|
||||
if (IS_SOFTMODEM_BASICSIM )
|
||||
phy_adjust_gain (ue,dB_fixed(ue->measurements.rssi),0);
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GAIN_CONTROL, VCD_FUNCTION_OUT);
|
||||
@@ -3325,6 +3328,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
|
||||
pdsch==PDSCH?1:0,
|
||||
dlsch0->harq_processes[harq_pid]->TBS>256?1:0);
|
||||
|
||||
LOG_D(PHY,"dlsch turbo decode in %d iter\n", ret);
|
||||
if (LOG_DEBUGFLAG(UE_TIMING)) {
|
||||
stop_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]);
|
||||
LOG_I(PHY, " --> Unscrambling for CW0 %5.3f\n",
|
||||
|
||||
@@ -430,8 +430,8 @@ static bool flushInput(rfsimulator_state_t *t, int timeout) {
|
||||
b->circularBuf[(index*nbAnt+a)%CirSize].i=0;
|
||||
}
|
||||
}
|
||||
|
||||
LOG_W(HW,"gap of: %ld in reception\n", b->th.timestamp-b->lastReceivedTS );
|
||||
if ( abs(b->th.timestamp-b->lastReceivedTS) > 50 )
|
||||
LOG_W(HW,"gap of: %ld in reception\n", b->th.timestamp-b->lastReceivedTS );
|
||||
}
|
||||
|
||||
b->lastReceivedTS=b->th.timestamp;
|
||||
|
||||
Reference in New Issue
Block a user