adding UL dmrs funtionalities to dmrs_nr.c in NR_UE_TRANSPORT
This commit is contained in:
committed by
Thomas Schlichter
parent
9c447c18a0
commit
1ec87df5a6
@@ -25,6 +25,8 @@
|
||||
#include <stdint.h>
|
||||
#include "PHY/defs_nr_common.h"
|
||||
|
||||
#define DMRS_MOD_ORDER 2
|
||||
|
||||
/*! \brief Perform NR modulation. TS 38.211 V15.4.0 subclause 5.1
|
||||
@param[in] in, Pointer to input bits
|
||||
@param[in] length, size of input bits
|
||||
|
||||
@@ -54,6 +54,8 @@
|
||||
int pseudo_random_sequence(int M_PN, uint32_t *c, uint32_t cinit);
|
||||
void lte_gold_new(LTE_DL_FRAME_PARMS *frame_parms, uint32_t lte_gold_table[20][2][14], uint16_t Nid_cell);
|
||||
void generate_dmrs_pbch(uint32_t dmrs_pbch_bitmap[DMRS_PBCH_I_SSB][DMRS_PBCH_N_HF][DMRS_BITMAP_SIZE], uint16_t Nid_cell);
|
||||
uint8_t get_l0_ul(uint8_t mapping_type, uint8_t dmrs_typeA_position);
|
||||
uint16_t get_dmrs_freq_idx_ul(uint8_t n, uint8_t k_prime, uint8_t delta, uint8_t dmrs_type);
|
||||
|
||||
#undef EXTERN
|
||||
|
||||
|
||||
@@ -172,7 +172,7 @@ for (int l=0; l<rel15->nb_layers; l++)
|
||||
uint8_t dmrs_type = config->pdsch_config.dmrs_type.value;
|
||||
uint8_t mapping_type = config->pdsch_config.mapping_type.value;
|
||||
|
||||
l0 = get_l0(mapping_type, 2, 0);//config->pdsch_config.dmrs_typeA_position.value);
|
||||
l0 = get_l0(mapping_type, 2);//config->pdsch_config.dmrs_typeA_position.value);
|
||||
nr_modulation(pdsch_dmrs[l0][0], n_dmrs, DMRS_MOD_ORDER, mod_dmrs); // currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated
|
||||
|
||||
#ifdef DEBUG_DLSCH
|
||||
|
||||
@@ -90,11 +90,8 @@ uint16_t get_dmrs_freq_idx(uint8_t n, uint8_t k_prime, uint8_t delta, uint8_t dm
|
||||
return dmrs_idx;
|
||||
}
|
||||
|
||||
uint8_t get_l0(uint8_t mapping_type, uint8_t dmrs_typeA_position, int ul_flag) {
|
||||
uint8_t get_l0(uint8_t mapping_type, uint8_t dmrs_typeA_position) {
|
||||
|
||||
if (ul_flag)
|
||||
return ((mapping_type==NFAPI_NR_PDSCH_MAPPING_TYPE_A)?dmrs_typeA_position:0);
|
||||
else
|
||||
return ((mapping_type==typeA)?dmrs_typeA_position:0);
|
||||
return ((mapping_type==NFAPI_NR_PDSCH_MAPPING_TYPE_A)?dmrs_typeA_position:0);
|
||||
|
||||
}
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
|
||||
#define NR_PDSCH_DMRS_ANTENNA_PORT0 1000
|
||||
#define NR_PDSCH_DMRS_NB_ANTENNA_PORTS 12
|
||||
#define DMRS_MOD_ORDER 2
|
||||
|
||||
void get_l_prime(uint8_t *l_prime, uint8_t n_symbs);
|
||||
|
||||
@@ -48,4 +47,4 @@ uint8_t get_delta(uint8_t ap, uint8_t config);
|
||||
|
||||
uint16_t get_dmrs_freq_idx(uint8_t n, uint8_t k_prime, uint8_t delta, uint8_t dmrs_type);
|
||||
|
||||
uint8_t get_l0(uint8_t mapping_type, uint8_t dmrs_typeA_position, int ul_flag);
|
||||
uint8_t get_l0(uint8_t mapping_type, uint8_t dmrs_typeA_position);
|
||||
|
||||
@@ -224,6 +224,45 @@ void lte_gold_new(LTE_DL_FRAME_PARMS *frame_parms, uint32_t lte_gold_table[20][2
|
||||
#endif
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
*
|
||||
* NAME : get_l0_ul
|
||||
*
|
||||
* PARAMETERS : mapping_type : PUSCH mapping type
|
||||
* dmrs_typeA_position : higher layer parameter
|
||||
*
|
||||
* RETURN : demodulation reference signal for PUSCH
|
||||
*
|
||||
* DESCRIPTION : see TS 38.211 V15.4.0 Demodulation reference signals for PUSCH
|
||||
*
|
||||
*********************************************************************/
|
||||
|
||||
uint8_t get_l0_ul(uint8_t mapping_type, uint8_t dmrs_typeA_position) {
|
||||
|
||||
return ((mapping_type==typeA)?dmrs_typeA_position:0);
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
*
|
||||
* NAME : get_dmrs_freq_idx_ul
|
||||
*
|
||||
* PARAMETERS : n : index of DMRS symbol
|
||||
* k_prime : k_prime = {0,1}
|
||||
* delta : given by Tables 6.4.1.1.3-1 and 6.4.1.1.3-2
|
||||
* dmrs_type : DMRS configuration type
|
||||
*
|
||||
* RETURN : demodulation reference signal for PUSCH
|
||||
*
|
||||
* DESCRIPTION : see TS 38.211 V15.4.0 Demodulation reference signals for PUSCH
|
||||
*
|
||||
*********************************************************************/
|
||||
|
||||
uint16_t get_dmrs_freq_idx_ul(uint8_t n, uint8_t k_prime, uint8_t delta, uint8_t dmrs_type) {
|
||||
uint16_t dmrs_idx = (dmrs_type)? (6*n+k_prime+delta):((n<<2)+(k_prime<<1)+delta);
|
||||
return dmrs_idx;
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
*
|
||||
* NAME : get_dmrs_pbch
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
#include "PHY/NR_TRANSPORT/nr_transport.h"
|
||||
#include "PHY/NR_TRANSPORT/nr_dlsch.h"
|
||||
#include "PHY/NR_TRANSPORT/nr_ulsch.h"
|
||||
#include "PHY/NR_TRANSPORT/nr_sch_dmrs.h"
|
||||
#include "PHY/NR_REFSIG/dmrs_nr.h"
|
||||
#include "PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h"
|
||||
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
|
||||
#include "SCHED_NR/sched_nr.h"
|
||||
@@ -592,7 +592,7 @@ int main(int argc, char **argv) {
|
||||
dmrs_type = UE->dmrs_UplinkConfig.pusch_dmrs_type;
|
||||
mapping_type = UE->pusch_config.pusch_TimeDomainResourceAllocation[0]->mappingType;
|
||||
|
||||
l0 = get_l0(mapping_type, 2, 1);
|
||||
l0 = get_l0_ul(mapping_type, 2);
|
||||
nr_modulation(pusch_dmrs[l0][0], n_dmrs, DMRS_MOD_ORDER, mod_dmrs); // currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated
|
||||
|
||||
|
||||
@@ -642,7 +642,7 @@ int main(int argc, char **argv) {
|
||||
sample_offsetF = l*frame_parms->ofdm_symbol_size + k;
|
||||
|
||||
for (i=0; i<nb_rb*NR_NB_SC_PER_RB; i++) {
|
||||
if ((l == dmrs_symbol) && (k == ((start_sc+get_dmrs_freq_idx(n, k_prime, delta, dmrs_type))%(frame_parms->ofdm_symbol_size)))) {
|
||||
if ((l == dmrs_symbol) && (k == ((start_sc+get_dmrs_freq_idx_ul(n, k_prime, delta, dmrs_type))%(frame_parms->ofdm_symbol_size)))) {
|
||||
((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) + 1] = (Wt[l_prime[0]]*Wf[k_prime]*amp*mod_dmrs[(dmrs_idx<<1) + 1]) >> 15;
|
||||
#ifdef DEBUG_PUSCH_MAPPING
|
||||
|
||||
Reference in New Issue
Block a user