fix for pusch dtx in phytest mode
This commit is contained in:
committed by
Robert Schmidt
parent
7f910a2e36
commit
3d93d0dfc0
@@ -121,11 +121,11 @@ void free_gNB_dlsch(NR_gNB_DLSCH_t **dlschptr, uint16_t N_RB, const NR_DL_FRAME_
|
|||||||
@param slot Slot number
|
@param slot Slot number
|
||||||
@param harq_pid HARQ process ID
|
@param harq_pid HARQ process ID
|
||||||
*/
|
*/
|
||||||
int nr_rx_pusch(PHY_VARS_gNB *gNB,
|
void nr_rx_pusch(PHY_VARS_gNB *gNB,
|
||||||
uint8_t UE_id,
|
uint8_t UE_id,
|
||||||
uint32_t frame,
|
uint32_t frame,
|
||||||
uint8_t slot,
|
uint8_t slot,
|
||||||
unsigned char harq_pid);
|
unsigned char harq_pid);
|
||||||
|
|
||||||
/** \brief This function performs RB extraction (signal and channel estimates) (currently signal only until channel estimation and compensation are implemented)
|
/** \brief This function performs RB extraction (signal and channel estimates) (currently signal only until channel estimation and compensation are implemented)
|
||||||
@param rxdataF pointer to the received frequency domain signal
|
@param rxdataF pointer to the received frequency domain signal
|
||||||
|
|||||||
@@ -412,7 +412,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
|
|||||||
uint8_t n_layers = pusch_pdu->nrOfLayers;
|
uint8_t n_layers = pusch_pdu->nrOfLayers;
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
if (!ulsch_llr) {
|
if (!ulsch_llr) {
|
||||||
LOG_E(PHY,"ulsch_decoding.c: NULL ulsch_llr pointer\n");
|
LOG_E(PHY,"ulsch_decoding.c: NULL ulsch_llr pointer\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1891,11 +1891,11 @@ uint8_t nr_ulsch_zero_forcing_rx_2layers(int **rxdataF_comp,
|
|||||||
//==============================================================================================
|
//==============================================================================================
|
||||||
|
|
||||||
/* Main Function */
|
/* Main Function */
|
||||||
int nr_rx_pusch(PHY_VARS_gNB *gNB,
|
void nr_rx_pusch(PHY_VARS_gNB *gNB,
|
||||||
uint8_t ulsch_id,
|
uint8_t ulsch_id,
|
||||||
uint32_t frame,
|
uint32_t frame,
|
||||||
uint8_t slot,
|
uint8_t slot,
|
||||||
unsigned char harq_pid)
|
unsigned char harq_pid)
|
||||||
{
|
{
|
||||||
|
|
||||||
uint8_t aarx, aatx;
|
uint8_t aarx, aatx;
|
||||||
@@ -2149,6 +2149,4 @@ int nr_rx_pusch(PHY_VARS_gNB *gNB,
|
|||||||
rxdataF_ext_offset += gNB->pusch_vars[ulsch_id]->ul_valid_re_per_slot[symbol];
|
rxdataF_ext_offset += gNB->pusch_vars[ulsch_id]->ul_valid_re_per_slot[symbol];
|
||||||
}
|
}
|
||||||
} // symbol loop
|
} // symbol loop
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -193,14 +193,12 @@ void nr_postDecode(PHY_VARS_gNB *gNB, notifiedFIFO_elt_t *req) {
|
|||||||
NR_gNB_ULSCH_t *ulsch = rdata->ulsch;
|
NR_gNB_ULSCH_t *ulsch = rdata->ulsch;
|
||||||
int r = rdata->segment_r;
|
int r = rdata->segment_r;
|
||||||
nfapi_nr_pusch_pdu_t *pusch_pdu = &gNB->ulsch[rdata->ulsch_id]->harq_processes[rdata->harq_pid]->ulsch_pdu;
|
nfapi_nr_pusch_pdu_t *pusch_pdu = &gNB->ulsch[rdata->ulsch_id]->harq_processes[rdata->harq_pid]->ulsch_pdu;
|
||||||
|
|
||||||
bool decodeSuccess = (rdata->decodeIterations <= rdata->decoderParms.numMaxIter);
|
bool decodeSuccess = (rdata->decodeIterations <= rdata->decoderParms.numMaxIter);
|
||||||
ulsch_harq->processedSegments++;
|
ulsch_harq->processedSegments++;
|
||||||
LOG_D(PHY, "processing result of segment: %d, processed %d/%d\n",
|
LOG_D(PHY, "processing result of segment: %d, processed %d/%d\n",
|
||||||
rdata->segment_r, ulsch_harq->processedSegments, rdata->nbSegments);
|
rdata->segment_r, ulsch_harq->processedSegments, rdata->nbSegments);
|
||||||
gNB->nbDecode--;
|
gNB->nbDecode--;
|
||||||
LOG_D(PHY,"remain to decoded in subframe: %d\n", gNB->nbDecode);
|
LOG_D(PHY,"remain to decoded in subframe: %d\n", gNB->nbDecode);
|
||||||
|
|
||||||
if (decodeSuccess) {
|
if (decodeSuccess) {
|
||||||
memcpy(ulsch_harq->b+rdata->offset,
|
memcpy(ulsch_harq->b+rdata->offset,
|
||||||
ulsch_harq->c[r],
|
ulsch_harq->c[r],
|
||||||
@@ -222,7 +220,7 @@ void nr_postDecode(PHY_VARS_gNB *gNB, notifiedFIFO_elt_t *req) {
|
|||||||
//int dumpsig=0;
|
//int dumpsig=0;
|
||||||
// if all segments are done
|
// if all segments are done
|
||||||
if (rdata->nbSegments == ulsch_harq->processedSegments) {
|
if (rdata->nbSegments == ulsch_harq->processedSegments) {
|
||||||
if (decodeSuccess) {
|
if (decodeSuccess && !gNB->pusch_vars[rdata->ulsch_id]->DTX) {
|
||||||
LOG_D(PHY,"[gNB %d] ULSCH: Setting ACK for SFN/SF %d.%d (pid %d, ndi %d, status %d, round %d, TBS %d, Max interation (all seg) %d)\n",
|
LOG_D(PHY,"[gNB %d] ULSCH: Setting ACK for SFN/SF %d.%d (pid %d, ndi %d, status %d, round %d, TBS %d, Max interation (all seg) %d)\n",
|
||||||
gNB->Mod_id,ulsch_harq->frame,ulsch_harq->slot,rdata->harq_pid,pusch_pdu->pusch_data.new_data_indicator,ulsch_harq->status,ulsch_harq->round,ulsch_harq->TBS,rdata->decodeIterations);
|
gNB->Mod_id,ulsch_harq->frame,ulsch_harq->slot,rdata->harq_pid,pusch_pdu->pusch_data.new_data_indicator,ulsch_harq->status,ulsch_harq->round,ulsch_harq->TBS,rdata->decodeIterations);
|
||||||
ulsch_harq->status = SCH_IDLE;
|
ulsch_harq->status = SCH_IDLE;
|
||||||
@@ -727,14 +725,12 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
|
|||||||
|
|
||||||
for (int ULSCH_id=0;ULSCH_id<gNB->number_of_nr_ulsch_max;ULSCH_id++) {
|
for (int ULSCH_id=0;ULSCH_id<gNB->number_of_nr_ulsch_max;ULSCH_id++) {
|
||||||
NR_gNB_ULSCH_t *ulsch = gNB->ulsch[ULSCH_id];
|
NR_gNB_ULSCH_t *ulsch = gNB->ulsch[ULSCH_id];
|
||||||
int harq_pid;
|
|
||||||
int no_sig;
|
|
||||||
NR_UL_gNB_HARQ_t *ulsch_harq;
|
NR_UL_gNB_HARQ_t *ulsch_harq;
|
||||||
|
|
||||||
if ((ulsch) &&
|
if ((ulsch) &&
|
||||||
(ulsch->rnti > 0)) {
|
(ulsch->rnti > 0)) {
|
||||||
// for for an active HARQ process
|
// for for an active HARQ process
|
||||||
for (harq_pid=0;harq_pid<NR_MAX_ULSCH_HARQ_PROCESSES;harq_pid++) {
|
for (int harq_pid=0;harq_pid<NR_MAX_ULSCH_HARQ_PROCESSES;harq_pid++) {
|
||||||
ulsch_harq = ulsch->harq_processes[harq_pid];
|
ulsch_harq = ulsch->harq_processes[harq_pid];
|
||||||
AssertFatal(ulsch_harq!=NULL,"harq_pid %d is not allocated\n",harq_pid);
|
AssertFatal(ulsch_harq!=NULL,"harq_pid %d is not allocated\n",harq_pid);
|
||||||
if ((ulsch_harq->status == NR_ACTIVE) &&
|
if ((ulsch_harq->status == NR_ACTIVE) &&
|
||||||
@@ -776,13 +772,7 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
|
|||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_NR_RX_PUSCH,1);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_NR_RX_PUSCH,1);
|
||||||
start_meas(&gNB->rx_pusch_stats);
|
start_meas(&gNB->rx_pusch_stats);
|
||||||
no_sig = nr_rx_pusch(gNB, ULSCH_id, frame_rx, slot_rx, harq_pid);
|
nr_rx_pusch(gNB, ULSCH_id, frame_rx, slot_rx, harq_pid);
|
||||||
if (no_sig) {
|
|
||||||
LOG_D(PHY, "PUSCH not detected in frame %d, slot %d\n", frame_rx, slot_rx);
|
|
||||||
nr_fill_indication(gNB, frame_rx, slot_rx, ULSCH_id, harq_pid, 1,1);
|
|
||||||
pusch_DTX++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
gNB->pusch_vars[ULSCH_id]->ulsch_power_tot=0;
|
gNB->pusch_vars[ULSCH_id]->ulsch_power_tot=0;
|
||||||
gNB->pusch_vars[ULSCH_id]->ulsch_noise_power_tot=0;
|
gNB->pusch_vars[ULSCH_id]->ulsch_noise_power_tot=0;
|
||||||
for (int aarx=0;aarx<gNB->frame_parms.nb_antennas_rx;aarx++) {
|
for (int aarx=0;aarx<gNB->frame_parms.nb_antennas_rx;aarx++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user