From 51dfab0c56ce141b6d5c6489b8915cf1e1eb35ee Mon Sep 17 00:00:00 2001 From: rmagueta Date: Wed, 7 May 2025 15:55:36 +0100 Subject: [PATCH] Fix DMRS for PUCCH format 2 --- openair1/PHY/NR_TRANSPORT/pucch_rx.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/pucch_rx.c b/openair1/PHY/NR_TRANSPORT/pucch_rx.c index 79e39fa7c1..a66812b39e 100644 --- a/openair1/PHY/NR_TRANSPORT/pucch_rx.c +++ b/openair1/PHY/NR_TRANSPORT/pucch_rx.c @@ -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++]);