From 26c94a34c4f32acc474972d533be95eb55a29aa3 Mon Sep 17 00:00:00 2001 From: francescomani Date: Thu, 13 Feb 2025 14:43:07 +0100 Subject: [PATCH] make precoding tables local and remove them from common files --- openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c | 107 ------------------ openair2/LAYER2/NR_MAC_COMMON/nr_mac_extern.h | 5 - .../LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c | 107 ++++++++++++++++++ 3 files changed, 107 insertions(+), 112 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c index ccee11d37e..c7c0b282a8 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c @@ -305,113 +305,6 @@ const uint8_t table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos3[16][4]={ {1,0,2,6} // row index 16 }; -// TS 38.211 - Table 6.3.1.5-1: Precoding matrix W for single-layer transmission using two antenna ports, 'n' = -1 and 'o' = -j -const char table_38211_6_3_1_5_1[6][2][1] = { - {{'1'}, {'0'}}, // tpmi 0 - {{'0'}, {'1'}}, // tpmi 1 - {{'1'}, {'1'}}, // tpmi 2 - {{'1'}, {'n'}}, // tpmi 3 - {{'1'}, {'j'}}, // tpmi 4 - {{'1'}, {'o'}} // tpmi 5 -}; - -// TS 38.211 - Table 6.3.1.5-2: Precoding matrix W for single-layer transmission using four antenna ports with transform precoding enabled, 'n' = -1 and 'o' = -j -const char table_38211_6_3_1_5_2[28][4][1] = { - {{'1'}, {'0'}, {'0'}, {'0'}}, // tpmi 0 - {{'0'}, {'1'}, {'0'}, {'0'}}, // tpmi 1 - {{'0'}, {'0'}, {'1'}, {'0'}}, // tpmi 2 - {{'0'}, {'0'}, {'0'}, {'1'}}, // tpmi 3 - {{'1'}, {'0'}, {'1'}, {'0'}}, // tpmi 4 - {{'1'}, {'0'}, {'n'}, {'0'}}, // tpmi 5 - {{'1'}, {'0'}, {'j'}, {'0'}}, // tpmi 6 - {{'1'}, {'0'}, {'o'}, {'0'}}, // tpmi 7 - {{'0'}, {'1'}, {'0'}, {'1'}}, // tpmi 8 - {{'0'}, {'1'}, {'0'}, {'n'}}, // tpmi 9 - {{'0'}, {'1'}, {'0'}, {'j'}}, // tpmi 10 - {{'0'}, {'1'}, {'0'}, {'o'}}, // tpmi 11 - {{'1'}, {'1'}, {'1'}, {'n'}}, // tpmi 12 - {{'1'}, {'1'}, {'j'}, {'j'}}, // tpmi 13 - {{'1'}, {'1'}, {'n'}, {'1'}}, // tpmi 14 - {{'1'}, {'1'}, {'o'}, {'o'}}, // tpmi 15 - {{'1'}, {'j'}, {'1'}, {'j'}}, // tpmi 16 - {{'1'}, {'j'}, {'j'}, {'1'}}, // tpmi 17 - {{'1'}, {'j'}, {'n'}, {'o'}}, // tpmi 18 - {{'1'}, {'j'}, {'o'}, {'n'}}, // tpmi 19 - {{'1'}, {'n'}, {'1'}, {'1'}}, // tpmi 20 - {{'1'}, {'n'}, {'j'}, {'o'}}, // tpmi 21 - {{'1'}, {'n'}, {'n'}, {'n'}}, // tpmi 22 - {{'1'}, {'n'}, {'o'}, {'j'}}, // tpmi 23 - {{'1'}, {'o'}, {'1'}, {'o'}}, // tpmi 24 - {{'1'}, {'o'}, {'j'}, {'n'}}, // tpmi 25 - {{'1'}, {'o'}, {'n'}, {'j'}}, // tpmi 26 - {{'1'}, {'o'}, {'o'}, {'1'}} // tpmi 27 -}; - -// TS 38.211 - Table 6.3.1.5-3: Precoding matrix W for single-layer transmission using four antenna ports with transform precoding disabled, 'n' = -1 and 'o' = -j -const char table_38211_6_3_1_5_3[28][4][1] = { - {{'1'}, {'0'}, {'0'}, {'0'}}, // tpmi 0 - {{'0'}, {'1'}, {'0'}, {'0'}}, // tpmi 1 - {{'0'}, {'0'}, {'1'}, {'0'}}, // tpmi 2 - {{'0'}, {'0'}, {'0'}, {'1'}}, // tpmi 3 - {{'1'}, {'0'}, {'1'}, {'0'}}, // tpmi 4 - {{'1'}, {'0'}, {'n'}, {'0'}}, // tpmi 5 - {{'1'}, {'0'}, {'j'}, {'0'}}, // tpmi 6 - {{'1'}, {'0'}, {'o'}, {'0'}}, // tpmi 7 - {{'0'}, {'1'}, {'0'}, {'1'}}, // tpmi 8 - {{'0'}, {'1'}, {'0'}, {'n'}}, // tpmi 9 - {{'0'}, {'1'}, {'0'}, {'j'}}, // tpmi 10 - {{'0'}, {'1'}, {'0'}, {'o'}}, // tpmi 11 - {{'1'}, {'1'}, {'1'}, {'1'}}, // tpmi 12 - {{'1'}, {'1'}, {'j'}, {'j'}}, // tpmi 13 - {{'1'}, {'1'}, {'n'}, {'n'}}, // tpmi 14 - {{'1'}, {'1'}, {'o'}, {'o'}}, // tpmi 15 - {{'1'}, {'j'}, {'1'}, {'j'}}, // tpmi 16 - {{'1'}, {'j'}, {'j'}, {'n'}}, // tpmi 17 - {{'1'}, {'j'}, {'n'}, {'o'}}, // tpmi 18 - {{'1'}, {'j'}, {'o'}, {'1'}}, // tpmi 19 - {{'1'}, {'n'}, {'1'}, {'n'}}, // tpmi 20 - {{'1'}, {'n'}, {'j'}, {'o'}}, // tpmi 21 - {{'1'}, {'n'}, {'n'}, {'1'}}, // tpmi 22 - {{'1'}, {'n'}, {'o'}, {'j'}}, // tpmi 23 - {{'1'}, {'o'}, {'1'}, {'o'}}, // tpmi 24 - {{'1'}, {'o'}, {'j'}, {'1'}}, // tpmi 25 - {{'1'}, {'o'}, {'n'}, {'j'}}, // tpmi 26 - {{'1'}, {'o'}, {'o'}, {'n'}} // tpmi 27 -}; - -// TS 38.211 - Table 6.3.1.5-4: Precoding matrix W for two-layer transmission using two antenna ports, 'n' = -1 and 'o' = -j -const char table_38211_6_3_1_5_4[3][2][2] = { - {{'1', '0'}, {'0', '1'}}, // tpmi 0 - {{'1', '1'}, {'1', 'n'}}, // tpmi 1 - {{'1', '1'}, {'j', 'o'}} // tpmi 2 -}; - -// TS 38.211 - Table 6.3.1.5-5: Precoding matrix W for two-layer transmission using four antenna ports, 'n' = -1 and 'o' = -j -const char table_38211_6_3_1_5_5[22][4][2] = { - {{'1', '0'}, {'0', '1'}, {'0', '0'}, {'0', '0'}}, // tpmi 0 - {{'1', '0'}, {'0', '0'}, {'0', '1'}, {'0', '0'}}, // tpmi 1 - {{'1', '0'}, {'0', '0'}, {'0', '0'}, {'0', '1'}}, // tpmi 2 - {{'0', '0'}, {'1', '0'}, {'0', '1'}, {'0', '0'}}, // tpmi 3 - {{'0', '0'}, {'1', '0'}, {'0', '0'}, {'0', '1'}}, // tpmi 4 - {{'0', '0'}, {'0', '0'}, {'1', '0'}, {'0', '1'}}, // tpmi 5 - {{'1', '0'}, {'0', '1'}, {'1', '0'}, {'0', 'o'}}, // tpmi 6 - {{'1', '0'}, {'0', '1'}, {'1', '0'}, {'0', 'j'}}, // tpmi 7 - {{'1', '0'}, {'0', '1'}, {'o', '0'}, {'0', '1'}}, // tpmi 8 - {{'1', '0'}, {'0', '1'}, {'o', '0'}, {'0', 'n'}}, // tpmi 9 - {{'1', '0'}, {'0', '1'}, {'n', '0'}, {'0', 'o'}}, // tpmi 10 - {{'1', '0'}, {'0', '1'}, {'n', '0'}, {'0', 'j'}}, // tpmi 11 - {{'1', '0'}, {'0', '1'}, {'j', '0'}, {'0', '1'}}, // tpmi 12 - {{'1', '0'}, {'0', '1'}, {'j', '0'}, {'0', 'n'}}, // tpmi 13 - {{'1', '1'}, {'1', '1'}, {'1', 'n'}, {'1', 'n'}}, // tpmi 14 - {{'1', '1'}, {'1', '1'}, {'j', 'o'}, {'j', 'o'}}, // tpmi 15 - {{'1', '1'}, {'j', 'j'}, {'1', 'n'}, {'j', 'o'}}, // tpmi 16 - {{'1', '1'}, {'j', 'j'}, {'j', 'o'}, {'n', '1'}}, // tpmi 17 - {{'1', '1'}, {'n', 'n'}, {'1', 'n'}, {'n', '1'}}, // tpmi 18 - {{'1', '1'}, {'n', 'n'}, {'j', 'o'}, {'o', 'j'}}, // tpmi 19 - {{'1', '1'}, {'o', 'o'}, {'1', 'n'}, {'o', 'j'}}, // tpmi 20 - {{'1', '1'}, {'o', 'o'}, {'j', 'o'}, {'1', 'n'}} // tpmi 21 -}; - // Default PUSCH time domain resource allocation tables from 38.214 const uint8_t table_6_1_2_1_1_2[16][4] = { {0, 0, 0, 14}, // row index 1 diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_extern.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_extern.h index 14b4912506..cff2c3757e 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_extern.h +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_extern.h @@ -44,9 +44,4 @@ extern uint8_t nfapi_mode; extern const uint32_t NR_SHORT_BSR_TABLE[NR_SHORT_BSR_TABLE_SIZE]; extern const uint32_t NR_LONG_BSR_TABLE[NR_LONG_BSR_TABLE_SIZE]; -extern const char table_38211_6_3_1_5_1[6][2][1]; -extern const char table_38211_6_3_1_5_2[28][4][1]; -extern const char table_38211_6_3_1_5_3[28][4][1]; -extern const char table_38211_6_3_1_5_4[3][2][2]; -extern const char table_38211_6_3_1_5_5[22][4][2]; #endif //DEF_H diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index 6dac12a01b..cf30983977 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -1237,6 +1237,113 @@ static uint8_t get_max_tpmi(const NR_PUSCH_Config_t *pusch_Config, return max_tpmi; } +// TS 38.211 - Table 6.3.1.5-1: Precoding matrix W for single-layer transmission using two antenna ports, 'n' = -1 and 'o' = -j +const char table_38211_6_3_1_5_1[6][2][1] = { + {{'1'}, {'0'}}, // tpmi 0 + {{'0'}, {'1'}}, // tpmi 1 + {{'1'}, {'1'}}, // tpmi 2 + {{'1'}, {'n'}}, // tpmi 3 + {{'1'}, {'j'}}, // tpmi 4 + {{'1'}, {'o'}} // tpmi 5 +}; + +// TS 38.211 - Table 6.3.1.5-2: Precoding matrix W for single-layer transmission using four antenna ports with transform precoding enabled, 'n' = -1 and 'o' = -j +const char table_38211_6_3_1_5_2[28][4][1] = { + {{'1'}, {'0'}, {'0'}, {'0'}}, // tpmi 0 + {{'0'}, {'1'}, {'0'}, {'0'}}, // tpmi 1 + {{'0'}, {'0'}, {'1'}, {'0'}}, // tpmi 2 + {{'0'}, {'0'}, {'0'}, {'1'}}, // tpmi 3 + {{'1'}, {'0'}, {'1'}, {'0'}}, // tpmi 4 + {{'1'}, {'0'}, {'n'}, {'0'}}, // tpmi 5 + {{'1'}, {'0'}, {'j'}, {'0'}}, // tpmi 6 + {{'1'}, {'0'}, {'o'}, {'0'}}, // tpmi 7 + {{'0'}, {'1'}, {'0'}, {'1'}}, // tpmi 8 + {{'0'}, {'1'}, {'0'}, {'n'}}, // tpmi 9 + {{'0'}, {'1'}, {'0'}, {'j'}}, // tpmi 10 + {{'0'}, {'1'}, {'0'}, {'o'}}, // tpmi 11 + {{'1'}, {'1'}, {'1'}, {'n'}}, // tpmi 12 + {{'1'}, {'1'}, {'j'}, {'j'}}, // tpmi 13 + {{'1'}, {'1'}, {'n'}, {'1'}}, // tpmi 14 + {{'1'}, {'1'}, {'o'}, {'o'}}, // tpmi 15 + {{'1'}, {'j'}, {'1'}, {'j'}}, // tpmi 16 + {{'1'}, {'j'}, {'j'}, {'1'}}, // tpmi 17 + {{'1'}, {'j'}, {'n'}, {'o'}}, // tpmi 18 + {{'1'}, {'j'}, {'o'}, {'n'}}, // tpmi 19 + {{'1'}, {'n'}, {'1'}, {'1'}}, // tpmi 20 + {{'1'}, {'n'}, {'j'}, {'o'}}, // tpmi 21 + {{'1'}, {'n'}, {'n'}, {'n'}}, // tpmi 22 + {{'1'}, {'n'}, {'o'}, {'j'}}, // tpmi 23 + {{'1'}, {'o'}, {'1'}, {'o'}}, // tpmi 24 + {{'1'}, {'o'}, {'j'}, {'n'}}, // tpmi 25 + {{'1'}, {'o'}, {'n'}, {'j'}}, // tpmi 26 + {{'1'}, {'o'}, {'o'}, {'1'}} // tpmi 27 +}; + +// TS 38.211 - Table 6.3.1.5-3: Precoding matrix W for single-layer transmission using four antenna ports with transform precoding disabled, 'n' = -1 and 'o' = -j +const char table_38211_6_3_1_5_3[28][4][1] = { + {{'1'}, {'0'}, {'0'}, {'0'}}, // tpmi 0 + {{'0'}, {'1'}, {'0'}, {'0'}}, // tpmi 1 + {{'0'}, {'0'}, {'1'}, {'0'}}, // tpmi 2 + {{'0'}, {'0'}, {'0'}, {'1'}}, // tpmi 3 + {{'1'}, {'0'}, {'1'}, {'0'}}, // tpmi 4 + {{'1'}, {'0'}, {'n'}, {'0'}}, // tpmi 5 + {{'1'}, {'0'}, {'j'}, {'0'}}, // tpmi 6 + {{'1'}, {'0'}, {'o'}, {'0'}}, // tpmi 7 + {{'0'}, {'1'}, {'0'}, {'1'}}, // tpmi 8 + {{'0'}, {'1'}, {'0'}, {'n'}}, // tpmi 9 + {{'0'}, {'1'}, {'0'}, {'j'}}, // tpmi 10 + {{'0'}, {'1'}, {'0'}, {'o'}}, // tpmi 11 + {{'1'}, {'1'}, {'1'}, {'1'}}, // tpmi 12 + {{'1'}, {'1'}, {'j'}, {'j'}}, // tpmi 13 + {{'1'}, {'1'}, {'n'}, {'n'}}, // tpmi 14 + {{'1'}, {'1'}, {'o'}, {'o'}}, // tpmi 15 + {{'1'}, {'j'}, {'1'}, {'j'}}, // tpmi 16 + {{'1'}, {'j'}, {'j'}, {'n'}}, // tpmi 17 + {{'1'}, {'j'}, {'n'}, {'o'}}, // tpmi 18 + {{'1'}, {'j'}, {'o'}, {'1'}}, // tpmi 19 + {{'1'}, {'n'}, {'1'}, {'n'}}, // tpmi 20 + {{'1'}, {'n'}, {'j'}, {'o'}}, // tpmi 21 + {{'1'}, {'n'}, {'n'}, {'1'}}, // tpmi 22 + {{'1'}, {'n'}, {'o'}, {'j'}}, // tpmi 23 + {{'1'}, {'o'}, {'1'}, {'o'}}, // tpmi 24 + {{'1'}, {'o'}, {'j'}, {'1'}}, // tpmi 25 + {{'1'}, {'o'}, {'n'}, {'j'}}, // tpmi 26 + {{'1'}, {'o'}, {'o'}, {'n'}} // tpmi 27 +}; + +// TS 38.211 - Table 6.3.1.5-4: Precoding matrix W for two-layer transmission using two antenna ports, 'n' = -1 and 'o' = -j +const char table_38211_6_3_1_5_4[3][2][2] = { + {{'1', '0'}, {'0', '1'}}, // tpmi 0 + {{'1', '1'}, {'1', 'n'}}, // tpmi 1 + {{'1', '1'}, {'j', 'o'}} // tpmi 2 +}; + +// TS 38.211 - Table 6.3.1.5-5: Precoding matrix W for two-layer transmission using four antenna ports, 'n' = -1 and 'o' = -j +const char table_38211_6_3_1_5_5[22][4][2] = { + {{'1', '0'}, {'0', '1'}, {'0', '0'}, {'0', '0'}}, // tpmi 0 + {{'1', '0'}, {'0', '0'}, {'0', '1'}, {'0', '0'}}, // tpmi 1 + {{'1', '0'}, {'0', '0'}, {'0', '0'}, {'0', '1'}}, // tpmi 2 + {{'0', '0'}, {'1', '0'}, {'0', '1'}, {'0', '0'}}, // tpmi 3 + {{'0', '0'}, {'1', '0'}, {'0', '0'}, {'0', '1'}}, // tpmi 4 + {{'0', '0'}, {'0', '0'}, {'1', '0'}, {'0', '1'}}, // tpmi 5 + {{'1', '0'}, {'0', '1'}, {'1', '0'}, {'0', 'o'}}, // tpmi 6 + {{'1', '0'}, {'0', '1'}, {'1', '0'}, {'0', 'j'}}, // tpmi 7 + {{'1', '0'}, {'0', '1'}, {'o', '0'}, {'0', '1'}}, // tpmi 8 + {{'1', '0'}, {'0', '1'}, {'o', '0'}, {'0', 'n'}}, // tpmi 9 + {{'1', '0'}, {'0', '1'}, {'n', '0'}, {'0', 'o'}}, // tpmi 10 + {{'1', '0'}, {'0', '1'}, {'n', '0'}, {'0', 'j'}}, // tpmi 11 + {{'1', '0'}, {'0', '1'}, {'j', '0'}, {'0', '1'}}, // tpmi 12 + {{'1', '0'}, {'0', '1'}, {'j', '0'}, {'0', 'n'}}, // tpmi 13 + {{'1', '1'}, {'1', '1'}, {'1', 'n'}, {'1', 'n'}}, // tpmi 14 + {{'1', '1'}, {'1', '1'}, {'j', 'o'}, {'j', 'o'}}, // tpmi 15 + {{'1', '1'}, {'j', 'j'}, {'1', 'n'}, {'j', 'o'}}, // tpmi 16 + {{'1', '1'}, {'j', 'j'}, {'j', 'o'}, {'n', '1'}}, // tpmi 17 + {{'1', '1'}, {'n', 'n'}, {'1', 'n'}, {'n', '1'}}, // tpmi 18 + {{'1', '1'}, {'n', 'n'}, {'j', 'o'}, {'o', 'j'}}, // tpmi 19 + {{'1', '1'}, {'o', 'o'}, {'1', 'n'}, {'o', 'j'}}, // tpmi 20 + {{'1', '1'}, {'o', 'o'}, {'j', 'o'}, {'1', 'n'}} // tpmi 21 +}; + static void get_precoder_matrix_coef(char *w, const uint8_t ul_ri, const uint16_t num_ue_srs_ports,