Commit 2167d2c0 authored by Florian Kaltenberger's avatar Florian Kaltenberger

some bugfixes to the uespec pilot generation for TM8

parent 6ab9229b
......@@ -45,10 +45,10 @@ unsigned int lte_gold_generic(unsigned int *x1, unsigned int *x2, unsigned char
void lte_gold(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_table[20][2][14],uint16_t Nid_cell);
/*! \brief This function generates the LTE Gold sequence for DL UE-specific pilots for antenna ports 7,...,14 (transmission modes 8/9) */
void lte_gold_ue_spec(uint32_t lte_gold_uespec_table[2][20][2][21],uint16_t Nid_cell, uint16_t *n_idDMRS);
void lte_gold_ue_spec(uint32_t lte_gold_uespec_table[2][20][2][100],uint16_t Nid_cell, uint16_t *n_idDMRS);
/*! \brief This function generates the LTE Gold sequence for DL UE-specific pilots for antenna port 5 (transmission mode 7) */
void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][38],uint16_t Nid_cell, uint16_t n_rnti);
void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][75],uint16_t Nid_cell, uint16_t n_rnti);
/*!\brief This function generates the LTE Gold sequence (36-211, Sec 7.2), specifically for DL UE-specific reference signals for antenna ports 7..14.
@param frame_parms LTE DL Frame parameters
......
......@@ -81,7 +81,7 @@ void lte_gold(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_table[20][2][14]
}
}
void lte_gold_ue_spec(uint32_t lte_gold_uespec_table[2][20][2][21],uint16_t Nid_cell, uint16_t *n_idDMRS)
void lte_gold_ue_spec(uint32_t lte_gold_uespec_table[2][20][2][100],uint16_t Nid_cell, uint16_t *n_idDMRS)
{
unsigned char ns,l;
......@@ -117,7 +117,7 @@ void lte_gold_ue_spec(uint32_t lte_gold_uespec_table[2][20][2][21],uint16_t Nid_
// printf("x1 : %x, x2 : %x\n",x1,x2);
}
for (n=0; n<14; n++) {
for (n=0; n<100; n++) {
x1 = (x1>>1) ^ (x1>>4);
x1 = x1 ^ (x1<<31) ^ (x1<<28);
x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4);
......@@ -131,7 +131,7 @@ void lte_gold_ue_spec(uint32_t lte_gold_uespec_table[2][20][2][21],uint16_t Nid_
}
}
void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][38],uint16_t Nid_cell, uint16_t n_rnti)
void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][75],uint16_t Nid_cell, uint16_t n_rnti)
{
unsigned char ns;
......@@ -157,7 +157,7 @@ void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][38],uint16_
//printf("x1 : %x, x2 : %x\n",x1,x2);
}
for (n=0; n<38; n++) {
for (n=0; n<75; n++) {
x1 = (x1>>1) ^ (x1>>4);
x1 = x1 ^ (x1<<31) ^ (x1<<28);
x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4);
......
......@@ -886,6 +886,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
uint8_t TPC=0;
uint8_t TB0_active=0,TB1_active=0;
uint8_t ndi1=0,ndi2=0;
uint8_t nscid;
LTE_DL_eNB_HARQ_t *dlsch0_harq=NULL,*dlsch1_harq=NULL;
// printf("Generate eNB DCI, format %d, rnti %x (pdu %p)\n",dci_format,rnti,dci_pdu);
......@@ -2134,9 +2135,10 @@ int generate_eNB_dlsch_params_from_dci(int frame,
rballoc = ((DCI2B_1_5MHz_TDD_t *)dci_pdu)->rballoc;
rv1 = ((DCI2B_1_5MHz_TDD_t *)dci_pdu)->rv1;
rv2 = ((DCI2B_1_5MHz_TDD_t *)dci_pdu)->rv2;
ndi1 = ((DCI2B_1_5MHz_TDD_t *)dci_pdu)->ndi1;
ndi2 = ((DCI2B_1_5MHz_TDD_t *)dci_pdu)->ndi2;
ndi1 = ((DCI2B_1_5MHz_TDD_t *)dci_pdu)->ndi1;
ndi2 = ((DCI2B_1_5MHz_TDD_t *)dci_pdu)->ndi2;
harq_pid = ((DCI2B_1_5MHz_TDD_t *)dci_pdu)->harq_pid;
nscid = ((DCI2B_1_5MHz_TDD_t *)dci_pdu)->scrambling_id;
} else {
mcs1 = ((DCI2B_1_5MHz_FDD_t *)dci_pdu)->mcs1;
mcs2 = ((DCI2B_1_5MHz_FDD_t *)dci_pdu)->mcs2;
......@@ -2146,6 +2148,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
ndi1 = ((DCI2B_1_5MHz_FDD_t *)dci_pdu)->ndi1;
ndi2 = ((DCI2B_1_5MHz_FDD_t *)dci_pdu)->ndi2;
harq_pid = ((DCI2B_1_5MHz_FDD_t *)dci_pdu)->harq_pid;
nscid = ((DCI2B_1_5MHz_FDD_t *)dci_pdu)->scrambling_id;
}
break;
......@@ -2161,6 +2164,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
ndi1 = ((DCI2B_5MHz_TDD_t *)dci_pdu)->ndi1;
ndi2 = ((DCI2B_5MHz_TDD_t *)dci_pdu)->ndi2;
harq_pid = ((DCI2B_5MHz_TDD_t *)dci_pdu)->harq_pid;
nscid = ((DCI2B_5MHz_TDD_t *)dci_pdu)->scrambling_id;
} else {
mcs1 = ((DCI2B_5MHz_FDD_t *)dci_pdu)->mcs1;
mcs2 = ((DCI2B_5MHz_FDD_t *)dci_pdu)->mcs2;
......@@ -2171,6 +2175,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
ndi1 = ((DCI2B_5MHz_FDD_t *)dci_pdu)->ndi1;
ndi2 = ((DCI2B_5MHz_FDD_t *)dci_pdu)->ndi2;
harq_pid = ((DCI2B_5MHz_FDD_t *)dci_pdu)->harq_pid;
nscid = ((DCI2B_5MHz_FDD_t *)dci_pdu)->scrambling_id;
}
break;
......@@ -2186,6 +2191,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
ndi1 = ((DCI2B_10MHz_TDD_t *)dci_pdu)->ndi1;
ndi2 = ((DCI2B_10MHz_TDD_t *)dci_pdu)->ndi2;
harq_pid = ((DCI2B_10MHz_TDD_t *)dci_pdu)->harq_pid;
nscid = ((DCI2B_10MHz_TDD_t *)dci_pdu)->scrambling_id;
} else {
mcs1 = ((DCI2B_10MHz_FDD_t *)dci_pdu)->mcs1;
mcs2 = ((DCI2B_10MHz_FDD_t *)dci_pdu)->mcs2;
......@@ -2196,6 +2202,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
ndi1 = ((DCI2B_10MHz_FDD_t *)dci_pdu)->ndi1;
ndi2 = ((DCI2B_10MHz_FDD_t *)dci_pdu)->ndi2;
harq_pid = ((DCI2B_10MHz_FDD_t *)dci_pdu)->harq_pid;
nscid = ((DCI2B_10MHz_FDD_t *)dci_pdu)->scrambling_id;
}
break;
......@@ -2211,6 +2218,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
ndi1 = ((DCI2B_20MHz_TDD_t *)dci_pdu)->ndi1;
ndi2 = ((DCI2B_20MHz_TDD_t *)dci_pdu)->ndi2;
harq_pid = ((DCI2B_20MHz_TDD_t *)dci_pdu)->harq_pid;
nscid = ((DCI2B_20MHz_TDD_t *)dci_pdu)->scrambling_id;
} else {
mcs1 = ((DCI2B_20MHz_FDD_t *)dci_pdu)->mcs1;
mcs2 = ((DCI2B_20MHz_FDD_t *)dci_pdu)->mcs2;
......@@ -2221,6 +2229,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
ndi1 = ((DCI2B_20MHz_FDD_t *)dci_pdu)->ndi1;
ndi2 = ((DCI2B_20MHz_FDD_t *)dci_pdu)->ndi2;
harq_pid = ((DCI2B_20MHz_FDD_t *)dci_pdu)->harq_pid;
nscid = ((DCI2B_20MHz_TDD_t *)dci_pdu)->scrambling_id;
}
break;
......@@ -2327,8 +2336,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
frame_parms->N_RB_DL);
if (dlsch1!=NULL) {
// fixme (need to copy more fields of rb_alloc)
dlsch1_harq->rb_alloc[0] = dlsch0_harq->rb_alloc[0];
memcpy(dlsch1_harq->rb_alloc,dlsch0_harq->rb_alloc,4*sizeof(uint32_t));
dlsch1_harq->nb_rb = dlsch0_harq->nb_rb;
}
} else if ((dlsch0 == NULL ) && (dlsch1 != NULL )) {
......@@ -2350,6 +2358,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
dlsch0_harq->dl_power_off = 1;
dlsch0_harq->mimo_mode = TM8; //this DCI can only be used in TM8
dlsch0_harq->Nlayers = 1;
dlsch0_harq->nscid = nscid;
}
if (dlsch1_harq != NULL) {
......@@ -2363,6 +2372,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
dlsch1_harq->dl_power_off = 1;
dlsch1_harq->mimo_mode = TM8; //this DCI can only be used in TM8
dlsch1_harq->Nlayers = 1;
dlsch1_harq->nscid = nscid;
}
break;
......
......@@ -166,6 +166,8 @@ typedef struct {
uint8_t first_layer;
/// codeword this transport block is mapped to
uint8_t codeword;
/// nscid
uint8_t nscid;
} LTE_DL_eNB_HARQ_t;
typedef struct {
......
......@@ -590,7 +590,8 @@ int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB,
uint8_t mprime,
uint8_t Ns,
int *P1_SHIFT,
int *P2_SHIFT)
int *P2_SHIFT,
uint8_t nscid)
{
LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->frame_parms;
......@@ -1585,7 +1586,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB,
if (is_not_UEspecRS(lprime,re,frame_parms->nushift,frame_parms->Ncp,8,Ns)) {
//LOG_D(PHY,"TM8 tti_offset %d, jj %d, jj2 %d, x0 %p, x1 %p\n",tti_offset,*jj,*jj2,x0,x1);
/*
switch (mod_order0) {
case 2: //QPSK
......@@ -1726,12 +1727,13 @@ int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB,
break;
}
*/
}
else {
for (p=7; p<9; p++) {
if (p==first_layer0 || p==first_layer1) {
if (frame_parms->Ncp==0) { //normal CP
ind = 3*lprime*dlsch0_harq->nb_rb+3*rb+mprime2;
ind = 3*lprime*frame_parms->N_RB_DL+3*rb+mprime2;
ind_dword = ind>>4 ;
ind_qpsk_symb = ind&0xf ;
......@@ -1756,7 +1758,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB,
qpsk_p = (w==1) ? qpsk : nqpsk;
/* pointer to the frequency domain Tx signal */
txdataF[p][tti_offset] = qpsk_p[(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3] ;
txdataF[p][tti_offset] = qpsk_p[(phy_vars_eNB->lte_gold_uespec_table[nscid][Ns][0][ind_dword]>>(2*ind_qpsk_symb))&3] ;
}
}
mprime2++ ;
......@@ -2160,7 +2162,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
uint8_t mprime=0,Ns;
int8_t lprime=-1;
int aa=0;
uint8_t nscid=0;
#ifdef DEBUG_DLSCH_MODULATION
uint8_t Nl0=0; //= dlsch0_harq->Nl;
......@@ -2185,6 +2187,8 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
Nl1 = dlsch1_harq->Nl;
#endif
nscid = dlsch0_harq->nscid;
}else if ((dlsch0 != NULL) && (dlsch1 == NULL)){
harq_pid = dlsch0->current_harq_pid;
......@@ -2202,6 +2206,8 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
Nl1 = 0;
#endif
nscid = dlsch0_harq->nscid;
}else if ((dlsch0 == NULL) && (dlsch1 != NULL)){
harq_pid = dlsch1->current_harq_pid;
......@@ -2219,6 +2225,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
Nl1 = 0;
#endif
nscid = dlsch1_harq->nscid;
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_MODULATION, VCD_FUNCTION_IN);
......@@ -2575,7 +2582,8 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
mprime,
Ns,
P1_SHIFT,
P2_SHIFT);
P2_SHIFT,
nscid);
if ((mimo_mode == TM7) && (lprime>=0))
mprime +=3+frame_parms->Ncp;
......
......@@ -269,7 +269,8 @@ int32_t allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
uint8_t mprime,
uint8_t Ns,
int *P1_SHIFT,
int *P2_SHIFT);
int *P2_SHIFT,
uint8_t nscid);
/** \fn int32_t dlsch_modulation(int32_t **txdataF,
......
......@@ -476,10 +476,10 @@ typedef struct PHY_VARS_eNB_s {
uint32_t lte_gold_table[20][2][14];
/// UE-specific reference symbols (p=5), TM 7
uint32_t lte_gold_uespec_port5_table[NUMBER_OF_UE_MAX][20][38];
uint32_t lte_gold_uespec_port5_table[NUMBER_OF_UE_MAX][20][75];
/// UE-specific reference symbols (p=7...14), TM 8/9/10
uint32_t lte_gold_uespec_table[2][20][2][21];
uint32_t lte_gold_uespec_table[2][20][2][100];
/// mbsfn reference symbols
uint32_t lte_gold_mbsfn_table[10][3][42];
......@@ -739,10 +739,10 @@ typedef struct {
uint32_t lte_gold_table[7][20][2][14];
/// UE-specific reference symbols (p=5), TM 7
uint32_t lte_gold_uespec_port5_table[20][38];
uint32_t lte_gold_uespec_port5_table[20][75];
/// ue-specific reference symbols
uint32_t lte_gold_uespec_table[2][20][2][21];
uint32_t lte_gold_uespec_table[2][20][2][100];
/// mbsfn reference symbols
uint32_t lte_gold_mbsfn_table[10][3][42];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment