Adding table 6.4.1.1.3-4 for double DMRS symbol
This commit is contained in:
committed by
Thomas Schlichter
parent
ccc515c537
commit
935c2ce7ce
@@ -155,7 +155,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
//------------- config PUSCH DMRS parameters(to be updated from RRC)--------------//
|
//------------- config PUSCH DMRS parameters(to be updated from RRC)--------------//
|
||||||
gNB->dmrs_UplinkConfig.pusch_dmrs_type = pusch_dmrs_type1;
|
gNB->dmrs_UplinkConfig.pusch_dmrs_type = pusch_dmrs_type1;
|
||||||
gNB->dmrs_UplinkConfig.pusch_dmrs_AdditionalPosition = pusch_dmrs_pos3;
|
gNB->dmrs_UplinkConfig.pusch_dmrs_AdditionalPosition = pusch_dmrs_pos0;
|
||||||
gNB->dmrs_UplinkConfig.pusch_maxLength = pusch_len1;
|
gNB->dmrs_UplinkConfig.pusch_maxLength = pusch_len1;
|
||||||
//--------------------------------------------------------------------------------//
|
//--------------------------------------------------------------------------------//
|
||||||
|
|
||||||
|
|||||||
@@ -705,7 +705,7 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
|
|||||||
|
|
||||||
//------------- config DMRS parameters--------------//
|
//------------- config DMRS parameters--------------//
|
||||||
ue->dmrs_UplinkConfig.pusch_dmrs_type = pusch_dmrs_type1;
|
ue->dmrs_UplinkConfig.pusch_dmrs_type = pusch_dmrs_type1;
|
||||||
ue->dmrs_UplinkConfig.pusch_dmrs_AdditionalPosition = pusch_dmrs_pos3;
|
ue->dmrs_UplinkConfig.pusch_dmrs_AdditionalPosition = pusch_dmrs_pos0;
|
||||||
ue->dmrs_UplinkConfig.pusch_maxLength = pusch_len1;
|
ue->dmrs_UplinkConfig.pusch_maxLength = pusch_len1;
|
||||||
//-------------------------------------------------//
|
//-------------------------------------------------//
|
||||||
ue->nr_gold_pusch_dmrs = (uint32_t ****)malloc16(fp->slots_per_frame*sizeof(uint32_t ***));
|
ue->nr_gold_pusch_dmrs = (uint32_t ****)malloc16(fp->slots_per_frame*sizeof(uint32_t ***));
|
||||||
|
|||||||
@@ -55,7 +55,27 @@ int32_t table_6_4_1_1_3_3_pusch_dmrs_positions_l [12][8] = {
|
|||||||
{1, 2049, 2177, 2337, 1, 1025, 1057, 585}, //14 // (DMRS l' position)
|
{1, 2049, 2177, 2337, 1, 1025, 1057, 585}, //14 // (DMRS l' position)
|
||||||
};
|
};
|
||||||
|
|
||||||
int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmrs_AdditionalPosition_t additional_pos) {
|
|
||||||
|
// TS 38.211 Table 6.4.1.1.3-4: PUSCH DMRS positions l' within a slot for double-symbol DMRS and intra-slot frequency hopping disabled.
|
||||||
|
// The first 4 colomns are PUSCH mapping type A and the last 4 colomns are PUSCH mapping type B.
|
||||||
|
// When l' = l0, it is represented by 1
|
||||||
|
|
||||||
|
int32_t table_6_4_1_1_3_4_pusch_dmrs_positions_l [12][8] = { // Duration in symbols
|
||||||
|
{-1, -1, -1, -1, -1, -1, -1, -1}, //<4 // (DMRS l' position)
|
||||||
|
{1, 1, -1, -1, -1, -1, -1, -1}, //4 // (DMRS l' position)
|
||||||
|
{1, 1, -1, -1, 1, 1, -1, -1}, //5 // (DMRS l' position)
|
||||||
|
{1, 1, -1, -1, 1, 1, -1, -1}, //6 // (DMRS l' position)
|
||||||
|
{1, 1, -1, -1, 1, 1, -1, -1}, //7 // (DMRS l' position)
|
||||||
|
{1, 1, -1, -1, 1, 33, -1, -1}, //8 // (DMRS l' position)
|
||||||
|
{1, 1, -1, -1, 1, 33, -1, -1}, //9 // (DMRS l' position)
|
||||||
|
{1, 257, -1, -1, 1, 129, -1, -1}, //10 // (DMRS l' position)
|
||||||
|
{1, 257, -1, -1, 1, 129, -1, -1}, //11 // (DMRS l' position)
|
||||||
|
{1, 257, -1, -1, 1, 513, -1, -1}, //12 // (DMRS l' position)
|
||||||
|
{1, 1025, -1, -1, 1, 513, -1, -1}, //13 // (DMRS l' position)
|
||||||
|
{1, 1025, -1, -1, 1, 513, -1, -1}, //14 // (DMRS l' position)
|
||||||
|
};
|
||||||
|
|
||||||
|
int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmrs_AdditionalPosition_t additional_pos, pusch_maxLength_t pusch_maxLength) {
|
||||||
|
|
||||||
uint8_t row, colomn;
|
uint8_t row, colomn;
|
||||||
int32_t l_prime;
|
int32_t l_prime;
|
||||||
@@ -70,7 +90,10 @@ int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmr
|
|||||||
else
|
else
|
||||||
row = duration_in_symbols - 3;
|
row = duration_in_symbols - 3;
|
||||||
|
|
||||||
l_prime = table_6_4_1_1_3_3_pusch_dmrs_positions_l[row][colomn];
|
if (pusch_maxLength == pusch_len1)
|
||||||
|
l_prime = table_6_4_1_1_3_3_pusch_dmrs_positions_l[row][colomn];
|
||||||
|
else
|
||||||
|
l_prime = table_6_4_1_1_3_4_pusch_dmrs_positions_l[row][colomn];
|
||||||
|
|
||||||
AssertFatal(l_prime>0,"invalid l_prime < 0\n");
|
AssertFatal(l_prime>0,"invalid l_prime < 0\n");
|
||||||
|
|
||||||
@@ -120,7 +143,7 @@ uint8_t is_dmrs_symbol(uint8_t l,
|
|||||||
|
|
||||||
|
|
||||||
l0 = get_l0_ul(mapping_type, 2);
|
l0 = get_l0_ul(mapping_type, 2);
|
||||||
l_prime_mask = get_l_prime(duration_in_symbols, mapping_type, additional_pos);
|
l_prime_mask = get_l_prime(duration_in_symbols, mapping_type, additional_pos, dmrs_UplinkConfig->pusch_maxLength);
|
||||||
|
|
||||||
if (k == ((start_sc+get_dmrs_freq_idx_ul(n, k_prime, delta, dmrs_type))%ofdm_symbol_size))
|
if (k == ((start_sc+get_dmrs_freq_idx_ul(n, k_prime, delta, dmrs_type))%ofdm_symbol_size))
|
||||||
is_dmrs_freq = 1;
|
is_dmrs_freq = 1;
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ void generate_dmrs_pbch(uint32_t dmrs_pbch_bitmap[DMRS_PBCH_I_SSB][DMRS_PBCH_N_H
|
|||||||
uint8_t get_l0_ul(uint8_t mapping_type, uint8_t dmrs_typeA_position);
|
uint8_t get_l0_ul(uint8_t mapping_type, uint8_t dmrs_typeA_position);
|
||||||
uint16_t get_dmrs_freq_idx_ul(uint16_t n, uint8_t k_prime, uint8_t delta, uint8_t dmrs_type);
|
uint16_t get_dmrs_freq_idx_ul(uint16_t n, uint8_t k_prime, uint8_t delta, uint8_t dmrs_type);
|
||||||
|
|
||||||
int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmrs_AdditionalPosition_t additional_pos);
|
int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmrs_AdditionalPosition_t additional_pos, pusch_maxLength_t pusch_maxLength);
|
||||||
|
|
||||||
uint8_t is_dmrs_symbol(uint8_t l,
|
uint8_t is_dmrs_symbol(uint8_t l,
|
||||||
uint16_t k,
|
uint16_t k,
|
||||||
|
|||||||
@@ -328,6 +328,8 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
|
|
||||||
if (is_dmrs == 1) {
|
if (is_dmrs == 1) {
|
||||||
|
|
||||||
|
printf("DMRS l = %u\n", l);
|
||||||
|
|
||||||
nr_modulation(pusch_dmrs[l][0], n_dmrs*2, DMRS_MOD_ORDER, mod_dmrs); // currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated
|
nr_modulation(pusch_dmrs[l][0], n_dmrs*2, DMRS_MOD_ORDER, mod_dmrs); // currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated
|
||||||
|
|
||||||
((int16_t*)txdataF[ap])[(sample_offsetF)<<1] = (Wt[l_prime[0]]*Wf[k_prime]*AMP*mod_dmrs[dmrs_idx<<1]) >> 15;
|
((int16_t*)txdataF[ap])[(sample_offsetF)<<1] = (Wt[l_prime[0]]*Wf[k_prime]*AMP*mod_dmrs[dmrs_idx<<1]) >> 15;
|
||||||
|
|||||||
Reference in New Issue
Block a user