Merge remote-tracking branch 'origin/fix-develop-segvs' into integration_2022_wk15
This commit is contained in:
@@ -313,11 +313,26 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
|
||||
}
|
||||
|
||||
// DLSCH
|
||||
for (gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++) {
|
||||
for (gNB_id = 0; gNB_id < ue->n_connected_gNB+1; gNB_id++) {
|
||||
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
|
||||
ue->pdsch_vars[th_id][gNB_id] = (NR_UE_PDSCH *)malloc16_clear(sizeof(NR_UE_PDSCH));
|
||||
}
|
||||
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
|
||||
phy_init_nr_ue_PDSCH( ue->pdsch_vars[th_id][gNB_id], fp );
|
||||
}
|
||||
|
||||
int nb_codewords = NR_MAX_NB_LAYERS > 4 ? 2 : 1;
|
||||
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
|
||||
for (i=0; i<nb_codewords; i++) {
|
||||
ue->pdsch_vars[th_id][gNB_id]->llr[i] = (int16_t *)malloc16_clear( (8*(3*8*8448))*sizeof(int16_t) );//Q_m = 8 bits/Sym, Code_Rate=3, Number of Segments =8, Circular Buffer K_cb = 8448
|
||||
}
|
||||
for (i=0; i<NR_MAX_NB_LAYERS; i++) {
|
||||
ue->pdsch_vars[th_id][gNB_id]->layer_llr[i] = (int16_t *)malloc16_clear( (8*(3*8*8448))*sizeof(int16_t) );//Q_m = 8 bits/Sym, Code_Rate=3, Number of Segments =8, Circular Buffer K_cb = 8448
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++) {
|
||||
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
|
||||
ue->pdcch_vars[th_id][gNB_id] = (NR_UE_PDCCH *)malloc16_clear(sizeof(NR_UE_PDCCH));
|
||||
}
|
||||
@@ -344,21 +359,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
|
||||
ue->nr_srs_info->srs_estimated_channel_time_shifted[i] = (int32_t *) malloc16_clear(fp->ofdm_symbol_size*MAX_NUM_NR_SRS_SYMBOLS*sizeof(int32_t));
|
||||
}
|
||||
|
||||
|
||||
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
|
||||
phy_init_nr_ue_PDSCH( ue->pdsch_vars[th_id][gNB_id], fp );
|
||||
}
|
||||
|
||||
int nb_codewords = NR_MAX_NB_LAYERS > 4 ? 2 : 1;
|
||||
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
|
||||
for (i=0; i<nb_codewords; i++) {
|
||||
ue->pdsch_vars[th_id][gNB_id]->llr[i] = (int16_t *)malloc16_clear( (8*(3*8*8448))*sizeof(int16_t) );//Q_m = 8 bits/Sym, Code_Rate=3, Number of Segments =8, Circular Buffer K_cb = 8448
|
||||
}
|
||||
for (i=0; i<NR_MAX_NB_LAYERS; i++) {
|
||||
ue->pdsch_vars[th_id][gNB_id]->layer_llr[i] = (int16_t *)malloc16_clear( (8*(3*8*8448))*sizeof(int16_t) );//Q_m = 8 bits/Sym, Code_Rate=3, Number of Segments =8, Circular Buffer K_cb = 8448
|
||||
}
|
||||
}
|
||||
|
||||
// 100 PRBs * 12 REs/PRB * 4 PDCCH SYMBOLS * 2 LLRs/RE
|
||||
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
|
||||
ue->pdcch_vars[th_id][gNB_id]->llr = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
|
||||
@@ -471,16 +471,18 @@ void term_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
|
||||
}
|
||||
free_and_zero(ue->nr_gold_pdsch[0]);
|
||||
|
||||
for (int gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++) {
|
||||
for (int gNB_id = 0; gNB_id < ue->n_connected_gNB+1; gNB_id++) {
|
||||
|
||||
// PDSCH
|
||||
for (int th_id = 0; th_id < RX_NB_TH_MAX; th_id++) {
|
||||
|
||||
free_and_zero(ue->pdsch_vars[th_id][gNB_id]->llr_shifts);
|
||||
free_and_zero(ue->pdsch_vars[th_id][gNB_id]->llr128_2ndstream);
|
||||
phy_term_nr_ue__PDSCH(ue->pdsch_vars[th_id][gNB_id], fp);
|
||||
free_and_zero(ue->pdsch_vars[th_id][gNB_id]);
|
||||
}
|
||||
}
|
||||
|
||||
for (int gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++) {
|
||||
|
||||
for (int th_id = 0; th_id < RX_NB_TH_MAX; th_id++) {
|
||||
for (int i = 0; i < fp->nb_antennas_rx; i++) {
|
||||
|
||||
@@ -155,8 +155,6 @@ typedef struct {
|
||||
uint8_t h[MAX_NUM_CHANNEL_BITS];
|
||||
/// Scrambled "b"-sequences (for definition see 36-211 V8.6 2009-03, p.14)
|
||||
uint8_t b_tilde[MAX_NUM_CHANNEL_BITS];
|
||||
/// Modulated "d"-sequences (for definition see 36-211 V8.6 2009-03, p.14)
|
||||
int32_t d[MAX_NUM_RE];
|
||||
/// Transform-coded "z"-sequences (for definition see 36-211 V8.6 2009-03, p.14-15)
|
||||
int32_t z[MAX_NUM_RE];
|
||||
/// "q" sequences for CQI/PMI (for definition see 36-212 V8.6 2009-03, p.27)
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
//#define DEBUG_ULSCH_MODULATION
|
||||
|
||||
void dft_lte(int32_t *z,int32_t *d, int32_t Msc_PUSCH, uint8_t Nsymb)
|
||||
void dft_lte(int32_t *z,struct complex16 *input, int32_t Msc_PUSCH, uint8_t Nsymb)
|
||||
{
|
||||
|
||||
#if defined(__x86_64__) || defined(__i386__)
|
||||
@@ -66,7 +66,7 @@ void dft_lte(int32_t *z,int32_t *d, int32_t Msc_PUSCH, uint8_t Nsymb)
|
||||
#endif
|
||||
// printf("Doing lte_dft for Msc_PUSCH %d\n",Msc_PUSCH);
|
||||
|
||||
d0 = (uint32_t *)d;
|
||||
d0 = (uint32_t *)input;
|
||||
d1 = d0+Msc_PUSCH;
|
||||
d2 = d1+Msc_PUSCH;
|
||||
d3 = d2+Msc_PUSCH;
|
||||
@@ -476,7 +476,8 @@ void ulsch_modulation(int32_t **txdataF,
|
||||
// Modulation
|
||||
|
||||
ulsch_Msymb = G/Q_m;
|
||||
|
||||
/// Modulated "d"-sequences (for definition see 36-211 V8.6 2009-03, p.14)
|
||||
struct complex16 d[MAX_NUM_RE] __attribute__((aligned(32)));
|
||||
if(ulsch->cooperation_flag == 2)
|
||||
// For Distributed Alamouti Scheme in Collabrative Communication
|
||||
{
|
||||
@@ -488,14 +489,14 @@ void ulsch_modulation(int32_t **txdataF,
|
||||
|
||||
|
||||
//UE1, -x1*
|
||||
((int16_t*)&ulsch->d[i])[0] = (ulsch->b_tilde[j] == 1) ? (gain_lin_QPSK) : -gain_lin_QPSK;
|
||||
((int16_t*)&ulsch->d[i])[1] = (ulsch->b_tilde[j+1] == 1)? (-gain_lin_QPSK) : gain_lin_QPSK;
|
||||
d[i].r = (ulsch->b_tilde[j] == 1) ? (gain_lin_QPSK) : -gain_lin_QPSK;
|
||||
d[i].i = (ulsch->b_tilde[j+1] == 1)? (-gain_lin_QPSK) : gain_lin_QPSK;
|
||||
// if (i<Msc_PUSCH)
|
||||
// printf("input %d (%p): %d,%d\n", i,&ulsch->d[i],((int16_t*)&ulsch->d[i])[0],((int16_t*)&ulsch->d[i])[1]);
|
||||
|
||||
// UE1, x0*
|
||||
((int16_t*)&ulsch->d[i+1])[0] = (ulsch->b_tilde[j-2] == 1) ? (-gain_lin_QPSK) : gain_lin_QPSK;
|
||||
((int16_t*)&ulsch->d[i+1])[1] = (ulsch->b_tilde[j-1] == 1)? (gain_lin_QPSK) : -gain_lin_QPSK;
|
||||
d[i+1].r = (ulsch->b_tilde[j-2] == 1) ? (-gain_lin_QPSK) : gain_lin_QPSK;
|
||||
d[i+1].i = (ulsch->b_tilde[j-1] == 1)? (gain_lin_QPSK) : -gain_lin_QPSK;
|
||||
|
||||
break;
|
||||
|
||||
@@ -521,8 +522,8 @@ void ulsch_modulation(int32_t **txdataF,
|
||||
qam16_table_offset_im+=1;
|
||||
|
||||
|
||||
((int16_t*)&ulsch->d[i])[0]=-(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15);
|
||||
((int16_t*)&ulsch->d[i])[1]=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15);
|
||||
d[i].r =-(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15);
|
||||
d[i].i =(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15);
|
||||
|
||||
//UE1,x0*
|
||||
qam16_table_offset_re = 0;
|
||||
@@ -544,8 +545,8 @@ void ulsch_modulation(int32_t **txdataF,
|
||||
|
||||
// ((int16_t*)&ulsch->d[i+1])[0]=-(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15);
|
||||
// ((int16_t*)&ulsch->d[i+1])[1]=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15);
|
||||
((int16_t*)&ulsch->d[i+1])[0]=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15);
|
||||
((int16_t*)&ulsch->d[i+1])[1]=-(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15);
|
||||
d[i+1].r=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15);
|
||||
d[i+1].i=-(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15);
|
||||
|
||||
|
||||
break;
|
||||
@@ -578,8 +579,8 @@ void ulsch_modulation(int32_t **txdataF,
|
||||
qam64_table_offset_im+=1;
|
||||
|
||||
|
||||
((int16_t*)&ulsch->d[i])[0]=-(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15);
|
||||
((int16_t*)&ulsch->d[i])[1]=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15);
|
||||
d[i].r=-(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15);
|
||||
d[i].i=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15);
|
||||
|
||||
//UE1,x0*
|
||||
qam64_table_offset_re = 0;
|
||||
@@ -605,8 +606,8 @@ void ulsch_modulation(int32_t **txdataF,
|
||||
qam64_table_offset_im+=1;
|
||||
|
||||
|
||||
((int16_t*)&ulsch->d[i+1])[0]=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15);
|
||||
((int16_t*)&ulsch->d[i+1])[1]=-(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15);
|
||||
d[i+1].r=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15);
|
||||
d[i+1].i=-(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15);
|
||||
|
||||
break;
|
||||
|
||||
@@ -621,8 +622,8 @@ void ulsch_modulation(int32_t **txdataF,
|
||||
case 2:
|
||||
// TODO: this has to be updated!!!
|
||||
|
||||
((int16_t*)&ulsch->d[i])[0] = (ulsch->b_tilde[j] == 1) ? (-gain_lin_QPSK) : gain_lin_QPSK;
|
||||
((int16_t*)&ulsch->d[i])[1] = (ulsch->b_tilde[j+1] == 1)? (-gain_lin_QPSK) : gain_lin_QPSK;
|
||||
d[i].r = (ulsch->b_tilde[j] == 1) ? (-gain_lin_QPSK) : gain_lin_QPSK;
|
||||
d[i].i = (ulsch->b_tilde[j+1] == 1)? (-gain_lin_QPSK) : gain_lin_QPSK;
|
||||
// if (i<Msc_PUSCH)
|
||||
// printf("input %d/%d Msc_PUSCH %d (%p): %d,%d\n", i,Msymb,Msc_PUSCH,&ulsch->d[i],((int16_t*)&ulsch->d[i])[0],((int16_t*)&ulsch->d[i])[1]);
|
||||
|
||||
@@ -646,8 +647,8 @@ void ulsch_modulation(int32_t **txdataF,
|
||||
qam16_table_offset_im+=1;
|
||||
|
||||
|
||||
((int16_t*)&ulsch->d[i])[0]=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15);
|
||||
((int16_t*)&ulsch->d[i])[1]=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15);
|
||||
d[i].r=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15);
|
||||
d[i].i=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15);
|
||||
// printf("input(16qam) %d (%p): %d,%d\n", i,&ulsch->d[i],((int16_t*)&ulsch->d[i])[0],((int16_t*)&ulsch->d[i])[1]);
|
||||
break;
|
||||
|
||||
@@ -676,8 +677,8 @@ void ulsch_modulation(int32_t **txdataF,
|
||||
qam64_table_offset_im+=1;
|
||||
|
||||
|
||||
((int16_t*)&ulsch->d[i])[0]=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15);
|
||||
((int16_t*)&ulsch->d[i])[1]=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15);
|
||||
d[i].r=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15);
|
||||
d[i].i=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15);
|
||||
|
||||
break;
|
||||
|
||||
@@ -688,7 +689,7 @@ void ulsch_modulation(int32_t **txdataF,
|
||||
|
||||
// Transform Precoding
|
||||
|
||||
dft_lte(ulsch->z,ulsch->d,Msc_PUSCH,ulsch->Nsymb_pusch);
|
||||
dft_lte(ulsch->z,d,Msc_PUSCH,ulsch->Nsymb_pusch);
|
||||
|
||||
DevAssert(txdataF);
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ int slot_fep(PHY_VARS_UE *ue,
|
||||
}
|
||||
|
||||
// subframe_offset_F = frame_parms->ofdm_symbol_size * frame_parms->symbols_per_tti * (Ns>>1);
|
||||
|
||||
|
||||
if (l<0 || l>=7-frame_parms->Ncp) {
|
||||
printf("slot_fep: l must be between 0 and %d\n",7-frame_parms->Ncp);
|
||||
return(-1);
|
||||
|
||||
@@ -103,7 +103,6 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
|
||||
uint16_t nb_re = ((12*rel15->NrOfSymbols)-nb_re_dmrs*dmrs_len-xOverhead)*rel15->rbSize*rel15->nrOfLayers;
|
||||
uint8_t Qm = rel15->qamModOrder[0];
|
||||
uint32_t encoded_length = nb_re*Qm;
|
||||
uint32_t scrambled_output[rel15->NrOfCodewords][(encoded_length>>5)+1];
|
||||
int16_t mod_dmrs[n_dmrs<<1] __attribute__ ((aligned(16)));
|
||||
|
||||
/* PTRS */
|
||||
@@ -152,63 +151,61 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
|
||||
printf("\n");
|
||||
#endif
|
||||
|
||||
/// scrambling
|
||||
start_meas(dlsch_scrambling_stats);
|
||||
for (int q=0; q<rel15->NrOfCodewords; q++) {
|
||||
memset((void*)scrambled_output[q], 0, ((encoded_length>>5)+1)*sizeof(uint32_t));
|
||||
/// scrambling
|
||||
start_meas(dlsch_scrambling_stats);
|
||||
uint32_t scrambled_output[(encoded_length>>5)+4]; // modulator acces by 4 bytes in some cases
|
||||
memset(scrambled_output, 0, sizeof(scrambled_output));
|
||||
if ( encoded_length > rel15->rbSize * NR_SYMBOLS_PER_SLOT * NR_NB_SC_PER_RB * Qm * rel15->nrOfLayers) abort();
|
||||
nr_pdsch_codeword_scrambling(output,
|
||||
encoded_length,
|
||||
q,
|
||||
rel15->dataScramblingId,
|
||||
rel15->rnti,
|
||||
scrambled_output[q]);
|
||||
}
|
||||
|
||||
stop_meas(dlsch_scrambling_stats);
|
||||
scrambled_output);
|
||||
#ifdef DEBUG_DLSCH
|
||||
printf("PDSCH scrambling:\n");
|
||||
for (int i=0; i<encoded_length>>8; i++) {
|
||||
for (int j=0; j<8; j++)
|
||||
printf("0x%08x\t", scrambled_output[0][(i<<3)+j]);
|
||||
printf("\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
/// Modulation
|
||||
start_meas(dlsch_modulation_stats);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PDSCH_MODULATION, 1);
|
||||
for (int q=0; q<rel15->NrOfCodewords; q++)
|
||||
nr_modulation(scrambled_output[q],
|
||||
encoded_length,
|
||||
Qm,
|
||||
mod_symbs[q]);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PDSCH_MODULATION, 0);
|
||||
stop_meas(dlsch_modulation_stats);
|
||||
#ifdef DEBUG_DLSCH
|
||||
printf("PDSCH Modulation: Qm %d(%d)\n", Qm, nb_re);
|
||||
for (int i=0; i<nb_re>>3; i++) {
|
||||
for (int j=0; j<8; j++) {
|
||||
printf("%d %d\t", mod_symbs[0][((i<<3)+j)<<1], mod_symbs[0][(((i<<3)+j)<<1)+1]);
|
||||
printf("PDSCH scrambling:\n");
|
||||
for (int i=0; i<encoded_length>>8; i++) {
|
||||
for (int j=0; j<8; j++)
|
||||
printf("0x%08x\t", scrambled_output[(i<<3)+j]);
|
||||
printf("\n");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
#endif
|
||||
stop_meas(dlsch_scrambling_stats);
|
||||
/// Modulation
|
||||
start_meas(dlsch_modulation_stats);
|
||||
nr_modulation(scrambled_output,
|
||||
encoded_length,
|
||||
Qm,
|
||||
mod_symbs[q]);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PDSCH_MODULATION, 0);
|
||||
stop_meas(dlsch_modulation_stats);
|
||||
#ifdef DEBUG_DLSCH
|
||||
printf("PDSCH Modulation: Qm %d(%d)\n", Qm, nb_re);
|
||||
for (int i=0; i<nb_re>>3; i++) {
|
||||
for (int j=0; j<8; j++) {
|
||||
printf("%d %d\t", mod_symbs[0][((i<<3)+j)<<1], mod_symbs[0][(((i<<3)+j)<<1)+1]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
start_meas(&gNB->dlsch_layer_mapping_stats);
|
||||
/// Layer mapping
|
||||
nr_layer_mapping(mod_symbs,
|
||||
rel15->nrOfLayers,
|
||||
nb_re,
|
||||
tx_layers);
|
||||
rel15->nrOfLayers,
|
||||
nb_re,
|
||||
tx_layers);
|
||||
#ifdef DEBUG_DLSCH
|
||||
printf("Layer mapping (%d layers):\n", rel15->nrOfLayers);
|
||||
for (int l=0; l<rel15->nrOfLayers; l++)
|
||||
for (int i=0; i<(nb_re/rel15->nrOfLayers)>>3; i++) {
|
||||
printf("layer %d, Re %d..%d : ",l,i<<3,(i<<3)+7);
|
||||
for (int j=0; j<8; j++) {
|
||||
printf("l%d %d\t", tx_layers[l][((i<<3)+j)<<1], tx_layers[l][(((i<<3)+j)<<1)+1]);
|
||||
}
|
||||
printf("\n");
|
||||
printf("layer %d, Re %d..%d : ",l,i<<3,(i<<3)+7);
|
||||
for (int j=0; j<8; j++) {
|
||||
printf("l%d %d\t", tx_layers[l][((i<<3)+j)<<1], tx_layers[l][(((i<<3)+j)<<1)+1]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -227,7 +224,7 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
|
||||
|
||||
#ifdef DEBUG_DLSCH_MAPPING
|
||||
printf("PDSCH resource mapping started (start SC %d\tstart symbol %d\tN_PRB %d\tnb_re %d,nb_layers %d)\n",
|
||||
start_sc, rel15->StartSymbolIndex, rel15->rbSize, nb_re,rel15->nrOfLayers);
|
||||
start_sc, rel15->StartSymbolIndex, rel15->rbSize, nb_re,rel15->nrOfLayers);
|
||||
#endif
|
||||
|
||||
start_meas(&gNB->dlsch_resource_mapping_stats);
|
||||
|
||||
@@ -558,6 +558,9 @@ int rx_sss_nr(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int32_t *tot_metric,
|
||||
}
|
||||
//#endif
|
||||
|
||||
if (Nid1==N_ID_1_NUMBER)
|
||||
return -1;
|
||||
|
||||
int re = 0;
|
||||
int im = 0;
|
||||
d = (int16_t *)&d_sss[Nid2][Nid1];
|
||||
|
||||
@@ -7082,43 +7082,40 @@ static inline void dft12f(simd_q15_t *x0,
|
||||
|
||||
simd_q15_t tmp_dft12[12];
|
||||
|
||||
simd_q15_t *tmp_dft12_ptr = &tmp_dft12[0];
|
||||
|
||||
// msg("dft12\n");
|
||||
|
||||
bfly4_tw1(x0,
|
||||
x3,
|
||||
x6,
|
||||
x9,
|
||||
tmp_dft12_ptr,
|
||||
tmp_dft12_ptr+3,
|
||||
tmp_dft12_ptr+6,
|
||||
tmp_dft12_ptr+9);
|
||||
|
||||
tmp_dft12,
|
||||
tmp_dft12+3,
|
||||
tmp_dft12+6,
|
||||
tmp_dft12+9);
|
||||
|
||||
bfly4_tw1(x1,
|
||||
x4,
|
||||
x7,
|
||||
x10,
|
||||
tmp_dft12_ptr+1,
|
||||
tmp_dft12_ptr+4,
|
||||
tmp_dft12_ptr+7,
|
||||
tmp_dft12_ptr+10);
|
||||
tmp_dft12+1,
|
||||
tmp_dft12+4,
|
||||
tmp_dft12+7,
|
||||
tmp_dft12+10);
|
||||
|
||||
|
||||
bfly4_tw1(x2,
|
||||
x5,
|
||||
x8,
|
||||
x11,
|
||||
tmp_dft12_ptr+2,
|
||||
tmp_dft12_ptr+5,
|
||||
tmp_dft12_ptr+8,
|
||||
tmp_dft12_ptr+11);
|
||||
tmp_dft12+2,
|
||||
tmp_dft12+5,
|
||||
tmp_dft12+8,
|
||||
tmp_dft12+11);
|
||||
|
||||
// k2=0;
|
||||
bfly3_tw1(tmp_dft12_ptr,
|
||||
tmp_dft12_ptr+1,
|
||||
tmp_dft12_ptr+2,
|
||||
bfly3_tw1(tmp_dft12,
|
||||
tmp_dft12+1,
|
||||
tmp_dft12+2,
|
||||
y0,
|
||||
y4,
|
||||
y8);
|
||||
@@ -7126,9 +7123,9 @@ static inline void dft12f(simd_q15_t *x0,
|
||||
|
||||
|
||||
// k2=1;
|
||||
bfly3(tmp_dft12_ptr+3,
|
||||
tmp_dft12_ptr+4,
|
||||
tmp_dft12_ptr+5,
|
||||
bfly3(tmp_dft12+3,
|
||||
tmp_dft12+4,
|
||||
tmp_dft12+5,
|
||||
y1,
|
||||
y5,
|
||||
y9,
|
||||
@@ -7138,9 +7135,9 @@ static inline void dft12f(simd_q15_t *x0,
|
||||
|
||||
|
||||
// k2=2;
|
||||
bfly3(tmp_dft12_ptr+6,
|
||||
tmp_dft12_ptr+7,
|
||||
tmp_dft12_ptr+8,
|
||||
bfly3(tmp_dft12+6,
|
||||
tmp_dft12+7,
|
||||
tmp_dft12+8,
|
||||
y2,
|
||||
y6,
|
||||
y10,
|
||||
@@ -7148,9 +7145,9 @@ static inline void dft12f(simd_q15_t *x0,
|
||||
W4_12);
|
||||
|
||||
// k2=3;
|
||||
bfly3(tmp_dft12_ptr+9,
|
||||
tmp_dft12_ptr+10,
|
||||
tmp_dft12_ptr+11,
|
||||
bfly3(tmp_dft12+9,
|
||||
tmp_dft12+10,
|
||||
tmp_dft12+11,
|
||||
y3,
|
||||
y7,
|
||||
y11,
|
||||
@@ -10606,15 +10603,43 @@ int dfts_autoinit(void)
|
||||
|
||||
#ifndef MR_MAIN
|
||||
|
||||
void dft(uint8_t sizeidx, int16_t *sigF,int16_t *sig,unsigned char scale_flag){
|
||||
AssertFatal((sizeidx>=0 && sizeidx<(int)DFT_SIZE_IDXTABLESIZE),"Invalid dft size index %i\n",sizeidx);
|
||||
dft_ftab[sizeidx](sigF,sig,scale_flag);
|
||||
void dft(uint8_t sizeidx, int16_t *input,int16_t *output,unsigned char scale_flag){
|
||||
AssertFatal((sizeidx >= 0 && sizeidx<DFT_SIZE_IDXTABLESIZE),"Invalid dft size index %i\n",sizeidx);
|
||||
int algn=0xF;
|
||||
#ifdef __AVX2__
|
||||
if ( (dft_ftab[sizeidx].size%3) != 0 ) // there is no AVX2 implementation for multiples of 3 DFTs
|
||||
algn=0x1F;
|
||||
#endif
|
||||
AssertFatal(((intptr_t)output&algn)==0,"Buffers should be aligned %p",output);
|
||||
if (((intptr_t)input)&algn) {
|
||||
LOG_D(PHY, "DFT called with input not aligned, add a memcpy, size %d\n", sizeidx);
|
||||
int sz=dft_ftab[sizeidx].size;
|
||||
if (sizeidx==DFT_12) // This case does 8 DFTs in //
|
||||
sz*=8;
|
||||
int16_t tmp[sz*2] __attribute__ ((aligned(32))); // input and output are not in right type (int16_t instead of c16_t)
|
||||
memcpy(tmp, input, sizeof tmp);
|
||||
dft_ftab[sizeidx].func(tmp,output,scale_flag);
|
||||
} else
|
||||
dft_ftab[sizeidx].func(input,output,scale_flag);
|
||||
};
|
||||
|
||||
void idft(uint8_t sizeidx, int16_t *sigF,int16_t *sig,unsigned char scale_flag){
|
||||
AssertFatal((sizeidx>=0 && sizeidx<(int)IDFT_SIZE_IDXTABLESIZE),"Invalid idft size index %i\n",sizeidx);
|
||||
idft_ftab[sizeidx](sigF,sig,scale_flag);
|
||||
void idft(uint8_t sizeidx, int16_t *input,int16_t *output,unsigned char scale_flag){
|
||||
AssertFatal((sizeidx>=0 && sizeidx<DFT_SIZE_IDXTABLESIZE),"Invalid idft size index %i\n",sizeidx);
|
||||
int algn=0xF;
|
||||
#ifdef __AVX2__
|
||||
algn=0x1F;
|
||||
#endif
|
||||
AssertFatal( ((intptr_t)output&algn)==0,"Buffers should be 16 bytes aligned %p",output);
|
||||
if (((intptr_t)input)&algn ) {
|
||||
LOG_D(PHY, "DFT called with input not aligned, add a memcpy\n");
|
||||
int sz=idft_ftab[sizeidx].size;
|
||||
int16_t tmp[sz*2] __attribute__ ((aligned(32))); // input and output are not in right type (int16_t instead of c16_t)
|
||||
memcpy(tmp, input, sizeof tmp);
|
||||
dft_ftab[sizeidx].func(tmp,output,scale_flag);
|
||||
} else
|
||||
idft_ftab[sizeidx].func(input,output,scale_flag);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/*---------------------------------------------------------------------------------------*/
|
||||
|
||||
+133
-136
@@ -181,159 +181,156 @@ This function performs optimized fixed-point radix-2 FFT/IFFT.
|
||||
);
|
||||
*/
|
||||
|
||||
#define FOREACH_DFTSZ(SZ_DEF) \
|
||||
SZ_DEF(12) \
|
||||
SZ_DEF(24) \
|
||||
SZ_DEF(36) \
|
||||
SZ_DEF(48) \
|
||||
SZ_DEF(60) \
|
||||
SZ_DEF(64) \
|
||||
SZ_DEF(72) \
|
||||
SZ_DEF(96) \
|
||||
SZ_DEF(108) \
|
||||
SZ_DEF(120) \
|
||||
SZ_DEF(128) \
|
||||
SZ_DEF(144) \
|
||||
SZ_DEF(180) \
|
||||
SZ_DEF(192) \
|
||||
SZ_DEF(216) \
|
||||
SZ_DEF(240) \
|
||||
SZ_DEF(256) \
|
||||
SZ_DEF(288) \
|
||||
SZ_DEF(300) \
|
||||
SZ_DEF(324) \
|
||||
SZ_DEF(360) \
|
||||
SZ_DEF(384) \
|
||||
SZ_DEF(432) \
|
||||
SZ_DEF(480) \
|
||||
SZ_DEF(512) \
|
||||
SZ_DEF(540) \
|
||||
SZ_DEF(576) \
|
||||
SZ_DEF(600) \
|
||||
SZ_DEF(648) \
|
||||
SZ_DEF(720) \
|
||||
SZ_DEF(768) \
|
||||
SZ_DEF(864) \
|
||||
SZ_DEF(900) \
|
||||
SZ_DEF(960) \
|
||||
SZ_DEF(972) \
|
||||
SZ_DEF(1024) \
|
||||
SZ_DEF(1080) \
|
||||
SZ_DEF(1152) \
|
||||
SZ_DEF(1200) \
|
||||
SZ_DEF(1296) \
|
||||
SZ_DEF(1440) \
|
||||
SZ_DEF(1500) \
|
||||
SZ_DEF(1536) \
|
||||
SZ_DEF(1620) \
|
||||
SZ_DEF(1728) \
|
||||
SZ_DEF(1800) \
|
||||
SZ_DEF(1920) \
|
||||
SZ_DEF(1944) \
|
||||
SZ_DEF(2048) \
|
||||
SZ_DEF(2160) \
|
||||
SZ_DEF(2304) \
|
||||
SZ_DEF(2400) \
|
||||
SZ_DEF(2592) \
|
||||
SZ_DEF(2700) \
|
||||
SZ_DEF(2880) \
|
||||
SZ_DEF(2916) \
|
||||
SZ_DEF(3000) \
|
||||
SZ_DEF(3072) \
|
||||
SZ_DEF(3240) \
|
||||
SZ_DEF(4096) \
|
||||
SZ_DEF(6144) \
|
||||
SZ_DEF(8192) \
|
||||
SZ_DEF(9216) \
|
||||
SZ_DEF(12288) \
|
||||
SZ_DEF(18432) \
|
||||
SZ_DEF(24576) \
|
||||
SZ_DEF(36864) \
|
||||
SZ_DEF(49152) \
|
||||
SZ_DEF(73728) \
|
||||
SZ_DEF(98304)
|
||||
|
||||
#define FOREACH_IDFTSZ(SZ_DEF)\
|
||||
SZ_DEF(64) \
|
||||
SZ_DEF(128) \
|
||||
SZ_DEF(256) \
|
||||
SZ_DEF(512) \
|
||||
SZ_DEF(1024) \
|
||||
SZ_DEF(1536) \
|
||||
SZ_DEF(2048) \
|
||||
SZ_DEF(3072) \
|
||||
SZ_DEF(4096) \
|
||||
SZ_DEF(6144) \
|
||||
SZ_DEF(8192) \
|
||||
SZ_DEF(9216) \
|
||||
SZ_DEF(12288) \
|
||||
SZ_DEF(18432) \
|
||||
SZ_DEF(24576) \
|
||||
SZ_DEF(36864) \
|
||||
SZ_DEF(49152) \
|
||||
SZ_DEF(73728) \
|
||||
SZ_DEF(98304)
|
||||
|
||||
#ifdef OAIDFTS_MAIN
|
||||
typedef void(*adftfunc_t)(int16_t *sigF,int16_t *sig,unsigned char scale_flag);
|
||||
typedef void(*aidftfunc_t)(int16_t *sigF,int16_t *sig,unsigned char scale_flag);
|
||||
typedef void(*adftfunc_t)(int16_t *sigF,int16_t *sig,unsigned char scale_flag);
|
||||
typedef void(*aidftfunc_t)(int16_t *sigF,int16_t *sig,unsigned char scale_flag);
|
||||
|
||||
void dft12(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft24(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft36(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft48(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft60(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft64(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft72(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft96(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft108(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft120(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft128(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft144(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft180(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft192(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft216(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft240(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft256(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft288(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft300(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft324(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft360(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft384(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft432(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft480(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft512(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft540(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft576(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft600(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft648(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft720(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft768(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft864(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft900(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft960(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft972(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft1024(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft1080(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft1152(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft1200(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft1296(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft1440(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft1500(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft1536(int16_t *sigF,int16_t *sig,uint8_t scale_flag);
|
||||
void dft1620(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft1728(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft1800(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft1920(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft1944(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft2048(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft2160(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft2304(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft2400(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft2592(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft2700(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft2880(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft2916(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft3000(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft3072(int16_t *sigF,int16_t *sig,uint8_t scale_flag);
|
||||
void dft3240(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft4096(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft6144(int16_t *sigF,int16_t *sig,uint8_t scale_flag);
|
||||
void dft8192(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft9216(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft12288(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft18432(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft24576(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft36864(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft49152(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft73728(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void dft98304(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
|
||||
|
||||
void idft64(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void idft128(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void idft256(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void idft512(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void idft1024(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void idft1536(int16_t *sigF,int16_t *sig,uint8_t scale_flag);
|
||||
void idft2048(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void idft3072(int16_t *sigF,int16_t *sig,uint8_t scale_flag);
|
||||
void idft4096(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void idft6144(int16_t *sigF,int16_t *sig,uint8_t scale_flag);
|
||||
void idft8192(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void idft9216(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
void idft12288(int16_t *sigF,int16_t *sig,uint8_t scale_flag);
|
||||
void idft18432(int16_t *sigF,int16_t *sig,uint8_t scale_flag);
|
||||
void idft24576(int16_t *sigF,int16_t *sig,uint8_t scale_flag);
|
||||
void idft36864(int16_t *sigF,int16_t *sig,uint8_t scale_flag);
|
||||
void idft49152(int16_t *sigF,int16_t *sig,uint8_t scale_flag);
|
||||
void idft73728(int16_t *sigF,int16_t *sig,uint8_t scale_flag);
|
||||
void idft98304(int16_t *sigF,int16_t *sig,uint8_t scale_flag);
|
||||
#define SZ_FUNC(Sz) void dft ## Sz(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
|
||||
FOREACH_DFTSZ(SZ_FUNC)
|
||||
|
||||
#define SZ_iFUNC(Sz) void idft ## Sz(int16_t *x,int16_t *y,uint8_t scale_flag);
|
||||
|
||||
FOREACH_IDFTSZ(SZ_iFUNC)
|
||||
|
||||
#else
|
||||
typedef void(*dftfunc_t)(uint8_t sizeidx,int16_t *sigF,int16_t *sig,unsigned char scale_flag);
|
||||
typedef void(*idftfunc_t)(uint8_t sizeidx,int16_t *sigF,int16_t *sig,unsigned char scale_flag);
|
||||
typedef void(*dftfunc_t)(uint8_t sizeidx,int16_t *sigF,int16_t *sig,unsigned char scale_flag);
|
||||
typedef void(*idftfunc_t)(uint8_t sizeidx,int16_t *sigF,int16_t *sig,unsigned char scale_flag);
|
||||
# ifdef OAIDFTS_LOADER
|
||||
dftfunc_t dft;
|
||||
idftfunc_t idft;
|
||||
dftfunc_t dft;
|
||||
idftfunc_t idft;
|
||||
# else
|
||||
extern dftfunc_t dft;
|
||||
extern idftfunc_t idft;
|
||||
extern int load_dftslib(void);
|
||||
extern dftfunc_t dft;
|
||||
extern idftfunc_t idft;
|
||||
extern int load_dftslib(void);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
typedef enum DFT_size_idx {
|
||||
DFT_12, DFT_24, DFT_36, DFT_48, DFT_60, DFT_72, DFT_96,
|
||||
DFT_108, DFT_120, DFT_128, DFT_144, DFT_180, DFT_192, DFT_216, DFT_240,
|
||||
DFT_256, DFT_288, DFT_300, DFT_324, DFT_360, DFT_384, DFT_432, DFT_480,
|
||||
DFT_512, DFT_540, DFT_576, DFT_600, DFT_648, DFT_720, DFT_768, DFT_864,
|
||||
DFT_900, DFT_960, DFT_972, DFT_1024, DFT_1080, DFT_1152, DFT_1200, DFT_1296,
|
||||
DFT_1440, DFT_1500, DFT_1536, DFT_1620, DFT_1728, DFT_1800, DFT_1920, DFT_1944,
|
||||
DFT_2048, DFT_2160, DFT_2304, DFT_2400, DFT_2592, DFT_2700, DFT_2880, DFT_2916,
|
||||
DFT_3000, DFT_3072, DFT_3240, DFT_4096, DFT_6144, DFT_8192, DFT_9216, DFT_12288,
|
||||
DFT_18432, DFT_24576, DFT_36864, DFT_49152, DFT_73728, DFT_98304,
|
||||
DFT_SIZE_IDXTABLESIZE
|
||||
} dft_size_idx_t;
|
||||
#define SZ_ENUM(Sz) DFT_ ## Sz,
|
||||
|
||||
#ifdef OAIDFTS_MAIN
|
||||
adftfunc_t dft_ftab[]={
|
||||
dft12, dft24, dft36, dft48, dft60, dft72, dft96,
|
||||
dft108, dft120, dft128, dft144, dft180, dft192, dft216, dft240,
|
||||
dft256, dft288, dft300, dft324, dft360, dft384, dft432, dft480,
|
||||
dft512, dft540, dft576, dft600, dft648, dft720, dft768, dft864,
|
||||
dft900, dft960, dft972, dft1024, dft1080, dft1152, dft1200, dft1296,
|
||||
dft1440, dft1500, dft1536, dft1620, dft1728, dft1800, dft1920, dft1944,
|
||||
dft2048, dft2160, dft2304, dft2400, dft2592, dft2700, dft2880, dft2916,
|
||||
dft3000, dft3072, dft3240, dft4096, dft6144, dft8192, dft9216, dft12288,
|
||||
dft18432, dft24576, dft36864, dft49152, dft73728, dft98304
|
||||
};
|
||||
#endif
|
||||
typedef enum dft_size_idx {
|
||||
FOREACH_DFTSZ(SZ_ENUM)
|
||||
DFT_SIZE_IDXTABLESIZE
|
||||
} dft_size_idx_t;
|
||||
|
||||
#define SZ_iENUM(Sz) IDFT_ ## Sz,
|
||||
|
||||
typedef enum idft_size_idx {
|
||||
IDFT_128, IDFT_256, IDFT_512, IDFT_1024, IDFT_1536, IDFT_2048, IDFT_3072, IDFT_4096,
|
||||
IDFT_6144, IDFT_8192, IDFT_9216, IDFT_12288, IDFT_18432, IDFT_24576, IDFT_36864, IDFT_49152,
|
||||
IDFT_73728, IDFT_98304,
|
||||
IDFT_SIZE_IDXTABLESIZE
|
||||
} idft_size_idx_t;
|
||||
FOREACH_IDFTSZ(SZ_iENUM)
|
||||
IDFT_SIZE_IDXTABLESIZE
|
||||
} idft_size_idx_t;
|
||||
|
||||
#ifdef OAIDFTS_MAIN
|
||||
aidftfunc_t idft_ftab[]={
|
||||
idft128, idft256, idft512, idft1024, idft1536, idft2048, idft3072, idft4096,
|
||||
idft6144, idft8192, idft9216, idft12288, idft18432, idft24576, idft36864, idft49152,
|
||||
idft73728, idft98304
|
||||
|
||||
#define SZ_PTR(Sz) {dft ## Sz,Sz},
|
||||
struct {
|
||||
adftfunc_t func;
|
||||
int size;
|
||||
} dft_ftab[]= {
|
||||
FOREACH_DFTSZ(SZ_PTR)
|
||||
};
|
||||
|
||||
#define SZ_iPTR(Sz) {idft ## Sz,Sz},
|
||||
struct {
|
||||
adftfunc_t func;
|
||||
int size;
|
||||
} idft_ftab[]= {
|
||||
FOREACH_IDFTSZ(SZ_iPTR)
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -387,7 +384,7 @@ int32_t add_real_vector64(int16_t *x,
|
||||
uint32_t N);
|
||||
|
||||
int32_t sub_real_vector64(int16_t *x,
|
||||
int16_t* y,
|
||||
int16_t *y,
|
||||
int16_t *z,
|
||||
uint32_t N);
|
||||
|
||||
@@ -444,7 +441,7 @@ int32_t signal_energy_amp_shift(int32_t *input, uint32_t length);
|
||||
/*!\fn int32_t signal_energy(int *,uint32_t);
|
||||
\brief Computes the signal energy per subcarrier
|
||||
*/
|
||||
int32_t subcarrier_energy(int32_t *,uint32_t, int32_t* subcarrier_energy, uint16_t rx_power_correction);
|
||||
int32_t subcarrier_energy(int32_t *,uint32_t, int32_t *subcarrier_energy, uint16_t rx_power_correction);
|
||||
#endif
|
||||
|
||||
/*!\fn int32_t signal_energy_nodc(int32_t *,uint32_t);
|
||||
|
||||
@@ -519,4 +519,7 @@ bool nr_find_nb_rb(uint16_t Qm,
|
||||
void nr_sr_reporting(int Mod_idP, frame_t frameP, sub_frame_t slotP);
|
||||
|
||||
void dump_mac_stats(gNB_MAC_INST *gNB, char *output, int strlen, bool reset_rsrp);
|
||||
|
||||
void process_CellGroup(NR_CellGroupConfig_t *CellGroup, NR_UE_sched_ctrl_t *sched_ctrl);
|
||||
|
||||
#endif /*__LAYER2_NR_MAC_PROTO_H__*/
|
||||
|
||||
Reference in New Issue
Block a user