Merge remote-tracking branch 'origin/fix-DMRS-PUCCH2' into integration_2025_w19 (!3421)

Fix DMRS for PUCCH format 2

This MR fixes the DMRS for PUCCH format 2.
While at the OAI-UE we have:

uint16_t startingPRB = pucch_pdu->prb_start + pucch_pdu->bwp_start;
uint idxGold = startingPRB >> 2;
uint32_t *seq = gold_cache(temp_x2, idxGold + pucch_pdu->prb_size);

At gNB side, it was missing pucch_pdu->bwp_start, i.e., it was:

uint32_t *sGold = gold_cache(x2, pucch_pdu->prb_start / 4 + ngroup / 2);
uint8_t *sGold8 = (uint8_t *)(sGold + pucch_pdu->prb_start / 4);

This MR was tested with COTS UE with a bwp_start other than 0, and now PUCCH format 2 is being decoded correctly.
This commit is contained in:
Jaroslava Fiedlerova
2025-05-09 12:25:34 +02:00
+8 -7
View File
@@ -930,12 +930,13 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
int l2 = pucch_pdu->start_symbol_index;
int soffset = (slot % RU_RX_SLOT_DEPTH) * frame_parms->symbols_per_slot * frame_parms->ofdm_symbol_size;
uint16_t starting_prb = pucch_pdu->prb_start + pucch_pdu->bwp_start;
int re_offset[nb_symbols];
re_offset[0] =
(12 * (pucch_pdu->prb_start + pucch_pdu->bwp_start) + frame_parms->first_carrier_offset) % frame_parms->ofdm_symbol_size;
if (nb_symbols==2) {
if (pucch_pdu->freq_hop_flag )
re_offset[1] = (12*(pucch_pdu->second_hop_prb+pucch_pdu->bwp_start) + frame_parms->first_carrier_offset) % frame_parms->ofdm_symbol_size ;
re_offset[0] = (12 * starting_prb + frame_parms->first_carrier_offset) % frame_parms->ofdm_symbol_size;
if (nb_symbols == 2) {
if (pucch_pdu->freq_hop_flag)
re_offset[1] = (12 * (pucch_pdu->second_hop_prb + pucch_pdu->bwp_start) + frame_parms->first_carrier_offset)
% frame_parms->ofdm_symbol_size;
else
re_offset[1] = re_offset[0];
}
@@ -1074,10 +1075,10 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
printf("slot %d, start_symbol_index %d, symbol %d, dmrs_scrambling_id %d\n",
slot,pucch_pdu->start_symbol_index,symb,pucch_pdu->dmrs_scrambling_id);
#endif
uint32_t *sGold = gold_cache(x2, pucch_pdu->prb_start / 4 + ngroup / 2);
uint32_t *sGold = gold_cache(x2, starting_prb / 4 + ngroup / 2);
// Compute pilot conjugate
c16_t pil_dmrs[nb_re_dmrs] __attribute__((aligned(32)));
uint8_t *sGold8 = (uint8_t *)(sGold + pucch_pdu->prb_start / 4);
uint8_t *sGold8 = (uint8_t *)(sGold + starting_prb / 4);
for (int group = 0; group < nb_re_dmrs; group += 4)
*(simde__m128i *)(pil_dmrs + group) = oai_mm_conj(byte2m128i[*sGold8++]);