|
|
|
@@ -432,21 +432,17 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
|
|
|
|
uint16_t *max_preamble_energy,
|
|
|
|
|
uint16_t *max_preamble_delay)
|
|
|
|
|
{
|
|
|
|
|
AssertFatal(gNB!=NULL,"Can only be called from gNB\n");
|
|
|
|
|
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
nfapi_nr_prach_config_t *cfg=&gNB->gNB_config.prach_config;
|
|
|
|
|
AssertFatal(gNB != NULL, "Can only be called from gNB\n");
|
|
|
|
|
nfapi_nr_prach_config_t *cfg = &gNB->gNB_config.prach_config;
|
|
|
|
|
NR_DL_FRAME_PARMS *fp;
|
|
|
|
|
|
|
|
|
|
uint16_t rootSequenceIndex;
|
|
|
|
|
int numrootSequenceIndex;
|
|
|
|
|
uint8_t restricted_set;
|
|
|
|
|
uint8_t n_ra_prb=0xFF;
|
|
|
|
|
int16_t *prachF=NULL;
|
|
|
|
|
int nb_rx;
|
|
|
|
|
uint16_t rootSequenceIndex;
|
|
|
|
|
int numrootSequenceIndex;
|
|
|
|
|
uint8_t restricted_set;
|
|
|
|
|
uint8_t n_ra_prb=0xFF;
|
|
|
|
|
int nb_rx;
|
|
|
|
|
|
|
|
|
|
int16_t **rxsigF = gNB->prach_vars.rxsigF;
|
|
|
|
|
int16_t **rxsigF = gNB->prach_vars.rxsigF;
|
|
|
|
|
|
|
|
|
|
uint8_t preamble_index;
|
|
|
|
|
uint16_t NCS=99,NCS2;
|
|
|
|
@@ -460,10 +456,8 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
|
|
|
|
uint8_t not_found;
|
|
|
|
|
uint16_t u;
|
|
|
|
|
int16_t *Xu=0;
|
|
|
|
|
uint16_t offset;
|
|
|
|
|
uint16_t first_nonzero_root_idx=0;
|
|
|
|
|
uint8_t new_dft=0;
|
|
|
|
|
uint8_t aa;
|
|
|
|
|
int32_t lev;
|
|
|
|
|
int16_t levdB;
|
|
|
|
|
int log2_ifft_size=10;
|
|
|
|
@@ -473,23 +467,22 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
|
|
|
|
fp = &gNB->frame_parms;
|
|
|
|
|
|
|
|
|
|
nb_rx = gNB->gNB_config.carrier_config.num_rx_ant.value;
|
|
|
|
|
rootSequenceIndex = cfg->num_prach_fd_occasions_list[prach_pdu->num_ra].prach_root_sequence_index.value;
|
|
|
|
|
numrootSequenceIndex = cfg->num_prach_fd_occasions_list[prach_pdu->num_ra].num_root_sequences.value;
|
|
|
|
|
NCS = prach_pdu->num_cs;//cfg->num_prach_fd_occasions_list[0].prach_zero_corr_conf.value;
|
|
|
|
|
rootSequenceIndex = cfg->num_prach_fd_occasions_list[prach_pdu->num_ra].prach_root_sequence_index.value;
|
|
|
|
|
numrootSequenceIndex = cfg->num_prach_fd_occasions_list[prach_pdu->num_ra].num_root_sequences.value;
|
|
|
|
|
NCS = prach_pdu->num_cs;//cfg->num_prach_fd_occasions_list[0].prach_zero_corr_conf.value;
|
|
|
|
|
int prach_sequence_length = cfg->prach_sequence_length.value;
|
|
|
|
|
int msg1_frequencystart = cfg->num_prach_fd_occasions_list[prach_pdu->num_ra].k1.value;
|
|
|
|
|
int msg1_frequencystart = cfg->num_prach_fd_occasions_list[prach_pdu->num_ra].k1.value;
|
|
|
|
|
// int num_unused_root_sequences = cfg->num_prach_fd_occasions_list[0].num_unused_root_sequences.value;
|
|
|
|
|
// cfg->num_prach_fd_occasions_list[0].unused_root_sequences_list
|
|
|
|
|
|
|
|
|
|
restricted_set = cfg->restricted_set_config.value;
|
|
|
|
|
restricted_set = cfg->restricted_set_config.value;
|
|
|
|
|
|
|
|
|
|
uint8_t prach_fmt = prach_pdu->prach_format;
|
|
|
|
|
uint16_t N_ZC = (prach_sequence_length==0)?839:139;
|
|
|
|
|
|
|
|
|
|
LOG_D(PHY,"L1 PRACH RX: rooSequenceIndex %d, numRootSeqeuences %d, NCS %d, N_ZC %d, format %d \n",rootSequenceIndex,numrootSequenceIndex,NCS,N_ZC,prach_fmt);
|
|
|
|
|
|
|
|
|
|
prach_ifft = gNB->prach_vars.prach_ifft;
|
|
|
|
|
prachF = gNB->prach_vars.prachF;
|
|
|
|
|
prach_ifft = gNB->prach_vars.prach_ifft;
|
|
|
|
|
if (LOG_DEBUGFLAG(PRACH)){
|
|
|
|
|
if ((frame&1023) < 20) LOG_D(PHY,"PRACH (gNB) : running rx_prach for slot %d, msg1_frequencystart %d, rootSequenceIndex %d\n", slot, msg1_frequencystart, rootSequenceIndex);
|
|
|
|
|
}
|
|
|
|
@@ -508,10 +501,10 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
|
|
|
|
preamble_offset_old = 99;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*max_preamble_energy=0;
|
|
|
|
|
*max_preamble_delay=0;
|
|
|
|
|
*max_preamble=0;
|
|
|
|
|
|
|
|
|
|
*max_preamble_energy = 0;
|
|
|
|
|
*max_preamble_delay = 0;
|
|
|
|
|
*max_preamble = 0;
|
|
|
|
|
int16_t prachF[2 * 1024];
|
|
|
|
|
for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
|
|
|
|
|
|
|
|
|
|
if (LOG_DEBUGFLAG(PRACH)){
|
|
|
|
@@ -521,14 +514,14 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
|
|
|
|
if (restricted_set == 0) {
|
|
|
|
|
// This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
|
|
|
|
|
preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS)));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (preamble_offset != preamble_offset_old) {
|
|
|
|
|
preamble_offset_old = preamble_offset;
|
|
|
|
|
new_dft = 1;
|
|
|
|
|
// This is the \nu corresponding to the preamble index
|
|
|
|
|
preamble_shift = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
preamble_shift -= NCS;
|
|
|
|
|
|
|
|
|
@@ -551,33 +544,32 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
|
|
|
|
// current root depending on rootSequenceIndex
|
|
|
|
|
int index = (rootSequenceIndex + preamble_offset) % N_ZC;
|
|
|
|
|
|
|
|
|
|
u = prach_root_sequence_map[index];
|
|
|
|
|
u = prach_root_sequence_map[index];
|
|
|
|
|
|
|
|
|
|
uint16_t n_group_ra = 0;
|
|
|
|
|
uint16_t n_group_ra = 0;
|
|
|
|
|
|
|
|
|
|
if ( (nr_du[u]<(N_ZC/3)) && (nr_du[u]>=NCS) ) {
|
|
|
|
|
n_shift_ra = nr_du[u]/NCS;
|
|
|
|
|
d_start = (nr_du[u]<<1) + (n_shift_ra * NCS);
|
|
|
|
|
n_group_ra = N_ZC/d_start;
|
|
|
|
|
n_shift_ra_bar = max(0,(N_ZC-(nr_du[u]<<1)-(n_group_ra*d_start))/N_ZC);
|
|
|
|
|
} else if ( (nr_du[u]>=(N_ZC/3)) && (nr_du[u]<=((N_ZC - NCS)>>1)) ) {
|
|
|
|
|
n_shift_ra = (N_ZC - (nr_du[u]<<1))/NCS;
|
|
|
|
|
d_start = N_ZC - (nr_du[u]<<1) + (n_shift_ra * NCS);
|
|
|
|
|
n_group_ra = nr_du[u]/d_start;
|
|
|
|
|
n_shift_ra_bar = min(n_shift_ra,max(0,(nr_du[u]- (n_group_ra*d_start))/NCS));
|
|
|
|
|
} else {
|
|
|
|
|
n_shift_ra = 0;
|
|
|
|
|
n_shift_ra_bar = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// This is the number of cyclic shifts for the current root u
|
|
|
|
|
numshift = (n_shift_ra*n_group_ra) + n_shift_ra_bar;
|
|
|
|
|
// skip to next root and recompute parameters if numshift==0
|
|
|
|
|
(numshift>0) ? (not_found = 0) : (preamble_offset++);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ((nr_du[u] < (N_ZC / 3)) && (nr_du[u] >= NCS) ) {
|
|
|
|
|
n_shift_ra = nr_du[u] / NCS;
|
|
|
|
|
d_start = (nr_du[u] << 1) + (n_shift_ra * NCS);
|
|
|
|
|
n_group_ra = N_ZC / d_start;
|
|
|
|
|
n_shift_ra_bar = max(0, (N_ZC-(nr_du[u] << 1) - (n_group_ra * d_start)) / N_ZC);
|
|
|
|
|
} else if ((nr_du[u] >= (N_ZC / 3)) && (nr_du[u] <= ((N_ZC - NCS) >> 1))) {
|
|
|
|
|
n_shift_ra = (N_ZC - (nr_du[u] << 1)) / NCS;
|
|
|
|
|
d_start = N_ZC - (nr_du[u] << 1) + (n_shift_ra * NCS);
|
|
|
|
|
n_group_ra = nr_du[u] / d_start;
|
|
|
|
|
n_shift_ra_bar = min(n_shift_ra, max(0, (nr_du[u]- (n_group_ra * d_start)) / NCS));
|
|
|
|
|
} else {
|
|
|
|
|
n_shift_ra = 0;
|
|
|
|
|
n_shift_ra_bar = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// This is the number of cyclic shifts for the current root u
|
|
|
|
|
numshift = (n_shift_ra * n_group_ra) + n_shift_ra_bar;
|
|
|
|
|
// skip to next root and recompute parameters if numshift==0
|
|
|
|
|
(numshift>0) ? (not_found = 0) : (preamble_offset++);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (n_shift_ra>0)
|
|
|
|
|
preamble_shift = -((d_start * (preamble_index0/n_shift_ra)) + ((preamble_index0%n_shift_ra)*NCS)); // minus because the channel is h(t -\tau + Cv)
|
|
|
|
|
else
|
|
|
|
@@ -595,8 +587,17 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
|
|
|
|
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
|
|
|
|
|
if (LOG_DEBUGFLAG(PRACH)) {
|
|
|
|
|
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
|
|
|
|
if (en>60) LOG_D(PHY,"frame %d, slot %d : preamble index %d, NCS %d, N_ZC/NCS %d: offset %d, preamble shift %d , en %d)\n",
|
|
|
|
|
frame,slot,preamble_index,NCS,N_ZC/NCS,preamble_offset,preamble_shift,en);
|
|
|
|
|
if (en>60)
|
|
|
|
|
LOG_D(PHY,
|
|
|
|
|
"frame %d, slot %d : preamble index %d, NCS %d, N_ZC/NCS %d: offset %d, preamble shift %d , en %d)\n",
|
|
|
|
|
frame,
|
|
|
|
|
slot,
|
|
|
|
|
preamble_index,
|
|
|
|
|
NCS,
|
|
|
|
|
N_ZC / NCS,
|
|
|
|
|
preamble_offset,
|
|
|
|
|
preamble_shift,
|
|
|
|
|
en);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LOG_D(PHY,"PRACH RX preamble_index %d, preamble_offset %d\n",preamble_index,preamble_offset);
|
|
|
|
@@ -605,57 +606,56 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
|
|
|
|
if (new_dft == 1) {
|
|
|
|
|
new_dft = 0;
|
|
|
|
|
|
|
|
|
|
Xu=(int16_t*)gNB->X_u[preamble_offset-first_nonzero_root_idx];
|
|
|
|
|
Xu = (int16_t*)gNB->X_u[preamble_offset-first_nonzero_root_idx];
|
|
|
|
|
|
|
|
|
|
LOG_D(PHY,"PRACH RX new dft preamble_offset-first_nonzero_root_idx %d\n",preamble_offset-first_nonzero_root_idx);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
memset(prach_ifft,0,((N_ZC==839) ? 2048 : 256)*sizeof(int32_t));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
memset(prachF, 0, sizeof(int16_t)*2*1024 );
|
|
|
|
|
if (LOG_DUMPFLAG(PRACH)) {
|
|
|
|
|
memset(prachF, 0, sizeof(int16_t) * 2 * 1024);
|
|
|
|
|
if (LOG_DUMPFLAG(PRACH)) {
|
|
|
|
|
LOG_M("prach_rxF0.m","prach_rxF0",rxsigF[0],N_ZC,1,1);
|
|
|
|
|
LOG_M("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (aa=0;aa<nb_rx; aa++) {
|
|
|
|
|
for (int aa = 0; aa < nb_rx; aa++) {
|
|
|
|
|
// Do componentwise product with Xu* on each antenna
|
|
|
|
|
|
|
|
|
|
for (offset=0; offset<(N_ZC<<1); offset+=2) {
|
|
|
|
|
prachF[offset] = (int16_t)(((int32_t)Xu[offset]*rxsigF[aa][offset] + (int32_t)Xu[offset+1]*rxsigF[aa][offset+1])>>15);
|
|
|
|
|
prachF[offset+1] = (int16_t)(((int32_t)Xu[offset]*rxsigF[aa][offset+1] - (int32_t)Xu[offset+1]*rxsigF[aa][offset])>>15);
|
|
|
|
|
}
|
|
|
|
|
for (int offset = 0; offset < (N_ZC << 1); offset += 2) {
|
|
|
|
|
prachF[offset] = (int16_t)(((int32_t)Xu[offset]*rxsigF[aa][offset] + (int32_t)Xu[offset+1]*rxsigF[aa][offset+1])>>15);
|
|
|
|
|
prachF[offset+1] = (int16_t)(((int32_t)Xu[offset]*rxsigF[aa][offset+1] - (int32_t)Xu[offset+1]*rxsigF[aa][offset])>>15);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Now do IFFT of size 1024 (N_ZC=839) or 256 (N_ZC=139)
|
|
|
|
|
if (N_ZC == 839) {
|
|
|
|
|
idft(IDFT_1024,prachF,prach_ifft_tmp,1);
|
|
|
|
|
// compute energy and accumulate over receive antennas
|
|
|
|
|
for (i=0;i<1024;i++)
|
|
|
|
|
prach_ifft[i] += (int32_t)prach_ifft_tmp[i<<1]*(int32_t)prach_ifft_tmp[i<<1] + (int32_t)prach_ifft_tmp[1+(i<<1)]*(int32_t)prach_ifft_tmp[1+(i<<1)];
|
|
|
|
|
} else {
|
|
|
|
|
idft(IDFT_256,prachF,prach_ifft_tmp,1);
|
|
|
|
|
log2_ifft_size = 8;
|
|
|
|
|
// compute energy and accumulate over receive antennas and repetitions for BR
|
|
|
|
|
for (i=0;i<256;i++)
|
|
|
|
|
prach_ifft[i] += (int32_t)prach_ifft_tmp[i<<1]*(int32_t)prach_ifft_tmp[(i<<1)] + (int32_t)prach_ifft_tmp[1+(i<<1)]*(int32_t)prach_ifft_tmp[1+(i<<1)];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (LOG_DUMPFLAG(PRACH)) {
|
|
|
|
|
if (aa==0) LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
|
|
|
|
|
if (aa==1) LOG_M("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
|
|
|
|
|
// Now do IFFT of size 1024 (N_ZC=839) or 256 (N_ZC=139)
|
|
|
|
|
if (N_ZC == 839) {
|
|
|
|
|
idft(IDFT_1024, prachF, prach_ifft_tmp, 1);
|
|
|
|
|
// compute energy and accumulate over receive antennas
|
|
|
|
|
for (int i = 0; i < 1024; i++)
|
|
|
|
|
prach_ifft[i] += (int32_t)prach_ifft_tmp[i<<1]*(int32_t)prach_ifft_tmp[i<<1] + (int32_t)prach_ifft_tmp[1+(i<<1)]*(int32_t)prach_ifft_tmp[1+(i<<1)];
|
|
|
|
|
} else {
|
|
|
|
|
idft(IDFT_256, prachF, prach_ifft_tmp, 1);
|
|
|
|
|
log2_ifft_size = 8;
|
|
|
|
|
// compute energy and accumulate over receive antennas and repetitions for BR
|
|
|
|
|
for (int i = 0; i < 256; i++)
|
|
|
|
|
prach_ifft[i] += (int32_t)prach_ifft_tmp[i<<1]*(int32_t)prach_ifft_tmp[(i<<1)] + (int32_t)prach_ifft_tmp[1+(i<<1)]*(int32_t)prach_ifft_tmp[1+(i<<1)];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}// antennas_rx
|
|
|
|
|
if (LOG_DUMPFLAG(PRACH)) {
|
|
|
|
|
if (aa == 0)
|
|
|
|
|
LOG_M("prach_rxF_comp0.m","prach_rxF_comp0", prachF, 1024, 1, 1);
|
|
|
|
|
if (aa == 1)
|
|
|
|
|
LOG_M("prach_rxF_comp1.m","prach_rxF_comp1", prachF, 1024, 1, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // antennas_rx
|
|
|
|
|
|
|
|
|
|
// Normalization of energy over ifft and receive antennas
|
|
|
|
|
if (N_ZC == 839) {
|
|
|
|
|
log2_ifft_size = 10;
|
|
|
|
|
for (i=0;i<1024;i++)
|
|
|
|
|
for (int i = 0; i < 1024; i++)
|
|
|
|
|
prach_ifft[i] = (prach_ifft[i]>>log2_ifft_size)/nb_rx;
|
|
|
|
|
} else {
|
|
|
|
|
log2_ifft_size = 8;
|
|
|
|
|
for (i=0;i<256;i++)
|
|
|
|
|
for (int i = 0; i < 256; i++)
|
|
|
|
|
prach_ifft[i] = (prach_ifft[i]>>log2_ifft_size)/nb_rx;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -665,14 +665,14 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
|
|
|
|
|
|
|
|
|
preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<<log2_ifft_size)/N_ZC));
|
|
|
|
|
|
|
|
|
|
for (i=0; i<NCS2; i++) {
|
|
|
|
|
for (int i = 0; i < NCS2; i++) {
|
|
|
|
|
lev = (int32_t)prach_ifft[(preamble_shift2+i)];
|
|
|
|
|
levdB = dB_fixed_times10(lev);
|
|
|
|
|
if (levdB>*max_preamble_energy) {
|
|
|
|
|
LOG_D(PHY,"preamble_index %d, delay %d en %d dB > %d dB\n",preamble_index,i,levdB,*max_preamble_energy);
|
|
|
|
|
*max_preamble_energy = levdB;
|
|
|
|
|
*max_preamble_delay = i; // Note: This has to be normalized to the 30.72 Ms/s sampling rate
|
|
|
|
|
*max_preamble = preamble_index;
|
|
|
|
|
*max_preamble_energy = levdB;
|
|
|
|
|
*max_preamble_delay = i; // Note: This has to be normalized to the 30.72 Ms/s sampling rate
|
|
|
|
|
*max_preamble = preamble_index;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}// preamble_index
|
|
|
|
@@ -695,9 +695,11 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
|
|
|
|
// max_preamble_delay * ( (2048/2^mu*(fs/30.72M)) / 256 ) / fs = TA * 16 * 64 / 2^mu * Tc
|
|
|
|
|
uint16_t *TA = max_preamble_delay;
|
|
|
|
|
int mu = fp->numerology_index;
|
|
|
|
|
if (cfg->prach_sequence_length.value==0) {
|
|
|
|
|
if (prach_fmt == 0 || prach_fmt == 1 || prach_fmt == 2) *TA = *TA*3*(1<<mu)/2;
|
|
|
|
|
else if (prach_fmt == 3) *TA = *TA*3*(1<<mu)/8;
|
|
|
|
|
if (cfg->prach_sequence_length.value == 0) {
|
|
|
|
|
if (prach_fmt == 0 || prach_fmt == 1 || prach_fmt == 2)
|
|
|
|
|
*TA = *TA * 3 * (1 << mu) / 2;
|
|
|
|
|
else if (prach_fmt == 3)
|
|
|
|
|
*TA = *TA * 3 * (1 << mu) / 8;
|
|
|
|
|
}
|
|
|
|
|
else *TA = *TA/2;
|
|
|
|
|
|
|
|
|
@@ -705,19 +707,18 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
|
|
|
|
if (LOG_DUMPFLAG(PRACH)) {
|
|
|
|
|
//int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
|
|
|
|
// if (en>60) {
|
|
|
|
|
int k = (12*n_ra_prb) - 6*fp->N_RB_UL;
|
|
|
|
|
|
|
|
|
|
if (k<0) k+=fp->ofdm_symbol_size;
|
|
|
|
|
|
|
|
|
|
int k = (12 * n_ra_prb) - 6 * fp->N_RB_UL;
|
|
|
|
|
if (k < 0)
|
|
|
|
|
k += fp->ofdm_symbol_size;
|
|
|
|
|
|
|
|
|
|
k*=12;
|
|
|
|
|
k+=13;
|
|
|
|
|
k*=2;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LOG_M("rxsigF.m","prach_rxF",&rxsigF[0][0],12288,1,1);
|
|
|
|
|
LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
|
|
|
|
|
LOG_M("Xu.m","xu",Xu,N_ZC,1,1);
|
|
|
|
|
LOG_M("prach_ifft0.m","prach_t0",prach_ifft,1024,1,1);
|
|
|
|
|
LOG_M("rxsigF.m","prach_rxF", &rxsigF[0][0], 12288, 1, 1);
|
|
|
|
|
LOG_M("prach_rxF_comp0.m","prach_rxF_comp0", prachF, 1024, 1, 1);
|
|
|
|
|
LOG_M("Xu.m","xu", Xu, N_ZC, 1, 1);
|
|
|
|
|
LOG_M("prach_ifft0.m","prach_t0", prach_ifft, 1024, 1, 1);
|
|
|
|
|
// }
|
|
|
|
|
} /* LOG_DUMPFLAG(PRACH) */
|
|
|
|
|
stop_meas(&gNB->rx_prach);
|
|
|
|
|