Commit dd7c3f80 authored by Robert Schmidt's avatar Robert Schmidt

Merge remote-tracking branch 'origin/pucch2_dtx' into integration_2024_w42 (!3051)

This adds DTX detection in PUCCH 2 receiver. This is detected by MAC
already which will drop PUCCH 2 indications that are detected as DTX.
For the moment this uses the same pucch0_dtx_threshold value indicated
in L1 section of the configuration file. The feature firstly reduces
unnecessary logging on stdout and the use of invalid CSI measurements in
the MAC scheduler.

Closes: #547
parents 4c0fa908 d156661c
...@@ -330,7 +330,7 @@ ...@@ -330,7 +330,7 @@
-R 273 -z8 -i 1 -P 0 -b 1 -s-2 -n1000 -R 273 -z8 -i 1 -P 0 -b 1 -s-2 -n1000
-R 273 -z8 -i 1 -P 0 -b 2 -s-2 -n1000 -R 273 -z8 -i 1 -P 0 -b 2 -s-2 -n1000
-R 273 -z8 -i 1 -P 0 -b 2 -s-2 -c -n1000 -R 273 -z8 -i 1 -P 0 -b 2 -s-2 -c -n1000
-R 273 -z8 -i 1 -P 2 -b 4 -s0 -n1000 -R 273 -z8 -i 1 -P 2 -b 4 -s-10 -n1000
-R 273 -z8 -i 1 -P 2 -b 7 -s3 -n1000 -R 273 -z8 -i 1 -P 2 -b 7 -s3 -n1000
-R 273 -z8 -i 1 -P 2 -b 11 -s6 -n1000 -R 273 -z8 -i 1 -P 2 -b 11 -s6 -n1000
-R 273 -z8 -i 1 -P 2 -q8 -b 12 -s-3 -n1000 -R 273 -z8 -i 1 -P 2 -q8 -b 12 -s-3 -n1000
......
...@@ -154,7 +154,7 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB, int slot, int first_symb, int num_sy ...@@ -154,7 +154,7 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB, int slot, int first_symb, int num_sy
signal_energy = signal_energy_nodc(ul_ch, 12); signal_energy = signal_energy_nodc(ul_ch, 12);
} }
n0_subband_power[aarx][rb] += signal_energy; n0_subband_power[aarx][rb] += signal_energy;
LOG_D(PHY,"slot %d symbol %d RB %d aarx %d n0_subband_power %d\n", slot, s, rb, aarx, signal_energy); LOG_D(NR_PHY,"slot %d symbol %d RB %d aarx %d n0_subband_power %d\n", slot, s, rb, aarx, signal_energy);
} //antenna } //antenna
} }
} //rb } //rb
...@@ -177,7 +177,7 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB, int slot, int first_symb, int num_sy ...@@ -177,7 +177,7 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB, int slot, int first_symb, int num_sy
n0_subband_tot_perPRB/=frame_parms->nb_antennas_rx; n0_subband_tot_perPRB/=frame_parms->nb_antennas_rx;
measurements->n0_subband_power_tot_dB[rb] = dB_fixed(n0_subband_tot_perPRB); measurements->n0_subband_power_tot_dB[rb] = dB_fixed(n0_subband_tot_perPRB);
measurements->n0_subband_power_tot_dBm[rb] = measurements->n0_subband_power_tot_dB[rb] - gNB->rx_total_gain_dB - dB_fixed(frame_parms->N_RB_UL); measurements->n0_subband_power_tot_dBm[rb] = measurements->n0_subband_power_tot_dB[rb] - gNB->rx_total_gain_dB - dB_fixed(frame_parms->N_RB_UL);
LOG_D(PHY,"n0_subband_power_tot_dB[%d] => %d, over %d symbols\n",rb,measurements->n0_subband_power_tot_dB[rb],nb_symb[rb]); LOG_D(NR_PHY,"n0_subband_power_tot_dB[%d] => %d, over %d symbols\n",rb,measurements->n0_subband_power_tot_dB[rb],nb_symb[rb]);
n0_subband_tot += n0_subband_tot_perPRB; n0_subband_tot += n0_subband_tot_perPRB;
nb_rb++; nb_rb++;
} }
......
...@@ -1087,7 +1087,8 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB, ...@@ -1087,7 +1087,8 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
pucch2_lev += signal_energy_nodc(rp[aa][symb], nb_re_pucch); pucch2_lev += signal_energy_nodc(rp[aa][symb], nb_re_pucch);
} }
} }
pucch2_lev /= Prx * Prx * pucch_pdu->nr_of_symbols;
pucch2_lev /= Prx * pucch_pdu->nr_of_symbols;
int pucch2_levdB = dB_fixed(pucch2_lev); int pucch2_levdB = dB_fixed(pucch2_lev);
int scaling = 0; int scaling = 0;
if (pucch2_levdB > 72) if (pucch2_levdB > 72)
...@@ -1099,7 +1100,7 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB, ...@@ -1099,7 +1100,7 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
else if (pucch2_levdB > 54) else if (pucch2_levdB > 54)
scaling = 1; scaling = 1;
LOG_D(PHY, LOG_D(NR_PHY,
"%d.%d Decoding pucch2 for %d symbols, %d PRB, nb_harq %d, nb_sr %d, nb_csi %d/%d, pucch2_lev %d dB (scaling %d)\n", "%d.%d Decoding pucch2 for %d symbols, %d PRB, nb_harq %d, nb_sr %d, nb_csi %d/%d, pucch2_lev %d dB (scaling %d)\n",
frame, frame,
slot, slot,
...@@ -1365,8 +1366,11 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB, ...@@ -1365,8 +1366,11 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
uint64_t decodedPayload[2]; uint64_t decodedPayload[2];
uint8_t corr_dB; uint8_t corr_dB;
int decoderState=2; int decoderState = 2;
if (nb_bit < 12) { // short blocklength case if (pucch2_levdB < gNB->measurements.n0_subband_power_avg_dB + (gNB->pucch0_thres / 10))
decoderState = 1; // assuming missed detection, only attempt to decode for polar case (with CRC)
LOG_D(NR_PHY, "n0+thres %d decoderState %d\n", gNB->measurements.n0_subband_power_avg_dB + (gNB->pucch0_thres / 10), decoderState);
if (nb_bit < 12 && decoderState == 2) { // short blocklength case
simde__m256i *rp_re[Prx2][2]; simde__m256i *rp_re[Prx2][2];
simde__m256i *rp2_re[Prx2][2]; simde__m256i *rp2_re[Prx2][2];
simde__m256i *rp_im[Prx2][2]; simde__m256i *rp_im[Prx2][2];
...@@ -1382,8 +1386,7 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB, ...@@ -1382,8 +1386,7 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
simde__m256i prod_re[Prx2],prod_im[Prx2]; simde__m256i prod_re[Prx2],prod_im[Prx2];
uint64_t corr=0; uint64_t corr=0;
int cw_ML=0; int cw_ML=0;
for (int cw=0;cw<1<<nb_bit;cw++) { for (int cw=0;cw<1<<nb_bit;cw++) {
#ifdef DEBUG_NR_PUCCH_RX #ifdef DEBUG_NR_PUCCH_RX
printf("cw %d:",cw); printf("cw %d:",cw);
...@@ -1485,9 +1488,7 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB, ...@@ -1485,9 +1488,7 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
printf("slot %d PUCCH2 cw_ML %d, metric %d \n",slot,cw_ML,corr_dB); printf("slot %d PUCCH2 cw_ML %d, metric %d \n",slot,cw_ML,corr_dB);
#endif #endif
decodedPayload[0]=(uint64_t)cw_ML; decodedPayload[0]=(uint64_t)cw_ML;
} } else if (nb_bit >= 12) { // polar coded case
else { // polar coded case
simde__m64 *rp_re[Prx2][2]; simde__m64 *rp_re[Prx2][2];
simde__m64 *rp2_re[Prx2][2]; simde__m64 *rp2_re[Prx2][2];
simde__m64 *rp_im[Prx2][2]; simde__m64 *rp_im[Prx2][2];
......
...@@ -145,7 +145,7 @@ int main(int argc, char **argv) ...@@ -145,7 +145,7 @@ int main(int argc, char **argv)
//unsigned char frame_type = 0; //unsigned char frame_type = 0;
int loglvl=OAILOG_WARNING; int loglvl=OAILOG_WARNING;
int sr_flag = 0; int sr_flag = 0;
int pucch_DTX_thres = 50; int pucch_DTX_thres = 0;
cpuf = get_cpu_freq_GHz(); cpuf = get_cpu_freq_GHz();
if ((uniqCfg = load_configmodule(argc, argv, CONFIG_ENABLECMDLINEONLY)) == 0) { if ((uniqCfg = load_configmodule(argc, argv, CONFIG_ENABLECMDLINEONLY)) == 0) {
......
...@@ -1119,6 +1119,7 @@ void handle_nr_uci_pucch_2_3_4(module_id_t mod_id, ...@@ -1119,6 +1119,7 @@ void handle_nr_uci_pucch_2_3_4(module_id_t mod_id,
} }
/* phy-test has hardcoded allocation, so no use to handle CSI reports */ /* phy-test has hardcoded allocation, so no use to handle CSI reports */
if ((uci_234->pduBitmap >> 2) & 0x01 && !get_softmodem_params()->phy_test) { if ((uci_234->pduBitmap >> 2) & 0x01 && !get_softmodem_params()->phy_test) {
LOG_D(NR_MAC, "CSI CRC %d\n", uci_234->csi_part1.csi_part1_crc);
if (uci_234->csi_part1.csi_part1_crc != 1) { if (uci_234->csi_part1.csi_part1_crc != 1) {
// API to parse the csi report and store it into sched_ctrl // API to parse the csi report and store it into sched_ctrl
extract_pucch_csi_report(csi_MeasConfig, uci_234, frame, slot, UE, nrmac->common_channels->ServingCellConfigCommon); extract_pucch_csi_report(csi_MeasConfig, uci_234, frame, slot, UE, nrmac->common_channels->ServingCellConfigCommon);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment