From 8e7b49b94922ddbba8495b3a9e108b00d6630648 Mon Sep 17 00:00:00 2001 From: Andre Puschmann Date: Mon, 13 Apr 2020 14:27:13 +0200 Subject: [PATCH] pscch: fix PSCCH memory allocation and failing tests the missing mem zero'ing caused the unit test to fail on some machines where the memory wasn't initialized by default. for d and d16 allocate the maximum number of bits, not only the max length of a DCI --- lib/src/phy/phch/pscch.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/src/phy/phch/pscch.c b/lib/src/phy/phch/pscch.c index 7bbd19922..47be55a80 100644 --- a/lib/src/phy/phch/pscch.c +++ b/lib/src/phy/phch/pscch.c @@ -58,20 +58,23 @@ int srslte_pscch_init(srslte_pscch_t* q, uint32_t max_prb) return SRSLTE_ERROR; } + // Max E value for memory allocation + uint32_t E_max = SRSLTE_NRE * SRSLTE_PSCCH_MAX_NUM_DATA_SYMBOLS * SRSLTE_PSCCH_MAX_NOF_PRB * SRSLTE_PSCCH_QM; + // Channel Coding q->encoder.K = 7; q->encoder.R = 3; q->encoder.tail_biting = true; int poly[3] = {0x6D, 0x4F, 0x57}; memcpy(q->encoder.poly, poly, 3 * sizeof(int)); - q->d = srslte_vec_u8_malloc(SRSLTE_PSCCH_MAX_CODED_BITS); + q->d = srslte_vec_u8_malloc(E_max); if (!q->d) { ERROR("Error allocating memory\n"); return SRSLTE_ERROR; } - memset(q->d, 0, sizeof(uint8_t) * SRSLTE_PSCCH_MAX_CODED_BITS); + srslte_vec_u8_zero(q->d, E_max); - q->d_16 = srslte_vec_i16_malloc(SRSLTE_PSCCH_MAX_CODED_BITS); + q->d_16 = srslte_vec_i16_malloc(E_max); if (!q->d_16) { ERROR("Error allocating memory\n"); return SRSLTE_ERROR; @@ -80,8 +83,6 @@ int srslte_pscch_init(srslte_pscch_t* q, uint32_t max_prb) srslte_viterbi_init( &q->dec, SRSLTE_VITERBI_37, q->encoder.poly, SRSLTE_SCI_MAX_LEN + SRSLTE_SCI_CRC_LEN, q->encoder.tail_biting); - // Max E value for memory allocation - uint32_t E_max = SRSLTE_NRE * SRSLTE_PSCCH_MAX_NUM_DATA_SYMBOLS * SRSLTE_PSCCH_MAX_NOF_PRB * SRSLTE_PSCCH_QM; q->e = srslte_vec_u8_malloc(E_max); if (!q->e) { ERROR("Error allocating memory\n"); @@ -129,6 +130,7 @@ int srslte_pscch_init(srslte_pscch_t* q, uint32_t max_prb) ERROR("Error allocating memory\n"); return SRSLTE_ERROR; } + srslte_vec_cf_zero(q->mod_symbols, E_max / SRSLTE_PSCCH_QM); q->llr = srslte_vec_i16_malloc(E_max); if (!q->llr) { @@ -145,6 +147,7 @@ int srslte_pscch_init(srslte_pscch_t* q, uint32_t max_prb) ERROR("Error allocating memory\n"); return SRSLTE_ERROR; } + srslte_vec_cf_zero(q->scfdma_symbols, E_max / SRSLTE_PSCCH_QM); // IDFT Predecoding if (srslte_dft_precoding_init(&q->idft_precoder, SRSLTE_PSCCH_MAX_NOF_PRB, false)) {