Fix PRACH sequence generation

This commit is contained in:
Xavier Arteaga 2021-02-16 13:46:32 +01:00 committed by Xavier Arteaga
parent 2fd618a295
commit 8ac6d7382f
1 changed files with 10 additions and 8 deletions

View File

@ -42,17 +42,19 @@
// Define read-only complex exponential tables for two possibles size of sequences, common for all possible PRACH
// objects
static cf_t cexp_table_long[SRSLTE_PRACH_N_ZC_LONG] = {};
static cf_t cexp_table_short[SRSLTE_PRACH_N_ZC_SHORT] = {};
#define PRACH_N_ZC_LONG_LUT_SIZE (2 * SRSLTE_PRACH_N_ZC_LONG)
static cf_t cexp_table_long[PRACH_N_ZC_LONG_LUT_SIZE] = {};
#define PRACH_N_ZC_SHORT_LUT_SIZE (2 * SRSLTE_PRACH_N_ZC_SHORT)
static cf_t cexp_table_short[PRACH_N_ZC_SHORT_LUT_SIZE] = {};
// Use constructor attribute for writing complex exponential tables
__attribute__((constructor)) static void prach_cexp_init()
{
for (uint32_t i = 0; i < SRSLTE_PRACH_N_ZC_LONG; i++) {
cexp_table_long[i] = cexpf(-I * 2.0f * M_PI * (float)i / (float)SRSLTE_PRACH_N_ZC_LONG);
for (uint32_t i = 0; i < PRACH_N_ZC_LONG_LUT_SIZE; i++) {
cexp_table_long[i] = cexpf(-I * 2.0f * M_PI * (float)i / (float)PRACH_N_ZC_LONG_LUT_SIZE);
}
for (uint32_t i = 0; i < SRSLTE_PRACH_N_ZC_SHORT; i++) {
cexp_table_short[i] = cexpf(-I * 2.0f * M_PI * (float)i / (float)SRSLTE_PRACH_N_ZC_SHORT);
for (uint32_t i = 0; i < PRACH_N_ZC_SHORT_LUT_SIZE; i++) {
cexp_table_short[i] = cexpf(-I * 2.0f * M_PI * (float)i / (float)PRACH_N_ZC_SHORT_LUT_SIZE);
}
}
@ -66,7 +68,7 @@ static void prach_cexp(uint32_t N_zc, uint32_t u, cf_t* root)
if (N_zc == SRSLTE_PRACH_N_ZC_LONG) {
for (int j = 0; j < SRSLTE_PRACH_N_ZC_LONG; j++) {
uint32_t phase_idx = u * j * (j + 1);
root[j] = cexp_table_long[phase_idx % SRSLTE_PRACH_N_ZC_LONG];
root[j] = cexp_table_long[phase_idx % PRACH_N_ZC_LONG_LUT_SIZE];
}
return;
}
@ -75,7 +77,7 @@ static void prach_cexp(uint32_t N_zc, uint32_t u, cf_t* root)
if (N_zc == SRSLTE_PRACH_N_ZC_SHORT) {
for (int j = 0; j < SRSLTE_PRACH_N_ZC_SHORT; j++) {
uint32_t phase_idx = u * j * (j + 1);
root[j] = cexp_table_short[phase_idx % SRSLTE_PRACH_N_ZC_SHORT];
root[j] = cexp_table_short[phase_idx % PRACH_N_ZC_SHORT_LUT_SIZE];
}
return;
}