fix difficult to read code
This commit is contained in:
committed by
Robert Schmidt
parent
42c1679545
commit
a7e7d05da3
@@ -102,7 +102,7 @@ int lte_est_freq_offset(int **dl_ch_estimates,
|
||||
{
|
||||
|
||||
int ch_offset, omega, dl_ch_shift;
|
||||
struct complex16 omega_cpx;
|
||||
c16_t omega_cpx;
|
||||
double phase_offset;
|
||||
int freq_offset_est;
|
||||
unsigned char aa;
|
||||
@@ -142,8 +142,8 @@ int lte_est_freq_offset(int **dl_ch_estimates,
|
||||
// printf("Computing freq_offset\n");
|
||||
omega = dot_product(dl_ch,dl_ch_prev,(frame_parms->N_RB_DL/2 - 1)*12,dl_ch_shift);
|
||||
//omega = dot_product(dl_ch,dl_ch_prev,frame_parms->ofdm_symbol_size,15);
|
||||
omega_cpx.r = ((struct complex16*) &omega)->r;
|
||||
omega_cpx.i = ((struct complex16*) &omega)->i;
|
||||
omega_cpx.r = ((c16_t*) &omega)->r;
|
||||
omega_cpx.i = ((c16_t*) &omega)->i;
|
||||
|
||||
dl_ch = (int16_t *)&dl_ch_estimates[aa][(((frame_parms->N_RB_DL/2) + 1)*12) + ch_offset];
|
||||
|
||||
@@ -155,8 +155,8 @@ int lte_est_freq_offset(int **dl_ch_estimates,
|
||||
// calculate omega = angle(conj(dl_ch)*dl_ch_prev))
|
||||
omega = dot_product(dl_ch,dl_ch_prev,((frame_parms->N_RB_DL/2) - 1)*12,dl_ch_shift);
|
||||
|
||||
omega_cpx.r += ((struct complex16*) &omega)->r;
|
||||
omega_cpx.i += ((struct complex16*) &omega)->i;
|
||||
omega_cpx.r += ((c16_t*) &omega)->r;
|
||||
omega_cpx.i += ((c16_t*) &omega)->i;
|
||||
|
||||
// phase_offset += atan2((double)omega_cpx->i,(double)omega_cpx->r);
|
||||
phase_offset += atan2((double)omega_cpx.i,(double)omega_cpx.r);
|
||||
@@ -195,7 +195,7 @@ int lte_mbsfn_est_freq_offset(int **dl_ch_estimates,
|
||||
{
|
||||
|
||||
int ch_offset, omega, dl_ch_shift;
|
||||
struct complex16 *omega_cpx;
|
||||
c16_t *omega_cpx;
|
||||
double phase_offset;
|
||||
int freq_offset_est;
|
||||
unsigned char aa;
|
||||
@@ -234,7 +234,7 @@ int lte_mbsfn_est_freq_offset(int **dl_ch_estimates,
|
||||
// printf("Computing freq_offset\n");
|
||||
omega = dot_product(dl_ch,dl_ch_prev,(frame_parms->N_RB_DL/2 - 1)*12,dl_ch_shift);
|
||||
//omega = dot_product(dl_ch,dl_ch_prev,frame_parms->ofdm_symbol_size,15);
|
||||
omega_cpx = (struct complex16*) ω
|
||||
omega_cpx = (c16_t*) ω
|
||||
|
||||
// printf("omega (%d,%d)\n",omega_cpx->r,omega_cpx->i);
|
||||
|
||||
@@ -247,8 +247,8 @@ int lte_mbsfn_est_freq_offset(int **dl_ch_estimates,
|
||||
|
||||
// calculate omega = angle(conj(dl_ch)*dl_ch_prev))
|
||||
omega = dot_product(dl_ch,dl_ch_prev,((frame_parms->N_RB_DL/2) - 1)*12,dl_ch_shift);
|
||||
omega_cpx->r += ((struct complex16*) &omega)->r;
|
||||
omega_cpx->i += ((struct complex16*) &omega)->i;
|
||||
omega_cpx->r += ((c16_t*) &omega)->r;
|
||||
omega_cpx->i += ((c16_t*) &omega)->i;
|
||||
// phase_offset += atan2((double)omega_cpx->i,(double)omega_cpx->r);
|
||||
phase_offset += atan2((double)omega_cpx->i,(double)omega_cpx->r);
|
||||
// printf("omega (%d,%d) -> %f\n",omega_cpx->r,omega_cpx->i,phase_offset);
|
||||
|
||||
@@ -34,9 +34,9 @@
|
||||
// Note: this is for prototype of generate_drs_pusch (OTA synchronization of RRUs)
|
||||
#include "PHY/LTE_UE_TRANSPORT/transport_proto_ue.h"
|
||||
|
||||
static struct complex16 *primary_synch0_time __attribute__((aligned(32)));
|
||||
static struct complex16 *primary_synch1_time __attribute__((aligned(32)));
|
||||
static struct complex16 *primary_synch2_time __attribute__((aligned(32)));
|
||||
static c16_t *primary_synch0_time __attribute__((aligned(32)));
|
||||
static c16_t *primary_synch1_time __attribute__((aligned(32)));
|
||||
static c16_t *primary_synch2_time __attribute__((aligned(32)));
|
||||
|
||||
static void doIdft(int size, short *in, short *out) {
|
||||
switch (size) {
|
||||
@@ -67,7 +67,7 @@ static void doIdft(int size, short *in, short *out) {
|
||||
}
|
||||
}
|
||||
|
||||
static void copyPrimary( struct complex16 *out, struct complex16 *in, int ofdmSize) {
|
||||
static void copyPrimary( c16_t *out, struct complex16 *in, int ofdmSize) {
|
||||
int k=ofdmSize-36;
|
||||
|
||||
for (int i=0; i<72; i++) {
|
||||
@@ -83,20 +83,20 @@ static void copyPrimary( struct complex16 *out, struct complex16 *in, int ofdmSi
|
||||
}
|
||||
|
||||
int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) { // LTE_UE_COMMON *common_vars
|
||||
struct complex16 syncF_tmp[2048]__attribute__((aligned(32)))= {{0}};
|
||||
c16_t syncF_tmp[2048]__attribute__((aligned(32)))= {{0}};
|
||||
int sz=frame_parms->ofdm_symbol_size*sizeof(*primary_synch0_time);
|
||||
AssertFatal( NULL != (primary_synch0_time = (struct complex16 *)malloc16(sz)),"");
|
||||
AssertFatal( NULL != (primary_synch0_time = (c16_t *)malloc16(sz)),"");
|
||||
bzero(primary_synch0_time,sz);
|
||||
AssertFatal( NULL != (primary_synch1_time = (struct complex16 *)malloc16(sz)),"");
|
||||
AssertFatal( NULL != (primary_synch1_time = (c16_t *)malloc16(sz)),"");
|
||||
bzero(primary_synch1_time,sz);
|
||||
AssertFatal( NULL != (primary_synch2_time = (struct complex16 *)malloc16(sz)),"");
|
||||
AssertFatal( NULL != (primary_synch2_time = (c16_t *)malloc16(sz)),"");
|
||||
bzero(primary_synch2_time,sz);
|
||||
// generate oversampled sync_time sequences
|
||||
copyPrimary( syncF_tmp, (struct complex16 *) primary_synch0, frame_parms->ofdm_symbol_size);
|
||||
copyPrimary( syncF_tmp, (c16_t *) primary_synch0, frame_parms->ofdm_symbol_size);
|
||||
doIdft(frame_parms->N_RB_DL, (short *)syncF_tmp,(short *)primary_synch0_time);
|
||||
copyPrimary( syncF_tmp, (struct complex16 *) primary_synch1, frame_parms->ofdm_symbol_size);
|
||||
copyPrimary( syncF_tmp, (c16_t *) primary_synch1, frame_parms->ofdm_symbol_size);
|
||||
doIdft(frame_parms->N_RB_DL, (short *)syncF_tmp,(short *)primary_synch1_time);
|
||||
copyPrimary( syncF_tmp, (struct complex16 *) primary_synch2, frame_parms->ofdm_symbol_size);
|
||||
copyPrimary( syncF_tmp, (c16_t *) primary_synch2, frame_parms->ofdm_symbol_size);
|
||||
doIdft(frame_parms->N_RB_DL, (short *)syncF_tmp,(short *)primary_synch2_time);
|
||||
|
||||
if ( LOG_DUMPFLAG(DEBUG_LTEESTIM)){
|
||||
|
||||
@@ -2237,7 +2237,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
|
||||
int P1_SHIFT[13],P2_SHIFT[13];
|
||||
int offset,nushiftmod3;
|
||||
|
||||
uint8_t get_pmi_temp;
|
||||
int get_pmi_temp;
|
||||
|
||||
MIMO_mode_t mimo_mode = -1;
|
||||
uint8_t mprime=0,Ns;
|
||||
|
||||
@@ -299,7 +299,7 @@ uint64_t pmi2hex_2Ar1(uint32_t pmi);
|
||||
|
||||
uint64_t pmi2hex_2Ar2(uint32_t pmi);
|
||||
|
||||
uint8_t get_pmi(uint8_t N_RB_DL,MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb);
|
||||
uint8_t get_pmi(int N_RB_DL,MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb);
|
||||
|
||||
// DL power control functions
|
||||
double get_pa_dB(uint8_t pa);
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
#include "PHY/LTE_UE_TRANSPORT/transport_proto_ue.h"
|
||||
|
||||
uint8_t get_pmi(uint8_t N_RB_DL, MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb)
|
||||
uint8_t get_pmi(int N_RB_DL, MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb)
|
||||
{
|
||||
/*
|
||||
MIMO_mode_t mode = dlsch_harq->mimo_mode;
|
||||
|
||||
@@ -1550,16 +1550,6 @@ uint64_t cqi2hex(uint32_t cqi);
|
||||
|
||||
uint16_t computeRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs);
|
||||
|
||||
|
||||
/** \brief This routine extracts a single subband PMI from a bitmap coming from UCI or the pmi_extend function
|
||||
@param N_RB_DL number of resource blocks
|
||||
@param mimo_mode
|
||||
@param pmi_alloc subband PMI bitmap
|
||||
@param rb resource block for which to extract PMI
|
||||
@returns subband PMI
|
||||
*/
|
||||
uint8_t get_pmi(uint8_t N_RB_DL,MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb);
|
||||
|
||||
int get_nCCE_offset_l1(int *CCE_table,
|
||||
const unsigned char L,
|
||||
const int nCCE,
|
||||
|
||||
@@ -113,12 +113,6 @@ EXTERN int16_t *primary_synchro_time_nr[NUMBER_PSS_SEQUENCE]
|
||||
#endif
|
||||
;
|
||||
|
||||
EXTERN int64_t *pss_corr_ue[NUMBER_PSS_SEQUENCE]
|
||||
#ifdef INIT_VARIABLES_PSS_NR_H
|
||||
= { NULL, NULL, NULL}
|
||||
#endif
|
||||
;
|
||||
|
||||
/* profiling structure */
|
||||
EXTERN time_stats_t generic_time[TIME_LAST];
|
||||
|
||||
|
||||
@@ -268,8 +268,8 @@ void nr_ptrs_cpe_estimation(uint8_t K_ptrs,
|
||||
return;
|
||||
}
|
||||
uint16_t sc_per_symbol = (nb_rb + K_ptrs - 1)/K_ptrs;
|
||||
struct complex16 ptrs_p[(1 + sc_per_symbol/4)*4];
|
||||
struct complex16 dmrs_comp_p[(1 + sc_per_symbol/4)*4];
|
||||
c16_t ptrs_p[(1 + sc_per_symbol/4)*4];
|
||||
c16_t dmrs_comp_p[(1 + sc_per_symbol/4)*4];
|
||||
double abs = 0.0;
|
||||
double real = 0.0;
|
||||
double imag = 0.0;
|
||||
@@ -422,7 +422,7 @@ void get_slope_from_estimates(uint8_t start, uint8_t end, int16_t *est_p, double
|
||||
/* estimate from slope */
|
||||
void ptrs_estimate_from_slope(int16_t *error_est, double *slope_p, uint8_t start, uint8_t end)
|
||||
{
|
||||
struct complex16 *error=(struct complex16 *) error_est;
|
||||
c16_t *error=(struct complex16 *) error_est;
|
||||
for(uint8_t i = 1; i< (end -start);i++) {
|
||||
error[start+i].r = error[start].r + (int16_t)(i * slope_p[0]);// real
|
||||
error[start+i].i = error[start].i + (int16_t)(i * slope_p[1]); //imag
|
||||
|
||||
@@ -98,7 +98,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 */
|
||||
@@ -125,7 +124,7 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
|
||||
start_meas(dlsch_encoding_stats);
|
||||
|
||||
if (nr_dlsch_encoding(gNB,
|
||||
harq->pdu, frame, slot, dlsch, frame_parms,output,tinput,tprep,tparity,toutput,
|
||||
frame, slot, harq, frame_parms,output,tinput,tprep,tparity,toutput,
|
||||
dlsch_rate_matching_stats,
|
||||
dlsch_interleaving_stats,
|
||||
dlsch_segmentation_stats) == -1)
|
||||
@@ -148,46 +147,41 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
|
||||
#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));
|
||||
uint32_t scrambled_output[encoded_length];
|
||||
start_meas(dlsch_scrambling_stats);
|
||||
nr_pdsch_codeword_scrambling(output,
|
||||
encoded_length,
|
||||
q,
|
||||
rel15->dataScramblingId,
|
||||
rel15->rnti,
|
||||
scrambled_output[q]);
|
||||
}
|
||||
|
||||
stop_meas(dlsch_scrambling_stats);
|
||||
scrambled_output);
|
||||
stop_meas(dlsch_scrambling_stats);
|
||||
|
||||
#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");
|
||||
}
|
||||
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");
|
||||
}
|
||||
#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],
|
||||
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("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");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
start_meas(&gNB->dlsch_layer_mapping_stats);
|
||||
/// Layer mapping
|
||||
|
||||
@@ -78,9 +78,9 @@ int16_t find_nr_dlsch(uint16_t rnti, PHY_VARS_gNB *gNB,find_type_t type);
|
||||
NR_gNB_SCH_STATS_t *find_nr_dlsch_stats(uint16_t rnti, PHY_VARS_gNB *gNB,find_type_t type);
|
||||
|
||||
int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
|
||||
unsigned char *a,int frame,
|
||||
int frame,
|
||||
uint8_t slot,
|
||||
NR_gNB_DLSCH_t *dlsch,
|
||||
NR_DL_gNB_HARQ_t *harq,
|
||||
NR_DL_FRAME_PARMS* frame_parms,
|
||||
unsigned char * output,
|
||||
time_stats_t *tinput,
|
||||
|
||||
@@ -286,10 +286,9 @@ void ldpc8blocks( void *p) {
|
||||
}
|
||||
|
||||
int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
|
||||
unsigned char *a,
|
||||
int frame,
|
||||
uint8_t slot,
|
||||
NR_gNB_DLSCH_t *dlsch,
|
||||
NR_DL_gNB_HARQ_t *harq,
|
||||
NR_DL_FRAME_PARMS *frame_parms,
|
||||
unsigned char * output,
|
||||
time_stats_t *tinput,time_stats_t *tprep,time_stats_t *tparity,time_stats_t *toutput,
|
||||
@@ -298,13 +297,12 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
|
||||
encoder_implemparams_t impp;
|
||||
impp.output=output;
|
||||
unsigned int crc=1;
|
||||
NR_DL_gNB_HARQ_t *harq = &dlsch->harq_process;
|
||||
nfapi_nr_dl_tti_pdsch_pdu_rel15_t *rel15 = &harq->pdsch_pdu.pdsch_pdu_rel15;
|
||||
impp.Zc = &dlsch->harq_process.Z;
|
||||
impp.Zc = &harq->Z;
|
||||
float Coderate = 0.0;
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_DLSCH_ENCODING, VCD_FUNCTION_IN);
|
||||
uint32_t A = rel15->TBSize[0]<<3;
|
||||
|
||||
unsigned char *a=harq->pdu;
|
||||
if ( rel15->rnti != SI_RNTI)
|
||||
trace_NRpdu(DIRECTION_DOWNLINK, a, rel15->TBSize[0], 0, WS_C_RNTI, rel15->rnti, frame, slot,0, 0);
|
||||
|
||||
@@ -317,14 +315,14 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
|
||||
stats=&gNB->dlsch_stats[i];
|
||||
}
|
||||
|
||||
if (gNB->dlsch_stats[i].rnti == dlsch->rnti) {
|
||||
if (gNB->dlsch_stats[i].rnti == rel15->rnti) {
|
||||
stats=&gNB->dlsch_stats[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (stats) {
|
||||
stats->rnti = dlsch->rnti;
|
||||
stats->rnti = rel15->rnti;
|
||||
stats->total_bytes_tx += rel15->TBSize[0];
|
||||
stats->current_RI = rel15->nrOfLayers;
|
||||
stats->current_Qm = rel15->qamModOrder[0];
|
||||
|
||||
@@ -405,13 +405,12 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
|
||||
if (nr_sequences>1) {
|
||||
if (xrtmag_dBtimes10 < (50+xrtmag_next_dBtimes10) || SNRtimes10 < gNB->pucch0_thres) {
|
||||
no_conf=true;
|
||||
LOG_W(PHY,"%d.%d PUCCH bad confidence: %d threshold, %d, %d, %d\n",
|
||||
LOG_D(PHY,"%d.%d PUCCH bad confidence: %d threshold, %d, %d, %d\n",
|
||||
frame, slot,
|
||||
uci_stats->pucch0_thres,
|
||||
SNRtimes10,
|
||||
xrtmag_dBtimes10,
|
||||
xrtmag_next_dBtimes10);
|
||||
abort();
|
||||
}
|
||||
}
|
||||
gNB->bad_pucch += no_conf;
|
||||
|
||||
@@ -820,10 +820,6 @@ void nr_pdcch_unscrambling(int16_t e_rx[4*2*100*12],
|
||||
else
|
||||
z2[i]=e_rx[i];
|
||||
}
|
||||
printf("Encoded Payload (length:%d dwords):\n", length);
|
||||
|
||||
for (int i=0; i<length; i++)
|
||||
printf("[%d]->0x%x \t", i, z2[i]);
|
||||
}
|
||||
|
||||
|
||||
@@ -898,7 +894,7 @@ uint8_t nr_dci_decoding_procedure(int16_t e_rx[4*2*100*12],
|
||||
nr_pdcch_unscrambling(&e_rx[e_rx_cand_idx], rel15->coreset.scrambling_rnti, L*108, rel15->coreset.pdcch_dmrs_scrambling_id, tmp_e);
|
||||
|
||||
#ifdef DEBUG_DCI_DECODING
|
||||
uint32_t *z = (uint32_t *) &e_rx[e_rx_cand_idx];
|
||||
uint32_t *z = (uint32_t *) &pdcch_vars->e_rx[e_rx_cand_idx];
|
||||
for (int index_z = 0; index_z < L*6; index_z++){
|
||||
for (int i=0; i<9; i++) {
|
||||
LOG_D(PHY,"z[%d]=(%d,%d) \n", (9*index_z + i), *(int16_t *) &z[index_z + i],*(1 + (int16_t *) &z[index_z + i]));
|
||||
|
||||
@@ -168,8 +168,6 @@ NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint
|
||||
dlsch->harq_processes[i]->d[r] = (int16_t *)malloc16(5*8448*sizeof(int16_t));
|
||||
if (dlsch->harq_processes[i]->c[r])
|
||||
memset(dlsch->harq_processes[i]->c[r],0,1056);
|
||||
if (dlsch->harq_processes[i]->d[r])
|
||||
memset(dlsch->harq_processes[i]->d[r],0,5*8448);
|
||||
else
|
||||
exit_flag=2;
|
||||
|
||||
@@ -326,12 +324,12 @@ void nr_processDLSegment(void* arg) {
|
||||
harq_process->rvidx,
|
||||
harq_process->round); */
|
||||
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING, VCD_FUNCTION_IN);
|
||||
|
||||
int16_t d[5*8448];
|
||||
if (nr_rate_matching_ldpc_rx(Ilbrm,
|
||||
Tbslbrm,
|
||||
p_decoderParms->BG,
|
||||
p_decoderParms->Z,
|
||||
harq_process->d[r],
|
||||
d,
|
||||
w,
|
||||
harq_process->C,
|
||||
harq_process->rvidx,
|
||||
@@ -353,7 +351,7 @@ void nr_processDLSegment(void* arg) {
|
||||
LOG_D(PHY,"decoder input(segment %u) :",r);
|
||||
|
||||
for (int i=0; i<E; i++)
|
||||
LOG_D(PHY,"%d : %d\n",i,harq_process->d[r][i]);
|
||||
LOG_D(PHY,"%d : %d\n",i,d[i]);
|
||||
|
||||
LOG_D(PHY,"\n");
|
||||
}
|
||||
@@ -379,9 +377,9 @@ void nr_processDLSegment(void* arg) {
|
||||
//set Filler bits
|
||||
memset((&z[0]+K_bits_F),127,harq_process->F*sizeof(int16_t));
|
||||
//Move coded bits before filler bits
|
||||
memcpy((&z[0]+2*harq_process->Z),harq_process->d[r],(K_bits_F-2*harq_process->Z)*sizeof(int16_t));
|
||||
memcpy((&z[0]+2*harq_process->Z),d,(K_bits_F-2*harq_process->Z)*sizeof(int16_t));
|
||||
//skip filler bits
|
||||
memcpy((&z[0]+Kr),harq_process->d[r]+(Kr-2*harq_process->Z),(kc*harq_process->Z-Kr)*sizeof(int16_t));
|
||||
memcpy((&z[0]+Kr),d+(Kr-2*harq_process->Z),(kc*harq_process->Z-Kr)*sizeof(int16_t));
|
||||
|
||||
//Saturate coded bits before decoding into 8 bits values
|
||||
for (i=0, j=0; j < ((kc*harq_process->Z)>>4)+1; i+=2, j++) {
|
||||
|
||||
@@ -1480,16 +1480,6 @@ uint64_t cqi2hex(uint32_t cqi);
|
||||
|
||||
uint16_t computeRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs);
|
||||
|
||||
|
||||
/** \brief This routine extracts a single subband PMI from a bitmap coming from UCI or the pmi_extend function
|
||||
@param N_RB_DL number of resource blocks
|
||||
@param mimo_mode
|
||||
@param pmi_alloc subband PMI bitmap
|
||||
@param rb resource block for which to extract PMI
|
||||
@returns subband PMI
|
||||
*/
|
||||
uint8_t get_pmi(uint8_t N_RB_DL,MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb);
|
||||
|
||||
int get_nCCE_offset_l1(int *CCE_table,
|
||||
const unsigned char L,
|
||||
const int nCCE,
|
||||
|
||||
@@ -381,7 +381,6 @@ void init_context_pss_nr(NR_DL_FRAME_PARMS *frame_parms_ue)
|
||||
int sizePss = LENGTH_PSS_NR * IQ_SIZE; /* complex value i & q signed 16 bits */
|
||||
int size = ofdm_symbol_size * IQ_SIZE; /* i and q samples signed 16 bits */
|
||||
int16_t *p = NULL;
|
||||
int64_t *q = NULL;
|
||||
|
||||
AssertFatal(ofdm_symbol_size > 127, "illegal ofdm_symbol_size %d\n",ofdm_symbol_size);
|
||||
for (int i = 0; i < NUMBER_PSS_SEQUENCE; i++) {
|
||||
@@ -410,17 +409,6 @@ void init_context_pss_nr(NR_DL_FRAME_PARMS *frame_parms_ue)
|
||||
assert(0);
|
||||
}
|
||||
|
||||
size = sizeof(int64_t)*(frame_parms_ue->samples_per_frame + (2*ofdm_symbol_size));
|
||||
q = (int64_t*)malloc16(size);
|
||||
if (q != NULL) {
|
||||
pss_corr_ue[i] = q;
|
||||
bzero( pss_corr_ue[i], size);
|
||||
}
|
||||
else {
|
||||
LOG_E(PHY,"Fatal memory allocation problem \n");
|
||||
assert(0);
|
||||
}
|
||||
|
||||
generate_pss_nr(frame_parms_ue,i);
|
||||
}
|
||||
}
|
||||
@@ -443,7 +431,6 @@ void free_context_pss_nr(void)
|
||||
free_and_zero(primary_synchro_nr[i]);
|
||||
free_and_zero(primary_synchro_nr2[i]);
|
||||
free_and_zero(primary_synchro_time_nr[i]);
|
||||
free_and_zero(pss_corr_ue[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -801,7 +788,6 @@ static inline double angle64(int64_t x)
|
||||
*********************************************************************/
|
||||
|
||||
#define DOT_PRODUCT_SCALING_SHIFT (17)
|
||||
|
||||
int pss_search_time_nr(int **rxdata, ///rx data in time domain
|
||||
NR_DL_FRAME_PARMS *frame_parms,
|
||||
int fo_flag,
|
||||
@@ -812,7 +798,7 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain
|
||||
unsigned int n, ar, peak_position, pss_source;
|
||||
int64_t peak_value;
|
||||
int64_t result;
|
||||
int64_t avg[NUMBER_PSS_SEQUENCE];
|
||||
int64_t avg[NUMBER_PSS_SEQUENCE]={0};
|
||||
double ffo_est=0;
|
||||
|
||||
// performing the correlation on a frame length plus one symbol for the first of the two frame
|
||||
@@ -823,9 +809,8 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain
|
||||
else
|
||||
length = frame_parms->samples_per_frame;
|
||||
|
||||
AssertFatal(length>0,"illegal length %d\n",length);
|
||||
for (int i = 0; i < NUMBER_PSS_SEQUENCE; i++) AssertFatal(pss_corr_ue[i] != NULL,"pss_corr_ue[%d] not yet allocated! Exiting.\n", i);
|
||||
|
||||
AssertFatal(length>0,"illegal length %d\n",length);
|
||||
peak_value = 0;
|
||||
peak_position = 0;
|
||||
pss_source = 0;
|
||||
@@ -846,47 +831,41 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain
|
||||
/* Correlation computation is based on a a dot product which is realized thank to SIMS extensions */
|
||||
|
||||
for (int pss_index = 0; pss_index < NUMBER_PSS_SEQUENCE; pss_index++) {
|
||||
avg[pss_index]=0;
|
||||
memset(pss_corr_ue[pss_index],0,length*sizeof(int64_t));
|
||||
}
|
||||
|
||||
for (n=0; n < length; n+=4) { //
|
||||
for (n=0; n < length; n+=4) { //
|
||||
|
||||
for (int pss_index = 0; pss_index < NUMBER_PSS_SEQUENCE; pss_index++) {
|
||||
int64_t pss_corr_ue=0;
|
||||
/* calculate dot product of primary_synchro_time_nr and rxdata[ar][n]
|
||||
* (ar=0..nb_ant_rx) and store the sum in temp[n]; */
|
||||
for (ar=0; ar<frame_parms->nb_antennas_rx; ar++) {
|
||||
|
||||
if ( n < (length - frame_parms->ofdm_symbol_size)) {
|
||||
/* perform correlation of rx data and pss sequence ie it is a dot product */
|
||||
result = dot_product64((short*)primary_synchro_time_nr[pss_index],
|
||||
(short*)&(rxdata[ar][n+is*frame_parms->samples_per_frame]),
|
||||
frame_parms->ofdm_symbol_size,
|
||||
shift);
|
||||
pss_corr_ue += abs64(result);
|
||||
//((short*)pss_corr_ue[pss_index])[2*n] += ((short*) &result)[0]; /* real part */
|
||||
//((short*)pss_corr_ue[pss_index])[2*n+1] += ((short*) &result)[1]; /* imaginary part */
|
||||
//((short*)&synchro_out)[0] += ((int*) &result)[0]; /* real part */
|
||||
//((short*)&synchro_out)[1] += ((int*) &result)[1]; /* imaginary part */
|
||||
|
||||
/* calculate dot product of primary_synchro_time_nr and rxdata[ar][n] (ar=0..nb_ant_rx) and store the sum in temp[n]; */
|
||||
for (ar=0; ar<frame_parms->nb_antennas_rx; ar++) {
|
||||
|
||||
/* perform correlation of rx data and pss sequence ie it is a dot product */
|
||||
result = dot_product64((short*)primary_synchro_time_nr[pss_index],
|
||||
(short*)&(rxdata[ar][n+is*frame_parms->samples_per_frame]),
|
||||
frame_parms->ofdm_symbol_size,
|
||||
shift);
|
||||
pss_corr_ue[pss_index][n] += abs64(result);
|
||||
//((short*)pss_corr_ue[pss_index])[2*n] += ((short*) &result)[0]; /* real part */
|
||||
//((short*)pss_corr_ue[pss_index])[2*n+1] += ((short*) &result)[1]; /* imaginary part */
|
||||
//((short*)&synchro_out)[0] += ((int*) &result)[0]; /* real part */
|
||||
//((short*)&synchro_out)[1] += ((int*) &result)[1]; /* imaginary part */
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* calculate the absolute value of sync_corr[n] */
|
||||
avg[pss_index]+=pss_corr_ue[pss_index][n];
|
||||
if (pss_corr_ue[pss_index][n] > peak_value) {
|
||||
peak_value = pss_corr_ue[pss_index][n];
|
||||
avg[pss_index]+=pss_corr_ue;
|
||||
if (pss_corr_ue > peak_value) {
|
||||
peak_value = pss_corr_ue;
|
||||
peak_position = n;
|
||||
pss_source = pss_index;
|
||||
|
||||
|
||||
#ifdef DEBUG_PSS_NR
|
||||
printf("pss_index %d: n %6u peak_value %15llu\n", pss_index, n, (unsigned long long)pss_corr_ue[pss_index][n]);
|
||||
printf("pss_index %d: n %6u peak_value %15llu\n", pss_index, n, (unsigned long long)pss_corr_ue[n]);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (fo_flag){
|
||||
|
||||
// fractional frequency offset computation according to Cross-correlation Synchronization Algorithm Using PSS
|
||||
@@ -922,7 +901,8 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain
|
||||
// computing absolute value of frequency offset
|
||||
*f_off = ffo_est*frame_parms->subcarrier_spacing;
|
||||
|
||||
for (int pss_index = 0; pss_index < NUMBER_PSS_SEQUENCE; pss_index++) avg[pss_index]/=(length/4);
|
||||
for (int pss_index = 0; pss_index < NUMBER_PSS_SEQUENCE; pss_index++)
|
||||
avg[pss_index]/=(length/4);
|
||||
|
||||
*eNB_id = pss_source;
|
||||
|
||||
@@ -937,9 +917,6 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain
|
||||
static int debug_cnt = 0;
|
||||
|
||||
if (debug_cnt == 0) {
|
||||
LOG_M("pss_corr_ue0.m","pss_corr_ue0",pss_corr_ue[0],length,1,6);
|
||||
LOG_M("pss_corr_ue1.m","pss_corr_ue1",pss_corr_ue[1],length,1,6);
|
||||
LOG_M("pss_corr_ue2.m","pss_corr_ue2",pss_corr_ue[2],length,1,6);
|
||||
if (is)
|
||||
LOG_M("rxdata1.m","rxd0",rxdata[frame_parms->samples_per_frame],length,1,1);
|
||||
else
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
#include "costable.h"
|
||||
#include "defs.h"
|
||||
|
||||
unsigned int angle(struct complex16 perror)
|
||||
unsigned int angle(c16_t perror)
|
||||
{
|
||||
int a;
|
||||
|
||||
|
||||
@@ -129,7 +129,7 @@ main ()
|
||||
short output[256] __attribute__((aligned(16)));
|
||||
|
||||
int i;
|
||||
struct complex16 alpha;
|
||||
c16_t alpha;
|
||||
|
||||
Zero_Buffer(output,256*2);
|
||||
|
||||
|
||||
@@ -278,7 +278,7 @@ main ()
|
||||
short output[256] __attribute__((aligned(16)));
|
||||
|
||||
int i;
|
||||
struct complex16 alpha;
|
||||
c16_t alpha;
|
||||
|
||||
Zero_Buffer(output,256*2);
|
||||
|
||||
|
||||
@@ -305,15 +305,15 @@ int main(int argc, char **argv) {
|
||||
|
||||
openair0_device_load(&rfdevice,&openair0_cfg);
|
||||
|
||||
void ** samplesRx = (void **)malloc16(antennas* sizeof(struct complex16 *) );
|
||||
void ** samplesTx = (void **)malloc16(antennas* sizeof(struct complex16 *) );
|
||||
void ** samplesRx = (void **)malloc16(antennas* sizeof(c16_t *) );
|
||||
void ** samplesTx = (void **)malloc16(antennas* sizeof(c16_t *) );
|
||||
|
||||
int fd=open(getenv("rftestInputFile"),O_RDONLY);
|
||||
AssertFatal(fd>=0,"%s",strerror(errno));
|
||||
|
||||
for (int i=0; i<antennas; i++) {
|
||||
samplesRx[i] = (int32_t *)malloc16_clear( DFT*sizeof(struct complex16) );
|
||||
samplesTx[i] = (int32_t *)malloc16_clear( DFT*sizeof(struct complex16) );
|
||||
samplesRx[i] = (int32_t *)malloc16_clear( DFT*sizeof(c16_t) );
|
||||
samplesTx[i] = (int32_t *)malloc16_clear( DFT*sizeof(c16_t) );
|
||||
}
|
||||
|
||||
CalibrationInitScope(samplesRx, &rfdevice);
|
||||
@@ -322,7 +322,7 @@ int main(int argc, char **argv) {
|
||||
|
||||
while(!oai_exit) {
|
||||
for (int i=0; i<antennas; i++)
|
||||
read(fd, samplesTx[i], DFT*sizeof(struct complex16));
|
||||
read(fd, samplesTx[i], DFT*sizeof(c16_t));
|
||||
int readBlockSize = rfdevice.trx_read_func(&rfdevice,
|
||||
×tamp,
|
||||
samplesRx,
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
const FL_COLOR rx_antenna_colors[4] = {FL_RED,FL_BLUE,FL_GREEN,FL_YELLOW};
|
||||
const FL_COLOR water_colors[4] = {FL_BLUE,FL_GREEN,FL_YELLOW,FL_RED};
|
||||
|
||||
typedef struct complex16 scopeSample_t;
|
||||
typedef c16_t scopeSample_t;
|
||||
#define SquaredNorm(VaR) ((VaR).r*(VaR).r+(VaR).i*(VaR).i)
|
||||
|
||||
typedef struct {
|
||||
|
||||
Reference in New Issue
Block a user