Commit 21744d88 authored by francescomani's avatar francescomani

code improvement and formatting

parent f30b42d8
...@@ -61,6 +61,21 @@ int nr_pusch_dmrs_rx(PHY_VARS_gNB *gNB, ...@@ -61,6 +61,21 @@ int nr_pusch_dmrs_rx(PHY_VARS_gNB *gNB,
uint32_t re_offset, uint32_t re_offset,
uint8_t dmrs_type); uint8_t dmrs_type);
void nr_generate_csi_rs(const NR_DL_FRAME_PARMS *frame_parms,
int32_t **dataF,
const int16_t amp,
nr_csi_info_t *nr_csi_info,
const nfapi_nr_dl_tti_csi_rs_pdu_rel15_t *csi_params,
const int slot,
uint8_t *N_cdm_groups,
uint8_t *CDM_group_size,
uint8_t *k_prime,
uint8_t *l_prime,
uint8_t *N_ports,
uint8_t *j_cdm,
uint8_t *k_overline,
uint8_t *l_overline);
void init_scrambling_luts(void); void init_scrambling_luts(void);
void nr_generate_modulation_table(void); void nr_generate_modulation_table(void);
......
...@@ -19,23 +19,21 @@ ...@@ -19,23 +19,21 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
#include "PHY/MODULATION/nr_modulation.h" #include "PHY/MODULATION/nr_modulation.h"
#include "PHY/NR_REFSIG/nr_refsig.h" #include "PHY/NR_REFSIG/nr_refsig.h"
//#define NR_CSIRS_DEBUG //#define NR_CSIRS_DEBUG
void nr_init_csi_rs(const NR_DL_FRAME_PARMS *fp, uint32_t ***csi_rs, uint32_t Nid) { void nr_init_csi_rs(const NR_DL_FRAME_PARMS *fp, uint32_t ***csi_rs, uint32_t Nid)
uint32_t x1 = 0, x2 = 0; {
uint8_t reset; uint32_t x1 = 0;
int csi_dmrs_init_length = ((fp->N_RB_DL<<4)>>5)+1; int csi_dmrs_init_length = ((fp->N_RB_DL << 4) >> 5) + 1;
for (uint8_t slot=0; slot<fp->slots_per_frame; slot++) { for (int slot = 0; slot < fp->slots_per_frame; slot++) {
for (uint8_t symb=0; symb<fp->symbols_per_slot; symb++) { for (int symb = 0; symb < fp->symbols_per_slot; symb++) {
reset = 1; uint8_t reset = 1;
x2 = ((1<<10) * (fp->symbols_per_slot*slot+symb+1) * ((Nid<<1)+1) + (Nid)); uint32_t x2 = ((1 << 10) * (fp->symbols_per_slot * slot + symb + 1) * ((Nid << 1) + 1) + Nid);
for (uint32_t n=0; n<csi_dmrs_init_length; n++) { for (uint32_t n = 0; n < csi_dmrs_init_length; n++) {
csi_rs[slot][symb][n] = lte_gold_generic(&x1, &x2, reset); csi_rs[slot][symb][n] = lte_gold_generic(&x1, &x2, reset);
reset = 0; reset = 0;
} }
...@@ -56,8 +54,8 @@ void nr_generate_csi_rs(const NR_DL_FRAME_PARMS *frame_parms, ...@@ -56,8 +54,8 @@ void nr_generate_csi_rs(const NR_DL_FRAME_PARMS *frame_parms,
uint8_t *N_ports, uint8_t *N_ports,
uint8_t *j_cdm, uint8_t *j_cdm,
uint8_t *k_overline, uint8_t *k_overline,
uint8_t *l_overline) { uint8_t *l_overline)
{
#ifdef NR_CSIRS_DEBUG #ifdef NR_CSIRS_DEBUG
LOG_I(NR_PHY, "csi_params->subcarrier_spacing = %i\n", csi_params->subcarrier_spacing); LOG_I(NR_PHY, "csi_params->subcarrier_spacing = %i\n", csi_params->subcarrier_spacing);
LOG_I(NR_PHY, "csi_params->cyclic_prefix = %i\n", csi_params->cyclic_prefix); LOG_I(NR_PHY, "csi_params->cyclic_prefix = %i\n", csi_params->cyclic_prefix);
...@@ -75,19 +73,12 @@ void nr_generate_csi_rs(const NR_DL_FRAME_PARMS *frame_parms, ...@@ -75,19 +73,12 @@ void nr_generate_csi_rs(const NR_DL_FRAME_PARMS *frame_parms,
LOG_I(NR_PHY, "csi_params->power_control_offset_ss = %i\n", csi_params->power_control_offset_ss); LOG_I(NR_PHY, "csi_params->power_control_offset_ss = %i\n", csi_params->power_control_offset_ss);
#endif #endif
int dataF_offset = slot*frame_parms->samples_per_slot_wCP; int dataF_offset = slot * frame_parms->samples_per_slot_wCP;
uint32_t **nr_gold_csi_rs = nr_csi_info->nr_gold_csi_rs[slot]; uint32_t **nr_gold_csi_rs = nr_csi_info->nr_gold_csi_rs[slot];
//*8(max allocation per RB)*2(QPSK)) //*8(max allocation per RB)*2(QPSK))
int csi_rs_length = frame_parms->N_RB_DL<<4; int csi_rs_length = frame_parms->N_RB_DL << 4;
int16_t mod_csi[frame_parms->symbols_per_slot][csi_rs_length>>1] __attribute__((aligned(16))); int16_t mod_csi[frame_parms->symbols_per_slot][csi_rs_length>>1] __attribute__((aligned(16)));
uint16_t b = csi_params->freq_domain; uint16_t b = csi_params->freq_domain;
uint16_t n, p, k, l, mprime, na, kpn;
uint8_t size, ports, kprime, lprime, i, gs;
uint8_t j[16], k_n[6], koverline[16], loverline[16];
int found = 0;
int wf, wt, lp, kp, symb;
uint8_t fi = 0;
double rho, alpha;
uint32_t beta = amp; uint32_t beta = amp;
nr_csi_info->csi_rs_generated_signal_bits = log2_approx(amp); nr_csi_info->csi_rs_generated_signal_bits = log2_approx(amp);
...@@ -99,469 +90,479 @@ void nr_generate_csi_rs(const NR_DL_FRAME_PARMS *frame_parms, ...@@ -99,469 +90,479 @@ void nr_generate_csi_rs(const NR_DL_FRAME_PARMS *frame_parms,
nr_init_csi_rs(frame_parms, nr_csi_info->nr_gold_csi_rs, csi_params->scramb_id); nr_init_csi_rs(frame_parms, nr_csi_info->nr_gold_csi_rs, csi_params->scramb_id);
} }
switch (csi_params->row) { int size, ports, kprime, lprime;
int j[16], k_n[6], koverline[16], loverline[16];
int found = 0;
int fi = 0;
// implementation of table 7.4.1.5.3-1 of 38.211 // implementation of table 7.4.1.5.3-1 of 38.211
// lprime and kprime are the max value of l' and k' // lprime and kprime are the max value of l' and k'
case 1: switch (csi_params->row) {
ports = 1; case 1:
kprime = 0; ports = 1;
lprime = 0; kprime = 0;
size = 3; lprime = 0;
while (found < 1) { size = 3;
if ((b >> fi) & 0x01) { while (found < 1) {
k_n[found] = fi; if ((b >> fi) & 0x01) {
found++; k_n[found] = fi;
} found++;
else }
else
fi++;
}
for (int i = 0; i < size; i++) {
j[i] = 0;
loverline[i] = csi_params->symb_l0;
koverline[i] = k_n[0] + (i<<2);
}
break;
case 2:
ports = 1;
kprime = 0;
lprime = 0;
size = 1;
while (found < 1) {
if ((b >> fi) & 0x01) {
k_n[found] = fi;
found++;
}
else
fi++;
}
for (int i = 0; i < size; i++) {
j[i] = 0;
loverline[i] = csi_params->symb_l0;
koverline[i] = k_n[0];
}
break;
case 3:
ports = 2;
kprime = 1;
lprime = 0;
size = 1;
while (found < 1) {
if ((b >> fi) & 0x01) {
k_n[found] = fi << 1;
found++;
}
else
fi++;
}
for (int i = 0; i < size; i++) {
j[i] = 0;
loverline[i] = csi_params->symb_l0;
koverline[i] = k_n[0];
}
break;
case 4:
ports = 4;
kprime = 1;
lprime = 0;
size = 2;
while (found < 1) {
if ((b >> fi) & 0x01) {
k_n[found] = fi << 2;
found++;
}
else
fi++;
}
for (int i = 0; i < size; i++) {
j[i] = i;
loverline[i] = csi_params->symb_l0;
koverline[i] = k_n[0] + (i << 1);
}
break;
case 5:
ports = 4;
kprime = 1;
lprime = 0;
size = 2;
while (found < 1) {
if ((b >> fi) & 0x01) {
k_n[found] = fi << 1;
found++;
}
else
fi++;
}
for (int i = 0; i < size; i++) {
j[i] = i;
loverline[i] = csi_params->symb_l0 + i;
koverline[i] = k_n[0];
}
break;
case 6:
ports = 8;
kprime = 1;
lprime = 0;
size = 4;
while (found < 4) {
if ((b >> fi) & 0x01) {
k_n[found] = fi << 1;
found++;
}
fi++; fi++;
} }
for (i=0; i<size; i++) { for (int i = 0; i < size; i++) {
j[i] = 0; j[i] = i;
loverline[i] = csi_params->symb_l0; loverline[i] = csi_params->symb_l0;
koverline[i] = k_n[0] + (i<<2); koverline[i] = k_n[i];
} }
break; break;
case 7:
case 2: ports = 8;
ports = 1; kprime = 1;
kprime = 0; lprime = 0;
lprime = 0; size = 4;
size = 1; while (found < 2) {
while (found < 1) { if ((b >> fi) & 0x01) {
if ((b >> fi) & 0x01) { k_n[found] = fi << 1;
k_n[found] = fi; found++;
found++; }
}
else
fi++; fi++;
} }
for (i=0; i<size; i++) { for (int i = 0; i < size; i++) {
j[i] = 0; j[i] = i;
loverline[i] = csi_params->symb_l0; loverline[i] = csi_params->symb_l0 + (i >> 1);
koverline[i] = k_n[0]; koverline[i] = k_n[i % 2];
} }
break; break;
case 8:
case 3: ports = 8;
ports = 2; kprime = 1;
kprime = 1; lprime = 1;
lprime = 0; size = 2;
size = 1; while (found < 2) {
while (found < 1) { if ((b >> fi) & 0x01) {
if ((b >> fi) & 0x01) { k_n[found] = fi << 1;
k_n[found] = fi<<1; found++;
found++; }
}
else
fi++; fi++;
} }
for (i=0; i<size; i++) { for (int i = 0; i < size; i++) {
j[i] = 0; j[i] = i;
loverline[i] = csi_params->symb_l0; loverline[i] = csi_params->symb_l0;
koverline[i] = k_n[0]; koverline[i] = k_n[i];
} }
break; break;
case 9:
case 4: ports = 12;
ports = 4; kprime = 1;
kprime = 1; lprime = 0;
lprime = 0; size = 6;
size = 2; while (found < 6) {
while (found < 1) { if ((b >> fi) & 0x01) {
if ((b >> fi) & 0x01) { k_n[found] = fi << 1;
k_n[found] = fi<<2; found++;
found++; }
}
else
fi++; fi++;
} }
for (i=0; i<size; i++) { for (int i = 0; i < size; i++) {
j[i] = i; j[i] = i;
loverline[i] = csi_params->symb_l0; loverline[i] = csi_params->symb_l0;
koverline[i] = k_n[0] + (i<<1); koverline[i] = k_n[i];
} }
break; break;
case 10:
case 5: ports = 12;
ports = 4; kprime = 1;
kprime = 1; lprime = 1;
lprime = 0; size = 3;
size = 2; while (found < 3) {
while (found < 1) { if ((b >> fi) & 0x01) {
if ((b >> fi) & 0x01) { k_n[found] = fi << 1;
k_n[found] = fi<<1; found++;
found++; }
}
else
fi++; fi++;
} }
for (i=0; i<size; i++) { for (int i = 0; i < size; i++) {
j[i] = i; j[i] = i;
loverline[i] = csi_params->symb_l0 + i;
koverline[i] = k_n[0];
}
break;
case 6:
ports = 8;
kprime = 1;
lprime = 0;
size = 4;
while (found < 4) {
if ((b >> fi) & 0x01) {
k_n[found] = fi<<1;
found++;
}
fi++;
}
for (i=0; i<size; i++) {
j[i] = i;
loverline[i] = csi_params->symb_l0;
koverline[i] = k_n[i];
}
break;
case 7:
ports = 8;
kprime = 1;
lprime = 0;
size = 4;
while (found < 2) {
if ((b >> fi) & 0x01) {
k_n[found] = fi<<1;
found++;
}
fi++;
}
for (i=0; i<size; i++) {
j[i] = i;
loverline[i] = csi_params->symb_l0 + (i>>1);
koverline[i] = k_n[i%2];
}
break;
case 8:
ports = 8;
kprime = 1;
lprime = 1;
size = 2;
while (found < 2) {
if ((b >> fi) & 0x01) {
k_n[found] = fi<<1;
found++;
}
fi++;
}
for (i=0; i<size; i++) {
j[i] = i;
loverline[i] = csi_params->symb_l0;
koverline[i] = k_n[i];
}
break;
case 9:
ports = 12;
kprime = 1;
lprime = 0;
size = 6;
while (found < 6) {
if ((b >> fi) & 0x01) {
k_n[found] = fi<<1;
found++;
}
fi++;
}
for (i=0; i<size; i++) {
j[i] = i;
loverline[i] = csi_params->symb_l0;
koverline[i] = k_n[i];
}
break;
case 10:
ports = 12;
kprime = 1;
lprime = 1;
size = 3;
while (found < 3) {
if ((b >> fi) & 0x01) {
k_n[found] = fi<<1;
found++;
}
fi++;
}
for (i=0; i<size; i++) {
j[i] = i;
loverline[i] = csi_params->symb_l0;
koverline[i] = k_n[i];
}
break;
case 11:
ports = 16;
kprime = 1;
lprime = 0;
size = 8;
while (found < 4) {
if ((b >> fi) & 0x01) {
k_n[found] = fi<<1;
found++;
}
fi++;
}
for (i=0; i<size; i++) {
j[i] = i;
loverline[i] = csi_params->symb_l0 + (i>>2);
koverline[i] = k_n[i%4];
}
break;
case 12:
ports = 16;
kprime = 1;
lprime = 1;
size = 4;
while (found < 4) {
if ((b >> fi) & 0x01) {
k_n[found] = fi<<1;
found++;
}
fi++;
}
for (i=0; i<size; i++) {
j[i] = i;
loverline[i] = csi_params->symb_l0;
koverline[i] = k_n[i];
}
break;
case 13:
ports = 24;
kprime = 1;
lprime = 0;
size = 12;
while (found < 3) {
if ((b >> fi) & 0x01) {
k_n[found] = fi<<1;
found++;
}
fi++;
}
for (i=0; i<size; i++) {
j[i] = i;
if (i<6)
loverline[i] = csi_params->symb_l0 + i/3;
else
loverline[i] = csi_params->symb_l1 + i/9;
koverline[i] = k_n[i%3];
}
break;
case 14:
ports = 24;
kprime = 1;
lprime = 1;
size = 6;
while (found < 3) {
if ((b >> fi) & 0x01) {
k_n[found] = fi<<1;
found++;
}
fi++;
}
for (i=0; i<size; i++) {
j[i] = i;
if (i<3)
loverline[i] = csi_params->symb_l0; loverline[i] = csi_params->symb_l0;
else koverline[i] = k_n[i];
loverline[i] = csi_params->symb_l1; }
koverline[i] = k_n[i%3]; break;
} case 11:
break; ports = 16;
kprime = 1;
case 15: lprime = 0;
ports = 24; size = 8;
kprime = 1; while (found < 4) {
lprime = 3; if ((b >> fi) & 0x01) {
size = 3; k_n[found] = fi << 1;
while (found < 3) { found++;
if ((b >> fi) & 0x01) { }
k_n[found] = fi<<1; fi++;
found++; }
} for (int i = 0; i < size; i++) {
fi++; j[i] = i;
} loverline[i] = csi_params->symb_l0 + (i >> 2);
for (i=0; i<size; i++) { koverline[i] = k_n[i % 4];
j[i] = i; }
loverline[i] = csi_params->symb_l0; break;
koverline[i] = k_n[i]; case 12:
} ports = 16;
break; kprime = 1;
lprime = 1;
case 16: size = 4;
ports = 32; while (found < 4) {
kprime = 1; if ((b >> fi) & 0x01) {
lprime = 0; k_n[found] = fi << 1;
size = 16; found++;
while (found < 4) { }
if ((b >> fi) & 0x01) { fi++;
k_n[found] = fi<<1; }
found++; for (int i = 0; i < size; i++) {
} j[i] = i;
fi++;
}
for (i=0; i<size; i++) {
j[i] = i;
if (i<8)
loverline[i] = csi_params->symb_l0 + (i>>2);
else
loverline[i] = csi_params->symb_l1 + (i/12);
koverline[i] = k_n[i%4];
}
break;
case 17:
ports = 32;
kprime = 1;
lprime = 1;
size = 8;
while (found < 4) {
if ((b >> fi) & 0x01) {
k_n[found] = fi<<1;
found++;
}
fi++;
}
for (i=0; i<size; i++) {
j[i] = i;
if (i<4)
loverline[i] = csi_params->symb_l0; loverline[i] = csi_params->symb_l0;
else koverline[i] = k_n[i];
loverline[i] = csi_params->symb_l1; }
koverline[i] = k_n[i%4]; break;
} case 13:
break; ports = 24;
kprime = 1;
case 18: lprime = 0;
ports = 32; size = 12;
kprime = 1; while (found < 3) {
lprime = 3; if ((b >> fi) & 0x01) {
size = 4; k_n[found] = fi << 1;
while (found < 4) { found++;
if ((b >> fi) & 0x01) { }
k_n[found] = fi<<1; fi++;
found++; }
} for (int i = 0; i < size; i++) {
fi++; j[i] = i;
} if (i < 6)
for (i=0; i<size; i++) { loverline[i] = csi_params->symb_l0 + i / 3;
j[i] = i; else
loverline[i] = csi_params->symb_l0; loverline[i] = csi_params->symb_l1 + i / 9;
koverline[i] = k_n[i]; koverline[i] = k_n[i % 3];
} }
break; break;
case 14:
default: ports = 24;
AssertFatal(0==1, "Row %d is not valid for CSI Table 7.4.1.5.3-1\n", csi_params->row); kprime = 1;
lprime = 1;
size = 6;
while (found < 3) {
if ((b >> fi) & 0x01) {
k_n[found] = fi << 1;
found++;
}
fi++;
}
for (int i = 0; i < size; i++) {
j[i] = i;
if (i < 3)
loverline[i] = csi_params->symb_l0;
else
loverline[i] = csi_params->symb_l1;
koverline[i] = k_n[i%3];
}
break;
case 15:
ports = 24;
kprime = 1;
lprime = 3;
size = 3;
while (found < 3) {
if ((b >> fi) & 0x01) {
k_n[found] = fi << 1;
found++;
}
fi++;
}
for (int i = 0; i < size; i++) {
j[i] = i;
loverline[i] = csi_params->symb_l0;
koverline[i] = k_n[i];
}
break;
case 16:
ports = 32;
kprime = 1;
lprime = 0;
size = 16;
while (found < 4) {
if ((b >> fi) & 0x01) {
k_n[found] = fi << 1;
found++;
}
fi++;
}
for (int i = 0; i < size; i++) {
j[i] = i;
if (i < 8)
loverline[i] = csi_params->symb_l0 + (i>>2);
else
loverline[i] = csi_params->symb_l1 + (i/12);
koverline[i] = k_n[i % 4];
}
break;
case 17:
ports = 32;
kprime = 1;
lprime = 1;
size = 8;
while (found < 4) {
if ((b >> fi) & 0x01) {
k_n[found] = fi << 1;
found++;
}
fi++;
}
for (int i = 0; i < size; i++) {
j[i] = i;
if (i < 4)
loverline[i] = csi_params->symb_l0;
else
loverline[i] = csi_params->symb_l1;
koverline[i] = k_n[i % 4];
}
break;
case 18:
ports = 32;
kprime = 1;
lprime = 3;
size = 4;
while (found < 4) {
if ((b >> fi) & 0x01) {
k_n[found] = fi << 1;
found++;
}
fi++;
}
for (int i = 0; i < size; i++) {
j[i] = i;
loverline[i] = csi_params->symb_l0;
koverline[i] = k_n[i];
}
break;
default:
AssertFatal(false, "Row %d is not valid for CSI Table 7.4.1.5.3-1\n", csi_params->row);
} }
#ifdef NR_CSIRS_DEBUG #ifdef NR_CSIRS_DEBUG
printf(" row %d, n. of ports %d\n k' ",csi_params->row,ports); printf(" row %d, n. of ports %d\n k' ",csi_params->row,ports);
for (kp=0; kp<=kprime; kp++) for (int kp = 0; kp <= kprime; kp++)
printf("%d, ",kp); printf("%d, ",kp);
printf("l' "); printf("l' ");
for (lp=0; lp<=lprime; lp++) for (int lp = 0; lp <= lprime; lp++)
printf("%d, ",lp); printf("%d, ", lp);
printf("\n k overline "); printf("\n k overline ");
for (i=0; i<size; i++) for (int i = 0; i < size; i++)
printf("%d, ",koverline[i]); printf("%d, ",koverline[i]);
printf("\n l overline "); printf("\n l overline ");
for (i=0; i<size; i++) for (int i = 0; i < size; i++)
printf("%d, ",loverline[i]); printf("%d, ",loverline[i]);
printf("\n"); printf("\n");
#endif #endif
// setting the frequency density from its index // setting the frequency density from its index
double rho = 0;
switch (csi_params->freq_density) { switch (csi_params->freq_density) {
case 0:
case 0: rho = 0.5;
rho = 0.5; break;
break; case 1:
rho = 0.5;
case 1: break;
rho = 0.5; case 2:
break; rho = 1;
break;
case 2: case 3:
rho = 1; rho = 3;
break; break;
default:
case 3: AssertFatal(false, "Invalid frequency density index for CSI\n");
rho = 3;
break;
default:
AssertFatal(0==1, "Invalid frequency density index for CSI\n");
} }
double alpha = 0;
if (ports == 1) if (ports == 1)
alpha = rho; alpha = rho;
else else
alpha = 2*rho; alpha = 2 * rho;
#ifdef NR_CSIRS_DEBUG #ifdef NR_CSIRS_DEBUG
printf(" rho %f, alpha %f\n",rho,alpha); printf(" rho %f, alpha %f\n", rho, alpha);
#endif #endif
// CDM group size from CDM type index // CDM group size from CDM type index
int gs = 0;
switch (csi_params->cdm_type) { switch (csi_params->cdm_type) {
case 0:
case 0: gs = 1;
gs = 1; break;
break; case 1:
gs = 2;
case 1: break;
gs = 2; case 2:
break; gs = 4;
break;
case 2: case 3:
gs = 4; gs = 8;
break; break;
default:
case 3: AssertFatal(false, "Invalid cdm type index for CSI\n");
gs = 8;
break;
default:
AssertFatal(0==1, "Invalid cdm type index for CSI\n");
} }
uint16_t csi_length; int csi_length;
if (rho < 1) { if (rho < 1) {
if (csi_params->freq_density == 0) { if (csi_params->freq_density == 0) {
csi_length = (((csi_params->start_rb + csi_params->nr_of_rbs)>>1)<<kprime)<<1; csi_length = (((csi_params->start_rb + csi_params->nr_of_rbs) >> 1) << kprime) << 1;
} else { } else {
csi_length = ((((csi_params->start_rb + csi_params->nr_of_rbs)>>1)<<kprime)+1)<<1; csi_length = ((((csi_params->start_rb + csi_params->nr_of_rbs) >> 1) << kprime) + 1) << 1;
} }
} else { } else {
csi_length = (((uint16_t) rho*(csi_params->start_rb + csi_params->nr_of_rbs))<<kprime)<<1; csi_length = (((uint16_t) rho * (csi_params->start_rb + csi_params->nr_of_rbs)) << kprime) << 1;
} }
#ifdef NR_CSIRS_DEBUG #ifdef NR_CSIRS_DEBUG
printf(" start rb %d, nr of rbs %d, csi length %d\n", csi_params->start_rb, csi_params->nr_of_rbs, csi_length); printf(" start rb %d, nr of rbs %d, csi length %d\n", csi_params->start_rb, csi_params->nr_of_rbs, csi_length);
#endif #endif
if (N_cdm_groups)
*N_cdm_groups = size;
if (CDM_group_size)
*CDM_group_size = gs;
if (k_prime)
*k_prime = kprime;
if (l_prime)
*l_prime = lprime;
if (N_ports)
*N_ports = ports;
if (j_cdm)
memcpy(j_cdm, j, 16 * sizeof(uint8_t));
if (k_overline)
memcpy(k_overline, koverline, 16 * sizeof(uint8_t));
if (l_overline)
memcpy(l_overline, loverline, 16 * sizeof(uint8_t));
// TRS #ifdef NR_CSIRS_DEBUG
if (csi_params->csi_type == 0) { if (N_ports)
// ??? LOG_I(NR_PHY, "nr_csi_info->N_ports = %d\n", *N_ports);
if (N_cdm_groups)
LOG_I(NR_PHY, "nr_csi_info->N_cdm_groups = %d\n", *N_cdm_groups);
if (CDM_group_size)
LOG_I(NR_PHY, "nr_csi_info->CDM_group_size = %d\n", *CDM_group_size);
if (k_prime)
LOG_I(NR_PHY, "nr_csi_info->kprime = %d\n", *k_prime);
if (l_prime)
LOG_I(NR_PHY, "nr_csi_info->lprime = %d\n", *l_prime);
if (N_cdm_groups) {
for(int ji = 0; ji < *N_cdm_groups; ji++) {
LOG_I(NR_PHY, "(CDM group %d) j = %d, koverline = %d, loverline = %d\n", ji, j[ji], koverline[ji], loverline[ji]);
}
} }
#endif
// NZP CSI RS if (csi_params->csi_type == 2) // ZP-CSI
if (csi_params->csi_type == 1) { return;
// assuming amp is the amplitude of SSB channels
switch (csi_params->power_control_offset_ss) { // assuming amp is the amplitude of SSB channels
switch (csi_params->power_control_offset_ss) {
case 0: case 0:
beta = (amp*ONE_OVER_SQRT2_Q15)>>15; beta = (amp*ONE_OVER_SQRT2_Q15)>>15;
break; break;
...@@ -572,73 +573,68 @@ void nr_generate_csi_rs(const NR_DL_FRAME_PARMS *frame_parms, ...@@ -572,73 +573,68 @@ void nr_generate_csi_rs(const NR_DL_FRAME_PARMS *frame_parms,
beta = (amp*ONE_OVER_SQRT2_Q15)>>14; beta = (amp*ONE_OVER_SQRT2_Q15)>>14;
break; break;
case 3: case 3:
beta = amp<<1; beta = amp << 1;
break; break;
default: default:
AssertFatal(0==1, "Invalid SS power offset density index for CSI\n"); AssertFatal(false, "Invalid SS power offset density index for CSI\n");
} }
for (lp=0; lp<=lprime; lp++){ for (int lp = 0; lp <= lprime; lp++) {
symb = csi_params->symb_l0; int symb = csi_params->symb_l0;
nr_modulation(nr_gold_csi_rs[symb+lp], csi_length, DMRS_MOD_ORDER, mod_csi[symb+lp]); nr_modulation(nr_gold_csi_rs[symb + lp], csi_length, DMRS_MOD_ORDER, mod_csi[symb + lp]);
if ((csi_params->row == 5) || (csi_params->row == 7) || (csi_params->row == 11) || (csi_params->row == 13) || (csi_params->row == 16)) if ((csi_params->row == 5) || (csi_params->row == 7) || (csi_params->row == 11) || (csi_params->row == 13) || (csi_params->row == 16))
nr_modulation(nr_gold_csi_rs[symb+1], csi_length, DMRS_MOD_ORDER, mod_csi[symb+1]); nr_modulation(nr_gold_csi_rs[symb + 1], csi_length, DMRS_MOD_ORDER, mod_csi[symb + 1]);
if ((csi_params->row == 14) || (csi_params->row == 13) || (csi_params->row == 16) || (csi_params->row == 17)) { if ((csi_params->row == 14) || (csi_params->row == 13) || (csi_params->row == 16) || (csi_params->row == 17)) {
symb = csi_params->symb_l1; symb = csi_params->symb_l1;
nr_modulation(nr_gold_csi_rs[symb+lp], csi_length, DMRS_MOD_ORDER, mod_csi[symb+lp]); nr_modulation(nr_gold_csi_rs[symb + lp], csi_length, DMRS_MOD_ORDER, mod_csi[symb + lp]);
if ((csi_params->row == 13) || (csi_params->row == 16)) if ((csi_params->row == 13) || (csi_params->row == 16))
nr_modulation(nr_gold_csi_rs[symb+1], csi_length, DMRS_MOD_ORDER, mod_csi[symb+1]); nr_modulation(nr_gold_csi_rs[symb + 1], csi_length, DMRS_MOD_ORDER, mod_csi[symb + 1]);
}
} }
} }
uint16_t start_sc = frame_parms->first_carrier_offset; uint16_t start_sc = frame_parms->first_carrier_offset;
// resource mapping according to 38.211 7.4.1.5.3 // resource mapping according to 38.211 7.4.1.5.3
for (n=csi_params->start_rb; n<(csi_params->start_rb+csi_params->nr_of_rbs); n++) { for (int n = csi_params->start_rb; n < (csi_params->start_rb + csi_params->nr_of_rbs); n++) {
if ( (csi_params->freq_density > 1) || (csi_params->freq_density == (n%2))) { // for freq density 0.5 checks if even or odd RB if ((csi_params->freq_density > 1) || (csi_params->freq_density == (n % 2))) { // for freq density 0.5 checks if even or odd RB
for (int ji=0; ji<size; ji++) { // loop over CDM groups for (int ji = 0; ji < size; ji++) { // loop over CDM groups
for (int s=0 ; s<gs; s++) { // loop over each CDM group size for (int s = 0 ; s < gs; s++) { // loop over each CDM group size
p = s+j[ji]*gs; // port index int p = s + j[ji] * gs; // port index
for (kp=0; kp<=kprime; kp++) { // loop over frequency resource elements within a group for (int kp = 0; kp <= kprime; kp++) { // loop over frequency resource elements within a group
k = (start_sc+(n*NR_NB_SC_PER_RB)+koverline[ji]+kp)%(frame_parms->ofdm_symbol_size); // frequency index of current resource element // frequency index of current resource element
int k = (start_sc + (n * NR_NB_SC_PER_RB) + koverline[ji] + kp) % (frame_parms->ofdm_symbol_size);
// wf according to tables 7.4.5.3-2 to 7.4.5.3-5 // wf according to tables 7.4.5.3-2 to 7.4.5.3-5
if (kp == 0) int wf = kp == 0 ? 1 : (-2 * (s % 2) + 1);
wf = 1; int na = n * alpha;
else int kpn = (rho * koverline[ji]) / NR_NB_SC_PER_RB;
wf = -2*(s%2)+1; int mprime = na + kp + kpn; // sequence index
na = n*alpha; for (int lp = 0; lp <= lprime; lp++) { // loop over frequency resource elements within a group
kpn = (rho*koverline[ji])/NR_NB_SC_PER_RB; int l = lp + loverline[ji];
mprime = na + kp + kpn; // sequence index // wt according to tables 7.4.5.3-2 to 7.4.5.3-5
for (lp=0; lp<=lprime; lp++) { // loop over frequency resource elements within a group int wt;
l = lp + loverline[ji];
// wt according to tables 7.4.5.3-2 to 7.4.5.3-5
if (s < 2) if (s < 2)
wt = 1; wt = 1;
else if (s < 4) else if (s < 4)
wt = -2*(lp%2)+1; wt = -2*(lp % 2) + 1;
else if (s < 6) else if (s < 6)
wt = -2*(lp/2)+1; wt = -2 * (lp / 2) + 1;
else { else {
if ((lp == 0) || (lp == 3)) if ((lp == 0) || (lp == 3))
wt = 1; wt = 1;
else else
wt = -1; wt = -1;
} }
int index = ((l * frame_parms->ofdm_symbol_size + k) << 1) + (2 * dataF_offset);
// ZP CSI RS ((int16_t*)dataF[p])[index] = (beta * wt * wf * mod_csi[l][mprime << 1]) >> 15;
if (csi_params->csi_type == 2) { ((int16_t*)dataF[p])[index + 1] = (beta * wt * wf * mod_csi[l][(mprime << 1) + 1]) >> 15;
((int16_t*)dataF[p])[((l*frame_parms->ofdm_symbol_size + k)<<1)+(2*dataF_offset)] = 0;
((int16_t*)dataF[p])[((l*frame_parms->ofdm_symbol_size + k)<<1)+1+(2*dataF_offset)] = 0;
}
else {
((int16_t*)dataF[p])[((l*frame_parms->ofdm_symbol_size + k)<<1)+(2*dataF_offset)] = (beta*wt*wf*mod_csi[l][mprime<<1]) >> 15;
((int16_t*)dataF[p])[((l*frame_parms->ofdm_symbol_size + k)<<1)+1+(2*dataF_offset)] = (beta*wt*wf*mod_csi[l][(mprime<<1) + 1]) >> 15;
}
#ifdef NR_CSIRS_DEBUG #ifdef NR_CSIRS_DEBUG
printf("l,k (%d,%d) seq. index %d \t port %d \t (%d,%d)\n",l,k,mprime,p+3000, printf("l,k (%d,%d) seq. index %d \t port %d \t (%d,%d)\n",
((int16_t*)dataF[p])[((l*frame_parms->ofdm_symbol_size + k)<<1)+(2*dataF_offset)], l,
((int16_t*)dataF[p])[((l*frame_parms->ofdm_symbol_size + k)<<1)+1+(2*dataF_offset)]); k,
mprime,
p + 3000,
((int16_t*)dataF[p])[index],
((int16_t*)dataF[p])[index + 1]);
#endif #endif
} }
} }
...@@ -646,25 +642,4 @@ void nr_generate_csi_rs(const NR_DL_FRAME_PARMS *frame_parms, ...@@ -646,25 +642,4 @@ void nr_generate_csi_rs(const NR_DL_FRAME_PARMS *frame_parms,
} }
} }
} }
if (N_cdm_groups) *N_cdm_groups = size;
if (CDM_group_size) *CDM_group_size = gs;
if (k_prime) *k_prime = kprime;
if (l_prime) *l_prime = lprime;
if (N_ports) *N_ports = ports;
if (j_cdm) memcpy(j_cdm,j,16*sizeof(uint8_t));
if (k_overline) memcpy(k_overline,koverline,16*sizeof(uint8_t));
if (l_overline) memcpy(l_overline,loverline,16*sizeof(uint8_t));
#ifdef NR_CSIRS_DEBUG
if (N_ports) LOG_I(NR_PHY, "nr_csi_info->N_ports = %d\n", *N_ports);
if (N_cdm_groups) LOG_I(NR_PHY, "nr_csi_info->N_cdm_groups = %d\n", *N_cdm_groups);
if (CDM_group_size) LOG_I(NR_PHY, "nr_csi_info->CDM_group_size = %d\n", *CDM_group_size);
if (k_prime) LOG_I(NR_PHY, "nr_csi_info->kprime = %d\n", *k_prime);
if (l_prime) LOG_I(NR_PHY, "nr_csi_info->lprime = %d\n", *l_prime);
if (N_cdm_groups) {
for(int ji=0; ji<*N_cdm_groups; ji++) {
LOG_I(NR_PHY, "(CDM group %d) j = %d, koverline = %d, loverline = %d\n", ji, j[ji], koverline[ji], loverline[ji]);
}
}
#endif
} }
...@@ -310,21 +310,6 @@ void init_prach_ru_list(RU_t *ru); ...@@ -310,21 +310,6 @@ void init_prach_ru_list(RU_t *ru);
void free_nr_ru_prach_entry(RU_t *ru, int prach_id); void free_nr_ru_prach_entry(RU_t *ru, int prach_id);
uint8_t get_nr_prach_duration(uint8_t prach_format); uint8_t get_nr_prach_duration(uint8_t prach_format);
void nr_generate_csi_rs(const NR_DL_FRAME_PARMS *frame_parms,
int32_t **dataF,
const int16_t amp,
nr_csi_info_t *nr_csi_info,
const nfapi_nr_dl_tti_csi_rs_pdu_rel15_t *csi_params,
const int slot,
uint8_t *N_cdm_groups,
uint8_t *CDM_group_size,
uint8_t *k_prime,
uint8_t *l_prime,
uint8_t *N_ports,
uint8_t *j_cdm,
uint8_t *k_overline,
uint8_t *l_overline);
void free_nr_prach_entry(PHY_VARS_gNB *gNB, int prach_id); void free_nr_prach_entry(PHY_VARS_gNB *gNB, int prach_id);
void nr_decode_pucch1(c16_t **rxdataF, void nr_decode_pucch1(c16_t **rxdataF,
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
#include "PHY/NR_REFSIG/ptrs_nr.h" #include "PHY/NR_REFSIG/ptrs_nr.h"
#include "PHY/NR_REFSIG/nr_mod_table.h" #include "PHY/NR_REFSIG/nr_mod_table.h"
#include "PHY/NR_TRANSPORT/nr_sch_dmrs.h" #include "PHY/NR_TRANSPORT/nr_sch_dmrs.h"
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
#include "nr_phy_common.h" #include "nr_phy_common.h"
#include "filt16a_32.h" #include "filt16a_32.h"
#include "T.h" #include "T.h"
......
...@@ -36,8 +36,8 @@ ...@@ -36,8 +36,8 @@
#include "executables/nr-softmodem-common.h" #include "executables/nr-softmodem-common.h"
#include "nr_transport_proto_ue.h" #include "nr_transport_proto_ue.h"
#include "PHY/phy_extern_nr_ue.h" #include "PHY/phy_extern_nr_ue.h"
#include "PHY/NR_REFSIG/nr_refsig.h"
#include "common/utils/nr/nr_common.h" #include "common/utils/nr/nr_common.h"
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
#include "PHY/NR_UE_ESTIMATION/filt16a_32.h" #include "PHY/NR_UE_ESTIMATION/filt16a_32.h"
// Additional memory allocation, because of applying the filter and the memory offset to ensure memory alignment // Additional memory allocation, because of applying the filter and the memory offset to ensure memory alignment
...@@ -191,13 +191,13 @@ int nr_get_csi_rs_signal(const PHY_VARS_NR_UE *ue, ...@@ -191,13 +191,13 @@ int nr_get_csi_rs_signal(const PHY_VARS_NR_UE *ue,
int32_t csi_rs_received_signal[][ue->frame_parms.samples_per_slot_wCP], int32_t csi_rs_received_signal[][ue->frame_parms.samples_per_slot_wCP],
uint32_t *rsrp, uint32_t *rsrp,
int *rsrp_dBm, int *rsrp_dBm,
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP])
{
const NR_DL_FRAME_PARMS *frame_parms = &ue->frame_parms; const NR_DL_FRAME_PARMS *fp = &ue->frame_parms;
uint16_t meas_count = 0; uint16_t meas_count = 0;
uint32_t rsrp_sum = 0; uint32_t rsrp_sum = 0;
for (int ant_rx = 0; ant_rx < frame_parms->nb_antennas_rx; ant_rx++) { for (int ant_rx = 0; ant_rx < fp->nb_antennas_rx; ant_rx++) {
for (int rb = csirs_config_pdu->start_rb; rb < (csirs_config_pdu->start_rb+csirs_config_pdu->nr_of_rbs); rb++) { for (int rb = csirs_config_pdu->start_rb; rb < (csirs_config_pdu->start_rb+csirs_config_pdu->nr_of_rbs); rb++) {
...@@ -212,12 +212,12 @@ int nr_get_csi_rs_signal(const PHY_VARS_NR_UE *ue, ...@@ -212,12 +212,12 @@ int nr_get_csi_rs_signal(const PHY_VARS_NR_UE *ue,
// loop over frequency resource elements within a group // loop over frequency resource elements within a group
for (int kp = 0; kp <= k_prime; kp++) { for (int kp = 0; kp <= k_prime; kp++) {
uint16_t k = (frame_parms->first_carrier_offset + (rb*NR_NB_SC_PER_RB)+k_overline[cdm_id] + kp) % frame_parms->ofdm_symbol_size; uint16_t k = (fp->first_carrier_offset + (rb * NR_NB_SC_PER_RB) + k_overline[cdm_id] + kp) % fp->ofdm_symbol_size;
// loop over time resource elements within a group // loop over time resource elements within a group
for (int lp = 0; lp <= l_prime; lp++) { for (int lp = 0; lp <= l_prime; lp++) {
uint16_t symb = lp + l_overline[cdm_id]; uint16_t symb = lp + l_overline[cdm_id];
uint64_t symbol_offset = symb*frame_parms->ofdm_symbol_size; uint64_t symbol_offset = symb * fp->ofdm_symbol_size;
c16_t *rx_signal = &rxdataF[ant_rx][symbol_offset]; c16_t *rx_signal = &rxdataF[ant_rx][symbol_offset];
c16_t *rx_csi_rs_signal = (c16_t*)&csi_rs_received_signal[ant_rx][symbol_offset]; c16_t *rx_csi_rs_signal = (c16_t*)&csi_rs_received_signal[ant_rx][symbol_offset];
rx_csi_rs_signal[k].r = rx_signal[k].r; rx_csi_rs_signal[k].r = rx_signal[k].r;
...@@ -229,10 +229,11 @@ int nr_get_csi_rs_signal(const PHY_VARS_NR_UE *ue, ...@@ -229,10 +229,11 @@ int nr_get_csi_rs_signal(const PHY_VARS_NR_UE *ue,
meas_count++; meas_count++;
#ifdef NR_CSIRS_DEBUG #ifdef NR_CSIRS_DEBUG
int dataF_offset = proc->nr_slot_rx*ue->frame_parms.samples_per_slot_wCP; int dataF_offset = proc->nr_slot_rx * fp->samples_per_slot_wCP;
uint16_t port_tx = s+j_cdm[cdm_id]*CDM_group_size; uint16_t port_tx = s+j_cdm[cdm_id]*CDM_group_size;
c16_t *tx_csi_rs_signal = (c16_t*)&nr_csi_info->csi_rs_generated_signal[port_tx][symbol_offset+dataF_offset]; c16_t *tx_csi_rs_signal = (c16_t*)&nr_csi_info->csi_rs_generated_signal[port_tx][symbol_offset + dataF_offset];
LOG_I(NR_PHY, "l,k (%2d,%4d) |\tport_tx %d (%4d,%4d)\tant_rx %d (%4d,%4d)\n", LOG_I(NR_PHY,
"l,k (%2d,%4d) |\tport_tx %d (%4d,%4d)\tant_rx %d (%4d,%4d)\n",
symb, symb,
k, k,
port_tx+3000, port_tx+3000,
...@@ -728,12 +729,12 @@ int nr_csi_rs_cqi_estimation(const uint32_t precoded_sinr, ...@@ -728,12 +729,12 @@ int nr_csi_rs_cqi_estimation(const uint32_t precoded_sinr,
return 0; return 0;
} }
int nr_csi_im_power_estimation(const PHY_VARS_NR_UE *ue, static void nr_csi_im_power_estimation(const PHY_VARS_NR_UE *ue,
const UE_nr_rxtx_proc_t *proc, const UE_nr_rxtx_proc_t *proc,
const fapi_nr_dl_config_csiim_pdu_rel15_t *csiim_config_pdu, const fapi_nr_dl_config_csiim_pdu_rel15_t *csiim_config_pdu,
uint32_t *interference_plus_noise_power, uint32_t *interference_plus_noise_power,
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP])
{
const NR_DL_FRAME_PARMS *frame_parms = &ue->frame_parms; const NR_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
const uint16_t end_rb = csiim_config_pdu->start_rb + csiim_config_pdu->nr_of_rbs > csiim_config_pdu->bwp_size ? const uint16_t end_rb = csiim_config_pdu->start_rb + csiim_config_pdu->nr_of_rbs > csiim_config_pdu->bwp_size ?
...@@ -772,7 +773,7 @@ int nr_csi_im_power_estimation(const PHY_VARS_NR_UE *ue, ...@@ -772,7 +773,7 @@ int nr_csi_im_power_estimation(const PHY_VARS_NR_UE *ue,
uint16_t sc0_offset = (frame_parms->first_carrier_offset + rb*NR_NB_SC_PER_RB) % frame_parms->ofdm_symbol_size; uint16_t sc0_offset = (frame_parms->first_carrier_offset + rb*NR_NB_SC_PER_RB) % frame_parms->ofdm_symbol_size;
for (int sc_idx = 0; sc_idx<4; sc_idx++) { for (int sc_idx = 0; sc_idx < 4; sc_idx++) {
uint16_t sc = sc0_offset + csiim_config_pdu->k_csiim[sc_idx]; uint16_t sc = sc0_offset + csiim_config_pdu->k_csiim[sc_idx];
if (sc >= frame_parms->ofdm_symbol_size) { if (sc >= frame_parms->ofdm_symbol_size) {
...@@ -785,34 +786,31 @@ int nr_csi_im_power_estimation(const PHY_VARS_NR_UE *ue, ...@@ -785,34 +786,31 @@ int nr_csi_im_power_estimation(const PHY_VARS_NR_UE *ue,
sum_re += rx_signal[sc].r; sum_re += rx_signal[sc].r;
sum_im += rx_signal[sc].i; sum_im += rx_signal[sc].i;
sum2_re += rx_signal[sc].r*rx_signal[sc].r; sum2_re += rx_signal[sc].r * rx_signal[sc].r;
sum2_im += rx_signal[sc].i*rx_signal[sc].i; sum2_im += rx_signal[sc].i * rx_signal[sc].i;
count++; count++;
} }
} }
} }
} }
int32_t power_re = sum2_re/count - (sum_re/count)*(sum_re/count); int32_t power_re = sum2_re / count - (sum_re / count) * (sum_re / count);
int32_t power_im = sum2_im/count - (sum_im/count)*(sum_im/count); int32_t power_im = sum2_im / count - (sum_im / count) * (sum_im / count);
*interference_plus_noise_power = power_re + power_im; *interference_plus_noise_power = power_re + power_im;
#ifdef NR_CSIIM_DEBUG #ifdef NR_CSIIM_DEBUG
LOG_I(NR_PHY, "interference_plus_noise_power based on CSI-IM = %i\n", *interference_plus_noise_power); LOG_I(NR_PHY, "interference_plus_noise_power based on CSI-IM = %i\n", *interference_plus_noise_power);
#endif #endif
return 0;
} }
int nr_ue_csi_im_procedures(PHY_VARS_NR_UE *ue, void nr_ue_csi_im_procedures(PHY_VARS_NR_UE *ue,
const UE_nr_rxtx_proc_t *proc, const UE_nr_rxtx_proc_t *proc,
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP])
{ {
int gNB_id = proc->gNB_id; int gNB_id = proc->gNB_id;
if(!ue->csiim_vars[gNB_id]->active) { if(!ue->csiim_vars[gNB_id]->active)
return -1; LOG_E(NR_PHY, "Scheduling reception of CSI-IM that is not active\n");
}
const fapi_nr_dl_config_csiim_pdu_rel15_t *csiim_config_pdu = (fapi_nr_dl_config_csiim_pdu_rel15_t*)&ue->csiim_vars[gNB_id]->csiim_config_pdu; const fapi_nr_dl_config_csiim_pdu_rel15_t *csiim_config_pdu = (fapi_nr_dl_config_csiim_pdu_rel15_t*)&ue->csiim_vars[gNB_id]->csiim_config_pdu;
...@@ -828,8 +826,6 @@ int nr_ue_csi_im_procedures(PHY_VARS_NR_UE *ue, ...@@ -828,8 +826,6 @@ int nr_ue_csi_im_procedures(PHY_VARS_NR_UE *ue,
nr_csi_im_power_estimation(ue, proc, csiim_config_pdu, &ue->nr_csi_info->interference_plus_noise_power, rxdataF); nr_csi_im_power_estimation(ue, proc, csiim_config_pdu, &ue->nr_csi_info->interference_plus_noise_power, rxdataF);
ue->nr_csi_info->csi_im_meas_computed = true; ue->nr_csi_info->csi_im_meas_computed = true;
return 0;
} }
static nfapi_nr_dl_tti_csi_rs_pdu_rel15_t convert_csirs_pdu(const fapi_nr_dl_config_csirs_pdu_rel15_t *csirs_config_pdu) static nfapi_nr_dl_tti_csi_rs_pdu_rel15_t convert_csirs_pdu(const fapi_nr_dl_config_csirs_pdu_rel15_t *csirs_config_pdu)
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
*/ */
#include "PHY/defs_nr_UE.h" #include "PHY/defs_nr_UE.h"
#include "PHY/phy_extern.h" #include "PHY/phy_extern.h"
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
#include "nr_transport_proto_ue.h" #include "nr_transport_proto_ue.h"
#include "PHY/sse_intrin.h" #include "PHY/sse_intrin.h"
#include "T.h" #include "T.h"
......
...@@ -149,9 +149,9 @@ int nr_ue_pdcch_procedures(PHY_VARS_NR_UE *ue, ...@@ -149,9 +149,9 @@ int nr_ue_pdcch_procedures(PHY_VARS_NR_UE *ue,
int n_ss, int n_ss,
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]);
int nr_ue_csi_im_procedures(PHY_VARS_NR_UE *ue, void nr_ue_csi_im_procedures(PHY_VARS_NR_UE *ue,
const UE_nr_rxtx_proc_t *proc, const UE_nr_rxtx_proc_t *proc,
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]);
void nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, void nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue,
const UE_nr_rxtx_proc_t *proc, const UE_nr_rxtx_proc_t *proc,
......
...@@ -1024,7 +1024,7 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_ ...@@ -1024,7 +1024,7 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_
// do procedures for CSI-RS // do procedures for CSI-RS
if ((ue->csirs_vars[gNB_id]) && (ue->csirs_vars[gNB_id]->active == 1)) { if ((ue->csirs_vars[gNB_id]) && (ue->csirs_vars[gNB_id]->active == 1)) {
for(int symb = 0; symb < NR_SYMBOLS_PER_SLOT; symb++) { for(int symb = 0; symb < NR_SYMBOLS_PER_SLOT; symb++) {
if(is_csi_rs_in_symbol(ue->csirs_vars[gNB_id]->csirs_config_pdu,symb)) { if(is_csi_rs_in_symbol(ue->csirs_vars[gNB_id]->csirs_config_pdu, symb)) {
if (!slot_fep_map[symb]) { if (!slot_fep_map[symb]) {
nr_slot_fep(ue, &ue->frame_parms, proc, symb, rxdataF, link_type_dl); nr_slot_fep(ue, &ue->frame_parms, proc, symb, rxdataF, link_type_dl);
slot_fep_map[symb] = true; slot_fep_map[symb] = true;
...@@ -1041,7 +1041,7 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_ ...@@ -1041,7 +1041,7 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_
uint16_t nb_symb_sch = dlsch_config->number_symbols; uint16_t nb_symb_sch = dlsch_config->number_symbols;
uint16_t start_symb_sch = dlsch_config->start_symbol; uint16_t start_symb_sch = dlsch_config->start_symbol;
LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR Frame.slot %d.%d ------ \n", frame_rx%1024, nr_slot_rx); LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR Frame.slot %d.%d ------ \n", frame_rx % 1024, nr_slot_rx);
for (int m = start_symb_sch; m < (nb_symb_sch + start_symb_sch) ; m++) { for (int m = start_symb_sch; m < (nb_symb_sch + start_symb_sch) ; m++) {
if (!slot_fep_map[m]) { if (!slot_fep_map[m]) {
......
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